c语言期末测试题(附答案)
课程代码: A100002 《计算机技术基础( C 语言)》试卷 A
姓名: 学号:
专业 :
学院 :
班级 :
20 年 月 日
选择题(共 30 分)
题(本大题共 15 小题,每题只有一个正确答案,答 分,共 30 分)
1、以下关于 C 语言标识符的描述中,正确的是
【 】。
A) 标识符可以由汉字组成 B )标识符只能以字母开头 C )关键字可以作为用户标识符 D )
Area 与 area 是不同的标识符
2、使下列程序段输出“ 123, 456,78”,键盘输入数据,正确的输入是【 】
int i,j,k;
scanf( “%d,%3d%”d ,&i,&j,&k); printf( “%d,%d,%dn ”,i,j,k);
A ) 12345678
B )123,456, 78
C ) 123,45678
D ) 123,*45678
3、判断 char 类型的变量 c1 是否为数字字符的正确表达式为 【 】。 A) (c1>=0)&&(c1<=9) B) (c1>= '0')&&(c1<='9') C) '0'<=c1<='9'
D) (c1>=
'0')||(c1<= '9')
4、若有语句 int a=1,b=2,c=3 ;则以下值为 0 的表达式是 【 】。 A )' a '&&'b ' B )a<=b C )((a>b)||(b 5、已知: int a[2][3]; 则对数组元素的非法引用是 座位号: 第一部分一、单项选择 计算机技术基础试题 第 2 页(共 10 页) A. *(a[0]+2) B. a[1][3] C . a[1][0] D. *(*(a+1)+2) 6、在循环语句的循环体中执行 break 语句,其作用是 【 】。 A )跳出该循 环体,提前结束循环 B) 继续执行 break 语句之后的循环体各语句 C) 结束本次循环,进行下次循环 D) 终止程序运行 7、执行语句 for(i=10;i>0;i--) ;后,变量 i 的值为 【 】。 A ) 10 B )9 C )0 D )1 8、若有 int *p1, *p2, k; 不正确的语句是 【 】 A. p1=&k B. p2=p1 C. *p1=k+12 D. k=p1+p2 9、在函数中未指定存储类别的局部变量,其隐含的存储类别是 【 】 A. 静态( static ) B. 外部( extern ) C. 自动( auto ) D . 寄存器( register ) 10、如下程序的输出结果是 【 】 main( ) { int x=2,a=0,b=0; switch(x) { case 2: a++; b++; case 1: ++a; b--; break; case 0: b++;} printf("a=%d, b=%d\n", a, b);} A. a=2, b=0 B. a=2, b=1 C. a=1, b=1 D. a=1, b=0 11、表示关系 a 【 】 main() {int x; scanf( “%d ” ,&x); if(x<=3) ; else if(x !=10)printf( “%d\n ” ,x); } 程序运行时,输入的值在哪个范围才会 有输出结果。 A. (a 序 #include B. (a A.不等于10的整数 B. 大于3且不等于 10的整数 C. 大于 3 或不等于 10 的整数 D. 小于 3 的整数 13、break 语句的正确用法是 【 】 A. 无论在任何情况下,都中断程序的执行,退出到系统下一层。 B. 在多重循环中,只能退出最靠近的那一层循环语句。 C. 跳出多重循环。 D. 只能修改控制变量。 14、若 a, b, c, d 均为整型变量,执行以下程序段后的 t 的值为 【 】 #define MAX(A,B) (A)<(B)?(A):(B) a=5; b=3; c=3; d=4; t=MAX(a+b,c+d) *10; A. 70 B. 7 C. 8 D. 80 15、执行以下程序段后 , m 的值为 【 】 int a[6]={1,2,3,4,5,6}, m, *p; p=&a[0]; m=(*p)*(*(p+2))*(*(p+4)); A) 15 B) 14 C) 13 D) 12 第二部分 非选择题(共 70 分) (本大题共 10 小题,每题 1分,共 10 分,答 T 表示说 表示说法不正确 , 本题只需指出正确 与错误 , 不需要修 16. 字符型数据不可以进行加减运算。 【 】 17. 函数定义与函数的声明是一回事。 【 】 18. 在 C 语言中函数能嵌套调用,也能嵌套定义。 【 】 19. 在 C 语言中 switch 语句必须使用 break 语句。 【 】 20. for 循环中的三个表达式都可以省略。 【 】 21. do-while 循环是先进行循环体语句,后判断表达式。 【 】 22. 只能在 main() 函数中定义静态变量。 【 】 23. char *s1=“I love china ”;定义了一个指针变量 s1,它的初值为字符串“ I love china 的首地址。 【 】 24. int *p[4]; 与 int (*p)[4]; 的作用相同,都是定义了一个指向数组的指针。 【】 25. 预处理命令行最后也是以分号(; )结尾的。 【 】 得分 评卷人 、填空题 (本大题共 6 小题,每题 3 分,共 18 分。) 二、判断题 法正确 . 答 计算机技术基础试题 第 4 页(共 10 页) 26、在 C 语言中 * 作为单目运算符时表示 ___ ,作为双目运算符时表示 ________ ,而作为一种标记时表示 _______ 。 27、表达式 (a=3*5,a*4),a+5 中 a 的值是 ___ ,整个表达式的值是 ____ 28、设有如下的类型说明 : int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; 若数组所占内存单元的起始地址为 446 且整型数据占 2 个字节, 则 p+5= , *(p+5)= ____ 。 29、若定义了如下的共用体类型变量 x 和结构类型变量 y ,则 x 和 y 所占 用的内存字 节数分别为 ____ 和 。 union stu1 struct stu2 30、在 TC 中 CTRL+F9的功能是 ____ 、 ________ 和 __________ 。 31、有以下程序 #include {char c1,c2; scanf( “%c ” ,&c1) ; while(c1<65||c1>96) scanf( “%c ” ,&c1) ; c2=c1+32; printf( “%c,%c ” ,c1,c2); } 程序运行输入 65 回车后,能否输出结果。 (请回答能或不能) 。 四、简答题 (本大题共 2 小题,每题 3 分,共 6 分。) 32、C 语言中变量的存储类别有几种?局部变量的缺省存储类别是 哪种。 33、请解释以下与一个 C 程序有关的 3 种文件(需要说明这些文件是什么 文件、如何 形成的):(1) file.c (2) file.obj (3) file.exe { int num; char name[5]; char s; }x; {int num; char name[5]; char s; }y; void main() { int a=10,b=18; fun1(a,b); } int fun1(int x,int y) { if(x>y) printf("a>b\n"); else if(x 问题:(1)写出程序的运行结果; (2)分别列出形参和实参; ( 3)解 释 #include 35、int fun(int a) { int b=0; static int c=3; b=b+1; c=c+1; 五、阅读程 34 得分 评卷人 序回答问题(本大题共 4 小题,每题 5 分,共 20 分) #include return(a+b+c);} main( ) { int a=2, i; for(i=0; i<3; i++) printf( “%d”, fun(a)); } 问题:(1) 写出该程序的运行结果;(2) 如果将static int c=3; 成int c=3; ,则运行结果如何变化?为什么?36、main( ) { int a[2][3]={1,2,3,4,5,6}, b[3][2], i, j; printf( “array a: n”); for(i=0;i<=1;i++) { for(j=0;j<=2;j++) {printf( “%5d”, a[i][j ]); b[j][i]=a[i][j];} /* 第七行*/ printf( “ n”);} printf( “array b: n”); for(i=0;i<=2;i++) {for(j=0;j<=1;j++) printf( “%5d”, b[i][j]); printf( “ n”);} } 问题:(1) 写出程序的运行结果;(2) 如果将第七行中的 b[j][i]=a[i][j]; b[i][j]=a[i][j]; ,则结果如何变化。 37、#include void fun(int *p1, int *p2) { int t; t=*p1; *p1=*p2; *p2=t; } void main() 语句改写语句改写成 计算机技术基础试题第6 页(共10 页) { int x,y; int *p1,*p2; scanf("%d %d",&x,&y); p1=&x; p2=&y; if(x>y) fun(p1,p2); printf("x=%d,y=%d", x, y); } 问题:(1) 该程序的功能是什么; (2) 程序中的 * 和 & 分别代表什么运算符? (3)若输入 5 3 ,则运行结果如何? 序(本大题共 1 小题,共 10 分。) 正整数 m 和 n ,求其最大公约数和最小公倍数 再编写程序代码) 先画 六、编写程 38、输入两个 计算机技术基础试题 第 8 页(共 10 页) 七、程序填空 (本大题共 1 小题,共 6 分。) 、invert ( ) 函数的功能是将一个字符串 str 的内容倒序存 例如:字符串 str 原内容为: abcde ,函数调用后变为: 。 void invert (char str[]) j= for (i=0;i str[i]=str[j]; str[j]= __________ } } main() { char test[]="abcde"; invert(test); printf("%s\n",test); } 课程代码: A100002 座位号: 《计算机技术基础( C 语言)》试卷 A 标准答案 学院: 班级 : { int i,j,k; 20 年月日 第一部分选择题(共30 分) 一、单项选择题(本大题共15 小题,每题只有一个正确答案,答对一题得 2 分,共30 分) 1、D 2 、C 3 、B 4 、 D 5 、 B 6、A 7 、C 8 、D 9 、 C 10 、 11、A 12 、B 13 、 B 14 A 15 、 第二部分非选择题(共70 分) 二、判断题(本大题共10 小题,每题 1 分,共10 分,答T表示说法正确.答F表示说法不正确,本题只需指出正确与错误,不需要修改) 16、 F 17 、F 18 、 F 19 、F 20 、T 21、T 22 、F 23 、T 24 、F 25 、 F 三、填空题(本大题共 6 小题,每题 3 分,共18 分。) 26、指向(1 份),乘( 1 分);定义的变量是指针变量( 1 分) 27、15(2分),20(1 分) 28、456(2 分),6(1 分) 29、5(2分)、8(1 分) 30、编译( 1 分)、连接( 1 分)、运行( 1 分) 31、不能( 3 分) 四、简答题(本大题共 2 小题,每题 3 分,共 6 分。) 32(3 分)、32、C语言中变量的存储类别有几种?局部变量的缺省存储类别是哪种。变量的存储类别分为两大类:静态存储类和动态存储类。 具体包含四种:自动的 (auto)、静态的(static)、寄存器的(register)、外部的 (extern)。局部变量的缺省存储类别是auto 变量。 33(3 分)、请简单说明 C 程序的执行过程。 答:(1) file.c 是源文件,通过编辑得到;(2) file.obj 是目标文件,即计算机能够处 理的由二进制指令组成的文件,通过对源文件进行编译得到;(3) file.exe 是可执行文件,通过将目标文件与其他目标文件或库函数连接得到。 五、阅读程序回答问题(本大题共 4 小题,每题 5 分,共20 分) 34、((1)(2 分)程序的运行结果:a (2)( 1 分)形参:x, y ;实参:a, b (3)( 2 分)#include 输出头文件stdio.h 包含到该程序中。 35、(1)(2 分)运行结果7 8 9 (2)(3分)运行结果变成7 7 7 因为在原来的程序中用static 定义的变量 c 是局部静态变量,具有全局寿命,而修改后,变量 c 变成了局部动态变量,在函 计算机技术基础试题第10 页(共10 页) 36、( 1)(3 分)运 array a: array b: 1 2 3 1 4 4 5 6 2 5 (2) (2 分) 输出结 array a: array b: 1 2 3 1 2 4 5 6 4 5 随机数 随机 数调用出现时给这个变量分配内 存单元 37、(1)该程序的功能是由小到大输 出两个数 2)* 表示指向运算符; & 表示取地址运算符 3)x=3,y=5 六、编写程序 (本大题共 1 小题,共 10 分。) 38、输入两个正整数 m 和 n ,求其最大 公约数和最小公倍数。 (先画 N-S 流程 图, 然后编写程序)。 main( ) { int p,r,m,n,t; scanf( “ %d,%d ” ,&n,&m); if(n p=n*m ; while(m!=0) {r=n%m ;n=m ;m=r ;} printf("zui da gong yue shu :%d\n ” ,n); printf("zui xiao gong bei shu :%d\n ” ,p/ } 七、程序填空 (本大题共 1 小题,共 6 分。) 39、 (1) strlen(str)-1 (3 分), (2) k (3 分) 输入 n , m t=n; n=m; m=t; p=n*m; m!=0 r=n%m;n=m;m=r; n ) 最; 大公约数 n ,最小公倍 数 p/n