第6章 第2节:二维数组的定义与引用(课件)-《C语言程序设计》(电子工业出版社)上好课

2026-04-30
| 44页
| 74人阅读
| 1人下载
精品

内容正文:

6.2节:二维数组的定义与引用 C语言程序设计 电子工业出版社 理解二维数组的定义、引用和初始化方法,掌握其基本存储结构 能够编写程序对二维数组进行定义、赋值、访问和简单操作,解决实际问题 培养逻辑思维能力和问题解决能力,提升代码规范意识与团队协作素养 知识目标 能力目标 素养目标 01 01 01 学习目标 目录 Part 01 教学导入 Part 02 知识讲授 Part 03 师生互动 Part 04 课堂练习 Part 05 课堂小结 教学导入:生活中的“表格” 思考:数据的存储与处理 生活中的二维数据结构示例 我们如何用程序来存储和处理像这样的表格数据呢? 例如:教室的座位安排、学生的各科成绩统计等。 教学导入:一维数组的局限性 图:包含多维度信息的学生成绩表 核心思考:一维数组的“短板” 我们之前学过的一维数组,逻辑上就像是一条“线”,只能线性地存储一列或一行数据。 但面对如左图所示的二维表格数据(既有行又有列),一维数组就显得“无能为力”,无法清晰表达数据间的行列关系。 由此可见:一维数组仅适用于处理线性、单一维度的数据。为了高效处理类似表格的二维结构数据,我们需要引入新的数据结构——二维数组。 教学导入:认识二维数组 为了处理这种二维结构的数据,我们需要引入一个新的工具——二维数组。它就像一个表格或矩阵,可以方便地存储和访问行和列的数据。 二维数组 计算机存储结构 表格 行与列的组织形式 矩阵 数学中的二维结构 核心思想:将现实中的二维数据映射到计算机的存储模型中 知识讲授 二维数组的定义与引用 二维数组元素的定义与引用 二维数组的初始化和程序举例 第一部分 二维数组元素的定义与引用 知识讲授 知识讲授:二维数组的定义 定义格式: 类型标识符 数组名[常量表达式1][常量表达式2]; 二维数组逻辑结构示意(行 × 列) 常量表达式 1 (行数) 位于第一个方括号内,用于设置二维数组的行数,决定了数组第一维的大小。 常量表达式 2 (列数) 位于第二个方括号内,用于设置二维数组的列数,决定了数组第二维的大小。 知识讲授:二维数组定义示例 代码示例 int a[2][3]; 定义一个名为 a 的二维整型数组 数据类型与命名 定义了一个整型 (int)数组,变量名为a。 维度与结构 该数组包含2 行 3 列。可以将其想象为一个小型的表格结构。 元素总数计算 总共有2 × 3 = 6个元素。每个元素都是一个独立的整型变量。 💡 记忆口诀:第一个数字代表行数,第二个数字代表列数,行数乘列数等于总元素数。 知识讲授:二维数组的结构示意图 二维数组本质上是“数组的数组”,通过行标 (Row)和列标 (Column)可精确定位任意元素。 知识讲授:二维数组元素的引用 引用格式 数组名[行下标][列下标](例如:a[i][j]) 核心说明 下标规则:下标可以是整型常量或表达式,取值需在数组定义的范围内。 使用方式:数组元素可出现在表达式中参与运算,也可以被赋值。 知识讲授:二维数组元素的引用 元素引用语法 a[0][0] // 表示数组a中第0行第0列的元素 赋值操作示例 a[1][2] = 10; // 将数值10赋值给第1行第2列 核心注意事项 1. 数组下标从0开始计数,而非从 1 开始。 2. 引用时下标取值绝对不能超过数组定义的范围,否则会导致数组越界错误。 知识讲授:二维数组引用示例程序 程序文本【6.5】通过键盘输入数据,给2行3列的二维数组赋初值 #include "stdio.h" main() { int i, j, a[2][3]; for(i=0; i<2; i++) for(j=0; j<3; j++) scanf("%d", &a[i][j]); for(i=0; i<2; i++) for(j=0; j<3; j++) printf(" a[%d][%d]=%d",i,j,a[i][j]); } 关键技术点 使用嵌套 for 循环遍历数组;外层循环控制行下标,内层循环控制列下标,实现对二维数组元素的逐个访问。 知识讲授:二维数组引用示例程序 背诵记忆 二维数组定义 格式:类型标识符 数组名[行数][列数]; 二维数组引用 格式:数组名[行下标][列下标]; 关键要点 • 下标从 0 开始 • 行数和列数必须是常量表达式 • 引用时下标不能越界 课堂问答 问题 Q2 如何引用二维数组 a 中第 2 行第 3 列的元素? 答案 A2 正确的引用方式是:a[1][2] 💡 知识点提示:在大多数编程语言中,数组的下标通常是从 0 开始计数的。 课堂问答 QUESTION 01 定义int a[3][4];表示数组 a 有多少行多少列,共多少个元素? ANSWER 01 数组 a 是一个二维数组,包含3 行 4 列,总共有12个元素。 知识点回顾:二维数组的行和列索引通常从 0 开始,但定义时的数字代表维度大小。 例题分析 程序回顾与输入 #include "stdio.h" main() { int a[2][3] = {{1,2,3}, {4,5,6}}; int i, j, row_sum; for(i=0; i<2; i++) { row_sum = 0; for(j=0; j<3; j++) row_sum += a[i][j]; printf("第%d行的元素和为:%d ", i+1, row_sum); } } 输出结果展示 第1行的元素和为:6 第2行的元素和为:15 核心逻辑分析: 1. 定义与初始化:定义并初始化一个2行3列的二维数组。 2. 外层循环控制行:使用 for(i=0; i<2; i++) 遍历每一行。 3. 行和变量初始化:在每行开始时将 row_sum 重置为0。 4. 内层循环控制列:使用 for(j=0; j<3; j++) 遍历每一列。 5. 元素累加:将当前元素 a[i][j] 累加到 row_sum 中。 6. 输出结果:内层循环结束后,输出当前行的元素和。 例题分析 课堂练习 练习:二维数组求和 编写程序,计算一个 3x3 二维数组所有元素的和。 请先定义并初始化一个数组,然后通过循环遍历并累加所有元素的值。 代码编写要求 请编写完整的 C 语言代码,包含: 数组的定义与初始化 双重循环结构 (嵌套 for 循环) 最终结果的输出打印 💡提示:注意数组下标从 0 开始。外层循环控制行,内层循环控制列。可以使用一个变量 sum 来存储累加的结果。 课堂练习 程序文本 #include "stdio.h" main() { int a[3][3]={{1,2,3},{4,5,6},{7,8,9}}; int i,j,sum=0; for(i=0;i<3;i++) for(j=0;j<3;j++) sum += a[i][j]; printf("数组所有元素的和为:%d ", sum); } 课堂练习 第二部分 知识讲授 二维数组的初始化和程序举例 知识讲授 知识讲授:二维数组的初始化 方式一:分行初始化 格式:类型标识符 数组名[行][列] = {{值1,值2,...}, {值1,值2,...}, ...}; 示例:int a[2][3] = {{1,2,3}, {4,5,6}}; 说明:每一对内层大括号对应数组的一行。这种方式将数据按行分组,逻辑清晰,直观易读,非常适合初始化结构规整的数据。 知识讲授:二维数组的初始化 方式二:按顺序初始化 格式: 类型标识符 数组名[行][列] = {值1,值2,值3,...}; 无需分行,所有数据置于一个大括号内 示例: int a[2][3] = {1, 2, 3, 4, 5, 6}; 系统自动按行优先顺序为数组元素赋值 将所有数据按行的顺序写在一个大括号内,编译系统会按照数组元素在内存中的排列顺序,依次为每个元素赋值。 核心要点:顺序初始化不强调行结构,数据按一维线性顺序填充二维数组空间。 知识讲授:二维数组的初始化 方式三:部分元素初始化 int a[2][3] = {{1}, {4}}; 只对部分元素赋初值,其余未赋值的元素自动为0。 例如上述代码中,仅对第一行第一个元素和第二行第一个元素赋值,其余元素默认补0。 内存赋值示意图: 1 0 0 4 0 0 方式四:省略行长度 int a[][3] = {1,2,3,4,5,6}; 如果对全部元素赋初值,定义时第一维的长度(行数)可以省略,但第二维的长度(列数)必须指定。系统会根据总元素个数和列数自动计算出行数。 知识讲授:二维数组程序举例(一) 程序文本【6.6】:有一个 3×4 的矩阵,求出所有元素中的最大值及它所在的行和列。 逻辑分析步骤 初始化:将数组首个元素 a[0][0] 赋值给 max,作为初始最大值。 遍历:通过嵌套循环遍历数组中的每一个元素进行比较。 更新:若当前元素更大,则更新 max,并记录行号 i 和列号 j。 结果:循环结束后,max 存储最大值,r 和 c 存储其位置。 核心思路总结 采用“打擂台”法,假设第一个元素为擂主,后续元素逐一挑战,胜者成为新擂主并记录位置。 知识讲授:二维数组程序举例(一) 程序文本【6.6】有一个3×4的矩阵,求出所有元素中的最大值及它所在的行和列 #include<stdio.h> main() { int i,j,r=0,c=0,max; int a[3][4]={{1,3,7,9},{2,4,6,8},{-1,10,-5,-9}}; max = a[0][0]; for(i=0; i<3; i++) for(j=0; j<4; j++) if(a[i][j] > max) { max = a[i][j]; r = i; c = j; } printf("max=%d,r=%d,c=%d ",max,r,c); } 知识讲授:二维数组程序举例(一) 知识讲授:二维数组程序举例(二) 程序功能:将一个二维数组中行和列的元素互换(矩阵转置),并存到另一个二维数组中。 图 1:矩阵转置数学原理示意 核心逻辑 数组定义:定义原数组a和目标数组b,行列数互换。 核心赋值:遍历数组,执行b[j][i] = a[i][j]实现行列元素映射。 结果输出:分别打印原数组与转置后数组进行对比。 关键点:转置的本质是“行列下标互换”。程序通过双层循环遍历,将原数组的行索引与列索引交换后赋值给新数组,从而完成矩阵的转置操作。 知识讲授:二维数组程序举例(二) 程序文本【6.7】将一个二维数组中行和列的元素互换,并存到另一个二维数组 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++){ for(j=0;j<=2;j++){ printf("%4d",a[i][j]); b[j][i] = a[i][j]; }// 核心:行列下标互换赋值 printf(" "); } printf("array b: "); for(i=0;i<=2;i++) { for(j=0;j<=1;j++) printf("%4d",b[i][j]); printf(" "); } } 知识讲授:二维数组程序举例(二) 背诵记忆 二维数组初始化的四种方式 1. 分行初始化:int a[2][3] = {{1,2,3}, {4,5,6}}; 2. 按顺序初始化:int a[2][3] = {1,2,3,4,5,6}; 3. 部分元素初始化:int a[2][3] = {{1}, {4}}; 4. 省略行长度:int a[][3] = {1,2,3,4,5,6}; 程序举例核心逻辑 求最大值 遍历数组所有元素进行比较,同时记录当前最大值及其所在的行列位置。 矩阵转置 核心公式:b[j][i] = a[i][j],将原数组的行和列进行互换。 记忆要点:掌握四种初始化语法是基础,理解遍历逻辑是解决数组问题的关键。 课堂问答 Q: 如何对一个 3x3 的二维数组进行全部元素的初始化? A: 推荐两种方式: 方式一(按顺序初始化): int a[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; 方式二(按行初始化,可读性更好): int a[3][3] = {{1,2,3}, {4,5,6}, {7,8,9}}; 课堂问答 Q2 矩阵转置的核心操作是什么? A2 将原数组的元素a[i][j]赋值给目标数组的b[j][i]。 💡 核心逻辑:通过双重循环遍历,实现行列索引的互换 (Row ↔ Column) 课堂练习 练习:二维数组极值查找 请初始化一个 4x4 的二维数组,并编写程序逻辑,遍历数组找出其中的最小值。 核心要求 请编写完整的 C 语言代码,包含头文件、主函数及必要的注释。 提示:回顾上节课求最大值的算法逻辑,使用双重循环嵌套遍历二维数组,注意数组下标越界问题。 课堂练习 程序文本 #include"stdio.h" main() { int a[4][4]={ {1,2,3,4},{5,6,7,8}, {9,10,11,12},{13,14,15,16}}; int i,j,min=a[0][0]; for(i=0;i<4;i++) for(j=0;j<4;j++) if(a[i][j] < min) min = a[i][j]; printf("最小值为:%d ", min); } 课堂练习 课堂小结 课堂小结 定义 类型 数组名[行][列]; 详细说明: 定义一个二维数组,指定其数据类型、名称、行数和列数。这是创建二维数组的第一步,决定了数组的存储结构和大小。 引用 数组名[行下标][列下标]; 详细说明: 通过行下标和列下标访问数组中的特定元素。下标从0开始,用于精确读取或修改数组中的数据。 初始化 分行、顺序、部分、省略行长度 详细说明: 在定义数组时为其赋初值的四种方式。合理的初始化可以提高程序效率,确保数据的正确性。 应用 求极值、矩阵转置、成绩统计等 详细说明: 利用二维数组解决实际问题,如处理表格数据、进行矩阵运算、实现游戏地图等,是二维数组的核心价值所在。 课后任务 对角线求和 编写程序,计算一个 4x4 二维数组对角线元素的和。请分别实现主对角线与副对角线的和计算,并注意数组索引的边界条件。 成绩管理系统 存储3个学生的语、数、英三门课程成绩。编程实现计算每个学生的个人平均分,并输出班级的总分平均值。 温馨提示 作业请于下次课前提交至在线判题系统。编码时请注意规范命名,特别要注意处理数组下标越界问题,确保程序的健壮性。 谢谢观看 THANKS $

资源预览图

第6章 第2节:二维数组的定义与引用(课件)-《C语言程序设计》(电子工业出版社)上好课
1
第6章 第2节:二维数组的定义与引用(课件)-《C语言程序设计》(电子工业出版社)上好课
2
第6章 第2节:二维数组的定义与引用(课件)-《C语言程序设计》(电子工业出版社)上好课
3
第6章 第2节:二维数组的定义与引用(课件)-《C语言程序设计》(电子工业出版社)上好课
4
第6章 第2节:二维数组的定义与引用(课件)-《C语言程序设计》(电子工业出版社)上好课
5
第6章 第2节:二维数组的定义与引用(课件)-《C语言程序设计》(电子工业出版社)上好课
6
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。