《C语言程序设计》(高教版)山东省(春季高考)软件与应用技术 高频考点冲刺卷(五)

2026-01-16
| 2份
| 33页
| 88人阅读
| 0人下载

资源信息

学段 中职
学科 职教专业课
课程 C语言程序设计
教材版本 -
年级 -
章节 -
类型 题集-专项训练
知识点 C语言概述,数据类型和简单程序设计,分支结构,数组,函数
使用场景 中职复习
学年 2026-2027
地区(省份) 山东省
地区(市) -
地区(区县) -
文件格式 ZIP
文件大小 284 KB
发布时间 2026-01-16
更新时间 2026-01-16
作者 xkw_063129603
品牌系列 学易金卷·阶段检测模拟卷
审核时间 2026-01-16
下载链接 https://m.zxxk.com/soft/55991647.html
价格 3.00储值(1储值=1元)
来源 学科网

内容正文:

编写说明:本冲刺卷严格依据山东省软件与应用技术类高考考纲编写,依托《编程语言基础—C语言》(高教版第五版),聚焦高三考生冲刺需求,助力高效提分。内容上深度覆盖考纲掌握、理解层级考点,既系统梳理构建知识框架,又强化应用能力训练;同时结合近五年高考真题,精准把握高频考点、命题趋势与题型特点,确保贴合高考方向。 山东省软件与应用技术类 《编程语言基础—C语言》高教版第五版 高频考点冲刺卷(五)原卷版 时间:60分钟 总分:100分 班级 姓名 学号 成绩 一、单选题(共25小题,每题2分,共50分) 1. 以下叙述正确的是( )。 A. 在C程序中,main函数必须位于程序的最前面 B. C程序的每行中只能写一条语句 C. C语言本身没有输入输出语句 D. 在对一个C程序进行编译的过程中,可发现注释中的拼写错误 2. 以下关于C语言数据类型的叙述中,正确的是( ) A. 枚举类型是基本数据类型 B. 使用typedef定义新类型后,原类型名不再可用 C. 结构体类型中的成员可以是不同的数据类型 D. 数组是一种基本数据类型 3. 以下程序的输出结果是( ) #include <stdio.h> main() { int a = 5, b = 3; float c = 1.0/a*b; printf("%.2f ", c); } A. 0.60 B. 0.00 C. 1.67 D. 0.67 4. 设int x=1, y=1; 表达式(!x||y--)的值是( ) A. 0 B. 1 C. 2 D. -1 5. 以下程序的输出结果是( ) #include <stdio.h> main() { int a = 0, b = 0, c = 0; if (++a > 0 || ++b > 0) ++c; printf("%d,%d,%d", a, b, c); } A. 1,0,1 B. 1,1,1 C. 0,1,1 D. 0,0,1 6. 以下程序的输出结果是( ) #include <stdio.h> main(){ int i; for (i = 0; i < 3; i++) switch (i) { case 0: printf("%d", i); case 2: printf("%d", i); default: printf("%d", i); } } A. 000122 B. 022111 C. 021021 D. 012 7. 以下程序的输出结果是( ) #include <stdio.h> int main() { int i, j, n = 0; for (i = 0; i < 2; i++) { n++; for (j = 0; j < 3; j++) { if (j % 2) continue; n++; } n++; } printf("n=%d ", n); } A. n=12 B. n=8 C. n=6 D. n=4 8. 以下对一维数组a的正确定义是( ) A. int a(10); B. int n=10, a[n]; C. int n; scanf("%d", &n); int a[n]; D. #define SIZE 10 int a[SIZE]; 9. 以下程序的输出结果是( ) #include <stdio.h> main() { int a[3][3] = { {1,2,3},{4,5,6},{7,8,9} }; int i, s = 0; for (i = 0; i < 3; i++) s += a[i][i]; printf("%d", s); } A. 15 B. 45 C. 6 D. 24 10.以下关于函数的叙述中,正确的是( ) A. 函数必须返回一个值 B. 函数可以嵌套定义 C. 函数可以嵌套调用 D. 函数可以没有参数,但必须指定返回类型 11. 以下程序的输出结果是( ) #include <stdio.h> int f(int x) { static int y = 1; y++; return x + y; } main() { int a = 2, i; for (i = 0; i < 3; i++) printf("%d ", f(a)); } A. 4 5 6 B. 4 4 4 C. 4 6 8 D. 3 4 5 12. 以下程序的输出结果是( ) #include <stdio.h> void fun(int x, int y, int *z) { *z = x > y ? x : y; } int main() { int a = 3, b = 5, c = 0; fun(a, b, &c); printf("%d", c); } A. 0 B. 3 C. 5 D. 8 13. 以下程序的输出结果是( ) #include <stdio.h> main() { char str[] = "ABCD", *p = str; printf("%d ", *(p + 4)); } A. 68 B. 0 C. 字符'D'的地址 D. 不确定的值 14. 以下程序的输出结果是( ) #include <stdio.h> main() { int a[5] = { 2,4,6,8,10 }, *p = a, **k = &p; printf("%d ", *(p++)); printf("%d ", **k); } A. 2 4 B. 2 2 C. 4 4 D. 4 6 15. 以下程序的输出结果是( ) #include <stdio.h> struct st { int x; int *y; } *p; int dt[4] = { 10,20,30,40 }; struct st aa[4] = { 50,&dt[0],60,&dt[1],70,&dt[2],80,&dt[3] }; main() { p = aa; printf("%d,", ++p->x); printf("%d,", (++p)->x); printf("%d ", ++(*p->y)); } A.51,60,21 B. 50,60,21 C. 51,60,20 D. 50,60,20 16. 有如下程序 int func(int a,int b) { return(a+b);} void main() { int x=2,y=5,z=8,r; r=func(func(x,y),z); printf(“%d ”,r); } 该程序的输出结果是( ) A.12 B. 13 C. 14 D. 15 17. 以下程序的输出结果是( ) #include <stdio.h> #define SQR(x) x*x main() { int a = 10, k = 2, m = 1; a /= SQR(k + m) / SQR(k + m); printf("%d ", a); } A. 10 B. 1 C. 9 D. 0 18. 以下程序的输出结果是( ) #include <stdio.h> void f(int x, int *y) { x = *y; *y = x; } main() { int a = 3, b = 5; f(a, &b); printf("%d %d", a, b); } A. 3 5 B. 5 5 C. 3 3 D. 5 3 19. 以下程序的输出结果是( ) #include <stdio.h> main() { int a[3][4] = { 1,3,5,7,9,11,13,15,17,19,21,23 }; int (*p)[4] = a, i, j, k = 0; for (i = 0; i < 3; i++) for (j = 0; j < 2; j++) k += *(*(p + i) + j); printf("%d", k); } A. 60 B. 68 C. 99 D. 108 20. 以下程序的输出结果是( ) #include <stdio.h> main() { char s[] = "12345"; s[2] = '\0'; printf("%d", strlen(s)); } A. 5 B. 2 C. 1 D. 0 21. 以下程序的输出结果是( ) #include <stdio.h> void fun(int *a, int n) { int i, j, t; for (i = 0; i < n - 1; i++) for (j = i + 1; j < n; j++) if (a[i] < a[j]) { t = a[i]; a[i] = a[j]; a[j] = t; } } main() { int aa[10] = { 1,2,3,4,5,6,7,8,9,10 }, i; fun(aa + 2, 5); for (i = 0; i < 10; i++) printf("%d,", aa[i]); } A. 1,2,3,4,5,6,7,8,9,10, B. 1,2,7,6,5,4,3,8,9,10, C. 1,2,7,6,5,8,9,10,3,4, D. 1,2,9,8,7,6,5,4,3,10, 22. 以下程序的输出结果是( ) #include <stdio.h> int f(int n) { if (n == 1) return 1; else return f(n - 1) + 1; } main() { int i, j = 0; for (i = 1; i < 3; i++) j += f(i); printf("%d ", j); } A. 1 B. 2 C. 3 D. 4 23.以下程序的输出结果是( ) #include <stdio.h> main() { int a = 1, b = 2, c = 3, d = 0; if (a == 1 && b++ == 2) if (b != 2 || c-- != 3) printf("%d,%d,%d ", a, b, c); else printf("%d,%d,%d ", a, b, c); else printf("%d,%d,%d ", a, b, c); } A. 1,2,3 B. 1,3,2 C. 1,3,3 D. 1,2,2 24. 以下程序的输出结果是( ) #include <stdio.h> main() { int x = 0, y = 5, z = 3; while (z-- > 0 && ++x < 5) y = y - 1; printf("%d,%d,%d", x, y, z); } A. 3,2,-1 B. 3,2,0 C. 4,3,-1 D. 5,-2,-5 25.以下程序的输出结果是( ) #include <stdio.h> main() { int i, k, a[10], p[3]; k = 5; for (i = 0; i < 10; i++) a[i] = i; for (i = 0; i < 3; i++) p[i] = a[i * (i + 1)]; for (i = 0; i < 3; i++) k += p[i] * 2; printf("%d", k); } A. 20 B. 21 C. 22 D. 23 二、简答题(共3小题,每题5分,共15分) 1. 请阅读程序并写出运行结果。 #include <stdio.h> main() { int i; long s = 0, t = 1; for (i = 1; i <= 10; i++) { t = t * i; s = s + t; } printf("1!+2!+...+10! = %ld ", s); } 2. 以下程序的功能是:输入10个整数,将其中最小的数与第一个数交换,最大的数与最后一个数交换。请找出程序中的错误并改正。 #include <stdio.h> main() { int a[10], i, max, min, t; printf("input 10 numbers:"); for (i = 0; i < 10; i++) scanf("%d", a[i]); max = min = 0; for (i = 1; i < 10; i++) { if (a[i] > a[max]) max = i; if (a[i] < a[min]) min = i; } t = a[0]; a[0] = a[min]; a[min] = t; t = a[9]; a[9] = a[max]; a[max] = t; printf("after swapped:"); for (i = 0; i < 10; i++) printf("%d ", a[i]); } 3.阅读程序并写出运行结果(假设输入为"Hello World 123!@")。 #include <stdio.h> #include <ctype.h> main() { char str[100]; int i, letter = 0, digit = 0, space = 0, other = 0; gets(str); for (i = 0; str[i] != '\0'; i++) { if (isalpha(str[i])) letter++; else if (isdigit(str[i])) digit++; else if (isspace(str[i])) space++; else other++; } printf("letter=%d,digit=%d,space=%d,other=%d ", letter, digit, space, other); } 三、案例分析题(共3小题,每题5分,共15分) 1. 以下程序的功能是:输出100以内能被3整除且个位数为6的所有整数。请将程序补充完整。 #include <stdio.h> main() { int i, j; for (i = 0; 【1】 ; i++) { j = i * 10 + 6; if ( 【2】 ) continue; printf("%d ", j); } } 2. 以下程序的功能是:将字符串中的数字字符删除后输出。请将程序补充完整。 #include <stdio.h> #include <ctype.h> main() { char str[80]; int i, j; gets(str); for (i = 0, j = 0; str[i] != '\0'; i++) if (___【3】___) str[j++] = str[i]; __【4】____ = '\0'; puts(str); } 3. 以下程序的功能是:用递归方法计算学生的年龄。已知第一位学生年龄最小,为10岁,其余学生一个比一个大2岁,求第5位学生的年龄。请将程序补充完整。 #include <stdio.h> int age(int n) { int c; if (n == 1) c = 10; else c = __【5】___; return c; } main() { int n = 5; printf("age(%d)=%d ", n, 【6】 ); } 四、综合应用题(共2小题,每题10分,共20分) 1. 编写程序,输入一个正整数n,计算并输出下列算式的值。 要求定义和调用函数total(n)计算1+1/2+1/3+...+1/n,函数返回值是double类型。 算式:sum = 1 + 1/2 + 1/3 + ... + 1/n 输入示例: 请输入n的值:5 输出示例: sum = 2.283333 2. 用户密码是8537,输入一个密码,如果正确显示“欢迎你!”,若错误给出提示,错误三次则提示“三次密码错误!你不是合法用户!” 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 学科网(北京)股份有限公司 $ 编写说明:本冲刺卷严格依据山东省软件与应用技术类高考考纲编写,依托《编程语言基础—C语言》(高教版第五版),聚焦高三考生冲刺需求,助力高效提分。内容上深度覆盖考纲掌握、理解层级考点,既系统梳理构建知识框架,又强化应用能力训练;同时结合近五年高考真题,精准把握高频考点、命题趋势与题型特点,确保贴合高考方向。 山东省软件与应用技术类 《编程语言基础—C语言》高教版第五版 高频考点冲刺卷(五)解析版 时间:60分钟 总分:100分 班级 姓名 学号 成绩 一、单选题(共25小题,每题2分,共50分) 1. 以下叙述正确的是( )。 A. 在C程序中,main函数必须位于程序的最前面 B. C程序的每行中只能写一条语句 C. C语言本身没有输入输出语句 D. 在对一个C程序进行编译的过程中,可发现注释中的拼写错误 答案:C 解析:C语言中,main函数是程序执行的入口点,但它在源文件中的位置可以是任意的。C语言书写格式自由。一行可以多句,一句也可以写在多行上。C语言本身没有输入输出语句,需要调用库函数。注释是为了说明某语句或语句段的作用,它不影响程序的运行。 2. 以下关于C语言数据类型的叙述中,正确的是( ) A. 枚举类型是基本数据类型 B. 使用typedef定义新类型后,原类型名不再可用 C. 结构体类型中的成员可以是不同的数据类型 D. 数组是一种基本数据类型 答案:C 解析:枚举类型属于用户自定义类型,不属于基本数据类型。typedef是给类型取别名,原类型和新定义的类型都可以用来定义变量。结构体允许将多个不同类型的成员组合在一起。 3. 以下程序的输出结果是( ) #include <stdio.h> main() { int a = 5, b = 3; float c = 1.0/a*b; printf("%.2f ", c); } A. 0.60 B. 0.00 C. 1.67 D. 0.67 答案:A 解析:表达式计算:float c = 1.0 / a * b;运算符/和*优先级相同,且结合性为从左到右,因此等价于(1.0 / a) * b。计算1.0 / 5得到0.2。然后计算0.2 * b,b自动转换为浮点类型,得到0.6。最后将结果赋值给浮点变量c,值为0.6。0.6保留两位小数输出为0.60 4. 设int x=1, y=1; 表达式(!x||y--)的值是( ) A. 0 B. 1 C. 2 D. -1 答案:B 解析:运算符!的优先级为2,||的优先级为12,--的优先级为2,所以可以要先计算!x(!1)值为0.y--为后自增,所以先使用y的值1,y的值再增为1。再计算0||1的值为1。 5. 以下程序的输出结果是( ) #include <stdio.h> main() { int a = 0, b = 0, c = 0; if (++a > 0 || ++b > 0) ++c; printf("%d,%d,%d", a, b, c); } A. 1,0,1 B. 1,1,1 C. 0,1,1 D. 0,0,1 答案:A 解析:条件判断:(++a > 0 || ++b > 0)先计算++a:a自增为1,表达式++a的值为1。然后判断1 > 0为真。表达式++a>0||++b>0发生逻辑短路,++b>0不再执行。执行++c,使c自增为1。所以最终的输出结果:1,0,1。 6. 以下程序的输出结果是( ) #include <stdio.h> main(){ int i; for (i = 0; i < 3; i++) switch (i) { case 0: printf("%d", i); case 2: printf("%d", i); default: printf("%d", i); } } A. 000122 B. 022111 C. 021021 D. 012 答案:A 解析:for循环中i取值0、1、2。switch语句没有break,会顺序执行匹配到的case及其后的所有语句。 循环过程: i=0:匹配case 0,执行三个printf,输出三个0 →000。 i=1:无匹配case,直接执行default,输出一个1 →1。 i=2:匹配case 2,执行后两个printf,输出两个2 →22。 所以最终的输出结果为000122。 7. 以下程序的输出结果是( ) #include <stdio.h> int main() { int i, j, n = 0; for (i = 0; i < 2; i++) { n++; for (j = 0; j < 3; j++) { if (j % 2) continue; n++; } n++; } printf("n=%d ", n); } A. n=12 B. n=8 C. n=6 D. n=4 答案:B 解析:外层循环执行 2 次(i=0 和 i=1),每次循环包含三步: ①:n++ ②:内层循环(j=0,1,2):当 j 为偶数时(0 或 2)执行n++,共执行 2 次。 ③:n++ 具体执行过程: i=0:n 从 0 → 1(第一步)→ 2(j=0)→ 3(j=2)→ 4(第三步) i=1:n 从 4 → 5 → 6(j=0)→ 7(j=2)→ 8 最终n=8。 8. 以下对一维数组a的正确定义是( ) A. int a(10); B. int n=10, a[n]; C. int n; scanf("%d", &n); int a[n]; D. #define SIZE 10 int a[SIZE]; 答案:D 解析:A 的格式不对;定义数组时,长度不能为变量,B、C不对; 9. 以下程序的输出结果是( ) #include <stdio.h> main() { int a[3][3] = { {1,2,3},{4,5,6},{7,8,9} }; int i, s = 0; for (i = 0; i < 3; i++) s += a[i][i]; printf("%d", s); } A. 15 B. 45 C. 6 D. 24 答案:A 解析:求对角线上数值的和 10.以下关于函数的叙述中,正确的是( ) A. 函数必须返回一个值 B. 函数可以嵌套定义 C. 函数可以嵌套调用 D. 函数可以没有参数,但必须指定返回类型 答案:C 解析:C语言中,函数可以没有返回值,使用void类型声明即可。C语言不允许在函数内部定义另一个函数(嵌套定义)。C语言允许函数之间相互调用,包括递归调用(函数调用自身)和间接调用。当函数没有参数时,系统默认为int。 11. 以下程序的输出结果是( ) #include <stdio.h> int f(int x) { static int y = 1; y++; return x + y; } main() { int a = 2, i; for (i = 0; i < 3; i++) printf("%d ", f(a)); } A. 4 5 6 B. 4 4 4 C. 4 6 8 D. 3 4 5 答案:A 解析:static int y = 1;,y是 f 函数内的静态局部变量,只在第一次调用f()时初始化为1,之后调用不会再初始化,而是保留上一次调用后的值。 f(a)函数调用 第一次调用f(2):y 初始值为1; y++ → y = 2;返回值:x+y=4; 第二次调用f(2):y保留2;y++→y = 3;返回值:2 + 3 = 5; 第三次调用f(2):y = 3;y++→y = 4;返回值:2 + 4 = 6;所以输出结果为4 5 6 12. 以下程序的输出结果是( ) #include <stdio.h> void fun(int x, int y, int *z) { *z = x > y ? x : y; } int main() { int a = 3, b = 5, c = 0; fun(a, b, &c); printf("%d", c); } A. 0 B. 3 C. 5 D. 8 答案:A 解析:x、y为单向值传递,z是指针变量,指向int类型变量,传递的地址,即将变量c的地址传递给z,让指针z指向变量c,当改变了*z的值即改变了c的值。 13. 以下程序的输出结果是( ) #include <stdio.h> main() { char str[] = "ABCD", *p = str; printf("%d ", *(p + 4)); } A. 68 B. 0 C. 字符'D'的地址 D. 不确定的值 答案:B 解析:p+4指向str[4],即下标为4的元素。str[4] = '\0'。所以*(p + 4)就是str[4],即空字符'\0'。 14. 以下程序的输出结果是( ) #include <stdio.h> main() { int a[5] = { 2,4,6,8,10 }, *p = a, **k = &p; printf("%d ", *(p++)); printf("%d ", **k); } A. 2 4 B. 2 2 C. 4 4 D. 4 6 答案:A 解析:变量p为指针变量,指向数组a的首地址,变量k为指向指针变量p的指针。*(p++)为后自增,所以先输出2后,p再自增为a[1]的地址,所以**k的值为4. 15. 以下程序的输出结果是( ) #include <stdio.h> struct st { int x; int *y; } *p; int dt[4] = { 10,20,30,40 }; struct st aa[4] = { 50,&dt[0],60,&dt[1],70,&dt[2],80,&dt[3] }; main() { p = aa; printf("%d,", ++p->x); printf("%d,", (++p)->x); printf("%d ", ++(*p->y)); } A.51,60,21 B. 50,60,21 C. 51,60,20 D. 50,60,20 答案:A 解析:p是全局指针,指向struct st类型,aa数组的初始值对应结构体的两个成员(x, y): aa[0] = {50, &dt[0]};aa[1] = {60, &dt[1]};aa[2] = {70, &dt[2]};aa[3] = {80, &dt[3]}。第一个printf中,->高于++,p->x是aa[0].x,即50。++p->x等价于++(p->x),将aa[0].x从50增加到51,表达式的值是51,此时p仍然指向aa[0]。aa[0].x现在是51,aa[0].y仍然指向dt[0]。第二个printf中,(++p):先让p自增,指向aa[1],然后取这个新p的x成员。aa[1].x初始是60。此时p指向aa[1]。第三个printf中,p->y,p指向aa[1],其y成员是&dt[1](指向dt[1])。*p->y就是dt[1],当前值为20。++(*p->y)等价于++(dt[1]),将dt[1]从20增加到21,表达式的值是21。 16. 有如下程序 int func(int a,int b) { return(a+b);} void main() { int x=2,y=5,z=8,r; r=func(func(x,y),z); printf(“%d ”,r); } 该程序的输出结果是( ) A.12 B. 13 C. 14 D. 15 答案:D 解析:函数嵌套调用,先调用func(2,5),返回值7,再调用func(7,8),返回值为15。 17. 以下程序的输出结果是( ) #include <stdio.h> #define SQR(x) x*x main() { int a = 10, k = 2, m = 1; a /= SQR(k + m) / SQR(k + m); printf("%d ", a); } A. 10 B. 1 C. 9 D. 0 答案:B 解析:宏定义SQR(x)代替x*x,所以表达式可以展开为: a/=k+m*k+m/k+m*k+m=2+1*2+1/2+1*2+1,即a/=7,最终a的值为1 18. 以下程序的输出结果是( ) #include <stdio.h> void f(int x, int *y) { x = *y; *y = x; } main() { int a = 3, b = 5; f(a, &b); printf("%d %d", a, b); } A. 3 5 B. 5 5 C. 3 3 D. 5 3 答案:A 解析:调用f( )函数,传递的是变量a的值和变量b的地址。执行函数f,将y所指向的变量b里的值赋值给x,再将x的值赋值给y所指向的变量b,所以b里的值还是5,而a只进行值传递,所以值保持不变。 19. 以下程序的输出结果是( ) #include <stdio.h> main() { int a[3][4] = { 1,3,5,7,9,11,13,15,17,19,21,23 }; int (*p)[4] = a, i, j, k = 0; for (i = 0; i < 3; i++) for (j = 0; j < 2; j++) k += *(*(p + i) + j); printf("%d", k); } A. 60 B. 68 C. 99 D. 108 答案:A 解析:p是指向包含4个int的数组的指针,p指向二维数组a的第一行(即a[0]),p +i指向第i行。*(*(p+i)+j)与a[i][j]等价。所以加到k中包括a[0][0]、a[0][1]、a[1][0]、a[1][1]、a[2][0、]a[2][1]的值,所以k的值为60。 20. 以下程序的输出结果是( ) #include <stdio.h> main() { char s[] = "12345"; s[2] = '\0'; printf("%d", strlen(s)); } A. 5 B. 2 C. 1 D. 0 答案:B 解析:strlen()计算从起始地址到第一个'\0'字符的长度。字符数组中的s[2]被赋值为'\0',所以数组的长度为2。 21. 以下程序的输出结果是( ) #include <stdio.h> void fun(int *a, int n) { int i, j, t; for (i = 0; i < n - 1; i++) for (j = i + 1; j < n; j++) if (a[i] < a[j]) { t = a[i]; a[i] = a[j]; a[j] = t; } } main() { int aa[10] = { 1,2,3,4,5,6,7,8,9,10 }, i; fun(aa + 2, 5); for (i = 0; i < 10; i++) printf("%d,", aa[i]); } A. 1,2,3,4,5,6,7,8,9,10, B. 1,2,7,6,5,4,3,8,9,10, C. 1,2,7,6,5,8,9,10,3,4, D. 1,2,9,8,7,6,5,4,3,10, 答案:B 解析:函数调用传递的是a[2]的地址,而函数fun的功能是由大到小排序,传递的长度为5,所以数组中从a[2]到a[6]开始进行大小排序。最终输出1,2,7,6,5,4,3,8,9,10,。 22. 以下程序的输出结果是( ) #include <stdio.h> int f(int n) { if (n == 1) return 1; else return f(n - 1) + 1; } main() { int i, j = 0; for (i = 1; i < 3; i++) j += f(i); printf("%d ", j); } A. 1 B. 2 C. 3 D. 4 答案:C 解析:f()是一个递归函数:f(1) = 1;f(2) = f(1) + 1 = 1 + 1 = 2;f(3) = f(2) + 1 = 2 + 1 = 3。循环只循环2次,i=1,2。所以j=1+2=3。 23.以下程序的输出结果是( ) #include <stdio.h> main() { int a = 1, b = 2, c = 3, d = 0; if (a == 1 && b++ == 2) if (b != 2 || c-- != 3) printf("%d,%d,%d ", a, b, c); else printf("%d,%d,%d ", a, b, c); else printf("%d,%d,%d ", a, b, c); } A. 1,2,3 B. 1,3,2 C. 1,3,3 D. 1,2,2 答案:C 解析:初始:a=1, b=2, c=3,第一个if条件:a==1 → true,b++==2 → true(比较时b=2,之后b变为3)整体条件为true → 进入第二个if。第二个if条件:b!=2 → true(此时b=3) 逻辑或短路:第二个条件c--!=3不执行!整体条件为true → 执行第一个printf,输出:a=1, b=3, c=3。 24. 以下程序的输出结果是( ) #include <stdio.h> main() { int x = 0, y = 5, z = 3; while (z-- > 0 && ++x < 5) y = y - 1; printf("%d,%d,%d", x, y, z); } A. 3,2,-1 B. 3,2,0 C. 4,3,-1 D. 5,-2,-5 答案:C 解析:初始:x=0, y=5, z=3,第1次循环:z-- > 0: z=3>0 true, z变为2,++x < 5: x先增为1,1<5 true,条件为true → y=4;第2次循环:z-- > 0: z=2>0 true, z变为1,++x < 5: x先增为2, 2<5,true,条件为true → y=3;第3次循环:z-- > 0: z=1>0 true, z变为0,++x < 5: x先增为3, 3<5 true,条件为true → y=2;第4次尝试:z-- > 0: z=0>0 false, z变为-1,短路计算:++x<5不执行,条件为false → 循环结束,最终:x=3, y=2, z=-1。 25.以下程序的输出结果是( ) #include <stdio.h> main() { int i, k, a[10], p[3]; k = 5; for (i = 0; i < 10; i++) a[i] = i; for (i = 0; i < 3; i++) p[i] = a[i * (i + 1)]; for (i = 0; i < 3; i++) k += p[i] * 2; printf("%d", k); } A. 20 B. 21 C. 22 D. 23 答案:C 解析:第一个循环初始化数组a,第二个循环初始化数组p。 当i=0:索引=0*(0+1)=0,所以p[0]=a[0]=0。 当i=1:索引=1*(1+1)=1*2=2,所以p[1]=a[2]=2。 当i=2:索引=2*(2+1)=2*3=6,所以p[2]=a[6]=6。 所以p数组:p[0]=0, p[1]=2, p[2]=6。 第三个循环:更新k。初始k=5 当i=0:k += p[0]*2 = 0*2 = 0,所以k保持5。 当i=1:k += p[1]*2 = 2*2 = 4,所以k=5+4=9。 当i=2:k += p[2]*2 = 6*2 = 12,所以k=9+12=21。 输出为21。 二、简答题(共3小题,每题5分,共15分) 1. 请阅读程序并写出运行结果。 #include <stdio.h> main() { int i; long s = 0, t = 1; for (i = 1; i <= 10; i++) { t = t * i; s = s + t; } printf("1!+2!+...+10! = %ld ", s); } 答案:1!+2!+...+10! = 4037913 解析:求1-10的阶乘的和。 2. 以下程序的功能是:输入10个整数,将其中最小的数与第一个数交换,最大的数与最后一个数交换。请找出程序中的错误并改正。 #include <stdio.h> main() { int a[10], i, max, min, t; printf("input 10 numbers:"); for (i = 0; i < 10; i++) scanf("%d", a[i]); max = min = 0; for (i = 1; i < 10; i++) { if (a[i] > a[max]) max = i; if (a[i] < a[min]) min = i; } t = a[0]; a[0] = a[min]; a[min] = t; t = a[9]; a[9] = a[max]; a[max] = t; printf("after swapped:"); for (i = 0; i < 10; i++) printf("%d ", a[i]); } 答案: (1)scanf("%d", a[i])应该使用地址符&a[i] (2)先交换最小值,如果最大值在0位置,再交换最大值 if (max == 0) max = min; 3.阅读程序并写出运行结果(假设输入为"Hello World 123!@")。 #include <stdio.h> #include <ctype.h> main() { char str[100]; int i, letter = 0, digit = 0, space = 0, other = 0; gets(str); for (i = 0; str[i] != '\0'; i++) { if (isalpha(str[i])) letter++; else if (isdigit(str[i])) digit++; else if (isspace(str[i])) space++; else other++; } printf("letter=%d,digit=%d,space=%d,other=%d ", letter, digit, space, other); } 答案:letter=10,digit=3,space=2,other=2 解析:字母10个,数字3个,空格2个,其他字符2个 三、案例分析题(共3小题,每题5分,共15分) 1. 以下程序的功能是:输出100以内能被3整除且个位数为6的所有整数。请将程序补充完整。 #include <stdio.h> main() { int i, j; for (i = 0; 【1】 ; i++) { j = i * 10 + 6; if ( 【2】 ) continue; printf("%d ", j); } } 答案: 【1】i < 10 【2】j % 3 != 0 2. 以下程序的功能是:将字符串中的数字字符删除后输出。请将程序补充完整。 #include <stdio.h> #include <ctype.h> main() { char str[80]; int i, j; gets(str); for (i = 0, j = 0; str[i] != '\0'; i++) if (___【3】___) str[j++] = str[i]; __【4】____ = '\0'; puts(str); } 答案: 【3】!(str[i]>=’0’&&str[i]<=’9’) 【4】str[j] 解析:保留非数字字符,最后添加字符串结束符。 3. 以下程序的功能是:用递归方法计算学生的年龄。已知第一位学生年龄最小,为10岁,其余学生一个比一个大2岁,求第5位学生的年龄。请将程序补充完整。 #include <stdio.h> int age(int n) { int c; if (n == 1) c = 10; else c = __【5】___; return c; } main() { int n = 5; printf("age(%d)=%d ", n, 【6】 ); } 答案: 【5】age(n-1)+2 【6】age(n) 四、综合应用题(共2小题,每题10分,共20分) 1. 编写程序,输入一个正整数n,计算并输出下列算式的值。 要求定义和调用函数total(n)计算1+1/2+1/3+...+1/n,函数返回值是double类型。 算式:sum = 1 + 1/2 + 1/3 + ... + 1/n 输入示例: 请输入n的值:5 输出示例: sum = 2.283333 答案: 参考程序: #include <stdio.h> double total(int n) { double sum = 0.0; int i; for (i = 1; i <= n; i++) sum += 1.0 / i; return sum; } int main() { int n; double sum; printf("请输入n的值:"); scanf("%d", &n); sum = total(n); printf("sum = %lf ", sum); return 0; } 2. 用户密码是8537,输入一个密码,如果正确显示“欢迎你!”,若错误给出提示,错误三次则提示“三次密码错误!你不是合法用户!” 答案: 参考程序:#include <stdio.h> main() { int password,count=1; while (1) { printf("请输入密码:"); scanf("%d",&password); if ( password==8537) { printf("欢迎你! "); break; } else if(count<3) { printf("密码错误! "); count ++ ; } else { printf("三次密码错误!你不是合法用户! "); break; } } } 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 学科网(北京)股份有限公司 $

资源预览图

《C语言程序设计》(高教版)山东省(春季高考)软件与应用技术 高频考点冲刺卷(五)
1
《C语言程序设计》(高教版)山东省(春季高考)软件与应用技术 高频考点冲刺卷(五)
2
《C语言程序设计》(高教版)山东省(春季高考)软件与应用技术 高频考点冲刺卷(五)
3
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。