数组:
什么是数组:变量的组合,是一种批量定义变量的方式
定义:类型 数组名[数量];
int arr[5];
使用:数组名[下标];
下标:从零开始,范围:0~数量-1
遍历:
与for循环配合,使用循环变量i作为数组的下标
初始化:类型 数组名[数量]={1,2,3,4,5…};
1、数组与普通变量一样默认值是随机的,为了安全起见要对他进行初始化
2、这种初始化的方式只能在定义语句中使用,而且只能逐个赋值,不能整体赋值
3、初始化的数量过多,编译器会产生警告并丢弃
4、初始化的数量过少,编译器会补0
5、大括号里的数据可以省略,只写大括号,相当于给所有成员赋0
6、初始化时数量也可以省略,编译器会自动计算数据的个数然后告诉数组
计算数组个数:sizeof(arr)/sizeof(arr[0]) =数组的长度
练习1;
定义一个长度为10的数组并初始化,计算出最大值、最小值、平均值
练习2:
定义一个长度为10的数组并初始化,进行升序排序
练习3:
定义一个长度为10的数组并初始化,找出数组中第二大的值,不允许排序
数组越界:为了程序运行效率是不会检查数组的下标
数组越界的后果:
1、一切正常
2、段错误
3、脏数据
二维数组:
一维数组相当于吧变量排成一排,通过编号来访问
二维数组相当于把变量排成矩阵,通过行号和列号来访问
定义:
类型 数组名[行数][列数];
int arr[3][5];
使用:数组名[行下标][列下标]
行下标:0~行数-1
列下标:0~列数-1
遍历:
需要与双层for循环配合,外层循环负责遍历行,内层循环负责遍历列
for(int i=0;i<3;i++)
{
for(int j=0;j<5;j++)
{
printf("%d “,arr[i][j]);
}
printf(”\n");
}
初始化:
类型 数组名[行数][列数]={{第一行}{第二行}{第三行}...}
练习4:定义一个5*5的二维数组并初始化,找出数组中最大值的坐标
练习5:定义一个3*3的二维数组然后输入各个元素的值,计算所有变量之和,统计非零的成员的个数,计算所有元素的平均值,在统计大于平均值的元素的个数
练习6:定义一个5*5的二维数组,找出其中最小值的下标,并计算出周围的元素的和
变长数组:
定义数组时使用变量作为数组长度,在编译期间数组的长度是不确定的,当程序运行到数组的定义语句时它的长度才能确定下来,一旦确定下来长度无法改变
优点:可以根据实际情况确定数组的长度,达到节约内存的目的
缺点:不可以初始化,初始化发生在编译期间
作业:
显示n层的杨辉三角