
第 7 章 数组与字符串
1 第 7 章 数组与字符串

二维数组>二维数组2Page
Page 2 二维数组 ➢二维数组

数组一个班所有同学(40名)的C语言成绩可以定义为一维数组gis_c[40],如下;123567学号44077成绩89877880966980那么,如果要描述一个班所有同学的5门课程成绩(如下表)?C语言中是否有这样的数据类型?7356124学号40C语言成绩8778809669778980数学成绩7876786987877882英语成绩8688907887798876政治成绩8685858787658786物理成绩9287877879888088Page3
Page 3 数组 一个班所有同学(40名)的C语言成绩可以定义为一维数组gis_c[40],如下; 学号 1 2 3 4 5 6 7 . 40 成绩 89 87 78 80 96 69 77 . 80 那么,如果要描述一个班所有同学的5门课程成绩(如下表)? C语言中是否有这样的数据类型? 学号 1 2 3 4 5 6 7 . 40 C语言成绩 89 87 78 80 96 69 77 . 80 数学成绩 78 69 87 78 76 87 78 . 82 英语成绩 87 79 88 86 88 76 90 . 78 政治成绩 86 87 65 85 85 87 87 . 86 物理成绩 92 88 87 87 80 78 79 . 88

6.2.1二维数组的定义、初始化和引用6.2 二维数组1、二维数组的定义和引用二维数组的定义格式:类型说明符数组名「整常量表达式1][整常量表达式2]doubledSum[1a][9];int a[2][3];存储方式:在计算机中二维数组的元素按行顺序存放Page
Page 4 6.2 二维数组 1、二维数组的定义和引用 二维数组的定义格式: 类型说明符 数组名[整常量表达式1][整常量表达式2] 存储方式: 在计算机中二维数组的元素按行顺序存放。 6.2.1 二维数组的定义、初始化和引用

6.2.1二维数组的定义、初始化和引用6.2二维数组21357学号4640c语言成绩8987788096697780数学成绩7876786987877882英语成绩8779888676907888政治成绩6585868785878786物理成绩9288878780787988gis[5][40]5门的成绩可以定义为:(假设这个班有40名学生)。5Page
Page 5 6.2 二维数组 6.2.1 二维数组的定义、初始化和引用 5门的成绩可以定义为: gis[5][40] (假设这个班有40名学生)。 学号 1 2 3 4 5 6 7 . 40 C语言成绩 89 87 78 80 96 69 77 . 80 数学成绩 78 69 87 78 76 87 78 . 82 英语成绩 87 79 88 86 88 76 90 . 78 政治成绩 86 87 65 85 85 87 87 . 86 物理成绩 92 88 87 87 80 78 79 . 88

6.2.1二维数组的定义、初始化和引用二维数组的引用格式:数组名[下标1][下标2]注意:0≤下标1≤常量表达式1-1;0≤下标2≤常量表达式2-1。例: int m[2][3]合法引用格式为:m[0][0]m[0][1]m[0][2]m[1][0]m[1][1]m[1][2]Page6
Page 6 注意: 0≤下标1≤常量表达式1-1; 0≤下标2≤常量表达式2-1。 二维数组的引用格式: 数组名[下标1][下标2] 例:int m[2][3] 合法引用格式为: m[0][0] m[0][1] m[0][2] m[1][0] m[1][1] m[1][2] 6.2.1 二维数组的定义、初始化和引用

6.2.1二维数组的定义、初始化和引用2、二维数组的初始化二维数组初始化是按行进行的。格式:类型符数组名[表达式1]【表达式2]={初值表};说明:·给全部元素赋初值。·给部分元素赋初值。。给二维数组的全部元素赋初值,可以不指定第一维的长度,但第二维的长度不能省略。Page
Page 7 说明: • 给全部元素赋初值。 • 给部分元素赋初值。 • 给二维数组的全部元素赋初值,可以不指定第 一维的长度,但第二维的长度不能省略。 2、二维数组的初始化 二维数组初始化是按行进行的。 格式: 类型符 数组名[表达式1][表达式2]={初值表}; 6.2.1 二维数组的定义、初始化和引用

6.2.1二维数组的定义、初始化和引用二维数组初始化举例:·给全部元素赋初值。例int a[3][4]={{0,1,2,3},{4,5,6,7},[8,9,10,11}};或写成: int a[3][4]=[0,1,2,3,4,5,6,7,8,9,10,11];给部分元素赋初值。例int a[3][4]={[0,1],{4,5,6],{8,9,10,11]] :或写成: int b[3][4]=[0,1,2,3,4,5,6] ;给二维数组的全部元素赋初值,可以不指定第一维的长度,但第二维的长度不能省略。例int a[][4]={{0,1,2,3},{4,5,6,7],[8,9,10,11]}];或写成: int a[][4]=[0,1,2,3,4,5,6,7,8,9,10,11];Page
Page 8 二维数组初始化举例: • 给全部元素赋初值。 例 int a[3][4]={{0,1,2,3},{4,5,6,7},{8,9,10,11}}; 或写成: int a[3][4]={0,1,2,3,4,5,6,7,8,9,10,11}; •给部分元素赋初值。 例 int a[3][4]={{0,1},{4,5,6},{8,9,10,11}}; 或写成: int b[3][4]={0,1,2,3,4,5,6 } ; •给二维数组的全部元素赋初值,可以不指定第一 维的长度,但第二维的长度不能省略。 例 int a[ ][4]={{0,1,2,3},{4,5,6,7},{8,9,10,11}}; 或写成: int a[ ][4]={0,1,2,3,4,5,6,7,8,9,10,11}; 6.2.1 二维数组的定义、初始化和引用

6.2.2二维数组的输入输出二维数组的输入输出则是通过使用C语言基本输入输出函数配合循环结构来进行。例 int a[5][10], i, j;/*通过键盘输入数值*/for (i-0; <5; i++)/*逐行输入数值*//*逐列输入数值*/for(j=0;j<10;j++)scanf("%d,&ali] liD/*通过循环输出每一个数*/for (i=0; i<5; i++)for((j=0;j<10;j++)printf(a[%d][%d]=%d ",i,j, a[i]li);Page9
Page 9 6.2.2 二维数组的输入输出 二维数组的输入输出则是通过使用C语言基本输入输出 函数配合循环结构来进行。 例 int a[5][10], i,j; /* 通过键盘输入数值 */ for (i=0; i<5; i++) /* 逐行输入数值 */ for (j=0; j<10; j++) /* 逐列输入数值 */ scanf(“%d”,& a[i] [j]); /* 通过循环输出每一个数 */ for (i=0; i<5; i++) for (j=0; j<10; j++) printf(“a[%d][%d]=%d ”, i,j, a[i][j]);

6.2.3二维数组应用实例例 矩阵的转置。分析:将矩阵Am*n行列互换后,得一新矩阵为Bn*m。它们的元素对应关系为:i,j=bi,iPage10
Page 10 例 矩阵的转置。 分析:将矩阵Am*n行列互换后,得一新矩 阵为Bn*m。 它们的元素对应关系为:ai, j = bj, i 6.2.3 二维数组应用实例