6.2 二维数组(课件)-《C语言程序设计》同步教学(清华大学出版)

2024-08-11
| 27页
| 89人阅读
| 5人下载
普通

内容正文:

(清华大学出版) 同步教学 《C语言程序设计》 C 语言程序设计 第六章 数 组 2 第六章 数 组 6.2 二维数组 二维数组定义: 1. 是一个一维数组,但是 2. 其每个数组元素本身,又是一个一维数组 即是:一维数组的数组 相应地,一个n维数组: 1. 是一个一维数组,但是 2. 其每个数组元素本身,又是一个n-1维数组 3 二维数组的形式 int sz[5][4]; 数组的类型 数组名 第1维 具有5个元素 的一维数组 必须是常量 也必须是 常量 第2维 每个元素又是一个 具有4个元素 的一维数组 二维数组 可以看作是 一个由变量构成的矩阵 int sz[5][4]; 0 1 2 3 0 1 2 3 4 列的编号 行的编号 变量的行数 变量的列数 二维数组中变量的编号 0 1 2 3 0 1 2 3 4 二维数组中 变量 的 编号,由: 行的编号,和 列的编号 两部分组成。 int sz[5][4]; 如何访问二维数组中的变量 0 1 2 3 0 1 2 3 4 int sz[5][4]; …sz[2][3]…; 数组名 行的编号 列的编号 二维数组变量赋值的一种特殊方式 声明时赋值 0 1 2 3 0 1 2 3 4 int sz[5][4]; int sz[5][4] = { {0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 0, 1}, {2, 3, 4, 5}, {6, 7, 8, 9} } ; 声明时赋值 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 0 1 2 3 4 int sz[5][4]; int sz[5][4] = { {0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 0, 1}, {2, 3, 4, 5}, {6, 7, 8, 9} } ; 第0行变量的值 第1行变量的值 第2行变量的值 第3行变量的值 第4行变量的值 二维数组变量赋值的一种特殊方式 a00 a01 ……. a0n-1 a10 a11 …….. a1n-1 ………. am-10 am-11 …….. am-1n-1 二维数组:按行的顺序存放。 2000 2002 2004 ………. am-10 am-11 ……am-1n-1 a00 a01 …….. a0n-1 a10 a11 …….. a1n-1 ………………….   按行优先顺序存放 A[m][n]= 注:在这里,amn 代表 a[m][n]。 则存放情况如下: 若有数组b[2][3]; 其中数据为: 11 12 13 21 22 23 11 12 13 21 22 23 b[0][0] b[0][1] b[0][2] b[1][0] b[1][1] b[1][2] 2000 2002 2004 …… 二维数组的输入和输出 数组的输入和输出只能逐个对数组元素进行操作(字符数组例外) int b[2][3], i, j; 输入方法: 输入第i行第j列元素: scanf("%d",&a[i][j]); 输入整个数组元素: for (i=0;i<2;i++) for(j=0;j<3;j++) scanf("%d",&a[i][j]); 输出方法: 输出第i行第j列元素: printf("%d",a[i][j]); 输出整个数组元素: for (i=0;i<2;i++) for(j=0;j<3;j++) printf("%d",a[i][j]); 二维数组 应用举例 问题描述 某个年级有180名学生; 某个学期,这个年级开了8门必修课; 期末考试结束后,每个学生每门课程的成绩出来了; 请编写一段程序: 计算每个学生的平均成绩; 计算每门课程的平均成绩。 编程的基本思路 step1: 定义一个180行×8列的二维数组 用于存放学生的课程成绩 step2: 录入学生的课程成绩 step3: 计算每个学生的平均成绩,并输出 step4: 计算每门课程的平均成绩,并输出 … … … … … … … … 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 8 … 179 课程编号 学生编号 double scores[180][8] #define STUDENT_NUM 180 /*学生人数*/ #define COURSE_NUM 8 /*课程门数*/ int main( ) { double scores[STUDENT_NUM][COURSE_NUM];/*成绩数组*/ int i, k; /*循环变量*/ /*录入学生成绩*/ for (i=0; i<STUDENT_NUM; i++) { for (k=0; k<COURSE_NUM; k++) { scanf("%lf", &(scores[i][k])); } } /*计算学生平均成绩*/ for (i=0; i<STUDENT_NUM; i++) { double sum = 0; /*学生总成绩* for (k=0; k<COURSE_NUM; k++) { sum += scores[i][k]; } printf("Student %d: %.1f ", i, sum/COURSE_NUM); } /*计算课程平均成绩/ for (k=0; k<COURSE_NUM; k++) { /*课程总成绩*/ double sum = 0; for (i=0; i<STUDENT_NUM; i++) { sum += scores[i][k]; } printf("Course %d : %.1f ", k, sum/STUDENT_NUM); } #define STUDENT_NUM 180 //学生人数 #define COURSE_NUM 8 //课程门数 int main( ) { double scores[STUDENT_NUM][COURSE_NUM]; //成绩数组 int i, k; //循环变量 for (i=0; i<STUDENT_NUM; i++) { //录入学生成绩 for (k=0; k<COURSE_NUM; k++) { scanf("%lf", &(scores[i][k])); } } for (i=0; i<STUDENT_NUM; i++) { //计算学生平均成绩 double sum = 0; //学生总成绩 for (k=0; k<COURSE_NUM; k++) { sum += scores[i][k]; } printf("Student %d: %.1f ", i, sum/COURSE_NUM); } for (k=0; k<COURSE_NUM; k++) { //计算课程平均成绩 double sum = 0; //课程总成绩 for (i=0; i<STUDENT_NUM; i++) { sum += scores[i][k]; } printf("Course %d : %.1f ", k, sum/STUDENT_NUM); } return 0; } 6.2.5 二维数组应用举例 【例6.4】 输入一个4×4的整数矩阵,分别求两对角线上元素之和。 m[0][0] m[0][1] m[0][2] m[0][3] m[1][0] m[1][1] m[1][2] m[1][3] m[2][0] m[2][1] m[2][2] m[2][3] m[3][0] m[3][1] m[3][2] m[3][3] 分析:当 i==j 时, m[i][j]在主对角线上 当 i+j==3 时, m[i][j]在次对角线上 第六章 数 组 #define N 4 #include<stdio.h> void main() { int m[N][N]; int i, j, r1=0, r2=0; for( i=0;i<N;i++) { printf("%d line:",i); for(j=0;j<N;j++) { scanf("%d",&m[i][j]); if(i==j) r1+=m[i][j]; if(i+j==N-1) r2+=m[i][j]; } } printf("the result: %d, %d ",r1,r2); } 第六章 数 组 6.2.5 二维数组应用举例 【例6.6】将1个 3*2 矩阵存入1个 3*2 的二维数组中,找出最大值以及它的行下标和列下标,并输出该矩阵。 row 记录 最大值的行下标 col 记录 最大值的列下标 a[row][col] 就是最大值 第六章 数 组 #include<stdio.h> int main( ) { int i, j, row, col; int a[3][2]; printf("Enter 6 integers: ") ; for(i = 0; i < 3; i++) for(j = 0; j < 2; j++) scanf("%d", &a[i][j]); for(i = 0; i < 3; i++){ for(j = 0; j < 2; j++) printf("%4d", a[i][j]); printf(" "); } row = col = 0; for(i = 0; i < 3; i++) for(j = 0; j < 2; j++) if(a[i][j] > a[row][col]){ row = i; col = j; } printf("max = a[%d][%d] = %d ", row, col, a[row][col]); return 0; } 第六章 数 组 二维数组应用举例 【课外练习】一个专业有M个同学,某个学期共选修了N门课程,编程求每个同学的平均成绩和每门课程的平均成绩。要求建立二维数组,将每个同学的平均成绩及每门课程的平均成绩都反映到数组当中。 第六章 数 组 #include<stdio.h> #define M 2 #define N 3 void main() { float s[M+1][N+1]; int i,j; printf("输入学生成绩: "); /* 求学生的平均分 */ for(i=0;i<M;i++) { s[i][N]=0; printf("输入第%d个学生 的成绩:",i); for(j=0;j<N;j++) { scanf("%f",&s[i][j]); s[i][N]+=s[i][j]; } s[i][N]/=N; } /* 求课程的平均分 */ for(j=0;j<N+1;j++) { s[M][j]=0; for(i=0;i<M;i++) s[M][j]+=s[i][j]; s[M][j]/=M; } printf(" 学生的成绩及平均分: "); for(i=0;i<M;i++) { printf("第%d个学生的成绩:",i); for(j=0;j<=N;j++) printf("%8.1f",s[i][j]); printf(" "); } printf(" 平均分分别为: "); for(j=0;j<N;j++) printf("%8.1f",s[M][j]); printf(" "); } 第六章 数 组 感谢观看 20XX $$

资源预览图

6.2 二维数组(课件)-《C语言程序设计》同步教学(清华大学出版)
1
6.2 二维数组(课件)-《C语言程序设计》同步教学(清华大学出版)
2
6.2 二维数组(课件)-《C语言程序设计》同步教学(清华大学出版)
3
6.2 二维数组(课件)-《C语言程序设计》同步教学(清华大学出版)
4
6.2 二维数组(课件)-《C语言程序设计》同步教学(清华大学出版)
5
6.2 二维数组(课件)-《C语言程序设计》同步教学(清华大学出版)
6
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。