第18练 5.4 数组的应用举例 《编程语言基础——C语言》 (第5版) 一课一练 (湖南)

2026-06-25
| 2份
| 11页
| 3人阅读
| 0人下载

资源信息

学段 中职
学科 职教专业课
课程 C语言程序设计
教材版本 -
年级 -
章节 -
类型 作业-同步练
知识点 数组
使用场景 同步教学
学年 2026-2027
地区(省份) 湖南省
地区(市) -
地区(区县) -
文件格式 ZIP
文件大小 108 KB
发布时间 2026-06-25
更新时间 2026-06-25
作者 xkw_068401954
品牌系列 上好课·一课一练
审核时间 2026-06-25
下载链接 https://m.zxxk.com/soft/58487502.html
价格 1.00储值(1储值=1元)
来源 学科网

内容正文:

【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。 本卷是《编程语言基础——C语言》(第5版)《一课一练》第18练,内容是5.4 数组的应用举例。 《编程语言基础——C语言》(第5版)一课一练 第18练 5.4 数组的应用举例 一、单选题 1. 在有序数组中插入一个新元素并保持有序,正确的做法是( ) A. 从后向前找到插入位置,将大于新元素的元素依次后移,再插入 B. 直接将新元素放在数组末尾 C. 将数组所有元素前移一位,再插入 D. 删除最后一个元素后插入 2. 在例5-6有序插入程序中,while循环条件是 i>=0 && a[i]>x,循环体内执行 a[i+1]=a[i]; i--;。当找到插入位置后,新元素应放在( ) A. a[n]处 B. a[i+1]处 C. a[0]处 D. a[i]处 3. 字符串逆序/转置的两种方法中,关于方法二(就地转置),正确的描述是( ) A. 不使用额外数组,通过对称位置交换实现,交换 s[i] 与 s[j](其中 i 从首端递增,j 从末端递减) B. 需要借助另一个数组才能完成 C. 从数组两端向中间,将字符全部前移 D. 使用strcpy函数直接复制即可 4. 有一个5行3列的二维数组scores存储学生成绩,要求第i个学生的平均成绩,正确的计算方式是( ) A. 对scores[i][j]的所有j求和后除以5 B. 对scores[i][0]、scores[i][1]、scores[i][2]求和后除以3 C. 对scores[0][i]到scores[4][i]求和后再运算 D. 对scores[j][i]的所有j求和后除以3 5. 有以下程序段,其功能是输出低于平均分的成绩个数: float a[5]={60,70,80,90,100}, sum=0, ave; int i, count=0; for(i=0;i<5;i++) sum+=a[i]; ave=sum/5; for(i=0;i<5;i++) if(______) count++; printf("%d", count); 横线处应填入( ) A. a[i] >= ave B. a[i] > ave C. a[i] == ave D. a[i] < ave 6. 在5x3的学生成绩二维数组中,求第j门课程的平均成绩,需要( ) A. 对一行中的5个元素求和后除以3 B. 对一列中的3个元素求和后除以3 C. 对一列中的5个元素求和后除以5 D. 对所有15个元素求和后除以5 7. 在有序数组插入算法中,元素后移的顺序为什么必须从后往前?( ) A. 从前往后和从后往前效果一样 B. 从后往前是为了提高效率 C. 防止数据覆盖:若从前往后移,后面的元素会被前面搬移来的数据覆盖而丢失 D. 因为数组下标从0开始 二、程序运行结果题 8. 以下程序的运行结果是【··】。 #include <stdio.h> #include <string.h> main() { char s[20] = "abcdef"; int i = 0, j = strlen(s) - 1; char tmp; while (i < j) { tmp = s[i]; s[i] = s[j]; s[j] = tmp; i++; j--; } puts(s); } 三、程序填空题 9. 以下程序的功能是:将一个数x插入到已排好序的升序数组中,保持有序。请填空。 #include <stdio.h> main() { int a[20] = {3, 7, 10, 12, 18, 20}; int x = 15, i, n = 6; i = n - 1; while (i >= 0 && a[i] > x) { ______【1】______; i--; } a[i+1] = x; n++; for (i = 0; i < n; i++) printf("%3d", a[i]); } 四、阅读程序改错题 10. 阅读以下程序,该程序的功能是统计一个班级中低于平均分的学生人数。程序中有2处错误,请指出错误所在行号并修改正确,不许增删行,在原行上修改。 L1 #include <stdio.h> L2 main() L3 { L4 float scores[5] = {85, 72, 90, 58, 66}; L5 int i, count; L6 float sum, ave; L7 for (i = 0; i < 5; i++) L8 sum += scores[i]; L9 ave = sum / 5; L10 for (i = 0; i < 5; i++) L11 if (scores[i] < ave) L12 count++; L13 printf("count=%d ", count); L14 } 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 学科网(北京)股份有限公司 $ 【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。 本卷是《编程语言基础——C语言》(第5版)《一课一练》第18练,内容是5.4 数组的应用举例。 《编程语言基础——C语言》(第5版)一课一练 第18练 5.4 数组的应用举例 一、单选题 1. 在有序数组中插入一个新元素并保持有序,正确的做法是( ) A. 从后向前找到插入位置,将大于新元素的元素依次后移,再插入 B. 直接将新元素放在数组末尾 C. 将数组所有元素前移一位,再插入 D. 删除最后一个元素后插入 【答案】A 【解析】有序数组插入的典型算法:从末端开始寻找插入位置,将大于新元素的元素依次后移一个位置腾出空位,然后将新元素插入到正确位置。 2. 在例5-6有序插入程序中,while循环条件是 i>=0 && a[i]>x,循环体内执行 a[i+1]=a[i]; i--;。当找到插入位置后,新元素应放在( ) A. a[n]处 B. a[i+1]处 C. a[0]处 D. a[i]处 【答案】B 【解析】循环结束时,a[i]<=x(即a[i]不大于x,这时i可能已小于0),所以新元素应放在a[i+1]的位置。 3. 字符串逆序/转置的两种方法中,关于方法二(就地转置),正确的描述是( ) A. 不使用额外数组,通过对称位置交换实现,交换 s[i] 与 s[j](其中 i 从首端递增,j 从末端递减) B. 需要借助另一个数组才能完成 C. 从数组两端向中间,将字符全部前移 D. 使用strcpy函数直接复制即可 【答案】A 【解析】就地转置(方法二)的算法:设i=0指向首端,j=n-1指向末端,当i<j时交换s[i]与s[j],然后i++、j--,直到i>=j。这种方法不需要额外的数组空间。 4. 有一个5行3列的二维数组scores存储学生成绩,要求第i个学生的平均成绩,正确的计算方式是( ) A. 对scores[i][j]的所有j求和后除以5 B. 对scores[i][0]、scores[i][1]、scores[i][2]求和后除以3 C. 对scores[0][i]到scores[4][i]求和后再运算 D. 对scores[j][i]的所有j求和后除以3 【答案】B 【解析】scores[i][j]中第1维i表示学生(行),第2维j表示课程(列)。求第i个学生的平均成绩应将该行所有列(3门课程)的成绩求和后除以3。 5. 有以下程序段,其功能是输出低于平均分的成绩个数: float a[5]={60,70,80,90,100}, sum=0, ave; int i, count=0; for(i=0;i<5;i++) sum+=a[i]; ave=sum/5; for(i=0;i<5;i++) if(______) count++; printf("%d", count); 横线处应填入( ) A. a[i] >= ave B. a[i] > ave C. a[i] == ave D. a[i] < ave 【答案】D 【解析】题目要求统计低于平均分的个数,需判断每个成绩是否小于平均分ave,条件为a[i] < ave。平均分是(60+70+80+90+100)/5=80,低于80的有60和70共2个。 6. 在5x3的学生成绩二维数组中,求第j门课程的平均成绩,需要( ) A. 对一行中的5个元素求和后除以3 B. 对一列中的3个元素求和后除以3 C. 对一列中的5个元素求和后除以5 D. 对所有15个元素求和后除以5 【答案】C 【解析】5行3列的数组中,第j列共有5个元素(每个学生都有一个该课程的成绩)。求第j门课程的平均成绩,需要将这5个元素求和后除以5(即学生人数)。 7. 在有序数组插入算法中,元素后移的顺序为什么必须从后往前?( ) A. 从前往后和从后往前效果一样 B. 从后往前是为了提高效率 C. 防止数据覆盖:若从前往后移,后面的元素会被前面搬移来的数据覆盖而丢失 D. 因为数组下标从0开始 【答案】C 【解析】在有序插入中,必须从后往前依次移动元素。如果从前往后(如先将12后移覆盖18),那么18就已丢失,无法再后移。从后往前可以保证每个元素在被覆盖前已搬移到新位置。 二、程序运行结果题 8. 以下程序的运行结果是【··】。 #include <stdio.h> #include <string.h> main() { char s[20] = "abcdef"; int i = 0, j = strlen(s) - 1; char tmp; while (i < j) { tmp = s[i]; s[i] = s[j]; s[j] = tmp; i++; j--; } puts(s); } 【答案】fedcba 【解析】这是字符串就地转置程序。初始i=0指向'a',j=5指向'f'。交换后:第1轮交换a/f→fbcdea;第2轮交换b/e→fecdba;第3轮交换c/d→fedcba;然后i=3,j=2不满足i<j,循环结束。输出fedcba。 三、程序填空题 9. 以下程序的功能是:将一个数x插入到已排好序的升序数组中,保持有序。请填空。 #include <stdio.h> main() { int a[20] = {3, 7, 10, 12, 18, 20}; int x = 15, i, n = 6; i = n - 1; while (i >= 0 && a[i] > x) { ______【1】______; i--; } a[i+1] = x; n++; for (i = 0; i < n; i++) printf("%3d", a[i]); } 【答案】【1】a[i+1] = a[i] 【解析】有序插入的核心是将大于x的元素依次后移一个位置。从末端开始,当a[i]>x时,将a[i]搬到a[i+1]处。循环结束后,a[i+1]位置空出,将x插入此处即可。 四、阅读程序改错题 10. 阅读以下程序,该程序的功能是统计一个班级中低于平均分的学生人数。程序中有2处错误,请指出错误所在行号并修改正确,不许增删行,在原行上修改。 L1 #include <stdio.h> L2 main() L3 { L4 float scores[5] = {85, 72, 90, 58, 66}; L5 int i, count; L6 float sum, ave; L7 for (i = 0; i < 5; i++) L8 sum += scores[i]; L9 ave = sum / 5; L10 for (i = 0; i < 5; i++) L11 if (scores[i] < ave) L12 count++; L13 printf("count=%d ", count); L14 } 【答案】【1】L5: int i, count; → 修改为 int i, count = 0;(变量count未初始化,初始值是随机的,会导致统计错误) 【2】L6: float sum, ave; → 修改为 float sum = 0, ave;(变量sum未初始化,累加结果错误) 【解析】sum和count是局部变量,声明时不会自动初始化为0,其初始值是随机的。sum未初始化会导致累加结果错误;count未初始化也会导致统计结果错误。声明时应写作:float sum=0; int count=0; 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 学科网(北京)股份有限公司 $

资源预览图

第18练 5.4 数组的应用举例 《编程语言基础——C语言》 (第5版) 一课一练 (湖南)
1
第18练 5.4 数组的应用举例 《编程语言基础——C语言》 (第5版) 一课一练 (湖南)
2
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。