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

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

资源信息

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

内容正文:

《编程语言基础-C语言》(高教版第5版) 期末复习卷(八)解析版 时间:90分钟 总分:100分 班级 姓名 学号 成绩 一、单项选择题(本题共20小题,每小题2分,共40分) 1、C语言规定,标识符的命名只能由字母、数字和下划线三种字符组成,且第一个字符必须是( ) A.字母 B.字母或下划线 C.下划线 D.数字 【答案】B 【解析】C语言规定,标识符的命名原则为由数字、字符、下划线组成,且第一个字符不能是数字。 2、下列选项中,均属于不合法的实型常量的是( ) A.3e5.4 0.0 2e5 B.e5 5e2.5 68 C.3.14 2e-4 123e-5 D.0.98 -e-3 1 【答案】B 【解析】实型常量的表示方法包括小数表示法和指数表示法。指数表示法的格式:尾数E/e指数。尾数的小数点两边至少要有一边有数,指数必须为整数。A中3e5.4不合法;B中前两个为不合法实型常量,第三个为整型常量;C中全部合法;D中第三个为整型常量。 3、若有代数式则正确的C语言表达式是( ) A.-b+sqrt(b* b-4*a*c)/2*a B.-b+sqrt(b* b-4* a* c)/(2 *a) C.(-b+sqrt(b* b-4*a* c))/2*a D.(-b+sqrt(b* b-4 * a* c))/(2* a) 【答案】D 【解析】正确表达形式为(-b+sqrt(b* b-4 * a* c))/(2* a)。 4、关系a≥b≥c对应的正确的C语言表达式为( ) A.a>=b>=c B.(a>=b)&(b>=c) C.(a>=b)&&(b>=c) D.(a>=b)||(b>=c) 【答案】C 【解析】C语言中不能连续进行比较,所以正确的表达式为(a>=b)&&(b>=c)。 5、若有定义语句float x=5,y=4.6;,表达式x/2+(int)(x+y)%4的值是( ) A.3 B.3.0 C.3.5 D.4.5 【答案】C 【解析】x/2=2.5,(int)(x+y)=9,9 % 4=1,然后计算2.5+1=3.5。 6、若从键盘输入38,以下程序段的输出结果是( ) main(){ int i=0,t=0; scanf("%d ",&i); if((i%3==2)&&(i%5==3)) t=1 else t=2; printf("%d",&t); } A.0 B.1 C.2 D.无输出 【答案】D 【解析】 scanf输入时,需要按照有格式符的按格式符要求的格式输入,没有格式符的按原样输入。scanf(“%d ”)输入38后需要原样输入 ,才能有结果输出,否则无输出。 7、运行以下程序段的输出结果。( ) int x; scanf("%d",&x); if(x<=10) ; else if(x=13) ; printf("%d ",x); A.不等于13的整数 B.大于10且不等于13的整数 C.小于10的整数或13 D.小于等于10的整数 【答案】C 【解析】当x<=10的时候输出x,当x>10的时候输出13。 8、设所有变量都正确定义,以下switch程序段代码正确的是( ) A.switch(c++){ case'A':k++;break; case'B':k--; } B.switch(c++){ case A:k++;break; case B:k--; } C.switch(c++){ case'A',k++;break; case'B',k--; } D.switch(c++) case'A':k++;break; case'B':k--; 【答案】A 【解析】switch语句的正确格式为: switch(表达式) {case 常量表达式1:语句部分1;[break;] case 常量表达式2:语句部分2;[break;] ... case 常量表达式n:语句部分n;[break;] [default:语句部分 n+1;] } 9. 以下程序段的运行结果是( ) #include<stdio.h> main() { int i,j,a=0; for(i=1;i<=2;i++) { for(j=1;j<=4;j++) { if(j%2)break; else continue; a++; } } printf("%d ",a); } A.0 B.2 C.4 D.8 【答案】A 【解析】 j为偶数时,执行countinue语句,a++不执行;当j为奇数时,执行break语句,内层循环结束,a++也不执行。 10、以下程序段的运行结果是( ) main() { int a=5,b=1; switch(a){ case 2:b++; default:b++; case 3:b++; case 4:b++; } printf("b=%d",b); } A.b=1 B.b=2 C.b=3 D.b=4 【答案】D 【解析】 a的值为5,执行default后的语句,因为没有break,顺序执行case3,case4后面的语句。 11、定义变量:int n=10,则下列循环的输出结果是( ) while(n>7){ n--; printf("%3d",n); } A. 10 9 8 B. 9 8 7 C. 10 9 8 7 D 9 8 7 6 【答案】B 【解析】n的初值为10,进入循环先执行n--,所以输出为 9 8 7。 12、下列程序的运行结果是( ) int x=23; do{ printf("%2d",x--); }while(!x); A.打印出22 B.打印出23 C.不打印任何内容 D.陷入死循环 【答案】B 【解析】 x初值为23,执行do...while 循环,输出x--的值23,判断循环条件!x为假,循环结束。 13、下列程序的运行结果是( ) main() { int n[3],i,j,k; for(i=0;i<=3;i++) n[i]=0; k=2; for(i=0;i<=1;i++) { for(j=0;j<=1;j++) { n[i]=n[i]+1; } } printf("%d ",n[k]); } A.2 B.1 C.0 D.3 【答案】C 【解析】 循环给n[0]n[1]赋值,都累加赋值为2。输出n[2]的值为0。 14、函数调用语句fun((2,3),(4,5+6,7));中,含有实参的个数是( ) A.1 B.2 C.3 D.4 【答案】B 【解析】 参数分别为(2,3)、(4,5+6,7)。 15、下列程序的运行结果是( ) #include<stdio.h> int a[5]={2,3,4,5,6}; main() { int *p,i; i=1; p=a+1; printf("%d,%d",a[i],*(p+i)); } A.2,3 B.3,4 C.4,5 D.5,6 【答案】B 【解析】 输出的是a[1]和a[2]的值。 16、下列程序段的运行结果是( ) #include<stdio.h> main() { int a[6][6],i,j; for(i=1;i<6;i++) for(j=1;j<6;j++) a[i][j]=(i/j)*(j/i); for(i=1;i<6;i++) { for(j=1;j<6;j++) printf("%2d",a[i][j]); printf(" "); } } A.11111 B.00001 C.10000 D.00001 11111 00010 01000 01010 11111 00100 00100 00100 11111 01000 00100 01010 11111 10000 00001 10001 【答案】C 【解析】 输出对角线上的元素。 17、下列关于结构体的叙述中,错误的是( ) A.结构体是一种可由用户构造的数据类型 B.结构体中的成员可以具有不同的数据类型 C.结构体中的成员不可以与结构体变量同名 D.结构体中的成员可以是指向自身结构的指针类型 【答案】C 【解析】结构体是用户自定义的数据类型,用于组合不同类型的数据;结构体中的成员可以是不同类型,如整型、浮点型、数组等;结构体成员名与结构体变量名可以相同,因为成员名属于结构体命名空间,变量名属于普通标识符命名空间,二者不冲突;结构体中允许包含指向自身类型的指针(如链表节点中的 next 指针)。 18、以下程序段的运行结果是 ( ) char a[]={"zhijiaogaokao"},*p; p=a; while(*p!='o'){ printf("%c",*p-32); p++; } A.ZHIIAOGAOKAO B.zhijiaogaokao C.ZHIJIA D.ZHIIAOgaokao 【答案】C 【解析】 指针p指向字符数组的首地址,利用while循环将数组中的小写字母转换为大写,直到遇到字母o结束。 19、有以下说明和定义语句: struct student { int age; char num[8]; }; struct student stu={20,"200401"}; 则下列选项中,对结构体的描述错误的是( ) A.struct student是结构体类型名 B.age,num都是结构体变量stu的成员 C.变量stu在内存中占10个字节 D.stu.age=12是对变量成员的赋值 【答案】C 【解析】 结构体变量所占内存空间是各成员所需内存量的总和。 20、下列程序段运行后,表达式*(p+4)的值为( ) char a[]=”china”; char *p; p=a; A.存放’n’的地址 B.’a’ C.’n’ D存放’a’的地址 【答案】B 【解析】 p存放的是数组的首地址,p+4指字符串中的第5个字符即’a’。 二、多选题(本题共5小题,每小题3分,共15分) 1、以下关于C语言运算符优先级的叙述中,正确的有( ) A. 算术运算符 > 关系运算符 > 逻辑运算符 B. 逻辑非! > 算术运算符 C. 赋值运算符优先级低于关系运算符 D. 逗号运算符优先级最低 【答案】ABCD 【解析】均正确。 2、以下关于数组初始化的叙述中,正确的有( ) A.int a[5] = {0};将所有元素初始化为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 【解析】均正确。 3、以下关于指针运算的叙述中,正确的有( ) A. 指针可以加上一个整数 B. 指针可以减去一个整数 C. 两个同类型指针可以相减 D. 两个同类型指针可以相加 【答案】ABC 【解析】D错误,指针相加无意义。 4、以下关于递归函数的叙述中,正确的有( ) A. 递归函数必须有终止条件 B. 递归函数效率通常低于循环 C. 递归函数每次调用占用新栈空间 D. 所有递归函数都能用循环替代 【答案】ABCD 【解析】D正确,理论上任何递归都可转换为迭代。 5、以下关于字符串处理函数的叙述中,正确的有( ) A.strcpy(s1, s2)会复制字符串结束符 B.strcat(s1, s2)要求s1有足够空间 C.strcmp("abc", "abd")返回负数 D.strlen("abc")返回3 【答案】ABCD 【解析】均正确。 三、判断题(本题共10小题,每小题1分,共10分) 1、C语言中,int a[5] = {0}; 定义了包含5个元素的整型数组,且所有元素初始化为0。( ) 【答案】√ 【解析】部分赋值,只赋值一个值0,其它值默认赋值为0。 2、若有定义 int *p; 则 p = 0; 是错误的,因为指针不能赋值为整型常量0。( ) 【答案】× 【解析】p = 0; 或 p = NULL; 是合法的,0是空指针常量。 3、在函数内部定义的静态局部变量,其生命周期是整个程序运行期间,但作用域仅限于该函数内部。( ) 【答案】√ 4、表达式 3 > 2 > 1 的值为1。( ) 【答案】× 【解析】3 > 2 为真(1),再比较 1 > 1 为假(0),结果为0)。 5、对于二维数组 int a[3][4];,a[1] 和 *(a+1) 都表示第二行首元素的地址。( ) 【答案】√ 6、若有 char str[] = "Hello";,则 sizeof(str) 的结果是5。( ) 【答案】× 【解析】字符串末尾包含'\0',实际长度为6。 7、在C语言中,函数参数传递时,实参和形参之间是值传递,因此形参的任何修改都不会影响实参。( ) 【答案】√ 【解析】如果传递的是指针,修改指针指向的内容会影响实参,但形参本身的改变不影响实参指针。 8、使用 #define PI 3.14 后,PI 在预处理阶段被替换为 3.14,因此 PI 是常量,不能通过赋值改变它的值。( ) 【答案】√ 【解析】宏定义不是变量,无存储空间,自然无法赋值。 9、对于语句 int *p = (int *)malloc(100 * sizeof(int));,如果分配成功,p 指向一块可以存储100个整型变量的连续内存。( ) 【答案】√ 【解析】malloc动态内存分配。 10、在C语言中,break 语句只能用于循环体(for、while、do-while)内部,不能用于 其它语句。( ) 【答案】× 【解析】break 同样可用于 switch 语句中跳出分支。 四、填空题(共10小题,每小题1分,共10分) 1、以下程序功能:递归方式逆序输出字符串。请填空。( ) #include <stdio.h> void reverse(char *s) { if (*s == '\0') return; reverse(s + 1); printf("%c", ______); } int main() { char str[] = "ABC"; reverse(str); return 0; } 【答案】*s 2、以下程序功能:用指针遍历数组,找出最大值。( ) int findMax(int *arr, int n) { int max = *arr; for (int *p = arr + 1; p < arr + n; p++) { if (______ > max) max = *p; } return max; } main() { int a[] = {3, 7, 2, 9, 5}; printf("%d", findMax(a, 5)); } 【答案】*p 3、以下程序功能:定义点结构体,计算两点之间距离的平方。请填空。( ) struct Point { int x, y; }; int dist2(struct Point p1, struct Point p2) { int dx = p1.x - p2.x; int dy = p1.y - p2.y; return ______; } main() { struct Point a = {0, 0}, b = {3, 4}; printf("%d", dist2(a, b)); } 【答案】dx*dx + dy*dy 4、以下程序功能:用宏实现求两数最大值,并用于比较。请填空。( ) #define MAX(a, b) ______ main() { int x = 10, y = 20; printf("%d", MAX(x, y)); } 【答案】((a)>(b)?(a):(b)) 5、程序功能:将3×3矩阵转置。请填空。 void transpose(int a[3][3]) { for (int i = 0; i < 3; i++) for (int j = i + 1; j < 3; j++) { int temp = a[i][j]; a[i][j] = a[j][i]; ______ = temp; } } main() { int m[3][3] = {{1,2,3},{4,5,6},{7,8,9}}; transpose(m); } 【答案】a[j][i] 6、程序功能:将字符串src复制到dst,同时将小写字母转大写(假设src全为小写字母,无其他字符)。 void strcpyUpper(char *dst, const char *src) { while (*src) { *dst = *src - 'a' + 'A'; src++; ______; } *dst = '\0'; } main() { char dest[20]; strcpyUpper(dest, "hello"); puts(dest); } 【答案】dst++ 7、程序功能:递归计算数组前n个元素之和。 int sum(int arr[], int n) { if (n == 0) return 0; return ______ + sum(arr, n - 1); } main() { int a[] = {1, 2, 3, 4}; printf("%d", sum(a, 4)); } 【答案】arr[n-1] 8、程序功能:利用位运算判断整数是否为奇数(奇数返回1,偶数返回0)。( ) int isOdd(int x) { return ______; } main() { printf("%d", isOdd(7)); } 【答案】(x & 1) 9、程序功能:实现冒泡排序,通过函数指针决定升序还是降序。下面代码为升序比较函数。( ) int ascend(int a, int b) { return a > b; } void bubbleSort(int *arr, int n, int (*cmp)(int, int)) { for (int i = 0; i < n-1; i++) for (int j = 0; j < n-1-i; j++) if (cmp(arr[j], arr[j+1])) { int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } main() { int a[] = {3,1,4,2}; bubbleSort(a, 4, ______);// 排序后a为{1,2,3,4} } 【答案】ascend 10、程序功能:统计字符串中数字字符('0'~'9')的个数。( ) int countDigits(const char *str) { int cnt = 0; while (*str) { if (*str >= '0' && *str ______) cnt++; str++; } return cnt; } main() { printf("%d", countDigits("a1b2c3")); } 【答案】<= '9' 五、简答题(本题共3题,每题5分,共15分) 1、下列程序的运行结果是:( ) main() { int i,a,t=1,s=0; for(i=1;i<=101;i+=2) { a=t*i; s=s+a; t=-t; } printf("%d ",s); } 【答案】51 2、下列程序的运行结果是:( ) #include<stdio.h> int func(int b[]){ int j; for(j=0;j<4;j++) b[j]=j; } main() { int a[4],i; func(a); for(i=0;i<4;i++) printf("%2d",a[i]); } 【答案】 0 1 2 3 3、当从键盘输入25时,下列程序的运行结果是 #include<stdio.h> main() { int x,y,i,a[8],j,u; scanf("%d",&x); y=-x; i=0; do{ u=y/2; a[i]=y%2; i++; y=u; }while(--y>=1); for(j=i-1;j>=0;j--) printf("%d",a[j]); } 【答案】-1 六、编程题(本题共1小题,每小题10分,共10分) 题目: 编写一个函数 void moveZeroes(int *arr, int n),使用指针将整型数组中所有的0移动到数组的末尾,并保持非零元素的相对顺序。要求:在原数组上操作,不能使用额外数组。函数内必须使用指针操作,不能使用数组下标。主函数中先输入n(n≤100),再输入n个整数,调用函数,输出移动后的数组,每个数占4位宽度。 示例: 输入: 8 0 1 0 3 12 0 5 0 输出: 1 3 12 5 0 0 0 0 【参考答案】 #include <stdio.h> void moveZeroes(int *arr, int n) { int *p = arr; // 读指针 int *q = arr; // 写指针(指向非零元素应放置的位置) while (p < arr + n) { if (*p != 0) { *q = *p; q++; } p++; }// 剩余位置补0 while (q < arr + n) { *q = 0; q++; } } main() { int arr[100], n, i; printf("请输入元素个数:"); scanf("%d", &n); printf("请输入%d个整数:", n); for (i = 0; i < n; i++) { scanf("%d", arr + i); } moveZeroes(arr, n); printf("移动后: "); for (i = 0; i < n; i++) { printf("%4d", *(arr + i)); } printf(" "); } 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $ 《编程语言基础-C语言》(高教版第5版) 期末复习卷(八)原卷版 时间:90分钟 总分:100分 班级 姓名 学号 成绩 一、单项选择题(本题共20小题,每小题2分,共40分) 1、C语言规定,标识符的命名只能由字母、数字和下划线三种字符组成,且第一个字符必须是( ) A.字母 B.字母或下划线 C.下划线 D.数字 2、下列选项中,均属于不合法的实型常量的是( ) A.3e5.4 0.0 2e5 B.e5 5e2.5 68 C.3.14 2e-4 123e-5 D.0.98 -e-3 1 3、若有代数式则正确的C语言表达式是( ) A.-b+sqrt(b* b-4*a*c)/2*a B.-b+sqrt(b* b-4* a* c)/(2 *a) C.(-b+sqrt(b* b-4*a* c))/2*a D.(-b+sqrt(b* b-4 * a* c))/(2* a) 4、关系a≥b≥c对应的正确的C语言表达式为( ) A.a>=b>=c B.(a>=b)&(b>=c) C.(a>=b)&&(b>=c) D.(a>=b)||(b>=c) 5、若有定义语句float x=5,y=4.6;,表达式x/2+(int)(x+y)%4的值是( ) A.3 B.3.0 C.3.5 D.4.5 6、若从键盘输入38,以下程序段的输出结果是( ) main(){ int i=0,t=0; scanf("%d ",&i); if((i%3==2)&&(i%5==3)) t=1 else t=2; printf("%d",&t); } A.0 B.1 C.2 D.无输出 7、运行以下程序段的输出结果。( ) int x; scanf("%d",&x); if(x<=10) ; else if(x=13) ; printf("%d ",x); A.不等于13的整数 B.大于10且不等于13的整数 C.小于10的整数或13 D.小于等于10的整数 8、设所有变量都正确定义,以下switch程序段代码正确的是( ) A.switch(c++){ case'A':k++;break; case'B':k--; } B.switch(c++){ case A:k++;break; case B:k--; } C.switch(c++){ case'A',k++;break; case'B',k--; } D.switch(c++) case'A':k++;break; case'B':k--; 9. 以下程序段的运行结果是( ) #include<stdio.h> main() { int i,j,a=0; for(i=1;i<=2;i++) { for(j=1;j<=4;j++) { if(j%2)break; else continue; a++; } } printf("%d ",a); } A.0 B.2 C.4 D.8 10、以下程序段的运行结果是( ) main() { int a=5,b=1; switch(a){ case 2:b++; default:b++; case 3:b++; case 4:b++; } printf("b=%d",b); } A.b=1 B.b=2 C.b=3 D.b=4 11、定义变量:int n=10,则下列循环的输出结果是( ) while(n>7){ n--; printf("%3d",n); } A. 10 9 8 B. 9 8 7 C. 10 9 8 7 D 9 8 7 6 12、下列程序的运行结果是( ) int x=23; do{ printf("%2d",x--); }while(!x); A.打印出22 B.打印出23 C.不打印任何内容 D.陷入死循环 13、下列程序的运行结果是( ) main() { int n[3],i,j,k; for(i=0;i<=3;i++) n[i]=0; k=2; for(i=0;i<=1;i++) { for(j=0;j<=1;j++) { n[i]=n[i]+1; } } printf("%d ",n[k]); } A.2 B.1 C.0 D.3 14、函数调用语句fun((2,3),(4,5+6,7));中,含有实参的个数是( ) A.1 B.2 C.3 D.4 15、下列程序的运行结果是( ) #include<stdio.h> int a[5]={2,3,4,5,6}; main() { int *p,i; i=1; p=a+1; printf("%d,%d",a[i],*(p+i)); } A.2,3 B.3,4 C.4,5 D.5,6 16、下列程序段的运行结果是( ) #include<stdio.h> main() { int a[6][6],i,j; for(i=1;i<6;i++) for(j=1;j<6;j++) a[i][j]=(i/j)*(j/i); for(i=1;i<6;i++) { for(j=1;j<6;j++) printf("%2d",a[i][j]); printf(" "); } } A.11111 B.00001 C.10000 D.00001 11111 00010 01000 01010 11111 00100 00100 00100 11111 01000 00100 01010 11111 10000 00001 10001 17、下列关于结构体的叙述中,错误的是( ) A.结构体是一种可由用户构造的数据类型 B.结构体中的成员可以具有不同的数据类型 C.结构体中的成员不可以与结构体变量同名 D.结构体中的成员可以是指向自身结构的指针类型 18、以下程序段的运行结果是 ( ) char a[]={"zhijiaogaokao"},*p; p=a; while(*p!='o'){ printf("%c",*p-32); p++; } A.ZHIIAOGAOKAO B.zhijiaogaokao C.ZHIJIA D.ZHIIAOgaokao 19、有以下说明和定义语句: struct student { int age; char num[8]; }; struct student stu={20,"200401"}; 则下列选项中,对结构体的描述错误的是( ) A.struct student是结构体类型名 B.age,num都是结构体变量stu的成员 C.变量stu在内存中占10个字节 D.stu.age=12是对变量成员的赋值 20、下列程序段运行后,表达式*(p+4)的值为( ) char a[]=”china”; char *p; p=a; A.存放’n’的地址 B.’a’ C.’n’ D存放’a’的地址 二、多选题(本题共5小题,每小题3分,共15分) 1、以下关于C语言运算符优先级的叙述中,正确的有( ) A. 算术运算符 > 关系运算符 > 逻辑运算符 B. 逻辑非! > 算术运算符 C. 赋值运算符优先级低于关系运算符 D. 逗号运算符优先级最低 2、以下关于数组初始化的叙述中,正确的有( ) A.int a[5] = {0};将所有元素初始化为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};编译出错 3、以下关于指针运算的叙述中,正确的有( ) A. 指针可以加上一个整数 B. 指针可以减去一个整数 C. 两个同类型指针可以相减 D. 两个同类型指针可以相加 4、以下关于递归函数的叙述中,正确的有( ) A. 递归函数必须有终止条件 B. 递归函数效率通常低于循环 C. 递归函数每次调用占用新栈空间 D. 所有递归函数都能用循环替代 5、以下关于字符串处理函数的叙述中,正确的有( ) A.strcpy(s1, s2)会复制字符串结束符 B.strcat(s1, s2)要求s1有足够空间 C.strcmp("abc", "abd")返回负数 D.strlen("abc")返回3 三、判断题(本题共10小题,每小题1分,共10分) 1、C语言中,int a[5] = {0}; 定义了包含5个元素的整型数组,且所有元素初始化为0。( ) 2、若有定义 int *p; 则 p = 0; 是错误的,因为指针不能赋值为整型常量0。( ) 3、在函数内部定义的静态局部变量,其生命周期是整个程序运行期间,但作用域仅限于该函数内部。( ) 4、表达式 3 > 2 > 1 的值为1。( ) 5、对于二维数组 int a[3][4];,a[1] 和 *(a+1) 都表示第二行首元素的地址。( ) 6、若有 char str[] = "Hello";,则 sizeof(str) 的结果是5。( ) 7、在C语言中,函数参数传递时,实参和形参之间是值传递,因此形参的任何修改都不会影响实参。( ) 8、使用 #define PI 3.14 后,PI 在预处理阶段被替换为 3.14,因此 PI 是常量,不能通过赋值改变它的值。( ) 9、对于语句 int *p = (int *)malloc(100 * sizeof(int));,如果分配成功,p 指向一块可以存储100个整型变量的连续内存。( ) 10、在C语言中,break 语句只能用于循环体(for、while、do-while)内部,不能用于 其它语句。( ) 四、填空题(共10小题,每小题1分,共10分) 1、以下程序功能:递归方式逆序输出字符串。请填空。( ) #include <stdio.h> void reverse(char *s) { if (*s == '\0') return; reverse(s + 1); printf("%c", ______); } int main() { char str[] = "ABC"; reverse(str); return 0; } 2、以下程序功能:用指针遍历数组,找出最大值。( ) int findMax(int *arr, int n) { int max = *arr; for (int *p = arr + 1; p < arr + n; p++) { if (______ > max) max = *p; } return max; } main() { int a[] = {3, 7, 2, 9, 5}; printf("%d", findMax(a, 5)); } 3、以下程序功能:定义点结构体,计算两点之间距离的平方。请填空。( ) struct Point { int x, y; }; int dist2(struct Point p1, struct Point p2) { int dx = p1.x - p2.x; int dy = p1.y - p2.y; return ______; } main() { struct Point a = {0, 0}, b = {3, 4}; printf("%d", dist2(a, b)); } 4、以下程序功能:用宏实现求两数最大值,并用于比较。请填空。( ) #define MAX(a, b) ______ main() { int x = 10, y = 20; printf("%d", MAX(x, y)); } 5、程序功能:将3×3矩阵转置。请填空。 void transpose(int a[3][3]) { for (int i = 0; i < 3; i++) for (int j = i + 1; j < 3; j++) { int temp = a[i][j]; a[i][j] = a[j][i]; ______ = temp; } } main() { int m[3][3] = {{1,2,3},{4,5,6},{7,8,9}}; transpose(m); } 6、程序功能:将字符串src复制到dst,同时将小写字母转大写(假设src全为小写字母,无其他字符)。 void strcpyUpper(char *dst, const char *src) { while (*src) { *dst = *src - 'a' + 'A'; src++; ______; } *dst = '\0'; } main() { char dest[20]; strcpyUpper(dest, "hello"); puts(dest); } 7、程序功能:递归计算数组前n个元素之和。 int sum(int arr[], int n) { if (n == 0) return 0; return ______ + sum(arr, n - 1); } main() { int a[] = {1, 2, 3, 4}; printf("%d", sum(a, 4)); } 8、程序功能:利用位运算判断整数是否为奇数(奇数返回1,偶数返回0)。( ) int isOdd(int x) { return ______; } main() { printf("%d", isOdd(7)); } 9、程序功能:实现冒泡排序,通过函数指针决定升序还是降序。下面代码为升序比较函数。( ) int ascend(int a, int b) { return a > b; } void bubbleSort(int *arr, int n, int (*cmp)(int, int)) { for (int i = 0; i < n-1; i++) for (int j = 0; j < n-1-i; j++) if (cmp(arr[j], arr[j+1])) { int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } main() { int a[] = {3,1,4,2}; bubbleSort(a, 4, ______);// 排序后a为{1,2,3,4} } 10、程序功能:统计字符串中数字字符('0'~'9')的个数。( ) int countDigits(const char *str) { int cnt = 0; while (*str) { if (*str >= '0' && *str ______) cnt++; str++; } return cnt; } main() { printf("%d", countDigits("a1b2c3")); } 五、简答题(本题共3题,每题5分,共15分) 1、下列程序的运行结果是:( ) main() { int i,a,t=1,s=0; for(i=1;i<=101;i+=2) { a=t*i; s=s+a; t=-t; } printf("%d ",s); } 2、下列程序的运行结果是:( ) #include<stdio.h> int func(int b[]){ int j; for(j=0;j<4;j++) b[j]=j; } main() { int a[4],i; func(a); for(i=0;i<4;i++) printf("%2d",a[i]); } 3、当从键盘输入25时,下列程序的运行结果是 #include<stdio.h> main() { int x,y,i,a[8],j,u; scanf("%d",&x); y=-x; i=0; do{ u=y/2; a[i]=y%2; i++; y=u; }while(--y>=1); for(j=i-1;j>=0;j--) printf("%d",a[j]); } 六、编程题(本题共1小题,每小题10分,共10分) 题目: 编写一个函数 void moveZeroes(int *arr, int n),使用指针将整型数组中所有的0移动到数组的末尾,并保持非零元素的相对顺序。要求:在原数组上操作,不能使用额外数组。函数内必须使用指针操作,不能使用数组下标。主函数中先输入n(n≤100),再输入n个整数,调用函数,输出移动后的数组,每个数占4位宽度。 示例: 输入: 8 0 1 0 3 12 0 5 0 输出: 1 3 12 5 0 0 0 0 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $

资源预览图

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