第23练 6.6 函数应用实例(数组与函数综合、排序等) 《编程语言基础——C语言》 (第5版) 一课一练 (湖南)

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

内容正文:

【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。 本卷是《编程语言基础——C语言》(第5版)《一课一练》第23练,内容是6.6 函数应用实例(数组与函数综合、排序等)。 《编程语言基础——C语言》(第5版)一课一练 第23练 6.6 函数应用实例(数组与函数综合、排序等) 一、单选题 1. 定义函数 void sort(int a[], int n) 用于对数组排序,调用时实参为 sort(arr, 10); 其中arr是已定义的数组,下列说法正确的是( ) A. arr传递的是数组首地址,在sort中修改a[i]会直接影响arr数组 B. arr将数组所有元素的值复制一份传递给函数 C. sort函数中对a的修改不会影响实参arr D. 函数中不能修改数组元素的值 2. 在冒泡排序中,每一趟排序的作用是( ) A. 将所有元素从小到大排好 B. 将当前未排序部分的最大(或最小)元素移动到正确位置 C. 确定所有元素的最终位置 D. 随机交换两个元素 3. 用冒泡排序对6个整数进行升序排序,共需要进行几趟比较( ) A. 6趟 B. 4趟 C. 5趟 D. 3趟 4. 选择排序的基本思想是( ) A. 相邻元素两两比较交换 B. 将待排序元素随机打乱后重新排列 C. 将数组分为有序和无序两部分,每次把无序部分的第一个元素插入有序部分 D. 每次从待排序部分选出最小(最大)元素,放到已排序部分的末尾 5. 将排序算法封装成函数的好处不包括( ) A. 使程序运行速度一定变快 B. 实现代码复用,多次调用同一排序函数 C. 提高程序的可读性和模块化程度 D. 便于修改排序算法而不影响主程序 6. 要用二分查找(折半查找)在一个数组中查找某个数,前提条件是( ) A. 数组中的元素个数必须是偶数 B. 数组必须是已排好序的 C. 数组中的元素不能有重复值 D. 数组必须是全局变量 7. 在包含1024个有序元素的数组中用二分查找法查找一个元素,最坏情况下需要比较的次数约为( ) A. 1024次 B. 512次 C. 10次 D. 1次 二、程序运行结果题 8. 以下程序的运行结果是【··】。 #include <stdio.h> void bubble(int a[], int n) { int i, j, t; for (i = 0; i < n - 1; i++) for (j = 0; j < n - 1 - i; j++) if (a[j] > a[j + 1]) { t = a[j]; a[j] = a[j + 1]; a[j + 1] = t; } } main() { int arr[5] = {5, 3, 4, 1, 2}, i; bubble(arr, 5); for (i = 0; i < 5; i++) printf("%d ", arr[i]); } 三、程序填空题 9. 以下程序的功能是:用选择排序法对数组进行升序排序。请填空。 #include <stdio.h> void selectSort(int a[], int n) { int i, j, min, t; for (i = 0; i < n - 1; i++) { min = i; for (j = i + 1; j < n; j++) if (a[j] < a[min]) 【1】; if (min != i) { t = a[i]; a[i] = a[min]; a[min] = t; } } } main() { int arr[5] = {8, 3, 6, 1, 9}, i; selectSort(arr, 5); for (i = 0; i < 5; i++) printf("%d ", arr[i]); } 四、阅读程序改错题 10. 阅读以下程序,该程序的功能是使用二分查找法在有序数组中查找指定元素。程序中有1处错误,请指出错误所在行号并修改正确,不许增删行,在原行上修改。 L1 #include <stdio.h> L2 int binarySearch(int a[], int n, int x) L3 { L4 int low = 0, high = n - 1, mid; L5 while (low <= high) L6 { L7 mid = (low + high) / 2; L8 if (a[mid] == x) L9 return mid; L10 else if (x < a[mid]) L11 low = mid + 1; L12 else L13 high = mid - 1; L14 } L15 return -1; L16 } L17 main() L18 { L19 int arr[8] = {1, 3, 5, 7, 9, 11, 13, 15}; L20 printf("%d ", binarySearch(arr, 8, 7)); L21 } 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 学科网(北京)股份有限公司 $ 【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。 本卷是《编程语言基础——C语言》(第5版)《一课一练》第23练,内容是6.6 函数应用实例(数组与函数综合、排序等)。 《编程语言基础——C语言》(第5版)一课一练 第23练 6.6 函数应用实例(数组与函数综合、排序等) 一、单选题 1. 定义函数 void sort(int a[], int n) 用于对数组排序,调用时实参为 sort(arr, 10); 其中arr是已定义的数组,下列说法正确的是( ) A. arr传递的是数组首地址,在sort中修改a[i]会直接影响arr数组 B. arr将数组所有元素的值复制一份传递给函数 C. sort函数中对a的修改不会影响实参arr D. 函数中不能修改数组元素的值 【答案】A 【解析】数组名作为函数参数时,传递的是数组的首地址。因此形参数组a和实参数组arr指向同一段内存,函数中对a元素的任何修改都会直接影响实参数组arr的值。 2. 在冒泡排序中,每一趟排序的作用是( ) A. 将所有元素从小到大排好 B. 将当前未排序部分的最大(或最小)元素移动到正确位置 C. 确定所有元素的最终位置 D. 随机交换两个元素 【答案】B 【解析】冒泡排序每趟将当前未排序部分的最大值(升序时)通过相邻比较和交换,逐次'冒泡'到最后。n个元素的冒泡排序共需n-1趟,每趟比较次数递减。 3. 用冒泡排序对6个整数进行升序排序,共需要进行几趟比较( ) A. 6趟 B. 4趟 C. 5趟 D. 3趟 【答案】C 【解析】冒泡排序对n个元素进行排序需要n-1趟。6个元素需要5趟。每趟之后,当前未排序部分的最大值会被交换到最后,因此下一趟的比较次数减少1次。 4. 选择排序的基本思想是( ) A. 相邻元素两两比较交换 B. 将待排序元素随机打乱后重新排列 C. 将数组分为有序和无序两部分,每次把无序部分的第一个元素插入有序部分 D. 每次从待排序部分选出最小(最大)元素,放到已排序部分的末尾 【答案】D 【解析】选择排序每趟从当前未排序部分中选出最小元素,然后将其与未排序部分的第一个元素交换,将其放到已排序部分的末尾。n个元素的选择排序共需n-1趟。 5. 将排序算法封装成函数的好处不包括( ) A. 使程序运行速度一定变快 B. 实现代码复用,多次调用同一排序函数 C. 提高程序的可读性和模块化程度 D. 便于修改排序算法而不影响主程序 【答案】A 【解析】将排序封装成函数的好处包括代码复用、提高可读性和模块化、便于维护等。但封装本身不会保证运行速度变快——速度取决于算法本身和实现方式。 6. 要用二分查找(折半查找)在一个数组中查找某个数,前提条件是( ) A. 数组中的元素个数必须是偶数 B. 数组必须是已排好序的 C. 数组中的元素不能有重复值 D. 数组必须是全局变量 【答案】B 【解析】二分查找的基本思想是将查找区间不断对半缩小,每次比较中间元素与目标值的关系来决定下一步查找左半还是右半。这要求数组是有序的,否则无法判断目标值在左半还是右半。 7. 在包含1024个有序元素的数组中用二分查找法查找一个元素,最坏情况下需要比较的次数约为( ) A. 1024次 B. 512次 C. 10次 D. 1次 【答案】C 【解析】二分查找每次将查找范围缩小一半,最坏情况需要查找直到区间长度为0。比较次数约为log₂(n)+1。log₂(1024)=10,因此最坏约需10次比较。相比顺序查找的1024次效率大幅提升。 二、程序运行结果题 8. 以下程序的运行结果是【··】。 #include <stdio.h> void bubble(int a[], int n) { int i, j, t; for (i = 0; i < n - 1; i++) for (j = 0; j < n - 1 - i; j++) if (a[j] > a[j + 1]) { t = a[j]; a[j] = a[j + 1]; a[j + 1] = t; } } main() { int arr[5] = {5, 3, 4, 1, 2}, i; bubble(arr, 5); for (i = 0; i < 5; i++) printf("%d ", arr[i]); } 【答案】1 2 3 4 5 【解析】程序使用冒泡排序对数组{5,3,4,1,2}进行升序排列。排序过程:第1趟后最大值5在末尾,第2趟后4在倒数第二...经过4趟排序后数组变为升序1 2 3 4 5。注意数组名传递的是地址,排序结果直接影响main中的arr。 三、程序填空题 9. 以下程序的功能是:用选择排序法对数组进行升序排序。请填空。 #include <stdio.h> void selectSort(int a[], int n) { int i, j, min, t; for (i = 0; i < n - 1; i++) { min = i; for (j = i + 1; j < n; j++) if (a[j] < a[min]) 【1】; if (min != i) { t = a[i]; a[i] = a[min]; a[min] = t; } } } main() { int arr[5] = {8, 3, 6, 1, 9}, i; selectSort(arr, 5); for (i = 0; i < 5; i++) printf("%d ", arr[i]); } 【答案】【1】min = j 【解析】选择排序每趟在当前未排序部分中找出最小元素的下标。内层for循环遍历未排序元素,当发现a[j]比当前最小值a[min]更小时,将min更新为j。循环结束后min指向最小元素的位置,然后将其与a[i]交换。 四、阅读程序改错题 10. 阅读以下程序,该程序的功能是使用二分查找法在有序数组中查找指定元素。程序中有1处错误,请指出错误所在行号并修改正确,不许增删行,在原行上修改。 L1 #include <stdio.h> L2 int binarySearch(int a[], int n, int x) L3 { L4 int low = 0, high = n - 1, mid; L5 while (low <= high) L6 { L7 mid = (low + high) / 2; L8 if (a[mid] == x) L9 return mid; L10 else if (x < a[mid]) L11 low = mid + 1; L12 else L13 high = mid - 1; L14 } L15 return -1; L16 } L17 main() L18 { L19 int arr[8] = {1, 3, 5, 7, 9, 11, 13, 15}; L20 printf("%d ", binarySearch(arr, 8, 7)); L21 } 【答案】【1】L10-L11: else if (x < a[mid]) low = mid + 1; → 应改为 else if (x < a[mid]) high = mid - 1;(x小于中间值时应在左半部分查找,应缩小high而非增大low) 【解析】二分查找的核心逻辑:当x<a[mid]时,目标值在左半部分,应使high=mid-1缩小查找范围的上界;当x>a[mid]时,目标值在右半部分,应使low=mid+1。原程序中x<a[mid]的条件处理反了,将导致查找失败。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 学科网(北京)股份有限公司 $

资源预览图

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