知识累计
1. 长度换行
1.1宏定义换行
正常在80个字符,超过用'\'换行
#define SIZE a>b ? a :b\
a>c ? a : c
1.2数组换行
直接换行就行,他在'{}'内
int arr[10]{1,2,3,4,5
,6,7,8,9,10}
2.单个数组元素传递,不影响数组元素的值
#include <stdio.h>
int main()
{
int arr[2][3]={{1,2,3},{11,22,33}};
printf("%d\n",arr[1][2]);
gai(arr[1][2]);
printf("%d\n",arr[1][2]);
return 0;
}
void gai(int a)
{
a=100;
printf("%d\n",a);
}
将arr[1][2]的值传递给另一个函数,在另一个函数中改变其值,不影响主函数中数组中对应的值
结果:
3.头文件及函数
#include <stdio.h>
#include "man.h"
<>表示的头文件,属于系统包含
“”所表示的头文件,属于用户自己定义
main函数,在C语言中,有且只有一个,并且是入口函数;函数之间是平等的。
4.变量
4.1变量定义
4.1.1在函数的开头定义
4.1.2在函数内定义
4.1.3在复合语句定义
4.1.4在函数的外部定义
4.2局部变量及全局变量
4.2.1局部变量:不影响其他范围恩定义时,重命名冲突,命名灵活,使用方便
(函数内部定义、复合语句定义)
4.2.2全局变量作用:可以增加函数间的数据联系渠道(因为函数调用只能拿到一个return结果)
(在函数的开头、函数的外部定义)
全局变量如果定义在函数外部:
1)在函数之前,可直接调用
2)在函数之后,利用extern 声明这个函数后面的全局变量
#include <stdio.h>
int gan=100;
int main()
{
extern wei; //声明这个函数之后的全局变量wei
printf("%d\n",gan);
printf("%d\n",wei);
}
int wei=1011;
4.3 变量存储方式
4.3.1动态存储方式与静态存储方式
静态存储方式:程序运行期间由系统分配固定分储存空间
动态存储方式:程序运行时根据需要进行动态分配存储空间
一般来说,内存共用户使用的存储空间,分为三部分:程序区、静态存储区、动态存储区
程序区 | 可执行代码 | 只读 |
静态存储区 | 全局变量、静态局部变量 | 可读写 |
动态存储区 | 函数形参、函数内定义的变量、函数调用时保护现场和返回地址 | 可读写 |
4.3.1存储类别
4.3.1.1局部自动变量(auto变量):存储在动态存储区
4.3.1.2局部静态变量(static变量):存储在静态存储区
4.3.1.3寄存器变量(register变量):存储在CPU中的寄存器中
4.3.1.4全局变量(auto变量&static变量):存放在静态存储区
4.3.1.5宏定义的参数跟const定义的参数不可改变
#include <stdio.h>
#define SIZE 10
int main()
{
const int a=111;
SIZE+=10;
a+=1;
printf("%d\n",SIZE);
printf("%d\n",a);
}
结果:
改变就会报错
注释后,正常运行
#include <stdio.h>
#define SIZE 10
int main()
{
const int a=111;
// SIZE+=10;
// a+=1;
printf("%d\n",SIZE);
printf("%d\n",a);
}
结果:
作业
1. 把0-511用二进制表示出来,并用3*3的矩阵表示出来,且0用H表示,1用T表示
#include <stdio.h>
void pai(int arr[3][3],int a,int b,int c);
int main()
{
int arr[3][3]={0};
int num;
printf("请输入你要查看的矩阵号码(0-511):");
scanf("%d",&num);
pai(arr,3,3,num);
return 0;
}
void pai(int arr[3][3],int a,int b,int c)
{
int i,j;
for(i=0;i<a;i++){
for(j=0;j<b;j++){
arr[a-i-1][b-j-1]=c%2;
c/=2;
}
}
for(i=0;i<3;i++){
for(j=0;j<3;j++)
printf("arr[%d][%d]=%d ",i,j,arr[i][j]);
printf("\n");
}
for(i=0;i<3;i++){
for(j=0;j<3;j++){
if(arr[i][j]==0)
printf("H ");
else
printf("T ");
}
printf("\n");
}
}
2.一个M*N矩阵,且左下半三角元素为0
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void ling(int arr[5][5],int a,int b);
int main()
{
int arr[5][5]={0};
int i,j;
srand((unsigned)time(NULL));
for(i=0;i<5;i++){
for(j=0;j<5;j++)
arr[i][j]=rand()%9+1;
}
for(i=0;i<5;i++){
for(j=0;j<5;j++)
printf("arr[%d][%d]=%d ",i,j,arr[i][j]);
printf("\n");
}
ling(arr,5,5);
return 0;
}
void ling(int arr[5][5],int a,int b)
{
int i,j;
for(i=0;i<5;i++){
for(j=0;j<5;j++){
if(i>j)
arr[i][j]=0;
}
}
for(i=0;i<5;i++){
for(j=0;j<5;j++)
printf("%d ",arr[i][j]);
printf("\n");
}
}
3.在一个4*4矩阵随机填入0或1,打印矩阵,找到第一个1最多的行跟列
#include <stdio.h>
void tongji(int arr[4][4],int a,int b);
int main()
{
int arr[4][4]={0};
int i,j;
srand((unsigned)time(NULL));
for(i=0;i<4;i++){
for(j=0;j<4;j++)
arr[i][j]=rand()%2;
}
for(i=0;i<4;i++){
for(j=0;j<4;j++)
printf("%d ",arr[i][j]);
printf("\n");
}
tongji(arr,4,4);
return 0;
}
void tongji(int arr[4][4],int a,int b)
{
int i,j,max=0;
int hang=0,lie=0;
for(i=0;i<4;i++){
int count1=0;
for(j=0;j<4;j++){
if(arr[i][j]==1)
count1++;
}
if(max<count1){
max=count1;
hang=i;
}
}
printf("第%d行1最多\n",hang);
max=0;
for(i=0;i<4;i++){
int count2=0;
for(j=0;j<4;j++){
if(arr[j][i]==1)
count2++;
}
if(max<count2){
max=count2;
lie=i;
}
}
printf("第%d列1最多",lie);
}