内容正文:
编写说明:江苏省对口招生计算机类《考纲百套卷》,依据《江苏省计算机类专业综合理论考试大纲》编写。本专辑涵盖5门课程,第一部分是专业核心模块训练卷,第二部分为各门课程的综合训练卷。本专辑共98份试卷。
本试卷是第23卷为专业核心模块训练卷,按《C语言》中"C语言卷10——continue、break、循环嵌套与常用算法"范围和要求编写。具体内容为:掌握continue语句、break语句;理解循环的嵌套;掌握程序设计中的几种常用算法的基本思想(排序、查找、穷举)。
江苏省对口招生职业技能考试
C语言 试卷
(C语言卷10——continue、break、循环嵌套与常用算法)
考试时间:90分钟 满分:100分
一、单项选择题(共20题,每题2分,共40分)
1. 在循环中,break语句的作用是( )
A.跳过本次循环剩余语句 B.跳出整个循环 C.终止程序 D.重新从循环开始执行
【答案】B
【解析】break语句用于跳出整个循环,不再执行后续迭代。
2. 在循环中,continue语句的作用是( )
A.跳出整个循环 B.跳过本次循环剩余语句,进入下次迭代
C.终止程序 D.重新从循环开始执行
【答案】B
【解析】continue跳过本次循环剩余语句,进入下次迭代。
3. 下列关于break语句,正确的是( )
A.break只能用在循环中 B.break可以用在switch中
C.break可以跳出多层嵌套循环 D.break可以用在任何地方
【答案】B
【解析】break可以用在循环中和switch语句中。
4. 下列关于continue语句,正确的是( )
A.continue可以用在switch中 B.continue只能用在循环中
C.continue可以跳出多层循环 D.continue可以用在任何地方
【答案】B
【解析】continue只能用在循环(for、while、do...while)中。
5. 下列程序段执行后输出结果是( )
for(i=1;i<=5;i++) { if(i==3) continue; printf("%d ",i); }
A.1 2 3 4 5 B.1 2 4 5 C.1 2 3 4 5(无变化) D.编译错误
【答案】B
【解析】当i==3时continue跳过printf,输出1 2 4 5。
6. 下列程序段执行后输出结果是( )
for(i=1;i<=5;i++) { if(i==3) break; printf("%d ",i); }
A.1 2 3 4 5 B.1 2 C.1 2 3 D.编译错误
【答案】B
【解析】当i==3时break跳出整个循环,输出1 2。
7. 下列关于循环嵌套,正确的是( )
A.循环不能嵌套 B.外层循环每迭代一次,内层循环完整执行
C.内层循环每迭代一次,外层循环完整执行 D.循环嵌套不能超过两层
【答案】B
【解析】外层循环每迭代一次,内层循环完整执行所有迭代。
8. 下列程序段执行后输出次数是( )
for(i=0;i<3;i++) for(j=0;j<2;j++) printf("*");
A.2次 B.3次 C.5次 D.6次
【答案】D
【解析】外层3次×内层2次=6次输出。
9. 冒泡排序法的基本思想是( )
A.每次选择最小元素放到前面 B.相邻元素两两比较,大的沉底 C.逐个插入到已排序序列 D.使用分治思想进行排序
【答案】B
【解析】冒泡排序通过相邻元素两两比较,较大的元素逐渐沉底。
10. 选择排序法的基本思想是( )
A.相邻元素两两比较 B.每次选择最小(或最大)元素放到前面
C.逐个插入到已排序序列 D.使用递归思想进行排序
【答案】B
【解析】选择排序每次选择最小(或最大)元素放到前面。
11. 插入排序法的基本思想是( )
A.相邻元素两两比较 B.每次选择最小元素放到前面
C.逐个取出元素插入到已排序序列的适当位置 D.使用分治思想进行排序
【答案】C
【解析】插入排序逐个取出元素,插入到已排序序列的适当位置。
12. 下列关于顺序查找,正确的是( )
A.只能用于有序数组 B.从第一个元素开始逐个比较 C.查找效率比二分查找高 D.需要使用递归实现
【答案】B
【解析】顺序查找从第一个元素开始,逐个与目标值比较。
13. 下列关于二分查找(对半查找),正确的是( )
A.只能用于无序数组 B.每次比较中间元素,缩小查找范围 C.查找效率比顺序查找低 D.需要从最后一个元素开始比较
【答案】B
【解析】二分查找要求数组有序,每次比较中间元素,缩小查找范围。
14. 穷举法的基本思想是( )
A.从第一个元素开始逐个比较 B.逐一尝试所有可能的答案 C.每次选择最优解 D.使用分治思想解决问题
【答案】B
【解析】穷举法逐一尝试所有可能的答案,直到找到正确解。
15. 在嵌套循环中,break语句可以跳出( )
A.所有循环 B.最内层循环 C.最外层循环 D.所有switch语句
【答案】B
【解析】break只能跳出当前所在的最内层循环或switch。
16. 在嵌套循环中,想要跳出所有循环,可以使用( )
A.使用多个break语句 B.使用goto语句(不推荐) C.使用return语句 D.以上方法都可以
【答案】D
【解析】可以使用多个break、goto或直接return来跳出所有循环。
17. 下列关于冒泡排序,正确的是( )
A.需要进行n次冒泡(n为元素个数) B.需要进行n-1次冒泡
C.每次冒泡确定一个最小元素的位置 D.冒泡排序是稳定排序
【答案】B
【解析】n个元素需要进行n-1次冒泡排序。
18. 使用顺序查找在n个元素中查找目标,平均比较次数是( )
A.n次 B.n/2次 C.log2(n)次 D.1次
【答案】B
【解析】顺序查找平均需要比较n/2次。
19. 使用二分查找在n个元素中查找目标,时间复杂度是( )
A.O(n) B.O(n2) C.O(log n) D.O(n log n)
【答案】C
【解析】二分查找每次将查找范围缩小一半,时间复杂度为O(log n)。
20. 下列关于穷举法,正确的是( )
A.穷举法效率最高 B.穷举法逐一尝试所有可能答案 C.穷举法只能用于排序问题 D.穷举法不需要循环结构
【答案】B
【解析】穷举法逐一尝试所有可能的答案,直到找到正确解。
二、判断题(共10题,每题1分,共10分)
21. break语句可以跳出整个循环( )
【答案】√
【解析】break语句用于跳出整个循环或switch结构。
22. continue语句可以跳出整个循环( )
【答案】×
【解析】continue跳过本次循环剩余语句,进入下次迭代,不能跳出整个循环。
23. break语句可以用在switch语句中( )
【答案】√
【解析】break在switch中用于跳出switch结构。
24. continue语句可以用在switch语句中( )
【答案】×
【解析】continue只能用在循环中,不能用在switch中。
25. 在嵌套循环中,break只能跳出最内层循环( )
【答案】√
【解析】break只能跳出当前所在的最内层循环。
26. 循环嵌套时,外层循环每迭代一次,内层循环完整执行所有迭代( )
【答案】√
【解析】外层循环每迭代一次,内层循环完整执行。
27. 冒泡排序法是一种稳定排序算法( )
【答案】√
【解析】冒泡排序是稳定排序,相等元素的相对位置不变。
28. 二分查找要求被查找的数组必须是有序的( )
【答案】√
【解析】二分查找要求数组有序,否则结果不正确。
29. 穷举法是一种高效的算法( )
【答案】×
【解析】穷举法效率通常较低,需要尝试所有可能答案。
30. 顺序查找可以用于无序数组( )
【答案】√
【解析】顺序查找不要求数组有序,可以用于任何数组。
三、填空题(共10空,每空2分,共20分)
31. 在循环中,____语句可以跳出整个循环。
【答案】break
【解析】break语句用于跳出整个循环。
32. 在循环中,____语句可以跳过本次循环的剩余语句。
【答案】continue
【解析】continue跳过本次循环剩余语句,进入下次迭代。
33. break语句可以用在____和____中。
【答案】循环、switch
【解析】break可以用在循环和switch语句中。
34. continue语句只能用在____中。
【答案】循环(for/while/do while)
【解析】continue只能用在循环中。
35. 在嵌套循环中,break只能跳出____层循环。
【答案】最内(当前所在)
【解析】break只能跳出当前所在的最内层循环。
36. 循环嵌套时,外层循环每迭代一次,内层循环____执行所有迭代。
【答案】完整(全部)
【解析】外层循环每迭代一次,内层循环完整执行。
37. 冒泡排序法通过相邻元素两两____,较大的元素逐渐沉底。
【答案】比较并交换
【解析】冒泡排序通过相邻元素两两比较,需要交换时将较大元素后移。
38. 二分查找要求被查找的数组必须是____的。
【答案】有序(已排序)
【解析】二分查找要求数组有序。
39. 穷举法的基本思想是逐一尝试所有可能的____。
【答案】答案
【解析】穷举法逐一尝试所有可能的答案。
40. n个元素的顺序查找,平均需要比较____次。
【答案】n/2
【解析】顺序查找平均需要比较n/2次。
四、程序综合题(共3题,每题10分,共30分)
41. 程序阅读题:阅读下列程序,写出运行结果。
#include <stdio.h>
int main()
{
int i;
for(i=1;i<=10;i++)
{
if(i%3==0) continue;
if(i==7) break;
printf("%d ",i);
}
printf("
");
return 0;
}
【答案】1 2 4 5
【解析】
1.循环 i 从 1 到 10,遇到 i%3==0 执行 continue 跳过本次输出;
2.当 i=7 时执行 break 直接结束整个循环;
3.最终输出符合条件的数字:1 2 4 5。
42.文件response.dat存储问卷答案字符串。统计每个答案出现的次数,去重后按出现次数降序输出,次数相同按答案升序。请完善程序。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 150
void sort_ans(char ans[][20],int cnt[],int n);
int main()
{
FILE *fp;
int i=0,n;
char res[N][20],unq[N][20];
int cnt[N]={0},tot=0,j,keep;
fp=fopen("response.dat","r");
while(!feof(fp))
{
fscanf(fp,"%s",res[i]);
①;
}
n=i;
fclose(fp);
strcpy(unq[0],res[0]);
cnt[0]=1;tot=1;
for(i=1;i<n;i++)
{
keep=0;
for(j=0;j<tot;j++)
if(strcmp(unq[j],res[i])==0)
{
cnt[j]++;keep=1;break;
}
if(!keep)
{
strcpy(unq[tot],res[i]);
cnt[tot]=1;
tot++;
}
}
sort_ans(unq,cnt,tot);
for(i=0;i<tot;i++)
printf("%s %d
",unq[i],cnt[i]);
return 0;
}
void sort_ans(char ans[][20],int cnt[],int n)
{
int i,j;
char t[20];
int tc;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(cnt[i]<cnt[j]||(cnt[i]==cnt[j]&&strcmp(ans[i],ans[j])>0))
{
strcpy(t,ans[i]);strcpy(ans[i],ans[j]);strcpy(ans[j],t);
tc=cnt[i];cnt[i]=cnt[j];cnt[j]=tc;
}
}
【答案】① i++
【解析】
① 每读取一条问卷答案,数组下标 i 自增 1,统计总记录数。
43.文件product.dat存储产品编号和产品评分(1-5星)。按评分降序输出,评分相同按编号升序,去除重复记录。请完善程序。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 200
void sort_prod(char id[][10],int rating[],int n);
int main()
{
FILE *fp;
int i=0,n;
char pid[N][10],unp[N][10];
int rat[N],unr[N],tot=0;
fp=fopen("product.dat","r");
while(!feof(fp))
{
fscanf(fp,"%s%d",pid[i],&rat[i]);
①;
}
n=i;
fclose(fp);
sort_prod(pid,rat,n);
strcpy(unp[0],pid[0]);
unr[0]=rat[0];tot=1;
for(i=1;i<n;i++)
{
if(strcmp(pid[i],pid[i-1])!=0||rat[i]!=rat[i-1])
{
strcpy(unp[tot],pid[i]);
unr[tot]=rat[i];
tot++;
}
}
for(i=0;i<tot;i++)
printf("%s %d星
",unp[i],unr[i]);
return 0;
}
void sort_prod(char id[][10],int rating[],int n)
{
int i,j,p;
char tid[10];
int trat;
for(i=0;i<n-1;i++)
{
p=i;
for(j=i+1;j<n;j++)
if(rating[p]<rating[j]||(rating[p]==rating[j]&&strcmp(id[p],id[j])>0))
②;
if(p!=i)
{
strcpy(tid,id[p]);strcpy(id[p],id[i]);strcpy(id[i],tid);
trat=rating[p];rating[p]=rating[i];rating[i]=trat;
}
}
}
【答案】① i++ ② p=j
【解析】
① 每读取一条产品信息,数组下标 i 自增 1,记录总数;
② 选择排序中,满足排序条件时,将 p 更新为 j,记录待交换位置。
学科网(北京)股份有限公司
$
编写说明:江苏省对口招生计算机类《考纲百套卷》,依据《江苏省计算机类专业综合理论考试大纲》编写。本专辑涵盖5门课程,第一部分是专业核心模块训练卷,第二部分为各门课程的综合训练卷。本专辑共98份试卷。
本试卷是第23卷为专业核心模块训练卷,按《C语言》中"C语言卷10——continue、break、循环嵌套与常用算法"范围和要求编写。具体内容为:掌握continue语句、break语句;理解循环的嵌套;掌握程序设计中的几种常用算法的基本思想(排序、查找、穷举)。
江苏省对口招生职业技能考试
C语言 试卷
(C语言卷10——continue、break、循环嵌套与常用算法)
考试时间:90分钟 满分:100分
一、单项选择题(共20题,每题2分,共40分)
1. 在循环中,break语句的作用是( )
A.跳过本次循环剩余语句 B.跳出整个循环 C.终止程序 D.重新从循环开始执行
2. 在循环中,continue语句的作用是( )
A.跳出整个循环 B.跳过本次循环剩余语句,进入下次迭代
C.终止程序 D.重新从循环开始执行
3. 下列关于break语句,正确的是( )
A.break只能用在循环中 B.break可以用在switch中
C.break可以跳出多层嵌套循环 D.break可以用在任何地方
4. 下列关于continue语句,正确的是( )
A.continue可以用在switch中 B.continue只能用在循环中
C.continue可以跳出多层循环 D.continue可以用在任何地方
5. 下列程序段执行后输出结果是( )
for(i=1;i<=5;i++) { if(i==3) continue; printf("%d ",i); }
A.1 2 3 4 5 B.1 2 4 5 C.1 2 3 4 5(无变化) D.编译错误
6. 下列程序段执行后输出结果是( )
for(i=1;i<=5;i++) { if(i==3) break; printf("%d ",i); }
A.1 2 3 4 5 B.1 2 C.1 2 3 D.编译错误
7. 下列关于循环嵌套,正确的是( )
A.循环不能嵌套 B.外层循环每迭代一次,内层循环完整执行
C.内层循环每迭代一次,外层循环完整执行 D.循环嵌套不能超过两层
8. 下列程序段执行后输出次数是( )
for(i=0;i<3;i++) for(j=0;j<2;j++) printf("*");
A.2次 B.3次 C.5次 D.6次
9. 冒泡排序法的基本思想是( )
A.每次选择最小元素放到前面 B.相邻元素两两比较,大的沉底 C.逐个插入到已排序序列 D.使用分治思想进行排序
10. 选择排序法的基本思想是( )
A.相邻元素两两比较 B.每次选择最小(或最大)元素放到前面
C.逐个插入到已排序序列 D.使用递归思想进行排序
11. 插入排序法的基本思想是( )
A.相邻元素两两比较 B.每次选择最小元素放到前面
C.逐个取出元素插入到已排序序列的适当位置 D.使用分治思想进行排序
12. 下列关于顺序查找,正确的是( )
A.只能用于有序数组 B.从第一个元素开始逐个比较 C.查找效率比二分查找高 D.需要使用递归实现
13. 下列关于二分查找(对半查找),正确的是( )
A.只能用于无序数组 B.每次比较中间元素,缩小查找范围 C.查找效率比顺序查找低 D.需要从最后一个元素开始比较
14. 穷举法的基本思想是( )
A.从第一个元素开始逐个比较 B.逐一尝试所有可能的答案 C.每次选择最优解 D.使用分治思想解决问题
15. 在嵌套循环中,break语句可以跳出( )
A.所有循环 B.最内层循环 C.最外层循环 D.所有switch语句
16. 在嵌套循环中,想要跳出所有循环,可以使用( )
A.使用多个break语句 B.使用goto语句(不推荐) C.使用return语句 D.以上方法都可以
17. 下列关于冒泡排序,正确的是( )
A.需要进行n次冒泡(n为元素个数) B.需要进行n-1次冒泡
C.每次冒泡确定一个最小元素的位置 D.冒泡排序是稳定排序
18. 使用顺序查找在n个元素中查找目标,平均比较次数是( )
A.n次 B.n/2次 C.log2(n)次 D.1次
19. 使用二分查找在n个元素中查找目标,时间复杂度是( )
A.O(n) B.O(n2) C.O(log n) D.O(n log n)
20. 下列关于穷举法,正确的是( )
A.穷举法效率最高 B.穷举法逐一尝试所有可能答案 C.穷举法只能用于排序问题 D.穷举法不需要循环结构
二、判断题(共10题,每题1分,共10分)
21. break语句可以跳出整个循环( )
22. continue语句可以跳出整个循环( )
23. break语句可以用在switch语句中( )
24. continue语句可以用在switch语句中( )
25. 在嵌套循环中,break只能跳出最内层循环( )
26. 循环嵌套时,外层循环每迭代一次,内层循环完整执行所有迭代( )
27. 冒泡排序法是一种稳定排序算法( )
28. 二分查找要求被查找的数组必须是有序的( )
29. 穷举法是一种高效的算法( )
30. 顺序查找可以用于无序数组( )
三、填空题(共10空,每空2分,共20分)
31. 在循环中,____语句可以跳出整个循环。
32. 在循环中,____语句可以跳过本次循环的剩余语句。
33. break语句可以用在____和____中。
34. continue语句只能用在____中。
35. 在嵌套循环中,break只能跳出____层循环。
36. 循环嵌套时,外层循环每迭代一次,内层循环____执行所有迭代。
37. 冒泡排序法通过相邻元素两两____,较大的元素逐渐沉底。
38. 二分查找要求被查找的数组必须是____的。
39. 穷举法的基本思想是逐一尝试所有可能的____。
40. n个元素的顺序查找,平均需要比较____次。
四、程序综合题(共3题,每题10分,共30分)
41. 程序阅读题:阅读下列程序,写出运行结果。
#include <stdio.h>
int main()
{
int i;
for(i=1;i<=10;i++)
{
if(i%3==0) continue;
if(i==7) break;
printf("%d ",i);
}
printf("
");
return 0;
}
42.文件response.dat存储问卷答案字符串。统计每个答案出现的次数,去重后按出现次数降序输出,次数相同按答案升序。请完善程序。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 150
void sort_ans(char ans[][20],int cnt[],int n);
int main()
{
FILE *fp;
int i=0,n;
char res[N][20],unq[N][20];
int cnt[N]={0},tot=0,j,keep;
fp=fopen("response.dat","r");
while(!feof(fp))
{
fscanf(fp,"%s",res[i]);
①;
}
n=i;
fclose(fp);
strcpy(unq[0],res[0]);
cnt[0]=1;tot=1;
for(i=1;i<n;i++)
{
keep=0;
for(j=0;j<tot;j++)
if(strcmp(unq[j],res[i])==0)
{
cnt[j]++;keep=1;break;
}
if(!keep)
{
strcpy(unq[tot],res[i]);
cnt[tot]=1;
tot++;
}
}
sort_ans(unq,cnt,tot);
for(i=0;i<tot;i++)
printf("%s %d
",unq[i],cnt[i]);
return 0;
}
void sort_ans(char ans[][20],int cnt[],int n)
{
int i,j;
char t[20];
int tc;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(cnt[i]<cnt[j]||(cnt[i]==cnt[j]&&strcmp(ans[i],ans[j])>0))
{
strcpy(t,ans[i]);strcpy(ans[i],ans[j]);strcpy(ans[j],t);
tc=cnt[i];cnt[i]=cnt[j];cnt[j]=tc;
}
}
43.文件product.dat存储产品编号和产品评分(1-5星)。按评分降序输出,评分相同按编号升序,去除重复记录。请完善程序。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 200
void sort_prod(char id[][10],int rating[],int n);
int main()
{
FILE *fp;
int i=0,n;
char pid[N][10],unp[N][10];
int rat[N],unr[N],tot=0;
fp=fopen("product.dat","r");
while(!feof(fp))
{
fscanf(fp,"%s%d",pid[i],&rat[i]);
①;
}
n=i;
fclose(fp);
sort_prod(pid,rat,n);
strcpy(unp[0],pid[0]);
unr[0]=rat[0];tot=1;
for(i=1;i<n;i++)
{
if(strcmp(pid[i],pid[i-1])!=0||rat[i]!=rat[i-1])
{
strcpy(unp[tot],pid[i]);
unr[tot]=rat[i];
tot++;
}
}
for(i=0;i<tot;i++)
printf("%s %d星
",unp[i],unr[i]);
return 0;
}
void sort_prod(char id[][10],int rating[],int n)
{
int i,j,p;
char tid[10];
int trat;
for(i=0;i<n-1;i++)
{
p=i;
for(j=i+1;j<n;j++)
if(rating[p]<rating[j]||(rating[p]==rating[j]&&strcmp(id[p],id[j])>0))
②;
if(p!=i)
{
strcpy(tid,id[p]);strcpy(id[p],id[i]);strcpy(id[i],tid);
trat=rating[p];rating[p]=rating[i];rating[i]=trat;
}
}
}
学科网(北京)股份有限公司
$