1.数组
在c语言中,数组可以认为是相同类型数据的集合
举个例子,当我们需要计算多个数据,比如说需要计算一个班级的数学成绩的平均分
#include
在这里定义了5个变量,代表5个学生的数学成绩,然后依次的给变量赋值,但是如果学生的成绩非常多,需要的变量名也会很多,这个时候就需要考虑一下使用更科学的方法来储存数据
#include
int a[5],这句话定义了一个数组,表示在内存中分配了一个可以保存5个整数的空间
1.1 数组的定义
数组声明的语法:
<数据类型> <数组名>[数组长度]
比如:
int a[3];
float b[5];
char c[12];
声明数组之后就相当于在内存当中开辟了一个连续的空间,空间的大小取决于数组的长度与数组的元素个数(数组的长度)
数组空间的大小 = 数组类型 ✖ 数组长度
在使用数组的时候可以利用数组名[索引]的方式使用数组的元素
#include
在使用数组的时候需要注意,声明数组的时候中括号当中的数字代表数组的元素个数,使用数组元素的时候,中括号当中的数字代表数组元素的索引(或者称为下标)
索引的取值范围是从0开始,数组索引的最大值是数组的长度-1
在使用数组的时候一定要注意数组索引不要越界,也就是不要使用大于等于数组长度的索引
1.2 数组的初始化
声明数组之后可以给数组的元素赋值
#include
也可以在声明的同时初始化数组
#include
在这里使用 {元素1,元素2,....} 的方式来初始化数组
结果是相同的
如果在声明数组的时候对元素进行初始化,可以省略掉数组的长度,数组会自动按照初始化的长度来处理
#include
如果数组的长度小于初始化元素的个数,那么多余的元素就会被舍去
#include
这里数组只包含2个元素,第三个元素a[2]是一个错误的值,初始化数组只有前两个值被赋值到了数组里
如果数组元素的个数大于初始化的数组,那么数组多余的值会被赋值为 0
#include
如果想把数组的元素全部初始化为0,我们就可以这样写
#include
需要注意的是,初始化数组一定要在数组声明的时候来完成,如果是初始化一个已经声明过的数组,程序就会出错
#include
2 使用循环来处理数组
使用数组带来的最大的好处就是我们可以通过利用循环工具,来批量的处理数组当中的数据
具体的做法就是把数组元素的索引当作循环的控制变量,通过索引自增,来遍历数组当中的元素
#include
第一次循环i=0,打印的是a[0]的值,第二次循环i=1,打印的是a[1]的值,...,循环次数等于数组的元素个数
在c99之后,还支持通过变量来动态的初始化数组
例如我们可以设计一个程序,手动输入学生的成绩,计算学生成绩的平均分
#include
数组的操作往往回合循环联系到一起,通过循环来遍历数组的元素,是在编写程序的时候经常会用到的手段
3 二维数组
有的时候处理的数据并不是线性的,而是有维度的,比如说可能会处理矩阵
如果使用1维数组的话处理数据的位置就会有一些难度,因此我们可以使用二维数组
二维数据可以想象为一个表格,有行和列
我们建立数组
int a[3][3];
数组的第一个索引表示行号,第二个索引表示列号
那么 a[0][0]就是第一行第一列的元素为1,a[2][1]就是第三行第二列的元素为8
3.1 二维数组的初始化
声明二维数组
<数据类型> <数组名>[第一维长度][第二维长度]
比如说
int a[2][3];
a[2][3]就是一个2行3列的二维数组,使用的时候每个维度的索引都是由0开始,最大值为长度-1,所以 数组a的保存元素从 a[0][0]到a[1][2]
我们也可以把二维数组想象为一个由一维数组组成的数组
数组a由两个数组组成,a[0],a[1] 而a[0],a[1]又分别由三个整形数据组成
所以我们可以使用大括号的方式来给数组初始化
#include
数组的总大小除以整数的大小,就是数组包含的元素个数
二维数组的大小除以其中包含的一维数组的大小,就是二维数组中包含的一维数组的个数,即数组的行数
每个一维数组的大小除以整型数据的大小,就是一维数组的长度,即数组的列数
在初始化二维数组的时候可以省略一维数组的大括号,会自动按顺序分配每个元素的位置
#include
结果是一样的
如果数据的个数是明确的,那么在声明数组的时候只要指明每个一维数组的长度,可以省略二维数组的长度,即只需要指明列数可以省略行数
#include
会自动计算行数
如果数据不够填满数组,那么剩余的部分依然会补0
#include
如果要初始化所有元素都为0,就可以这样写
#include
3.2 使用循环遍历二维数组
操作二维数组就需要使用嵌套的循环,外层循环的控制变量就是数组的第一维索引,内层循环的控制变量就是数组的第二维索引
如果我们要输出数组的所有元素
#include
同样的也存在三维以上的数组,操作方式都是一样的