第5章 第2节:二维数组的定义和使用(课件)-《编程语言基础—C语言》(高教版第5版)同步精品课堂

2025-12-29
| 30页
| 179人阅读
| 2人下载
精品

内容正文:

5.2节:二维数组的定义和使用 编程语言基础——C语言 同步精品课堂 高教版(第5版) 掌握国家标准《机械制图》中有关图幅、比例、字体图线等基本规定。 教学目标 一 03 能够正确引用二维数组元素,并实现其访问与赋值操作 熟悉二维数组的多种初始化方法,并能结合应用实例编程实现简单矩阵转换(如行列互换) 04 理解二维数组在内存中按行顺序存储的元素排列方式 02 掌握二维数组定义的一般形式及语法规则 01 教学重难点 二 03 二维数组多种初始化方法(分行初始化与按顺序初始化) 理解二维数组在内存中的线性存储形式及其对编程逻辑的影响,并能运用双重循环实现矩阵行列互换等简单算法 04 二维数组元素的正确引用格式(双下标访问) 02 二维数组定义的一般形式与内存中的元素排列方式 01 导入新课 三 《数字迷宫挑战赛——二维数组探秘》 【数字迷宫】 【挑战任务】 [7][4][2][3] [1][8][5][9] [6][0][4][2] [3][5][1][7] 坐标寻宝:请找出第2行第3列的数字密码是多少? 路径规划:如果我们想记录从起点(1,1)到终点(4,4)的最短路径经过的所有数字,该如何存储这些坐标和数值? 镜像迷宫:如果我要创建一个与原迷宫完全对称的新迷宫(行列互换),该如何高效完成? “在C语言中,二维数组就是处理这类表格数据的完美工具!它就像这个数字迷宫的‘地图存储器’,可以用maze[行][列]的精确定位任何位置。今天,我们就来学习如何定义、使用这个强大的工具,并一起完成迷宫镜像挑战!” 新知讲授 四 我们之前学习的一维数组,能很好地表示一排数据。但当数据像成绩单、棋盘或像素图片那样,以行和列的形式呈现时,一维数组就显得不够直观了。 这时,我们需要二维数组。它就像一个表格,通过a[i][j]这样的方式,用行下标和列下标来精确定位每一个数据。掌握二维数组,意味着我们获得了处理更复杂、更结构化数据的能力。 今天,就让我们一起来学习如何定义和使用二维数组。 概述 新知讲授 四 知识点1:二维数组的定义 1、定义二维数组的一般形式 (1)一般形式: (2)举例: 类型说明符 数组名[常量表达式1][常量表达式2] int a[10][5]; int型二维数组 数组名为a 数组第二维有5个元素 数组第一维有10个元素 定义a为10×5(10行5列)的数组。 新知讲授 四 知识点1:二维数组的定义 1、定义二维数组的一般形式 (1)一般形式: (2)举例: 类型说明符 数组名[常量表达式1][常量表达式2] float scores[5][3] float型二维数组 数组名为scores 数组第二维有3个元素 数组第一维有5个元素 定义scores为5×3(5行3列)的数组。 新知讲授 四 知识点1:二维数组的定义 1、定义二维数组的一般形式 (3)注意: 类型说明符 数组名[常量表达式1][常量表达式2] float a[3][4], b[5][10]; //定义a为3×4(3行4列)的数组,b为5×10(5行10列)的数组 float a[3, 4], b[5, 10]; //在一对方括号内不能写两个下标 新知讲授 四 知识点1:二维数组的定义 1、定义二维数组的一般形式 (4)可以使用宏定义作为常量表达式 例如: #define M 3 #define N 5 int c[M][N]; 定义了二维数组c,它是一个具有M行N列的二维数组,共有M×N个元素。 相当于定义:int c[3][5];,这样做的好处是当需要改变行数和列数时只要改变M或N所代表的值即可。 【注意】可以使用宏定义作为常量表达式并不代表可以对数组进行动态定义,宏定义又称为“符号常量”所以,无论是一维数组的定义,还是二维数组的定义,均不允许对数组进行动态定义。 新知讲授 四 知识点1:二维数组的定义 2、二维数组的元素排列 C语言对二维数组采用这样的定义方式,使得二维数组可被看作是一种特殊的一维数组:它的元素又是一个一维数组。例如:int a[3][4];,可以把a看作是一个一维数组,它有3个元素:a[0]、a[1]、a[2],每个元素又是一个包含4个元素的一维数组 a[0] …… a[1] …… a[2] …… 【注意】数组下标从0开始,因此行标和列标的范围均要减1。 在C语言中,二维数组中的元素排列是按行存放的,即在内存中先顺序存放第一行的元素,再存放第二行的元素。 新知讲授 四 知识点2:二维数组的引用 引用二维数组元素 (1)二维数组元素的表现形式为: 例如: 数组名[下标][下标] ① a[2][3] ②a[2-1][2*2-1] ①a[2,3] ②a[2-1,2*2-1] 下标必须为整型表达式,不能为小数。 (2)数组元素可以出现在表达式中,也可以被赋值。 例如:b[1][2]=a[2][3]/2 (3)在使用数组元素时,下标值应在已定义的数组大小的范围内。 新知讲授 四 知识点2:二维数组的引用 引用二维数组元素 (4)因为二维数组有两个下标,所以在二维数组的应用中常常结合双重循环使用。 例如: 【行优先存储】 int a[3][4]; …… for(i=0;i<3;i++) for(j=0;j<4;j++) scanf(“%d”,&a[i][j]); …… 【列优先存储】 int a[3][4]; …… for(i=0;i<4;i++) for(j=0;j<3;j++) scanf(“%d”,&a[j][i]); …… 新知讲授 四 知识点3:二维数组的初始化 1、二维数组初始化的方法 (1)分行全部赋值 例如:int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 赋值后二维数组各元素中的值为: a[0] …… a[0][0] 1 a[0][1] 2 a[0][2] 3 a[0][3] 4 a[1] …… a[1][0] 5 a[1][1] 6 a[1][2] 7 a[1][3] 8 a[2] …… a[2][0] 9 a[2][1] 10 a[2][2] 11 a[2][3] 12 新知讲授 四 知识点3:二维数组的初始化 1、二维数组初始化的方法 (2)分行部分赋值 ①例如:int a[3][4]={{1,2},{5},{9,10,11}}; ②例如:int a[3][4]={{1,2},{9,10,11}}; 1 2 5 9 10 11 1 2 9 10 11 ③例如:int a[3][4]={{1,2},{},{9,10,11}}; 1 2 9 10 11 新知讲授 四 知识点3:二维数组的初始化 1、二维数组初始化的方法 (3)按一维数组的形式赋值 例如:int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 缺点:虽然书写方便,但缺乏直观性,尤其是在数组元素较多的时候容易遗漏。 (4)如果为全部元素赋值(无论是一维形式还是分行形式),则定义数组时可以省略第1维的长度,但第2维长度不能省略。 例如:int a[ ][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 例如:int a[ ][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 例如:int a[ ][4]={{1,2},{},{9,10,11}}; 系统将根据数据的总数分配内存,即可确定该数组为3行4列。 新知讲授 四 知识点3:二维数组的初始化 2、二维数组初始化的应用 例5-3:输入一个3×4的矩阵,找出矩阵中负数的个数并输出。 #include<stdio.h> main( ){ int a[3][4]; int i,j,count=0; printf("输入一个3×4矩阵: "); for(i=0;i<3;i++) //变量i控制二维数组的行 for(j=0;j<4;j++) //变量j控制二维数组的列 { scanf(“%d”,&a[i][j]);//从键盘得到的值存入a[i][j]元素内 if(a[i][j]<0) //判断a[i][j]中存入的数值是否小于0(若小于0即为负数) count++; } //若小于0,则count计算加1 printf("负数的个数=%d",count); } 新知讲授 四 知识点4:二维数组应用程序举例 1、将一个二维数组a的行和列的元素互换,存到另一个二维数组b中。 a数组 a[0][0] 1 a[0][1] 2 a[0][2] 3 a[1][0] 4 a[1][1] 5 a[1][2] 6 b数组 a[0][0] 1 a[0][1] 4 a[1][0] 2 a[1][1] 5 a[2][0] 3 a[2][1] 6 新知讲授 四 知识点4:二维数组应用程序举例 1、将一个二维数组a的行和列的元素互换,存到另一个二维数组b中。 #include <stdio.h> int main() {int a[2][3]={{1,2,3},{4,5,6}}; int b[3][2],i,j; printf("array a: "); for(i=0;i<=1;i++) //处理a数组中的一行中各元素 { for (j=0;j<=2;j++) //处理a数组中某一列中各元素 { printf("%5d",a[i][j]); //输出a数组的一个元素 b[j][i]=a[i][j]; } //将a数组元素的值赋给b数组相应元素 printf(" "); } printf("array b: "); //输出b数组各元素 for(i=0;i<=2;i++) //处理b数组中一行中各元素 { for(j=0;j<=1;j++) //处理b数组中一列中各元素 printf("%5d",b[i][j]); //输出b数组的一个元素 printf(" "); } } 师生互动 五 《二维数组“排兵布阵”挑战赛》 布阵:请用按行初始化的方法,将这个“军队”初始化为以下阵容: 第一行(前锋):士兵编号 101, 102, 103 第二行(中军):士兵编号 201, 202, 203 第三行(后卫):士兵编号 301, 302, 303 【代码】: 点将:战事激烈,现需抽调中军(第2行)的左翼(第1列)士兵上前线。请问这个士兵的编号是多少?在代码中如何表示他? 【代码】 变阵(进阶任务):敌方从侧翼来袭,指挥官下令,全军需立即变换为“以列为单位”的新队形,即将原行变成列,原列变成行。请问如何用代码实现,将这个army方阵的行列互换,存入一个新的数组 int newArmy[3][3]中? 【代码】 随堂练习 六 1.下列关于二维数组定义正确的是( ) A. int a[2,3]; B. int a(2)(3); C. int a[2][3]; D. int a{2}{3}; 答案:C 解析:C语言定义二维数组必须用方括号[行数][列数]。 随堂练习 六 2.对二维数组int a[3][4];的正确描述是( ) A. 这是一个3行4列的数组,共有7个元素 B. 数组元素a[3][4]是合法的 C. 数组元素a[0][0]的地址最小 D. 数组在内存中按列优先存储 答案:C 解析:C语言数组下标从0开始,a[0][0]是第一个元素,地址最小。 随堂练习 六 3.对于int a[2][3] = {1,2,3,4,5,6};,a[1][2]的值是( ) A. 3 B. 6 C. 0 D. 编译错误 答案:B 解析:按行初始化,a[1][2]对应第2行第3列,即第6个元素。 随堂练习 六 4.以下能正确定义并初始化二维数组的是( ) A. int a[2][ ] = {{1,2},{3,4}}; B. int a[ ][3] = {{1,2,3},{4,5}}; C. int a[2][3] = {{1,2},{3,4},{5,6}}; D. int a[ ][ ] = {{1,2,3},{4,5,6}}; 答案:B 解析:定义时可以省略第一维大小,但第二维必须指定。 随堂练习 六 5.定义int a[3][4];后,数组a最多可用的元素是( ) A. 7个 B. 12个 C. 3个 D. 4个 答案:B 解析:3行×4列=12个元素。 随堂练习 六 6.对于数组int a[2][2] = {{1}};,a[1][1]的值是( ) A. 1 B. 0 C. 随机值 D. 语法错误 答案:B 解析:只初始化了a[0][0]=1,其余元素自动补0。 随堂练习 六 7.数组int b[2][3] = {1,2,3,4,5};中,b[1][1]的值是( ) A. 2 B. 4 C. 5 D. 0 答案:C 解析:按顺序初始化,b[1][1]对应第5个元素5。 随堂练习 六 8.要引用二维数组a中第i行第j列的元素,应使用( ) A. a(i,j) B. a[i,j] C. a[i][j] D. a.i.j 答案:C 解析:C语言用a[i][j]引用二维数组元素。 随堂练习 六 9.对于int a[2][3];,不正确的元素引用是( ) A. a[0][1] B. a[1][2] C. a[2][3] D. a[1][0] 答案:C 解析:下标从0开始,最大有效下标是a[1][2]。 课堂小结 七 谢谢 EV录屏5.4.2软件录制 Lavf58.33.100 本视频由湖南一唯信息科技开发的EV录屏软件录制, www.ieway.cn EV录屏5.4.2软件录制 Lavf58.33.100 本视频由湖南一唯信息科技开发的EV录屏软件录制, www.ieway.cn $

资源预览图

第5章 第2节:二维数组的定义和使用(课件)-《编程语言基础—C语言》(高教版第5版)同步精品课堂
1
第5章 第2节:二维数组的定义和使用(课件)-《编程语言基础—C语言》(高教版第5版)同步精品课堂
2
第5章 第2节:二维数组的定义和使用(课件)-《编程语言基础—C语言》(高教版第5版)同步精品课堂
3
第5章 第2节:二维数组的定义和使用(课件)-《编程语言基础—C语言》(高教版第5版)同步精品课堂
4
第5章 第2节:二维数组的定义和使用(课件)-《编程语言基础—C语言》(高教版第5版)同步精品课堂
5
第5章 第2节:二维数组的定义和使用(课件)-《编程语言基础—C语言》(高教版第5版)同步精品课堂
6
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。