第四讲 数组的定义及引用 教学课件-山东省春季高考《编程语言基础—C语言》考纲技能通

2025-07-01
| 26页
| 172人阅读
| 4人下载
精品

内容正文:

目录/CONTENTS 1. 一维数组 2. 二维数组 3. 一维和二维数组对比 1 考纲分析与历年考试试题分析 一维数组、二维数组的定义、初始化和数组元素引用 找出数组[7, 2, 15, 9, 3, 11]的最大值和最小值及其索引。 #include <stdio.h> int main() { int arr[] = {7, 2, 15, 9, 3, 11}; int n = sizeof(arr) / sizeof(arr[0]); int max_val = arr[0], min_val = arr[0]; int max_idx = 0, min_idx = 0; for (int i = 1; i < n; i++) { if (arr[i] > max_val) { max_val = arr[i]; max_idx = i; } if (arr[i] < min_val) { min_val = arr[i]; min_idx = i; } } printf("最大值:%d,索引:%d ", max_val, max_idx); printf("最小值:%d,索引:%d ", min_val, min_idx); return 0; } 2 一维数组 山东省计算机类高考技能教学 3 logo 概念定义 一维数组是由相同数据类型的元素组成的线性序列,通过一个下标(索引)访问元素,下标从 0 开始。 语法格式: 数据类型 数组名[元素个数]; 例: int scores[5];         // 定义5个整数的数组,未初始化时元素值为随机数 float prices[10];      // 定义10个浮点数的数组 char name[20];         // 定义20个字符的数组(常用于存储字符串) 关键说明: 数据类型:可以是int、float、char等任意 C 语言合法类型。 数组名:遵循变量命名规则(字母、数字、下划线,不能以数字开头)。 元素个数:必须是常量(或常量表达式),不能是变量,且个数≥1。 初始化方法 方式 1:完全初始化(指定所有元素值) int arr[3] = {10, 20, 30};  // 定义3个元素,依次为10、20、30 特点:数组长度由{}内的值个数决定,与[]中的数字必须一致,否则报错。 方式 2:部分初始化(只赋前 n 个元素值) int nums[5] = {1, 2};  // 前2个元素为1、2,后3个自动初始化为0 float values[4] = {3.14};  // 第一个元素为3.14,后三个为0.0 特点:未赋值的元素自动初始化为 0(数值型) 方式 3:省略长度初始化(编译器自动计算长度) int data[] = {5, 6, 7, 8};  // 数组长度为4 注意:省略长度时必须给出初始化值,否则无法确定数组大小。 方式 4:动态初始化(通过循环赋值) int arr[5]; for (int i = 0; i < 5; i++) {     arr[i] = i * 2;  // 数组元素为0, 2, 4, 6, 8 } 适用场景:当元素值需通过计算生成时(如等差数列)。 初始化注意事项: 数组长度与初始化值数量 若[]中指定长度,{}内的值个数不能超过长度,否则编译错误。 int arr[3] = {1, 2, 3, 4};  // 错误:值个数(4)超过长度(3) 核心特点: 所有元素类型相同,占用内存大小一致; 元素在内存中连续存储,可通过下标快速访问。 2.内存存储方式(以 int 数组为例) 假设定义 int arr[3] = {10, 20, 30};, 内存存储如图: 关键说明 连续存储:每个 int 元素占 4 字节,相邻元素地址差 4 字节(地址 = 首地址 + 下标 × 元素字节数)。 下标计算:元素arr[i]的内存地址 = 数组首地址 + i × 4。 逻辑与物理:一维数组在逻辑上是 “线性排列”,物理上严格连续存储,符合数组 “随机访问” 的特性。 输出(假设首地址为 0x7fff): arr[0]地址:0x7fff,值:10 arr[1]地址:0x7fff+4,值:20 arr[2]地址:0x7fff+8,值:30 一维数组元素引用 语法:数组名[下标] 二维数组 山东省计算机类高考技能教学 12 二维数组:逻辑上的 “矩阵” 结构 概念定义 二维数组可视为 “数组的数组”,通过两个下标(行和列)访问元素,本质上仍是线性存储结构。 关键说明: 行数和列数:均为常量(或常量表达式),例如int matrix[2][3]表示 2 行 3 列的数组。 本质:二维数组是 “数组的数组”,如matrix[2][3]可视为包含 2 个一维数组,每个一维数组有 3 个元素。 初始化方法: 方式 1:按行完全初始化(用嵌套花括号) int arr[2][3] = {{1, 2, 3}, {4, 5, 6}};  /* 等价于: [0][0]=1, arr[0][1]=2, arr[0][2]=3  [1][0]=4, arr[1][1]=5, arr[1][2]=6  */ 特点:每一行的元素用{}括起来,清晰表示行与列的关系。 方式 2:按行部分初始化 int arr[2][3] = {{1}, {4, 5}};  /* 初始化结果: [0][0]=1, arr[0][1]=0, arr[0][2]=0  [1][0]=4, arr[1][1]=5, arr[1][2]=0  */ 规则:未赋值的元素自动补 0,每行内未赋值的元素也补 0。 方式 3:省略行数初始化(必须保留列数) int arr[][3] = {{1, 2, 3}, {4, 5, 6}};  // 行数由初始化的行数决定(2行) 注意:必须保留列数[3],行数由{}内的行数决定。 不能同时省略行数和列数,如int arr[][]是错误的。 方式 4:不按行初始化(按线性顺序赋值) int arr[2][3] = {1, 2, 3, 4, 5, 6};  // 与按行初始化效果相同 /* 赋值顺序: [0][0]=1, arr[0][1]=2, arr[0][2]=3  [1][0]=4, arr[1][1]=5, arr[1][2]=6  */ 适用场景:当二维数组逻辑上接近一维时(如矩阵转一维),但可读性较差,建议优先按行初始化。 方式 5:动态初始化(通过双重循环赋值) int matrix[3][4]; for (int i = 0; i < 3; i++) {     for (int j = 0; j < 4; j++) {         matrix[i][j] = i * 4 + j;  // 生成0-11的序列     } } 应用场景:生成有规律的矩阵(如单位矩阵、等差数列矩阵)。 初始化注意事项 行列数与初始化值数量:按行初始化时,每行的元素个数不能超过列数,否则报错。 int arr[2][3] = {{1, 2, 3, 4}, {5, 6}};  // 错误:第一行元素个数(4)超过列数(3) 省略行数的限制:必须通过初始化值的行数确定数组行数,且列数必须明确指定。 int arr[][3] = {{1}, {2}};  // 正确:行数为2,列数为3  int arr[][] = {{1,2}, {3,4}};  // 错误:未指定列数 逻辑理解: 二维数组常被用于表示矩阵、表格等二维结构,如: matrix[0][0]  matrix[0][1]  matrix[0][2]  matrix[1][0]  matrix[1][1]  matrix[1][2] 内存存储方式(行优先原则) 以int matrix[2][3] = {{1, 2, 3}, {4, 5, 6}}为例,内存存储如下: 关键说明 行优先(Row-major Order):C 语言中二维数组按行存储,先存第一行所有元素,再存第二行,依此类推。 地址计算:元素matrix[i][j]的地址 = 首地址 + (i× 列数 + j) × 元素字节数。 例:matrix[1][1]的地址 = 2000 + (1×3 + 1)×4 = 2016。 本质线性:二维数组在内存中仍是一维连续空间,“二维” 是通过下标计算逻辑实现的抽象。 输出(部分示例,假设首地址为 0x2000): matrix[0][0]地址:0x2000,值:1  matrix[0][1]地址:0x2004,值:2  matrix[1][0]地址:0x2012,值:4  // 注意:第一行存完才存第二行 二维数组元素引用 语法:数组名[行下标][列下标] 示例: int matrix[2][3] = {{1,2,3}, {4,5,6}}; printf("%d ", matrix[0][1]);  // 输出第1行第2列元素:2 matrix[1][2] = 60;             // 修改第2行第3列元素为60 一维、二维数组对比 山东省计算机类高考技能教学 23 一维数组与二维数组的对比: 像一排按顺序编号的邮箱,每个邮箱大小相同,通过编号(下标)直接找到对应邮箱。 一维数组 像一栋两层的公寓楼,每层有 3 个房间,用 “楼层号 + 房间号”(行下标 + 列下标)定位房间,但整栋楼在地面上是线性排列的(行优先存储)。 二维数组 谢 谢 观 看 26 $$

资源预览图

第四讲 数组的定义及引用 教学课件-山东省春季高考《编程语言基础—C语言》考纲技能通
1
第四讲 数组的定义及引用 教学课件-山东省春季高考《编程语言基础—C语言》考纲技能通
2
第四讲 数组的定义及引用 教学课件-山东省春季高考《编程语言基础—C语言》考纲技能通
3
第四讲 数组的定义及引用 教学课件-山东省春季高考《编程语言基础—C语言》考纲技能通
4
第四讲 数组的定义及引用 教学课件-山东省春季高考《编程语言基础—C语言》考纲技能通
5
第四讲 数组的定义及引用 教学课件-山东省春季高考《编程语言基础—C语言》考纲技能通
6
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。