第六章 数组
- (1)数组是一组有序数据的集合,下标代表数据在数组中的序号。
- (2)用一个数组名和下标来唯一地确定数组中的元素。
- (3)数组中的每一个元素都属于同一个数据类型。
- (4)将数组与循环结合起来,可以有效地处理大批量的数据。
6.1 一维数组
- 一维数组的元素只需要用数组名加一个下标,就能唯一地确定。
6.1.1 定义一维数组
- 要使用数组,必须在程序中先定义数组,由哪些数据组风数组,数组中有多少元素,属于哪个数据类型。
6.1.1.1 定义一维数组的一般形式
类型符 数组名 [常量表达式] ;
- 例:
int a[10];
6.1.1.2 说明
- (1)在定义数组时,需要指定数组中元素的个数,方括号中的常量表达式用来表示元素的个数,即数组长度。
- (2)常量表达式中可以包括常量和符号常量,不能包含变量。
- (3)C语言不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。
6.1.2 引用一维数组
- 在定义数组并对其中各元素赋值后,就可以引用数组中的元素。
- 注意:只能引用数组元素而不能一次整体调用整个数组全部元素的值。
6.1.2.1 引用数组元素的表示形式
数组名 [下标]
- 例:
int a[10];
- 提醒:数组元素的下标从0开始。
6.1.3 一维数组初始化
- 为了使程序简洁,常在定义数组的同时给各数组元素赋值,这称为一维数组的初始化。
- 可用 “初始化列表” 方法实现数组的初始化。
- (1)在定义数组时对全部数组元素赋予初值。
- 例如:
int a[5]={0,1,2,3,4};
- (2)可以只给数组中的一部分元素赋值。
- 例如:
int a[10]={0.1,2,3,4};
- (3)如果想使一个数组中全部元素值为0,可以写成:
- 例如:
int a[10]={0,0,0,0,0,0,0,0,0,0};
或 int a[10]={0};
- //未赋值的部分元素自动设定为0
- (4)在对全部数组元素赋初值时,由干数据的个数已经确定,因此可以不指定数组长度。
- 例如:
int a[5]={1.2,3.4,5};
可以写成 int a[]={1,2,3,4,5};
6.2 二维数组
6.2.1 定义二维数组
6.2.1.1 定义一维数组的一般形式
类型说明符 数组名[常量表达式][常量表达式];
- 说明:用矩阵形式表示二维数组,是逻辑上的概念,而在内存中,各元素是连续存放的,不是二维的,是线性的。
6.2.2 引用二维数组
6.2.2.1 引用一维数组的表示形式
数组名[下标][下标]
- 下标应是整型表达式。
- 数组元素可以出现在表达式中,也可以被赋值。
- 例如:
b[1][2]-a[2][3]/2
6.2.3 初始化
- 可以用初始化列表对二维数组初始化。
- (1)分行给二维数组赋初值
- 例:
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
- 比较直观,按行赋值。
- (2)可以将所有数据写在一个花括号内,按数组元素在内存中的排列顺序对各元素赋初值。
- 例:
int a[3][5]={1,2,3,4,5,6,7,8,9,10,11,12};
- 效果与前相同,但以第一种方法为好,用第二种方法数据多的情况下,容易遗漏,也不易检查。
- (3)可以对部分元素赋初值。
- 例如:
int a[3][6]={{1},{5},{9}};
- 它的作用是只对各行第1列(即序号头O的列)的元素贼初值,其余元素值自动为0。
- 也可以对各行中的某一元素赋初值。
- 例如:
int a[3][7]={{1},{0,6),{0,0,11}};
- 此方法对非0元素少时比较方便,只需输入少量数据,不用把所有的0都打出来。
- 也可以对某几行中的某一元素赋初值。
- 例如:
int a[3][8]={{1},{5,6)};
- (4)如果对全部元素都赋初值(即提供全部初始数据),则定义数组时对第1维的长度可以不指定,但第2维的长度不能省。
- 例如:
int a[3][9]={1,2.3.4.5.6,7,8.9.10.11.12};
与此定义等价 int a[][10]={1,2.3.4.5.6,7,8.9.10.11.12};
- 系统会根据数据总个数和第2维的长度算出第1维的长度。
- 在定义时也可以只对部分元素赋初值而省略第1维的长度,但应分行赋初值。
- 例如:
int a[][11]={{0.0,3},{},{0,10}};
6.3 字符数组
- 字符数据常作为字符串形式使用,在C语言中字符串是存放在字符型数组中的。
6.3.1 定义字符数组
- 用来存放字符数据的数组是字符数组,一个元素内存放一个字符。
- 例:
- 由于字符型数据是以整数形式(ASCII码)存放的,因此也可以用整型数组来存放字符数据。
- 例:
int c[10]; c[0]='a'; //合法,但浪费空间
6.3.2 初始化字符数组
- 对字符数组初始化,“初始化列表”,即把各个字符依次赋给数各元素。
- 例如:
char c[5]={'H','e','l','l','o'};
- 如果在定义字符数组时不进行初始化,则数组中各元素的值是不可预料的。
- 如果花括号号中提供的初值个数(即字符个数)大于数组长度,则出现语法错误。
- 如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符(即
‘\0’
)。 - 如果提供的初值个数与预定的数组长度相同,在定义时可以省略数组长度,系统会自动根据初值个数确定数组长度。
- 例如:
char c[]={'H','e','l','l','o'};
6.3.3 引用字符数组
- 可以引用字符数组中的一个元素,得到一个字符。
6.3.4 字符串和字符串结束标志
- 在实际工作中,人们关心的往往是字符串的有效长度而不是字符数组的长度。
- C语言规定了一个“字符串结束标志”,以字符
‘\0’
作为结束标志。 - 在遇到字符
‘\0’
时,表示字符串结束,把它前面的字符组成一个字符串。 ‘\0’
代表ASCII码为0的字符。
6.3.4.1 字符数组初始化的方法(补充)
- 用字符串常量来使字符数组初始化
- 例:
char c[]={"hello world"};
- 也可以省略花括号
- 例:
char c[]="hello world";
6.3.5 字符串的输入输出
- 字符数组的输人输出可以有两种方法
- (1)逐个字符输入输出。用格式符 “%c” 输入或输出一个字符。
- 例:(可看6.3.3 引用字符数组)部分代码。
- (2)将整个字符一次输入或输出,用 “%s” 格式符,是对字符串(string)的输出。
- 例如:
char c={"China"}; printf("%s\n",c);
- 说明:
- ① 输出的字符中不包括结束符
'\0'
。 - ② 用“%s”格式符输出字符串时,printf函数中的输出项是字符数组名,而不是数组元素名。
- ③ 如果数组长度大于字符串的实际长度,也只输出到
'\0'
结束。 - ④ 如果一个字符数组中包含一个
'\0'
,则遇到第一个 '\0'
就结束。 - ⑤ 可以用 scanf函数 输入一个字符串。
- 例如:
scanf(”%s",c);
- scanf函数中的输入项c是已定义的字符数组名,输入的字符串应短于已定义的字符数组的长度。
- 如果利用一个 scanf函数 输入多个字符串,则应在输入时以空格分隔。
- 例如:
char str1[5],str2[5],str3[5];
- 注意:scanf函数 中的输入项如果是字符数组名,不要再加地址符 &。
6.3.6 字符串处理函数
- 注意:在使用字符串处理数据时,应当在程序文件开头加上 “ #include<string.h>” 。
1. puts函数 —— 输出字符串的函数
2. gets函数 —— 输入字符串的函数
3. strcat函数 —— 字符串连接函数
4. strcpy 和 strncpy 函数 —— 字符串复制函数
5. strcmp 函数 —— 字符串比较函数
6. strlen 函数 —— 测字符串长度的函数
Comments | NOTHING