数组:相同数据类型的集合。
定义格式:数据类型 数组名[成员个数];
示例:char buff[10]; --表示定义一个char类型数组buff,buff可以存放10个char类型变量;
1.数组空间连续的,下标是0开始的,最后一个成员下标为成员个数-1;
2.数组名字表示数组首地址。
3.数组可以整体赋值(必须在定义数组时完成),也可以单个成员赋值;
4.数组空间大小计算:sizeof(数组名);成员个数:sizeof(数组名)/sizeof(数组名[0]);
5.数组整体初始化时,未初始化的成员默认初始化为0;单个成员赋值时,未初始化的成员为随机值。
示例:
#include < stdio.h >
int main()
{
int buff[5]={10};/*定义一个int类型数组*/
int data[]={10,20,20};/*定义一个int类型数组并完成初始化*/
printf("buff数组空间:%ldn",sizeof(buff));
printf("data数组空间:%ldn",sizeof(data));
printf("buff数组成员个数:%ldn",sizeof(buff)/sizeof(int));
printf("data数组成员个数:%ldn",sizeof(data)/sizeof(data[0]));
int count=sizeof(buff)/sizeof(int);
int i=0;
/*数组遍历*/
for(i=0;i< count;i++)
{
printf("buff[%d]=%dn",i,buff[i]);
}
int data2[5];
data2[0]=100;
for(i=0;i< 5;i++)
{
printf("data2[%d]=%dn",i,data2[i]);
}
}
示例2:定义一个5个成员整型数组,从键盘上获取5个整数,输出数组所有成员(正向和逆向);输出最大值,最小值和平均值;
#include < stdio.h >
int main()
{
int buff[5];
int count=sizeof(buff)/sizeof(buff[0]);
printf("请输入%d个整数:",count);
int i;
for(i=0;i< count;i++)
{
scanf("%d",&buff[i]);
}
printf("数组遍历:");
for(i=0;i< count;i++)
{
printf("%d ",buff[i]);
}
printf("n");
printf("数组逆向遍历:");
for(i=count-1;i >=0;i--)
{
printf("%d ",buff[i]);
}
printf(“n”);
int min,max;
float avg=0;
min=max=buff[0];
for(i=0;i< 5;i++)
{
avg+=buff[i];
if(min >buff[i])
{
min=buff[i];
}
if(max< buff[i])
{
max=buff[i];
}
}
avg/=count;
printf("最大值:%dt最小值%dt平均值%.2fn",max,min,avg);
}
[wbyq@wbyq 1227]$ ./a.out
请输入5个整数:45 12 1 35 422
数组遍历:45 12 1 35 422
数组逆向遍历:422 35 1 12 45
最大值:422 最小值1 平均值103.00
一维数组仅有一行,二维数组则有行和列。
二维数组定义格式:数据类型 变量名[参数1][参数2];
示例:int buff[3][4];
行列性质:定义一个int类型的二维数组,二维数组有3行4列;
数组关系:定义一个int类型的二维数组,[3]表示在二维数组中存放3个一维数组,[4]表示每一个一维数组中有4个int类型成员。
二维数组空间计算:sizeof(buff);
二维数组行计算:sizeof(buff)/sizeof(buff[0])
二维数组列计算:sizeof(buff[0])/sizeof(int )
#include < stdio.h >
int main()
{
int array[3][4];
int array2[][4]={10,20,30,20,20};
printf("array=%lun",sizeof(array));//3*4*4=48
printf("array2=%lun",sizeof(array2));//2*4*4=32
int line=sizeof(array2)/sizeof(array2[0]);//计算行
printf("line=%dn",line);
int row=sizeof(array2[0])/sizeof(int);//sizeof(int)等同于sizeof(array2[0][0])
printf("row=%dn",row);
int i,j;
//二维数组遍历
for(i=0;i< line;i++)
{
for(j=0;j< row;j++)
{
printf("array2[%d][%d]=%dn",i,j,array2[i][j]);
}
}
}
[wbyq@wbyq 123]$ ./a.out
array=48
array2=32
line=2
row=4
array2[0][0]=10
array2[0][1]=20
array2[0][2]=30
array2[0][3]=20
array2[1][0]=20
array2[1][1]=0
array2[1][2]=0
array2[1][3]=0
函数作用:提高代码利用率,是程序结构更简洁、清晰。
函数特性:函数功能单一,重复利用性高;
返回值类型 函数名(形参)
{
语句块;
}
函数没有返回值时,返回值类型则用void表示
函数不需要传参时,形参则用void表示。
1.函数形参不能为静态变量
原因:
1.静态变量只会初始化一次,而函数形参每一次函数调用都会重新赋值。
2.静态变量生存周期是和main函数一样,而函数形参只能作用于当前函数。
2.函数形参与实参
1.函数形参是变量时不能改变实参的值。形参要改变实参的值需要通过指针方式。
2.函数形参只能作用于当前函数,形参名和实参名可以不一样,但形参类型和实参类型必须一一匹配。函数形参由调用函数时分配空间,在函数结束时释放空间。
3.函数返回值
1.函数返回值可以返回函数局部变量的值,不能返回局部变量的地址。
形参为int类型,返回值为int类型。
写一个函数实现求两个数之和;
#include < stdio.h >
int func(int,int);/*声明函数*/
int main()
{
int data;
int a=10;
int b=20;
data=func(a,b);
printf("data=%dn",data);
}
/*
写一个函数实现求两个数之和;
*/
int func(int a,int b)
{
return a+b;
}
形参为数组类型,返回值为void;
编写一个函数,实现数组遍历。
#include < stdio.h >
void array_print(int buff[],int count);//声明函数
int main()
{
int buff[]={10,20,30,42,20,20};
printf("数组空间大小:%ldn",sizeof(buff));
array_print(buff,sizeof(buff)/sizeof(int));
}
/*
实现函数:完成数组遍历
形参:buff[] --要遍历的数组
count -- 数组成员个数
返回值:无
*/
void array_print(int buff[],int count)
{
int i=0;
//printf("数组空间大小:%ldn",sizeof(buff));//错误,不能对形参进行空间计算,对地址sizeof返回值永远都为8
for(i=0;i< count;i++)
{
printf("buff[%d]=%dn",i,buff[i]);
}
}
编写一个函数,实现二维数组遍历。
#include < stdio.h >
void twoarray_print(int [][4],int ,int );
int main()
{
int array2[][4]={10,20,30,20,20};
int line=sizeof(array2)/sizeof(array2[0]);//计算行
printf("line=%dn",line);
//计算列
int row=sizeof(array2[0])/sizeof(int);//sizeof(array2[0][0])
printf("row=%dn",row);
twoarray_print(array2,line,row);
}
void twoarray_print(int buff[][4],int line,int row)
{
int i,j;
for(i=0;i< line;i++)
{
for(j=0;j< row;j++)
{
printf("%d ",buff[i][j]);
}
printf("n");
}
}
[wbyq@wbyq 1227]$ gcc main.c
[wbyq@wbyq 1227]$ ./a.out
line=2
row=4
10 20 30 20
20 0 0 0
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !