专题六 数组(讲义)-《编程语言基础—C语言》(高教版第五版)高考备考讲练测(山东省)

2024-07-29
| 10页
| 184人阅读
| 5人下载
精品

资源信息

学段 中职
学科 职教专业课
课程 C语言程序设计
教材版本 C语言程序设计高教版(第五版)全一册
年级 高一
章节 5.1 一维数组的定义和使用,5.2 二维数组的定义和使用,5.3 字符数组的定义和使用
类型 教案-讲义
知识点 数组
使用场景 中职复习-二轮专题
学年 2024-2025
地区(省份) 山东省
地区(市) -
地区(区县) -
文件格式 DOCX
文件大小 100 KB
发布时间 2024-07-29
更新时间 2024-07-29
作者 xkw__007
品牌系列 上好课·一轮讲练测
审核时间 2024-07-29
下载链接 https://m.zxxk.com/soft/46571531.html
价格 3.00储值(1储值=1元)
来源 学科网

内容正文:

专题六 数组(讲义) ---《编程语言基础—C语言》专题复习讲练测 [考纲要求] 1:理解一维数组的定义及初始化。 2:掌握一维数组元素的引用。 3:理解二维数组的定义及初始化。 4:掌握二维数组元素的引用。 5:掌握字符数组的定义及引用。 [课时安排] 4课时 [知识梳理] 一:一维数组 · 定义 C语言中的一维数组是一种基本的数据结构,它允许存储相同类型的多个元素。 在C语言中,一维数组的定义格式如下: 1. type arrayName[arraySize]; 其中type是数据类型,arrayName是数组的名称,数组名的命名遵循与变量名相同的规则。arraySize是数组的大小,即数组可以存储的元素数量。 · 初始化数组 静态初始化:在定义数组时直接赋值。 1. int numbers[] = {10, 20, 30, 40, 50}; 动态初始化:在定义数组后,通过循环或单个赋值来初始化。 1. int numbers[5]; 2. for(int i = 0; i < 5; i++) { 3.     numbers[i] = i * 10; 4. } 当一维数组只给部分元素赋值时,未显式赋值的元素将被初始化为该类型的默认值。对于基本数据类型(如int、char、float等),这个默认值通常是0。 1. int arr[5] = {10, 20, 30}; // 剩余的元素将被初始化为0 使用索引来访问数组的元素,索引从0开始。 1. int firstElement = numbers[0]; // 获取第一个元素 初始化一个数组,使得所有元素都具有相同的值。 1. int arr[5] = {0}; // 所有元素初始化为0 2. // 或者 3. int arr[5] = {1, 1, 1, 1, 1}; // 所有元素初始化为1 对全部数组元素赋初值时,由于数据的个数已经确定,因此可以不指定数组的长度。 1. int arr[] = {1, 2, 3, 4, 5}; // 长度为5的数组,每个元素分别初始化 数组在内存中是连续存储的,这意味着数组的元素在内存中是紧密排列的。数组有上限和下限,访问数组时不能超出这个范围。尝试访问数组之外的元素将导致未定义行为。 · 注意事项: ① 数组大小必须是常量:在C语言中,数组的大小必须是常量和符号常量。 ② 数组不要越界:访问数组元素时,索引值必须在0到数组大小减一的范围内。 ③ 初始化:没有初始化数组,那么数组的元素将包含垃圾值。 ④ 使用正确的数据类型:数组可以存储任何类型的数据,确保数组的数据类型与存储的元素类型一致。 二:二维数组 C语言中的二维数组可以看作是数组的数组,即每个元素本身也是一个数组。这使得二维数组非常适合于表示矩阵或表格数据。 二维数组的定义格式如下: 1. type arrayName[rowSize][columnSize]; 其中type是数据类型,arrayName是数组的名称,rowSize是行数,columnSize是列数。 二维数组的元素通过两个索引访问,第一个索引表示行,第二个索引表示列。其中,索引可以是整数表达式。在使用数组元素时,应注意下标值应在已定义的数组大小的范围内。 1. int element = arr[1][0]; // 访问第二行第一列的元素,值为3 静态初始化: 在声明时直接初始化,适用于已知所有元素值的情况。 1. int arr[3][4] = { 2.     {1, 2, 3, 4}, 3.     {5, 6, 7, 8}, 4.     {9, 10, 11, 12} 5. }; arr 是一个3行4列的二维数组,每个元素都被显式初始化。 也可以将所有的数据写在一个花括弧内,按数组排序的顺序对各元素赋初值。 1. int arr[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; 二维数组的列数已知,但行数未知时,可以只初始化数组的列。例如,如果数组的列数是4: 1. int arr[3][4] = { 2.     {1, 2, 3, 4}, // 第一行完全初始化 3.     {5, 6}         // 第二行只初始化了前两个元素 4. }; arr[0] 完全初始化,arr[1][2] 和 arr[1][3] 将自动初始化为0。arr[2] 将完全初始化为0,因为它没有任何显式的初始化值。 二维数组的行数,但列数未知时,可以初始化数组的行,但只给部分列赋值: 1. int arr[][4] = { 2.     {1, 2}, // 第一行只初始化了前两个元素 3.     {3, 4, 5, 6} // 第二行完全初始化 4. }; 如果对全部的元素赋初值,则定义数组时对第一维的长度可以省略,第二维的长度不能省略。 三:字符数组 C语言中的字符数组是一种特殊的数组,其元素类型为char。字符数组在C语言中有着广泛的应用,特别是在处理字符串时。 字符数组的基本语法如下: 1. char arr[10]; //声明一个可以存储10个字符的数组 字符数组的元素引用: 字符数组的每个元素可以通过其索引来引用。索引从0开始。例如,对于以下声明的字符数组: 1. char arr[] = "Hello, World!"; 引用第一个字符('H')如下: 1. char firstChar = arr[0]; // 将第一个字符赋值给变量firstChar 可以通过索引来修改数组中的元素: 1. arr[0] = 'h'; // 将第一个字符从'H'改为小写的'h' 字符数组的输入和输出: 输入字符数组 · 使用 scanf 函数 scanf 可以用来读取格式化的输入,但不适合直接读取字符串,因为它会在遇到空格、制表符或换行符时停止读取。 1. char arr[100]; 2. printf("Enter a string: "); 3. scanf("%99s", arr); // %99s限制读取的最大字符数,防止溢出 · gets函数 gets函数用于从标准输入(通常是键盘)读取一行文本,直到遇到换行符 。它将读取的字符串存储在指定的字符数组中,并且不包括换行符。 1. char buffer[100]; 2. gets(buffer); 输出字符数组 · 使用 printf 函数:使用%s格式化输出字符串。 1. char arr[] = "Hello, World!"; 2. printf("The string is: %s ", arr); · 使用 puts 函数:puts 会输出字符串,并且在末尾自动添加换行符。 1. char arr[] = "Hello, World!"; 2. puts(arr); // 输出字符串并换行 · 使用循环逐个字符输出:如果你需要对字符串进行特殊处理,比如转换为大写或小写,可以逐个字符输出。 1. char arr[] = "Hello, World!"; 2. for (int i = 0; arr[i] != '\0'; i++) { 3.     putchar(arr[i]); 4. } 字符串处理函数: C语言中的字符串处理函数提供了丰富的功能,用于执行各种字符串操作,如复制、连接、比较、搜索等。 · 复制字符串 - strcpy 1. #include <stdio.h> 2. #include <string.h> 3. 4. int main() { 5.     char src[] = "Hello World"; 6.     char dest[12]; 7. 8.     strcpy(dest, src); // 正确使用 9.     printf("Copied string: %s ", dest); 10. 11.     return 0; 12. } · 连接字符串 - strcat 1. int main() { 2.     char str1[] = "Hello, "; 3.     char str2[] = "World!"; 4.     char dest[20]; 5. 6.     strcpy(dest, str1); // 首先复制str1到dest 7.     strcat(dest, str2); // 然后将str2连接到dest的末尾 8.     printf("Concatenated string: %s ", dest); 9. 10.     return 0; 11. } · 获取字符串长度 - strlen 1. int main() { 2.     char str[] = "Hello World"; 3.     size_t len = strlen(str); 4.     printf("Length of string: %zu ", len); 5. 6.     return 0; 7. } strlen返回字符串的长度,不包括结尾的空字符'\0'。 · 比较字符串 - strcmp 1. int main() { 2.     char str1[] = "Apple"; 3.     char str2[] = "apple"; 4. 5.     int result = strcmp(str1, str2); // 默认是区分大小写的 6.     printf("strcmp result: %d ", result); 7. 8.     return 0; 9. } strcmp返回0如果两个字符串相等,负数如果str1小于str2,正数如果str1大于str2。 [真题练讲] 1.(2019职教高考题)以下程序运行后,键盘输入4回车,结果是( ) #include <stdio.h> int main() { int a[] = {1, 3, 5, 7, 2, 4, 6, 8}, i, start; scanf("%d", &start); for (i = 0; i < 3; i++) printf("%d", a[(start + i) % 3]); return 0; } A.131 B.264 C.351 D.486 【答案】C 【解析】start变量的值将被设置为4。接下来,循环将执行三次: 第一次循环:i = 0,(start + i) % 3的结果是4 % 3,即1。数组a中索引为1的元素是3。 第二次循环:i = 1,(start + i) % 3的结果是(4 + 1) % 3,即5。数组a中索引为5的元素是7。 第三次循环:i = 2,(start + i) % 3的结果是(4 + 2) % 3,即0。数组a中索引为0的元素是1。 因此,程序将依次打印出3、7和1。 2.(2020职教高考题)执行以下语句后,a[2]的值为( ) int a[10] = {12, 23, 5, 20, 3, 6, 18}; a[2] += a[3] + a[1] + a[4] * a[7] - a[5]; A.37 B.42 C.96 D.101 【答案】B 【解析】a[2] = a[2]+a[3]+a[1]+a[4]*a[7]-a[5]=5+20+23+3*0-6=42 3.(2020年职教高考题)下列定义二维数组的语句中,正确的是( ) A.int N = 5,f[N][N]; B.float 2ab[3][4] C.int m[][2] = {1,2,3,4}; D.int a[2][]={{1,2},{3,4}}; 【答案】C 【解析】变量不能用作定义数组的大小;数组名的命名规则和标识符的命名规则相同,即开头不能是数字。二维数组可以省略一维数组的长度,但不能省略二维数组的长度。 4.(2019年职教高考题)以下程序段的运行结果是( ) #include <stdio.h> int main() { int a[][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 14, 15, 16}}; int i = 0, j = 0, s = 0; while (i++ < 4) { if (i == 2 || i == 4) continue; j = 0; do { s += a[i][j]; j++; } while (j < 4); } printf("%d", s); } A.100 B.84 C.68 D.36 【答案】B 【解析】当i等于1时,累加的元素是a[1][0]到a[1][3],即5, 6, 7, 8。 当i等于3时,累加的元素是a[3][0]到a[3][3],即13, 14, 15, 16。 所以,程序的输出将是s=(5+6+7+8)+(13+14+15+16)=26+58=84。 5.(2020年职教高考题)请编写程序,将11位评委给出的选手成绩存至一维数组,计算并输出选手的最终成绩(保留两位小数)。选手的最终成绩为去掉一个最高分和一个最低分的平均成绩。 【答案】#include <stdio.h> int main() { float scores[11]; // 存储11位评委给出的成绩 float sum = 0.0f; // 存储总分 float minScore = 100.0f; // 初始最低分为一个较大的数 float maxScore = 0.0f; // 初始最高分为0 int i; // 输入11位评委的成绩 printf("请输入11位评委的成绩: "); for (i = 0; i < 11; i++) { scanf("%f", &scores[i]); if (scores[i] < minScore) minScore = scores[i]; // 更新最低分 if (scores[i] > maxScore) maxScore = scores[i]; // 更新最高分 } // 去掉最高分和最低分后的总分 for (i = 0; i < 11; i++) { sum += (scores[i] == minScore || scores[i] == maxScore) ? 0 : scores[i]; } // 计算平均分 float average = (sum - minScore - maxScore) / 9; // 输出最终成绩,保留两位小数 printf("选手的最终成绩为:%.2f ", average); return 0; } [限时练习] 1.关于数组描述错误的是( ) A.数组的下标是从0开始的 B.数组在内存中是连续存放的 C.数组名表示首元素的地址 D.随着数组下标的由小到大,地址由高到低 【答案】D 【解析】C语言规定,数组的下标是从0开始的。数组的空间是一段连续的内存空间。数组名表示首元素的地址。 2.以下对一维数组a进行正确初始化错误的是( ) A.int arr[10] = {1,2,3,4,5,6}; B.int arr[] = {1,2,3,4,5,6}; C.int arr[] = (1,2,3,4,5,6); D.int arr[10] = {0}; 【答案】C 【解析】A选项:数组arr被显式地声明为有10个元素,并且前6个元素被初始化为1到6,剩余的元素将默认初始化为0。B选项:数组arr的大小可以根据初始化列表中的元素数量来自动确定,这里它将有6个元素。C选项:在C或C++中,数组初始化必须使用花括号{}而不是圆括号()。D选项:数组arr被显式地声明为有10个元素,并且所有元素都被初始化为0。 3.若定义int a[2][3]={1,2,3,4,5,6};则值为4的数组元素是( ) A.a[0][0] B.a[1][0] C.a[1][1] D.a[2][1] 【答案】B 【解析】二维数组的初始化是按行进行的。给定的初始化int a[2][3] = {1, 2, 3, 4, 5, 6};意味着: 第一行(索引0)包含元素a[0][0]到a[0][2],分别初始化为1, 2, 3。 第二行(索引1)包含元素a[1][0]到a[1][2],分别初始化为4, 5, 6。 4.以下对二维数组a进行正确初始化的是( ) A.int a[2][3]={ {1,2},{3,4},{5,6} }; B.int a[ ][3]={1,2,3,4,5,6 }; C.int a[2][ ]={1,2,3,4,5,6}; D.int a[2][ ]={ { 1,2},{3,4}}; 【答案】B 【解析】A选项:超过二维数组a所定义的行数。C、D选项:二维数组当中省略第二维的大小,但必须指定第一维的大小。 5.该程序的输出结果为___________。 #include <stdio.h> int main() { char str[] = "hello bit"; printf("%d,%d ", sizeof(str), strlen(str)); return 0; } 【答案】10,9 【归纳小结】 C语言中的数组是一种基本数据结构,用于存储固定数量的相同类型的元素。 声明:使用类型和数组名来声明,例如 int arr[10]; 声明了一个可以存储10个整数的数组。 初始化:静态初始化:int arr[] = {1, 2, 3}; 自动填充剩余元素为0。动态初始化:在声明后使用循环或赋值语句填充数组。 访问:通过索引访问数组元素,索引从0开始,例如 arr[0] 访问第一个元素。 大小:数组的大小在声明时确定,并且在运行时不能改变。 多维数组:可以声明多维数组,例如 int matrix[3][4]; 表示3行4列的二维数组。 指针与数组:数组名可以作为指向数组首元素的指针使用,例如 int *p = arr;。 字符串:在C语言中,字符串通常以字符数组的形式存在,并以空字符('\0')结尾。 数组越界:访问数组的非法索引(超出声明的大小)可能导致未定义行为。 学科网(北京)股份有限公司 $$

资源预览图

专题六 数组(讲义)-《编程语言基础—C语言》(高教版第五版)高考备考讲练测(山东省)
1
专题六 数组(讲义)-《编程语言基础—C语言》(高教版第五版)高考备考讲练测(山东省)
2
专题六 数组(讲义)-《编程语言基础—C语言》(高教版第五版)高考备考讲练测(山东省)
3
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。