《编程语言基础-C语言》(高教版第5版)期末复习卷(六)(山东版)

2026-04-17
| 2份
| 17页
| 37人阅读
| 0人下载

资源信息

学段 中职
学科 职教专业课
课程 C语言程序设计
教材版本 C语言程序设计高教版(第五版)全一册
年级 高一
章节 第2章 基本数据类型与简单程序设计,第4章 循环结构程序设计,第6章 函数
类型 题集-专项训练
知识点 数据类型和简单程序设计,分支结构,循环结构,数组,函数
使用场景 同步教学-期末
学年 2026-2027
地区(省份) 山东省
地区(市) -
地区(区县) -
文件格式 ZIP
文件大小 129 KB
发布时间 2026-04-17
更新时间 2026-04-17
作者 xkw_063129603
品牌系列 学易金卷·期末模拟卷
审核时间 2026-04-17
下载链接 https://m.zxxk.com/soft/57395825.html
价格 3.00储值(1储值=1元)
来源 学科网

内容正文:

《编程语言基础-C语言》(高教版第5版) 期末复习卷(六)原卷版 时间:90分钟 总分:100分 班级 姓名 学号 成绩 一、单项选择题(本题共20小题,每小题2分,共40分) 1、以下关于C语言变量和常量的叙述中,正确的是( ) A. 宏定义 #define PI 3.14 定义的是一个浮点型常量,占用内存 B. const int a = 10; 定义了一个只读变量,其值不能修改 C. 全局变量未初始化时,其值是随机数 D. 静态局部变量在函数调用结束后立即被销毁 2、若有定义:int x=2, y=3, z=4; 则表达式 x += y *= z -= 2 的值是( ) A. 6 B. 8 C. 10 D. 12 3、以下程序的输出结果是( ) int a=1, b=2, c=3; if (a=5) c = a++; else if (b=4) b++; printf("%d,%d,%d", a, b, c); A. 5,2,5 B. 6,2,5 C. 5,4,5 D. 6,4,5 4、以下程序输出结果是( ) int i=1, s=0; while(i<=5) { if(i%3==0) { i++; continue; } s += i; i++; } printf("%d", s); A. 8 B. 9 C. 10 D. 12 5、若有定义:int a[5]={1,3,5,7,9}, *p=a+2; 则 p[-1] + *(p+1) 的值是( ) A. 10 B. 12 C. 14 D. 16 6、以下程序输出结果是( ) int a[3][3]={1,2,3,4,5,6,7,8,9}; int i,j,s=0; for(i=0;i<3;i++) for(j=i;j<=i;j++) if(i+j==2) s+=a[i][j]; printf("%d",s); A. 15 B. 14 C. 13 D. 12 7、以下程序输出结果是( ) #include <stdio.h> #include <string.h> void fun(char *s) { char *p = s; while(*p) p++; p--; while(s < p) { char t = *s; *s = *p; *p = t; s++; p--; } } main() { char str[] = "abcde"; fun(str); printf("%s", str); } A. abcde B. edcba C. edcba D. 编译错误 8、若有定义:int a[4]={10,20,30,40}, *p=a, *q=&a[2]; 则 q - p 的值是( ) A. 2 B. 4 C. 8 D. 20 9、以下函数调用 fun(5) 的返回值是( ) int fun(int n) { if(n==1) return 1; return fun(n-1) + n; } A. 10 B. 15 C. 20 D. 25 10、有以下定义: struct stu { int id; int score; } s[3] = {{1,80},{2,90},{3,85}}; struct stu *p = s; 则 (p+1)->score 的值是( ) A. 80 B. 90 C. 85 D. 随机 11、若有定义:char *p = "Hello"; char *q = "World"; 则执行 strcat(p, q); 的结果是( ) A. "HelloWorld" B. "Hello" C. 编译错误或运行时错误 D. "WorldHello" 12、以下程序输出结果是( ) void swap(int *a, int *b) { int *t = a; a = b; b = t; } main() { int x=3, y=5; swap(&x, &y); printf("%d,%d", x, y); } A. 3,5 B. 5,3 C. 3,3 D. 5,5 13、以下程序输出结果是( ) int a[5] = {1,2,3,4,5}; int i, s=0; for(i=0; i<5; i++) if(i%2) s += a[i]; printf("%d", s); A. 6 B. 9 C. 10 D. 15 14、若有定义:#define PRODUCT(x,y) (x*y);则int a=5, b=PRODUCT(++a, a++); 后,b的值是( ) A. 27 B. 64 C. 24 D. 42 15、若有定义:int a[2][3] = {1,2,3,4,5,6}; 则 *(a[1]+1) 的值是( ) A. 2 B. 3 C. 4 D. 5 16、以下程序输出结果是( ) char *s = "abcde"; s += 2; printf("%c", *s); A. a B. b C. c D. d 17、若有定义:struct { int x; } a, *p=&a; 则下列给x赋值为10正确的是( ) A. p.x = 10; B. (*p).x = 10; C. a->x = 10; D. &p->x = 10; 18、以下递归函数的功能是( ) int fun(int a[], int n) { if (n==0) return 0; return a[n-1] + fun(a, n-1); } A. 计算数组最大值 B. 计算数组元素之和 C. 计算数组元素个数 D. 反转数组 19、以下程序输出结果是( ) int x=0, y=0; while(x<3) { y++; if(y>2) break; x++; } printf("%d,%d", x, y); A. 2,3 B. 3,3 C. 2,2 D. 3,2 20、以下程序输出结果是( ) int a=1, b=2, c=3; int *p[] = {&a, &b, &c}; printf("%d", (p+1)); A. 1 B. 2 C. 3 D. 地址值 二、多选题(本题共5小题,每小题3分,共15分) 1、以下关于C语言函数参数的叙述中,正确的有( ) A. 形参是局部变量,函数调用时分配内存,结束时释放 B. 实参可以是常量、变量或表达式 C. 数组名作为实参时,传递的是数组首元素的地址 D. 形参和实参可以同名,它们占据不同的内存单元 2、以下关于指针的叙述中,正确的有( ) A. 指针变量可以指向同类型的不同变量 B. 指针变量可以指向数组元素 C. 指针变量可以指向函数 D. 指针变量可以指向另一个指针 3、以下关于二维数组的叙述中,正确的有( ) A. 二维数组在内存中是按行优先存储的 B. 数组名a代表首行的首地址 C. a[i][j] 等价于 *(*(a+i)+j) D. 二维数组作为函数参数时,第二维必须指定 4、以下关于字符串的叙述中,正确的有( ) A. 字符串以\0结尾,所以字符数组长度至少比字符串长度大1 B. strcpy函数复制字符串时会复制结尾的\0 C. strcat函数连接字符串时,会覆盖第一个字符串的\0 D. strcmp函数比较字符串时,返回0表示相等 5、以下关于递归函数的叙述中,正确的有( ) A. 递归函数必须有一个递归结束条件 B. 递归函数效率通常低于循环 C. 递归函数每次调用都会占用新的栈空间 D. 任何问题都适合用递归解决 三、判断题(本题共10小题,每小题1分,共10分) 1、在C语言中,do-while循环的循环体至少执行一次。( ) 2、若有定义 int a=0, b=2, c=3; 则表达式 (a=0) && (c=4) 执行后,变量c的值仍然是3。( ) 3、break语句只能用于循环结构中。( ) 4、静态局部变量在函数调用结束后其值不变,下次调用时继续使用。( ) 5、数组名作为函数参数时,被调函数中可以修改原数组的元素值。( ) 6、结构体变量不能进行整体赋值。( ) 7、若有定义 int *p; 则 p 的默认值是NULL。( ) 8、#define 定义的宏常量在编译时进行替换,不占用内存。( ) 9、函数的形参和实参可以同名,它们占用不同的内存单元。( ) 10、char *s = "hello"; 和 char t[] = "hello"; 中,s 可以修改字符串内容,t 不可以。 四、填空题(共10小题,每小题1分,共10分) 1、若有定义:int a=10, b=3; 则表达式 a % b + a / b 的值是( )。 2、若有定义:int a[3][2] = {{1,2},{3,4},{5,6}}; 则 a[2][1] 的值是( )。 3、以下程序段输出结果是( )。 int i, s=0; for(i=1; i<=6; i++) if(i%2==0) s+=i; else s-=i; printf("%d", s); 4、若有定义:char *p = "C Programming"; 则 *(p+5) 的值是( )。 5、函数调用时,如果希望形参的改变影响实参,应该传递实参的( )。 6、若有定义:int x=5, y=6; 则执行 x = x ^ y; y = x ^ y; x = x ^ y; 后,x和y的值分别是( )和( )。 7、以下程序输出结果是( )。 int a=2, b=3; printf("%d", a>b ? a : b); 8、若有定义:struct { int id; char name[20]; } stu = {1001, "Zhang"}; 则 stu.name[0] 的值是( )。 9、若有定义:int a[5]={2,4,6,8,10}, *p=a+4; 则 *(p-2) 的值是( )。 10、以下递归函数的功能是计算( )。 int fun(int n) { if (n==0) return 1; return n * fun(n-1); } 五、简答题(本题共3题,每题5分,共15分) 1、简述C语言中 if-else 与 switch 的异同点。 2、简述如何通过指针遍历一维数组,并说明指针自增运算的意义。 3、简述递归函数的优缺点。 六、编程题(本题共1小题,每小题10分,共10分) 编写一个函数 void removeOdd(int *arr, int *n),使用指针删除整型数组中的所有奇数,要求: 在原数组上操作,不申请新数组; 删除奇数后,剩余元素保持原顺序,并通过指针 n 返回新数组的长度; - 主函数中先输入数组长度 N(N≤100),再输入N个整数,调用函数,输出删除奇数后的数组元素,每个数占4位宽度。 示例: 输入: 6 1 2 3 4 5 6 输出: 2 4 6 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $ 《编程语言基础-C语言》(高教版第5版) 期末复习卷(六)解析版 时间:90分钟 总分:100分 班级 姓名 学号 成绩 一、单项选择题(本题共20小题,每小题2分,共40分) 1、以下关于C语言变量和常量的叙述中,正确的是( ) A. 宏定义 #define PI 3.14 定义的是一个浮点型常量,占用内存 B. const int a = 10; 定义了一个只读变量,其值不能修改 C. 全局变量未初始化时,其值是随机数 D. 静态局部变量在函数调用结束后立即被销毁 【答案】B 【解析】 A错,宏定义不占用内存,在预处理阶段替换;C错,全局变量未初始化自动赋0;D错,静态局部变量生命周期为整个程序,值保留。B正确。 2、若有定义:int x=2, y=3, z=4; 则表达式 x += y *= z -= 2 的值是( ) A. 6 B. 8 C. 10 D. 12 【答案】B 【解析】 赋值运算符右结合,先算 z-=2 得 z=2,表达式值为2;再 y*=2 得 y=6;最后 x+=6 得 x=8。 3、以下程序的输出结果是( ) int a=1, b=2, c=3; if (a=5) c = a++; else if (b=4) b++; printf("%d,%d,%d", a, b, c); A. 5,2,5 B. 6,2,5 C. 5,4,5 D. 6,4,5 【答案】B 【解析】 if条件 a=5 是赋值,非0为真,执行 c = a++,c=5,a变为6;跳过else部分。最终a=6,b=2,c=5。输出6,2,5。 4、以下程序输出结果是( ) int i=1, s=0; while(i<=5) { if(i%3==0) { i++; continue; } s += i; i++; } printf("%d", s); A. 8 B. 9 C. 10 D. 12 【答案】D 【解析】 i=1: 1%3!=0, s=1,i=2; i=2: 2%3!=0, s=3,i=3; i=3: 3%3==0, i++得4, continue跳过累加; i=4: 4%3!=0, s=7,i=5; i=5: 5%3!=0, s=12,i=6; 循环结束,输出12。 5、若有定义:int a[5]={1,3,5,7,9}, *p=a+2; 则 p[-1] + *(p+1) 的值是( ) A. 10 B. 12 C. 14 D. 16 【答案】B 【解析】 p指向a[2]=5,p[-1]=a[1]=3,*(p+1)=a[3]=7,和为10。 6、以下程序输出结果是( ) int a[3][3]={1,2,3,4,5,6,7,8,9}; int i,j,s=0; for(i=0;i<3;i++) for(j=i;j<=i;j++) if(i+j==2) s+=a[i][j]; printf("%d",s); A. 15 B. 14 C. 13 D. 12 【答案】A 【解析】 累加的元素有(0,2)=3, (1,1)=5, (2,2)=7,和为15。所以选A。 7、以下程序输出结果是( ) #include <stdio.h> #include <string.h> void fun(char *s) { char *p = s; while(*p) p++; p--; while(s < p) { char t = *s; *s = *p; *p = t; s++; p--; } } main() { char str[] = "abcde"; fun(str); printf("%s", str); } A. abcde B. edcba C. edcba D. 编译错误 【答案】B 【解析】 函数实现字符串反转,将"abcde"反转为"edcba"。 8、若有定义:int a[4]={10,20,30,40}, *p=a, *q=&a[2]; 则 q - p 的值是( ) A. 2 B. 4 C. 8 D. 20 【答案】A 【解析】 指针相减得到元素个数差,q指向a[2],p指向a[0],差为2。 9、以下函数调用 fun(5) 的返回值是( ) int fun(int n) { if(n==1) return 1; return fun(n-1) + n; } A. 10 B. 15 C. 20 D. 25 【答案】B 【解析】 fun(5)=fun(4)+5=fun(3)+4+5=...=1+2+3+4+5=15。 10、有以下定义: struct stu { int id; int score; } s[3] = {{1,80},{2,90},{3,85}}; struct stu *p = s; 则 (p+1)->score 的值是( ) A. 80 B. 90 C. 85 D. 随机 【答案】B 【解析】 p指向s[0],p+1指向s[1],score为90。 11、若有定义:char *p = "Hello"; char *q = "World"; 则执行 strcat(p, q); 的结果是( ) A. "HelloWorld" B. "Hello" C. 编译错误或运行时错误 D. "WorldHello" 【答案】C 【解析】 p指向字符串常量,不能修改,strcat试图修改常量区,导致运行时错误。 12、以下程序输出结果是( ) void swap(int *a, int *b) { int *t = a; a = b; b = t; } main() { int x=3, y=5; swap(&x, &y); printf("%d,%d", x, y); } A. 3,5 B. 5,3 C. 3,3 D. 5,5 【答案】A 【解析】 交换的是指针形参本身,不是指针指向的内容,因此x,y不变。 13、以下程序输出结果是( ) int a[5] = {1,2,3,4,5}; int i, s=0; for(i=0; i<5; i++) if(i%2) s += a[i]; printf("%d", s); A. 6 B. 9 C. 10 D. 15 【答案】A 【解析】 i为奇数时累加,即a[1]=2, a[3]=4,和为6。 14、若有定义:#define PRODUCT(x,y) (x*y);则int a=5, b=PRODUCT(++a, a++); 后,b的值是( ) A. 27 B. 64 C. 24 D. 42 【答案】D 【解析】 宏展开后为++a*a++,从右往左计算,先执行完自增后再进行*,7*6=42。 15、若有定义:int a[2][3] = {1,2,3,4,5,6}; 则 *(a[1]+1) 的值是( ) A. 2 B. 3 C. 4 D. 5 【答案】D 【解析】 a[1]是第二行首地址,+1指向第二行第二列,即5。 16、以下程序输出结果是( ) char *s = "abcde"; s += 2; printf("%c", *s); A. a B. b C. c D. d 【答案】C 【解析】 s指向a,s+=2指向c,输出c。 17、若有定义:struct { int x; } a, *p=&a; 则下列给x赋值为10正确的是( ) A. p.x = 10; B. (*p).x = 10; C. a->x = 10; D. &p->x = 10; 【答案】B 【解析】 结构体指针访问成员用->或(*p).,B正确;A错误;C中a是变量,不能用->;D语法错误。 18、以下递归函数的功能是( ) int fun(int a[], int n) { if (n==0) return 0; return a[n-1] + fun(a, n-1); } A. 计算数组最大值 B. 计算数组元素之和 C. 计算数组元素个数 D. 反转数组 【答案】B 【解析】 递归累加最后一个元素加上前n-1个元素的和。 19、以下程序输出结果是( ) int x=0, y=0; while(x<3) { y++; if(y>2) break; x++; } printf("%d,%d", x, y); A. 2,3 B. 3,3 C. 2,2 D. 3,2 【答案】A 【解析】 初始x=0,y=0;第一轮:y=1,y>2?否,x=1;第二轮:y=2,y>2?否,x=2;第三轮:y=3,y>2真,break;此时x=2,y=3。输出2,3。 20、以下程序输出结果是( ) int a=1, b=2, c=3; int *p[] = {&a, &b, &c}; printf("%d", (p+1)); A. 1 B. 2 C. 3 D. 地址值 【答案】D 【解析】 p是指针数组,p+1指向第二个元素(存放b的地址),(p+1)得到b的地址。 二、多选题(本题共5小题,每小题3分,共15分) 1、以下关于C语言函数参数的叙述中,正确的有( ) A. 形参是局部变量,函数调用时分配内存,结束时释放 B. 实参可以是常量、变量或表达式 C. 数组名作为实参时,传递的是数组首元素的地址 D. 形参和实参可以同名,它们占据不同的内存单元 【答案】ABCD 【解析】 所有选项正确。 2、以下关于指针的叙述中,正确的有( ) A. 指针变量可以指向同类型的不同变量 B. 指针变量可以指向数组元素 C. 指针变量可以指向函数 D. 指针变量可以指向另一个指针 【答案】ABCD 【解析】 均正确。 3、以下关于二维数组的叙述中,正确的有( ) A. 二维数组在内存中是按行优先存储的 B. 数组名a代表首行的首地址 C. a[i][j] 等价于 *(*(a+i)+j) D. 二维数组作为函数参数时,第二维必须指定 【答案】ABCD 【解析】 均正确。 4、以下关于字符串的叙述中,正确的有( ) A. 字符串以\0结尾,所以字符数组长度至少比字符串长度大1 B. strcpy函数复制字符串时会复制结尾的\0 C. strcat函数连接字符串时,会覆盖第一个字符串的\0 D. strcmp函数比较字符串时,返回0表示相等 【答案】ABCD 【解析】 均正确。 5、以下关于递归函数的叙述中,正确的有( ) A. 递归函数必须有一个递归结束条件 B. 递归函数效率通常低于循环 C. 递归函数每次调用都会占用新的栈空间 D. 任何问题都适合用递归解决 【答案】ABC 【解析】 D错误,递归可能造成栈溢出,且并非所有问题都适合递归 三、判断题(本题共10小题,每小题1分,共10分) 1、在C语言中,do-while循环的循环体至少执行一次。( ) 【答案】√ 【解析】do-while循环中先执行do后边的语句,在判断循环条件。 2、若有定义 int a=0, b=2, c=3; 则表达式 (a=0) && (c=4) 执行后,变量c的值仍然是3。( ) 【答案】√ 【解析】 逻辑与运算符&&具有短路特性:当左侧表达式为假(0)时,右侧表达式不再计算。(a=0)的值为0,因此(c=4)不被执行,c保持原值3。 3、break语句只能用于循环结构中。( ) 【答案】× 【解析】 break还可用于switch语句中。 4、静态局部变量在函数调用结束后其值不变,下次调用时继续使用。( ) 【答案】√ 【解析】静态局部变量在程序运行开始就给静态局部变量分配内存,运行结束后释放。 5、数组名作为函数参数时,被调函数中可以修改原数组的元素值。( ) 【答案】√ 【解析】数组名做函数参数时,实际上传递的是数组的首地址。 6、结构体变量不能进行整体赋值。( ) 【答案】× 【解析】 同类型的结构体变量可以相互赋值。 7、若有定义 int *p; 则 p 的默认值是NULL。( ) 【答案】× 【解析】 未初始化的指针变量其值不确定,不一定是NULL。 8、#define 定义的宏常量在编译时进行替换,不占用内存。( ) 【答案】√ 【解析】#difine是预处理命令。 9、函数的形参和实参可以同名,它们占用不同的内存单元。( ) 【答案】√ 【解析】形参和实参在内存中分别占用不同的内存单元,形参单元的值改变不会影响到实参单元中的值。 10、char *s = "hello"; 和 char t[] = "hello"; 中,s 可以修改字符串内容,t 不可以。 【答案】× 【解析】 s指向字符串常量,不能修改;t是字符数组,可以修改。 四、填空题(共10小题,每小题1分,共10分) 1、若有定义:int a=10, b=3; 则表达式 a % b + a / b 的值是( )。 【答案】4 【解析】10%3=1,10/3=3,和为4 2、若有定义:int a[3][2] = {{1,2},{3,4},{5,6}}; 则 a[2][1] 的值是( )。 【答案】6 【解析】第三行第二个元素的值。 3、以下程序段输出结果是( )。 int i, s=0; for(i=1; i<=6; i++) if(i%2==0) s+=i; else s-=i; printf("%d", s); 【答案】-3 【解析】1-2+3-4+5-6 = -3 4、若有定义:char *p = "C Programming"; 则 *(p+5) 的值是( )。 【答案】'g' 【解析】C(0),空格(1),P(2),r(3),o(4),g(5),r(6),a(7),m(8),m(9),i(10),n(11),g(12)。所以*(p+5)= 'g'。 5、函数调用时,如果希望形参的改变影响实参,应该传递实参的( )。 【答案】地址 6、若有定义:int x=5, y=6; 则执行 x = x ^ y; y = x ^ y; x = x ^ y; 后,x和y的值分别是( )和( )。 【答案】6, 5 【解析】异或交换 7、以下程序输出结果是( )。 int a=2, b=3; printf("%d", a>b ? a : b); 【答案】3 8、若有定义:struct { int id; char name[20]; } stu = {1001, "Zhang"}; 则 stu.name[0] 的值是( )。 【答案】'Z' 9、若有定义:int a[5]={2,4,6,8,10}, *p=a+4; 则 *(p-2) 的值是( )。 【答案】6 【解析】p指向10,p-2指向6 10、以下递归函数的功能是计算( )。 int fun(int n) { if (n==0) return 1; return n * fun(n-1); } 【答案】n的阶乘 五、简答题(本题共3题,每题5分,共15分) 1、简述C语言中 if-else 与 switch 的异同点。 【答案】 相同点:都用于多分支选择。 不同点:if-else 可以处理范围条件(如大于、小于),switch 只能处理等值判断;switch 的表达式必须是整型或字符型,且case后必须是常量表达式。 2、简述如何通过指针遍历一维数组,并说明指针自增运算的意义。 【答案】 定义指针 p = 数组名,然后通过 p++ 移动指针依次访问每个元素。指针自增 p++ 表示指针指向下一个元素,移动的字节数取决于基类型的大小。例如 int *p,p++ 移动4字节。通过 *p 获取当前元素值。 3、简述递归函数的优缺点。 【答案】 优点:代码简洁,逻辑清晰,适合解决具有递归性质的问题。缺点:效率较低,多次函数调用开销大,可能导致栈溢出。 六、编程题(本题共1小题,每小题10分,共10分) 编写一个函数 void removeOdd(int *arr, int *n),使用指针删除整型数组中的所有奇数,要求: 在原数组上操作,不申请新数组; 删除奇数后,剩余元素保持原顺序,并通过指针 n 返回新数组的长度; - 主函数中先输入数组长度 N(N≤100),再输入N个整数,调用函数,输出删除奇数后的数组元素,每个数占4位宽度。 示例: 输入: 6 1 2 3 4 5 6 输出: 2 4 6 参考【答案】 #include <stdio.h> void removeOdd(int *arr, int *n) { int i, j = 0; for (i = 0; i < *n; i++) { if (arr[i] % 2 == 0) { // 偶数保留 arr[j] = arr[i]; j++; } } *n = j; // 更新长度 } main() { int arr[100], n, i; printf("请输入元素个数:"); scanf("%d", &n); printf("请输入%d个整数:", n); for (i = 0; i < n; i++) { scanf("%d", &arr[i]); } removeOdd(arr, &n); printf("删除奇数后: "); for (i = 0; i < n; i++) { printf("%4d", arr[i]); } printf(" "); } 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $

资源预览图

《编程语言基础-C语言》(高教版第5版)期末复习卷(六)(山东版)
1
《编程语言基础-C语言》(高教版第5版)期末复习卷(六)(山东版)
2
《编程语言基础-C语言》(高教版第5版)期末复习卷(六)(山东版)
3
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。