第六章
数组简介,其中数组是一组有序数据的集合,下标从零开始,而且数组中的每一个元素的是相同的数据类型,要是int都是int,要是double都是double,是一种同构数据集合。
1.一维数组
定义与引用
定义一维数组的一般形式,类型说明符 数组名 [常量表达式],如:int a[10]
有关定义的几点说明:
- 组名的命名规则和标识符一样
- 定义数组时,需要指定数组的元素个数,方括号里的常量表达式用来表示元素的个数,即数组长度。指定a[10]表明数组内有10个元素,注意下标从0开始,这10个元素从0到9,没有a[10]。
- 常量表达式中可以包括常量和符号常量,定义时这样定义是可以的,int a[5+3],而且在定义之后,系统开辟了连续的存储空间来存放数组元素
引用数组元素的表示形式如下:数组名[下标]
初始化
- 定义一维数组时就对全部数组元素赋初值。例如:int a[5]={0,1,2,3,4,5};将数组内的个元素处置顺序放在一对花括号里面,数据之间用逗号分割
- 可以只对数组内的一部分元素赋初值,如int a[8]={0,1,2,3,4,5};定义了a数组有八个元素,但是花括号内提供了六个初值,这表示只给前面的6个元素进行了赋值,后两个的元素默认为0
- 如果想让数组内的元素的值均为0那么可以这样,int a[5]={0};也可以int a[5]={0,0,0,0,0};
- 在对全部的数组元素赋初值时,由于数据的个数已经确定,可以不指定数组的长度int a[5]={0,1,2,3,4,5};和int a[ ]={0,1,2,3,4,5};等价
利用一维数组解决常见问题,排序问题,冒泡法
- 二维数组
定义与引用
定义一般形式 类型说明符 数组名 [常量表达式] [常量表达式];
二维数组的元素存储方式按行来存储的,先存第一行的,再存第二行的,以此类推,因此在多位数组的内存排序中,第一维的变化的下标变化的最慢,最右边的下标变化的最快
引用,二维数组的表示形式如下,
数组名 [下标][下标];
初始化
- 分行给二维数组赋初值 int a[2][3]={{0,1,2},{3,4,5}};
- 也可将所有数据都写在一个花括号里,int a[2][3]={0,1,2,3,4,5};
- 可以对部分元素赋初值,int a[3][4]={{1},{5},{8}};
这样赋初值的意思是说a[0][0]=1,a[1][0]=5,a[2][0]=8
也可以对各行的某一元素赋初值,例如int a[3][4]={{1,2},{5,6},{8}};结果就是
- 2 0 0
5 6 0 0
8 0 0 0
④如果对数组的全部元素都赋初值,那么定义数组时的第一维的长度可以不指定,但是第二维的长度不能省略
- 字符数组
因为C语言里面没有字符串类型,也没有字符串变量,所以用字符数组来解决字符串相关问题。
定义的字符数组和前面提到过的一维数组和二位数组基本上没区别
字符数组的初始化,
- char a[10]={‘I’,’ ‘,’a’,’m’,’ ‘,’h’,’a’,’p’,’p’,’y’};
- 另外一种就是自动确定数组的长度,但是这种情况还是要求提供的初值个数就是预定数组的长度。
- 用字符串常量来初始化字符数组,例如:char str [10]=”I am happy”; char str [ ]={”I am happy”};此时的数组长度是11而不是10,因为有一个隐藏起来的\0,因此他与char a[10]={‘I’,’ ‘,’a’,’m’,’ ‘,’h’,’a’,’p’,’p’,’y’,’\0’};等价,不和char a[10]={‘I’,’ ‘,’a’,’m’,’ ‘,’h’,’a’,’p’,’p’,’y’};等价。
若char s[10]={“china”};那么第六个之后的元素都是\0、
遇到多个\0时,只会输出第一个\0之前的内容。
引用字符数组的值,略
字符串
实际上,我们关心的是字符串的实际长度,而不是字符数组的长度,为了测定字符串的长度,c语言规定了一个字符串结束标志,以‘\0’作为字符串的结束标志,如果字符数组中钱就个字符都不是\0,而第十个是\0,那么c愿与你就会认为数组中有一个有效字符为9个的字符串,也就是说,遇到字符\0他就代表着字符串结束,把它前面的字符当作是一个字符串。
字符数组的输入和输出
输入输出有两种方法,一个是逐个字符的输入输出,用%c来输入输出一个字符,另一个是将这个字符串一次性的输入或输出,用%s,
说明:
- 输出的字符不包括\0
- 用%s输出时,printf函数中的输出项是字符数组名,不是数组元素名,写成这样是不对的printf(“%s”,c[0]);
- 若数组长度大于字符串的实际长度,那么也只输出到遇\0结束,
- 若存在多个\0那么在遇到第一个\0是输出停止
- 可以用scanf输入一个字符串,scanf(“%s”,str);注意这里不加&只有一个数组名,因为数组名就是地址常量
一些处理字符串用的函数
- Puts函数——用于输出字符串
- Gets函数——用于输入字符串
一般形式gets(字符数组名)
- Strcat函数——字符串连接函数
一般形式strcat(字符数组1,字符数组2)
作用是将两个字符数组的字符串连接起来,就是把字符串2放在字符串1后面,结果放入字符数组1里面,函数调用的结果是字符数组1的地址
说明:字符数组1必须足够大,
- Strcpy与strncpy——字符串复制函数、
- Strcmp函数——字符串比较函数
- Strlen函数——测量字符串长度的函数
- Strlwr函数——转换为小写的函数
- Strupr函数——转换为大写的函数