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

2026-05-11
| 2份
| 15页
| 10人阅读
| 0人下载

资源信息

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

内容正文:

《编程语言基础-C语言》(高教版第5版) 期末复习卷(七)解析版 时间:90分钟 总分:100分 班级 姓名 学号 成绩 一、单项选择题(本题共20小题,每小题2分,共40分) 1、下列四个选项中,均是合法整型常量的选项是( ) A. 010 0XABC 078 0x3f B. 0X1a 072A 1234 2E03 C. 100 0x20 037 0L D. 1,000 0EAB 0x9F 0XG5 答案:C 解析: A中078是八进制但数字8非法;B中072A的A非法,2E03不是常量;D中1,000非法,0EAB非法,0XG5非法。C全部正确。 2、若有定义:int x = 0x12; 则执行 printf("%d", x); 的输出结果是( ) A. 12 B. 18 C. 17 D. 19 答案:B 解析: 0x12是十六进制数,等于1×16+2=18,%d输出十进制18。 3、若有定义:int a=2, b=3, c=4; 则表达式 a = b + c > b = a + c 的值是( ) A. 0 B. 1 C. 2 D. 编译错误 答案:D 解析:关系运算符优先级高于赋值,所以要先计算关系运算符再进行赋值,所以右边的赋值运算符的左边就是表达式,这样不符合赋值运算符的使用规则。 4、下列程序段运行后,a、b、c的值分别为( ) int a=5, b=4, c=3; if (a > b) a = b; b = c; c = a; A. 4,3,4 B. 4,3,3 C. 4,4,3 D. 5,4,3 答案:A 解析: if条件成立,执行a=b,a变为4;然后无条件执行b=c,b=3;c=a,c=4。最终a=4,b=3,c=4。 5、若有定义:int x=10, y=9; 则执行 x = (x>y) ? (x++) : (y++); 后,x和y的值分别是( ) A. 11,9 B. 10,10 C. 11,10 D. 10,9 答案:D 解析:x>y为真,取x++的10(后自增先使用x的值)作为条件表达式的值,同时x进行自增为11,然后再给x赋值为10。y的值保持不变。 6、以下程序段运行后,输出结果是( ) int i=0, s=0; while (i < 5) { if (i % 2) continue; s += i; i++; } printf("%d", s); A. 0 B. 2 C. 4 D. 无限循环 答案:D 解析: i=0时,i%2=0,不执行continue,s+=0,i++得1;i=1时,i%2=1,执行continue,跳过i++,i永远为1,陷入无限循环。 7、若有定义:int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12}; 则 a[1][2] 的值是( ) A. 5 B. 6 C. 7 D. 8 答案:C 解析: 二维数组按行存储,a[1]为第2行(索引1),a[1][2]为第2行第3列,即7。 8、若有定义:int a[5]={1,2,3,4,5}, *p=a+2; 则 p[-1] 的值是( ) A. 1 B. 2 C. 3 D. 4 答案:B 解析: p指向a[2]=3,p[-1]等价于*(p-1)=a[1]=2。 9、有以下程序段,运行后输出结果是( ) char *s = "ABCDE"; s += 2; printf("%c", *s); A. A B. B C. C D. D 答案:C 解析: s指向A,s+=2后指向C,输出C。 10、若有定义:char s[20]="Hello", t[]="World"; 则执行 strcat(s, t); 后,strlen(s) 的值是( ) A. 5 B. 10 C. 11 D. 不确定 答案:B 解析: strcat将"World"连接到"Hello"后,得到"HelloWorld",长度为10。 11、以下函数定义中,正确的是( ) A. int fun(int x, int y) { return x+y; } B. int fun(int x, y) { return x+y; } C. fun(int x, int y) { return x+y; } D. int fun(x, y) { return x+y; } 答案:A 解析: B中y缺类型;C缺返回类型;D参数缺类型。A正确。 12、有以下程序,运行后输出结果是( ) void f(int *x, int y) { *x = *x + y; y = *x + y; } main() { int a=2, b=3; f(&a, b); printf("%d,%d", a, b); } A. 5,3 B. 5,8 C. 2,3 D. 2,8 答案:A 解析: 通过指针修改a为2+3=5;b是传值,不受影响,仍为3。 13、以下递归函数调用 fun(4) 的返回值是( ) int fun(int n) { if (n == 0) return 0; return n + fun(n-1); } A. 4 B. 6 C. 10 D. 0 答案:C 解析: 计算1+2+3+4=10。 14、若有定义:int a=8, *p=&a, **q=&p; 则 *q 的值是( ) A. 8 B. &a C. &p D. 随机 答案:B 解析: q是指向指针p的指针,*q得到p的值,即a的地址。 15、若有定义:int a[3][3]={1,2,3,4,5,6,7,8,9}; 则 *(*(a+1)+1) 的值是( ) A. 2 B. 4 C. 5 D. 6 答案:C 解析: a+1指向第1行,*(a+1)得第1行首地址,+1指向第1行第1列,即5。 16、若有定义:char *p="Programming"; 则 printf("%c", *(p+4)); 输出( ) A. r B. g C. a D. m 答案:B 解析: p指向P,p+4指向第5个字符,即'g'。 17、有以下定义: struct student { int id; char name[10]; } stu1 = {1001, "Tom"}, stu2; 则以下赋值语句正确的是( ) A. stu2 = {1002, "Jerry"}; B. stu2 = stu1; C. stu2.id = 1002; stu2.name = "Jerry"; D. stu2->id = 1002; 答案:B 解析: 同类型结构体变量可以直接赋值;A语法错误;C中不能直接给字符数组赋值字符串;D中stu2不是指针。 18、若有定义:struct point { int x; int y; } p, *q = &p; 则下列能正确给x赋值为5的是( ) A. q.x = 5; B. (*q).x = 5; C. p->x = 5; D. &p.x = 5; 答案:B 解析: 通过结构体指针访问成员用->或(*).,B正确;A错误,应为q->x;C错误,p是变量;D语法错误。 19、若有定义:#define ADD(a,b) a+b,则执行 int x=3, y=4, z=ADD(x,y)*2; 后,z的值是( ) A. 14 B. 11 C. 10 D. 7 答案:B 解析: 宏展开为 x+y*2 = 3+4*2=3+8=11。 20、以下程序输出结果是( ) int a[5] = {1,2,3,4,5}; int i, s=0; for(i=0; i<5; i++) { if(i%2) s += a[i]; else s -= a[i]; } printf("%d", s); A. -3 B. 3 C. -5 D. 5 答案:A 解析: i=0: s=-1;i=1: s=-1+2=1;i=2: s=1-3=-2;i=3: s=-2+4=2;i=4: s=2-5=-3。 二、多选题(本题共5小题,每小题3分,共15分) 1、以下关于C语言数据类型的叙述中,正确的有( ) A. int类型在32位系统中通常占4字节 B. char类型在内存中占1字节 C. float类型占4字节,double占8字节 D. 所有指针类型占相同大小的内存 答案:ABCD 解析: 数据类型的长度取决于机器字长。 2、以下关于循环控制语句的叙述中,正确的有( ) A. break语句可以用于循环和switch中 B. continue语句只能用于循环中 C. break和continue都可以用于for、while、do-while D. 在多层循环中,break只能跳出最内层循环 答案:ABCD 解析: 均正确。 3、以下关于数组初始化的叙述中,正确的有( ) A. int a[5] = {0}; 将a所有元素初始化为0 B. int a[] = {1,2,3}; 数组长度自动设为3 C. int a[5] = {1,2}; 只初始化前两个,其余为0 D. int a[5] = {1,2,3,4,5,6}; 编译会出错 答案:ABCD 解析: 均正确。 4、以下关于字符串的叙述中,正确的有( ) A. 字符串以\0作为结束标志 B. char s[]="abc"; 数组长度为3 C. char *p="abc"; p指向字符串常量,不能通过p修改内容 D. strcmp("abc","abd") 返回负数 答案:ACD 解析: B中数组长度为4(含'\0'),故B错误。 5、以下关于函数的叙述中,正确的有( ) A. 函数可以没有返回值 B. 函数可以嵌套调用,但不能嵌套定义 C. 函数名代表函数的入口地址 D. 函数参数可以是数组名 答案:ABCD 解析: 均正确。 三、判断题(本题共10小题,每小题1分,共10分) 1、在C语言中,标识符可以由字母、数字和下划线组成,且数字不能开头。 答案:√ 解析:标识符的命名原则。 2、若有定义 int a=5, b=2; 则 a/b 的结果是2.5。 答案:× 解析:整数相除结果仍为整数a/b=2。 3、在switch语句中,case后面的常量表达式可以是变量。 答案:× 解析:case标号是整型数(包括字符型)或整型常量表达式。 4、do-while循环的循环体至少执行一次。 答案:√ 解析:do-while循环的特点:先执行循环体,后判断条件,至少执行一次循环体。 5、数组名作为函数参数时,传递的是整个数组的拷贝。 答案:× 解析:数组名作为函数参数时,传递的是整个数组的地址。 6、静态局部变量在函数调用结束后其值保留。 答案:√ 解析:在程序运行开始就给静态局部变量分配内存,运行结束后释放。 7、结构体变量可以直接进行关系运算比较大小。 答案:× 解析:结构体变量需要逐个比较其成员变量。 8、若有定义 int *p; 则p的值是NULL。 答案:× 解析:未进行初始化,p的值为随机值。 9、#include <stdio.h> 是一个预处理命令,末尾不需要分号。 答案:√ 解析:预处理命令不算程序语句不需要加分号。 10、char s[]="hello"; 等价于 char s[5]="hello";。 答案:× 解析:char s[5]="hello"初始化错误,存储字符串"hello"需要至少6个存储空间。 四、填空题(共10小题,每小题1分,共10分) 1、若有定义:int a=7, b=2; 则表达式 a % b 的值是( )。 答案:1 2、若有定义:int a[4]={2,4,6,8}, *p=a; 则 *(p+2) 的值是( )。 答案:6 3、以下程序段输出结果是( )。 int i, s=0; for(i=1; i<=4; i++) if(i%2==0) s+=i; else s-=i; printf("%d", s); 答案:-2 解析:1-2+3-4=-2。 4、若有定义:char str[]="C Language"; 则 strlen(str) 的值是( )。 答案:10 5、函数调用时,如果希望形参的改变影响实参,则应该使用( )传递方式。 答案:地址(或指针) 6、若有定义:int x=5, y=6; 则执行 x = x ^ y; y = x ^ y; x = x ^ y; 后,x和y的值分别是( )和( )。 答案:6,5 解析:异或交换 7、以下递归函数的功能是计算( )。 int fun(int n) { if (n==1) return 1; return n * fun(n-1); } 答案:n的阶乘 8、若有定义:struct { int a; char b; } s = {5, 'A'}; 则 s.b 的值是( )。 答案:'A' 9、若有定义:int a[3][2]={1,2,3,4,5,6}; 则 a[2][1] 的值是( )。 答案:6 10、以下程序输出结果是( )。 int a=3, b=4; printf("%d", a>b ? a : b); 答案:4 五、简答题(本题共3题,每题5分,共15分) 1、简述break和continue在多层循环中的行为区别,并举例说明如何跳出外层循环。 答案:break只能跳出最内层循环,continue只能跳过本次循环的剩余语句。要跳出外层循环,可以使用标志变量或goto语句。例如: int flag=0; for(i=0; i<10 && !flag; i++) { for(j=0; j<10; j++) { if(条件) { flag=1; break; } } } 2、请说明int *p[4]和int (*p)[4]的区别,并举例说明各自的使用场景。 答案:int *p[4]是指针数组,有4个元素,每个元素是指向int的指针;int (*p)[4]是数组指针,p指向一个包含4个int元素的一维数组。前者常用于存储多个字符串或动态分配的行指针,后者常用于二维数组的行指针操作。 3、简述递归函数的优缺点,并写出计算斐波那契数列第n项的递归函数。 答案:优点:代码简洁,逻辑清晰,适合解决具有递归性质的问题。缺点:效率低,多次函数调用开销大,可能栈溢出。递归函数示例: int fib(int n) { if (n<=2) return 1; return fib(n-1) + fib(n-2); } 六、编程题(本题共1小题,每小题10分,共10分) 编写一个函数 void replaceChar(char *str, char oldChar, char newChar),使用指针将字符串中的所有指定字符替换为新字符。 要求:在函数中必须使用指针遍历字符串,不能使用数组下标。主函数中输入一个字符串、要替换的字符和替换后的字符,调用函数,输出替换后的字符串。 示例: 输入: hello world l x 输出: hexxo worxd 参考答案: #include <stdio.h> void replaceChar(char *str, char oldChar, char newChar) { while (*str != '\0') { if (*str == oldChar) *str = newChar; str++; } } main() { char str[100]; char old, new; printf("请输入字符串:"); gets(str); printf("请输入要替换的字符:"); scanf("%c", &old); getchar(); printf("请输入替换后的字符:"); scanf("%c", &new); replaceChar(str, old, new); printf("替换后:%s ", str); } 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $ 《编程语言基础-C语言》(高教版第5版) 期末复习卷(七)原卷版 时间:90分钟 总分:100分 班级 姓名 学号 成绩 一、单项选择题(本题共20小题,每小题2分,共40分) 1、下列四个选项中,均是合法整型常量的选项是( ) A. 010 0XABC 078 0x3f B. 0X1a 072A 1234 2E03 C. 100 0x20 037 0L D. 1,000 0EAB 0x9F 0XG5 2、若有定义:int x = 0x12; 则执行 printf("%d", x); 的输出结果是( ) A. 12 B. 18 C. 17 D. 19 3、若有定义:int a=2, b=3, c=4; 则表达式 a = b + c > b = a + c 的值是( ) A. 0 B. 1 C. 2 D. 编译错误 4、下列程序段运行后,a、b、c的值分别为( ) int a=5, b=4, c=3; if (a > b) a = b; b = c; c = a; A. 4,3,4 B. 4,3,3 C. 4,4,3 D. 5,4,3 5、若有定义:int x=10, y=9; 则执行 x = (x>y) ? (x++) : (y++); 后,x和y的值分别是( ) A. 11,9 B. 10,10 C. 11,10 D. 10,9 6、以下程序段运行后,输出结果是( ) int i=0, s=0; while (i < 5) { if (i % 2) continue; s += i; i++; } printf("%d", s); A. 0 B. 2 C. 4 D. 无限循环 7、若有定义:int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12}; 则 a[1][2] 的值是( ) A. 5 B. 6 C. 7 D. 8 8、若有定义:int a[5]={1,2,3,4,5}, *p=a+2; 则 p[-1] 的值是( ) A. 1 B. 2 C. 3 D. 4 9、有以下程序段,运行后输出结果是( ) char *s = "ABCDE"; s += 2; printf("%c", *s); A. A B. B C. C D. D 10、若有定义:char s[20]="Hello", t[]="World"; 则执行 strcat(s, t); 后,strlen(s) 的值是( ) A. 5 B. 10 C. 11 D. 不确定 11、以下函数定义中,正确的是( ) A. int fun(int x, int y) { return x+y; } B. int fun(int x, y) { return x+y; } C. fun(int x, int y) { return x+y; } D. int fun(x, y) { return x+y; } 12、有以下程序,运行后输出结果是( ) void f(int *x, int y) { *x = *x + y; y = *x + y; } main() { int a=2, b=3; f(&a, b); printf("%d,%d", a, b); } A. 5,3 B. 5,8 C. 2,3 D. 2,8 13、以下递归函数调用 fun(4) 的返回值是( ) int fun(int n) { if (n == 0) return 0; return n + fun(n-1); } A. 4 B. 6 C. 10 D. 0 14、若有定义:int a=8, *p=&a, **q=&p; 则 *q 的值是( ) A. 8 B. &a C. &p D. 随机 15、若有定义:int a[3][3]={1,2,3,4,5,6,7,8,9}; 则 *(*(a+1)+1) 的值是( ) A. 2 B. 4 C. 5 D. 6 16、若有定义:char *p="Programming"; 则 printf("%c", *(p+4)); 输出( ) A. r B. g C. a D. m 17、有以下定义: struct student { int id; char name[10]; } stu1 = {1001, "Tom"}, stu2; 则以下赋值语句正确的是( ) A. stu2 = {1002, "Jerry"}; B. stu2 = stu1; C. stu2.id = 1002; stu2.name = "Jerry"; D. stu2->id = 1002; 18、若有定义:struct point { int x; int y; } p, *q = &p; 则下列能正确给x赋值为5的是( ) A. q.x = 5; B. (*q).x = 5; C. p->x = 5; D. &p.x = 5; 19、若有定义:#define ADD(a,b) a+b,则执行 int x=3, y=4, z=ADD(x,y)*2; 后,z的值是( ) A. 14 B. 11 C. 10 D. 7 20、以下程序输出结果是( ) int a[5] = {1,2,3,4,5}; int i, s=0; for(i=0; i<5; i++) { if(i%2) s += a[i]; else s -= a[i]; } printf("%d", s); A. -3 B. 3 C. -5 D. 5 二、多选题(本题共5小题,每小题3分,共15分) 1、以下关于C语言数据类型的叙述中,正确的有( ) A. int类型在32位系统中通常占4字节 B. char类型在内存中占1字节 C. float类型占4字节,double占8字节 D. 所有指针类型占相同大小的内存 2、以下关于循环控制语句的叙述中,正确的有( ) A. break语句可以用于循环和switch中 B. continue语句只能用于循环中 C. break和continue都可以用于for、while、do-while D. 在多层循环中,break只能跳出最内层循环 3、以下关于数组初始化的叙述中,正确的有( ) A. int a[5] = {0}; 将a所有元素初始化为0 B. int a[] = {1,2,3}; 数组长度自动设为3 C. int a[5] = {1,2}; 只初始化前两个,其余为0 D. int a[5] = {1,2,3,4,5,6}; 编译会出错 4、以下关于字符串的叙述中,正确的有( ) A. 字符串以\0作为结束标志 B. char s[]="abc"; 数组长度为3 C. char *p="abc"; p指向字符串常量,不能通过p修改内容 D. strcmp("abc","abd") 返回负数 5、以下关于函数的叙述中,正确的有( ) A. 函数可以没有返回值 B. 函数可以嵌套调用,但不能嵌套定义 C. 函数名代表函数的入口地址 D. 函数参数可以是数组名 三、判断题(本题共10小题,每小题1分,共10分) 1、在C语言中,标识符可以由字母、数字和下划线组成,且数字不能开头。 2、若有定义 int a=5, b=2; 则 a/b 的结果是2.5。 3、在switch语句中,case后面的常量表达式可以是变量。 4、do-while循环的循环体至少执行一次。 5、数组名作为函数参数时,传递的是整个数组的拷贝。 6、静态局部变量在函数调用结束后其值保留。 7、结构体变量可以直接进行关系运算比较大小。 8、若有定义 int *p; 则p的值是NULL。 9、#include <stdio.h> 是一个预处理命令,末尾不需要分号。 10、char s[]="hello"; 等价于 char s[5]="hello";。 四、填空题(共10小题,每小题1分,共10分) 1、若有定义:int a=7, b=2; 则表达式 a % b 的值是( )。 2、若有定义:int a[4]={2,4,6,8}, *p=a; 则 *(p+2) 的值是( )。 3、以下程序段输出结果是( )。 int i, s=0; for(i=1; i<=4; i++) if(i%2==0) s+=i; else s-=i; printf("%d", s); 4、若有定义:char str[]="C Language"; 则 strlen(str) 的值是( )。 5、函数调用时,如果希望形参的改变影响实参,则应该使用( )传递方式。 6、若有定义:int x=5, y=6; 则执行 x = x ^ y; y = x ^ y; x = x ^ y; 后,x和y的值分别是( )和( )。 7、以下递归函数的功能是计算( )。 int fun(int n) { if (n==1) return 1; return n * fun(n-1); } 8、若有定义:struct { int a; char b; } s = {5, 'A'}; 则 s.b 的值是( )。 9、若有定义:int a[3][2]={1,2,3,4,5,6}; 则 a[2][1] 的值是( )。 10、以下程序输出结果是( )。 int a=3, b=4; printf("%d", a>b ? a : b); 五、简答题(本题共3题,每题5分,共15分) 1、简述break和continue在多层循环中的行为区别,并举例说明如何跳出外层循环。 2、请说明int *p[4]和int (*p)[4]的区别,并举例说明各自的使用场景。 3、简述递归函数的优缺点,并写出计算斐波那契数列第n项的递归函数。 六、编程题(本题共1小题,每小题10分,共10分) 编写一个函数 void replaceChar(char *str, char oldChar, char newChar),使用指针将字符串中的所有指定字符替换为新字符。 要求:在函数中必须使用指针遍历字符串,不能使用数组下标。主函数中输入一个字符串、要替换的字符和替换后的字符,调用函数,输出替换后的字符串。 示例: 输入: hello world l x 输出: hexxo worxd 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $

资源预览图

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