C语言 - 第六章 - 数组


第六章 数组

  • (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 定义二维数组

  • 例:float pay[3][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 函数 —— 测字符串长度的函数

声明:三二一的一的二|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - C语言 - 第六章 - 数组


三二一的一的二