数组:
含义:存放相同类型n个元素的有限集合(元素类型相同,个数确定)
一维数组
定义:数组类型 数组名[元素个数];
eg: char str[32]; int a[32];(元素个数必须为常量或者常量表达式!不能为变量或变量表达式)
a[3]的3个元素分别为a[0]、a[1]、a[2](无a[3]这个元素)
访问: 数组名[下标];
eg:a[0],a[1],a[i],a[i+n](访问可以为常量,变量或者常量/变量表达式)
初始化(初始化!=赋值)
全部初始化:int a[3]={1,2,3};
局部初始化:int a[3]={1,2};(没有给定初值的元素默认为0值)
默认初始化:int a[]={1,2,3};(数组的元素由给定初值的个数决定)
数组的存储:1.数组所占空间的大小=数组元素类型所占空间大小*元素个数;
数组元素个数:sizeof(a)/sizeof(a[0]);
eg:当元素个数没有明确时:
结果:
eg:明确元素个数时:
结果:
2.存储特性:有序性和连续性
eg:从终端接收4个数字并且放入数组当中,求这4个数的平均值(提醒:当连续输入可用for循环套scanf使用,平均数有可能为小数,可定义为浮点数类型)(建议自己想一下,敲一下代码)
结果:
数组中常用的方法:
i.数组元素中的最大值、最小值(可用下角标进行相比,例如a[0]与a[1]相比,如果a[1]大,则记录下角标位置为1,与a[2]相比,为此循环...)
ii.数组元素的倒置(可以定一个头位置和尾位置)
eg: 1 2 3 4 5 倒置为 5 4 3 2 1 相当于第一个位置和最后一和位置交换,第二个位置和倒数第二个位置交换,第三个位置为中间数则不动
iii.数组元素的冒泡排序(将随机的5个数从小到大排)
需要比较四轮,第一轮内循环4次,第二轮内循环3次,第三轮内循环2次,第四轮内循环1次
所以需要双重for循环实现
双重for循环:外面一次,里面一遍
3.二维整形数组
1.数据类型 :数组名[行数][列数]; eg: int a[2][3](行数和列数必须为常量)
二维数组可以理解为:是由一维数组构成的一维数组
N维可以看成是由N-1维数组构成的一维数组
2.数组元素的访问:数组名[行下标][列下标];
eg : int a[2][3]: a[0][0] a[0][1] a[0][2]
a[1][0] a[1][1] a[1][2]
3.二维数组的初始化:
a.全部初始化:
int a[2][3]={1,2,3,4,5,6};
int a[2][3] = {{1, 2, 3}, {4, 5, 6}};//第一行为1,2,3 第二行为4,5,6
b.局部初始化:
int a[2][3] = {1, 2, 3};//未初始化的默认为0值
int a[2][3] = {{1, 2}, {3}};//第一行为1,2,0 第二行为3,0,0
int a[2][3] = {{0}};//第一行第一个初值为0,其他的默认为0
int a[2][3] = {0};
c.默认初始化:(行能够省略,但是列不能省略)
int a[][3] = {1, 2, 3, 4, 5, 6};
int a[][3] = {1, 2, 3, 4};
int a[][3] = {{1, 2}, {3}};
4.二维数组的存储:
数组所占空间大小 = 数组元素类型所占空间大小 * 元素个数
如果有问题,各路大神及时指正,谢谢。