第26练 单元6 一维数组应用《C语言程序设计》(高教版第2版)一课一练
|
2份
|
7页
|
26人阅读
|
0人下载
内容正文:
编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《C语言程序设计》(高教版第2版)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。
本卷是《C语言程序设计》(高教版第2版)一课一练的单元6的第26练,内容涵盖单元6“考试系统”的数据存储的6.3.1 一维数组应用。
《C语言程序设计》(高教版第2版)一课一练 第26练
单元6 “考试系统”的数据存储
6.3.1 一维数组应用
1、 单项选择题(本题共5小题)
1、用一维数组实现斐波那契数列前 40 项,以下数组初始化代码符合要求的是( )
A. int f[40]; f[0]=1; f[1]=1;
B. int f[40]; f[1]=1; f[2]=1;
C. int f[40]; f[0]=0; f[1]=1;
D. int f[40]; f[0]=1; f[1]=0;
2、冒泡排序对 n 个元素进行从小到大排序,最多需要执行( )比较。
A. n-1 轮
B. n 轮
C. n+1 轮
D. n/2 轮
3、以下关于冒泡排序的描述,正确的是( )
A. 每一轮比较过程中必须发生元素交换
B. 每轮比较结束后,当前未排序的最大元素会移到末尾位置
C. 冒泡排序属于不稳定排序算法
D. 冒泡排序的时间复杂度为 O (log₂n)
4、用一维数组存储斐波那契数列前 40 项,数组长度至少需要定义为( )
A. 38
B. 39
C. 40
D. 41
5、冒泡排序过程中,某一轮比较没有发生任何元素交换,说明( )
A. 排序出现逻辑错误
B. 数组已经完全有序,可以提前终止排序
C. 需要重新开始排序流程
D. 当前轮次的比较无效
2、 判断题(本题共4题)
1、用一维数组实现斐波那契数列时,必须将数组下标从 1 开始,才能对应数列的第 1、2 项。( )
2、冒泡排序每一轮的比较次数会逐轮减少,因为每轮都会确定一个最大元素的位置,无需再参与后续比较。( )
3、用数组存储斐波那契数列时,递推公式为 f [i] = f [i+1] + f [i+2](i≥2)。( )
4、冒泡排序是稳定排序算法,即排序后相同值元素的相对位置不会改变。( )
3、 程序填空题(本题共1题)
1、题目描述:以下程序采用冒泡排序对输入的 10 个整数进行从小到大排序,请补充缺失代码使程序正常运行。
#include <stdio.h>
int main() {
int arr[10];
int i, j, temp;
// 输入10个整数
printf("请输入10个整数:
");
for(i = 0; i < 10; i++) {
scanf("%d", (1)____);
}
// 冒泡排序核心逻辑
for(i = 0; i < (2)____; i++) { // 控制排序轮数
// 控制每轮比较次数
for(j = 0; j < (3)____; j++) {
// 比较相邻元素,若前大于后则交换
if(arr[j] > arr[j+1]) {
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = (4)____;
}
}
}
// 输出排序后的数组
printf("排序后的数组为:
");
for(i = 0; i < 10; i++) {
printf("%d ", arr[i]);
}
return 0;
}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$
编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《C语言程序设计》(高教版第2版)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。
本卷是《C语言程序设计》(高教版第2版)一课一练的单元6的第26练,内容涵盖单元6“考试系统”的数据存储的6.3.1 一维数组应用。
《C语言程序设计》(高教版第2版)一课一练 第26练
单元6 “考试系统”的数据存储
6.3.1 一维数组应用
1、 单项选择题(本题共5小题)
1、用一维数组实现斐波那契数列前 40 项,以下数组初始化代码符合要求的是( )
A. int f[40]; f[0]=1; f[1]=1;
B. int f[40]; f[1]=1; f[2]=1;
C. int f[40]; f[0]=0; f[1]=1;
D. int f[40]; f[0]=1; f[1]=0;
【答案】A
【解析】斐波那契数列第 1、2 个数均为 1,数组下标从 0 开始,因此 f [0] 对应数列第 1 项,f [1] 对应数列第 2 项,初始值均为 1,符合循环递推的前置条件。
2、冒泡排序对 n 个元素进行从小到大排序,最多需要执行( )比较。
A. n-1 轮
B. n 轮
C. n+1 轮
D. n/2 轮
【答案】A
【解析】冒泡排序每轮会将当前未排序的最大元素移到末尾,n 个元素只需确定 n-1 个元素的位置,最后一个元素自然有序,因此最多需要 n-1 轮比较。
3、以下关于冒泡排序的描述,正确的是( )
A. 每一轮比较过程中必须发生元素交换
B. 每轮比较结束后,当前未排序的最大元素会移到末尾位置
C. 冒泡排序属于不稳定排序算法
D. 冒泡排序的时间复杂度为 O (log₂n)
【答案】B
【解析】选项 A 错误,若数组已有序,某轮比较不会发生交换;选项 C 错误,冒泡排序仅交换相邻逆序元素,相同值元素相对位置不变,属于稳定排序;选项 D 错误,冒泡排序时间复杂度为 O (n²);只有选项 B 符合冒泡排序的核心逻辑。
4、用一维数组存储斐波那契数列前 40 项,数组长度至少需要定义为( )
A. 38
B. 39
C. 40
D. 41
【答案】C
【解析】数组下标从 0 开始,存储前 40 项需要下标 0 到 39,共 40 个元素,因此数组长度至少为 40。
5、冒泡排序过程中,某一轮比较没有发生任何元素交换,说明( )
A. 排序出现逻辑错误
B. 数组已经完全有序,可以提前终止排序
C. 需要重新开始排序流程
D. 当前轮次的比较无效
【答案】B
【解析】若某一轮没有元素交换,说明所有相邻元素都满足前小后大的有序状态,整个数组已经排序完成,无需继续后续轮次,可提前结束排序提升效率。
2、 判断题(本题共4题)
1、用一维数组实现斐波那契数列时,必须将数组下标从 1 开始,才能对应数列的第 1、2 项。( )
【答案】×
【解析】数组下标可以从 0 开始,只需将数列第 1 项存到 f [0],第 2 项存到 f [1],后续通过 f [i] = f [i-1]+f [i-2] 递推即可,下标起始位置不影响逻辑实现。
2、冒泡排序每一轮的比较次数会逐轮减少,因为每轮都会确定一个最大元素的位置,无需再参与后续比较。( )
【答案】√
【解析】例如对 10 个元素排序,第 1 轮比较 9 次,第 2 轮比较 8 次…… 最后 1 轮比较 1 次,每轮减少的次数等于已确定位置的元素数量,符合冒泡排序的优化逻辑。
3、用数组存储斐波那契数列时,递推公式为 f [i] = f [i+1] + f [i+2](i≥2)。( )
【答案】×
【解析】正确的递推公式是 f [i] = f [i-1] + f [i-2],即当前项等于前两项之和,公式方向完全错误。
4、冒泡排序是稳定排序算法,即排序后相同值元素的相对位置不会改变。( )
【答案】√
【解析】冒泡排序仅交换相邻的逆序元素,相同值的元素不会触发交换操作,因此排序后它们的相对位置保持不变,属于稳定排序。
3、 程序填空题(本题共1题)
1、题目描述:以下程序采用冒泡排序对输入的 10 个整数进行从小到大排序,请补充缺失代码使程序正常运行。
#include <stdio.h>
int main() {
int arr[10];
int i, j, temp;
// 输入10个整数
printf("请输入10个整数:
");
for(i = 0; i < 10; i++) {
scanf("%d", (1)____);
}
// 冒泡排序核心逻辑
for(i = 0; i < (2)____; i++) { // 控制排序轮数
// 控制每轮比较次数
for(j = 0; j < (3)____; j++) {
// 比较相邻元素,若前大于后则交换
if(arr[j] > arr[j+1]) {
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = (4)____;
}
}
}
// 输出排序后的数组
printf("排序后的数组为:
");
for(i = 0; i < 10; i++) {
printf("%d ", arr[i]);
}
return 0;
}
【答案】
(1) &arr [i]
(2) 9
(3) 9-i
(4) temp
【解析】
(1):scanf需要传入变量的地址,arr[i]的地址是&arr[i],用于将输入的整数存储到数组对应位置。
(2):10 个元素需要进行 9 轮排序,每轮确定一个最大元素的位置,因此循环次数设置为 9(即 10-1)。
(3):每轮比较的次数逐轮减少,第 i 轮只需比较前9-i个元素,因为后 i 个元素已经有序,无需重复比较。
(4):交换元素时,将临时变量temp中存储的原arr[j]的值赋给arr[j+1],完成两个相邻元素的交换操作。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$