1、 ------------------------------------------第----------------------------2----------------------------装---------------------------------------线--------------------------------------------- 班级 姓名 学号 ------------------------------------------第---------
2、1----------------------------装---------------------------------------线-------------------------------------------- C语言程序设计期末考试卷及答案 得分 阅卷人 复核人 一、单项选择题。从A、B、C、D四个选项中,选择一个最佳答案填入括号内( 每小题1分,共计30分)。 1.一个C语言程序的执行是从( )。 A)本程序文件的第一个函数开始,到本程序文件的最后一个函数结束 B)本程序的
3、main函数开始,到main函数结束 C)本程序的main函数开始,到本程序文件的最后一个函数结束 D)本程序文件的第一个函数开始,到本程序的main函数结束 2.下列选项中不属于C语言关键字的是( )。 A)switch B)printf C)default D)case 3.设有语句 int a = 4; ,则执行了语句 a += a -= a * a; 后,变量a的值是( )。 A)24 B) -24 C)4 D)16 4.已知int i;float d;,则正确的表
4、达式是( )。
A)(int d) B)int(d)%i C)(int)d%i D)int(d%i)
5.已知int i,a;,执行语句i=(a=3*9,a/5),a+11; 后,变量i的值是( )。
A)5 B)16 C)27 D)38
6.下列选项中合法的字符型常量是( )。
A)"a" B)'\n' C)"\n" D)a
7.下面程序的运行结果是( )。
#include
5、oid main( ) { int k = 15; printf("k = %d,k = %o,k = %x\n",k,k,k); } A)k = 15,k = 15,k = 15 B)k = 15,k = 17,k = 17 C)k = 15,k = 017,k = 0xf D)k = 15,k = 17,k = f 8.已知a,b,c为int类型,执行语句:scanf("%d%d%d",&a,&b,&c);使得a为10,b为20,c为30,以下不正确的输入形式是( )。 A)10
6、 B)10 C)10,20,30 D)10 20 20 20 30 30 30 9.已知int x=1,y=2,z=3;,执行下列程序段后,输出的结果是( )。 if(x>y) z=x;x=y;y=z; printf("%d,%d,%d",x,y,z); A)1,2,3 B)2,3,3 C)2,3,1 D)2,3,2 10.若变量c为c
7、har类型,能正确判断出c为大写字母的表达式是( )。 A)'A'<=c<='Z' B)('A'<=c)||(c<='Z') C)(A<=c)&&(c<=Z) D)('A'<=c)&&(c<='Z') 11.有以下程序段: int k=0; while(k=1) k++; while循环执行的次数是( )。 A)无限次 B)有语法错,不能执行 C)一次也不执行 D)执行1次 12.以下程序的输出结果是( )。 void main( ) {int x=1
8、a=0,b=0; switch(x) { case 0:b++; case 1:a++; case 2:a++;b++; } printf("a=%d,b=%d",a,b); } A)a=1,b=0 B)a=1,b=1 C)a=2,b=1 D)a=2,b=2 13.若有定义int i = 1;,执行语句while ( i < 10 ) i++; 后,i的值为( )。 A)9 B)10 C)11 D)12 14.有说明语句
9、int a[ ]={1,2,3,4,5};,则数组a包括了( )个元素。 A)10 B)5 C)6 D)不确定 15.以下程序段执行后,输出结果是( )。 char str[]="abc\n\012\\\n";printf("%d",strlen(str)); A)5 B)6 C)7 D)13 16.若有以下定义:float t[5][4];,能正确引用t数组元素的表达式是( )。 A)t[1]
10、[4] B)t[5][0] C)t[0][0] D)t[0,0] 17.执行下列程序段: int i,s = 0; int a[ ][3] = {{1,2},{3,4},{5,6}}; for ( i = 0;i < 3;i++ ) s = s + a[i][i]; 则s的值是( )。 A)5 B)6 C)12 D)21 18.下述对字符数组的描述中,错误的是( )。 A)字符数组可以存放字符串 B)字符数组中的字符串可以整体输入
11、输出 C)可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值 D)不可以用关系运算符对字符数组中的字符串进行比较 19.设有宏定义#define Y(x) (x)+ 2 ,则下面程序段的运行结果是( )。 int a = 2,b = 2,c = 1; printf("%d\n",a * Y( b + c ) ); A)7 B)8 C)9 D)10 20.若用数组名作为函数调用的实参,传递给形参的是( )。 A)数组的长度 B)数组第一个元素的值 C)数组中全部元素的值 D)数组的首地址
12、 21.下面叙述中,不正确的是( )。 A)在不同的函数中可以使用相同名字的变量 B)函数中的形式参数是局部变量 C)在一个函数内定义的变量只在本函数范围内有效 D)在一个函数内的复合语句中定义的变量在本函数范围内有效 22.若在程序中定义了以下函数: float max( float a ,float b ) { return ( a>b?a:b); } 并将其放在主调函数之后,则在调用之前应该对该函数进行声明,以下选项中错误的声明是( )。 A) float max( float a,b ); B) float ma
13、x( float ,float ); C) float max( float a ,float b ); D) float max( float x ,float y ); 23.要使函数体内的某局部变量能保留函数前一次调用后的值,供下一次调用时继续使用,该变量的存储类型应是( )。 A) auto B) extern C) static D) register 24.类型相同的两个指针变量之间不能进行的运算是( )。 A)+ B)- C)=
14、D)== 25.若有说明语句:int i, x[3][4] ;,则不能将x[1][1]的值赋值给变量i的语句是( )。 A)i = *( *( x + 1 ) + 1 ); B)i = x[1][1]; C)i = *( *( x + 1 ) ); D)i = *( x[1] + 1 ); 26.有如下程序段: int a[6] = { 1,2,3,4,5,6 }; int m,*ptr; ptr = &a[0]; m = ( *ptr )*( *( ptr + 2 ) ) *( *( ptr + 4 ) ); 执行该程序段后,m的值为(
15、 )。 A) 15 B)48 C)24 D)8 27.设有定义:enum team{ my,your=4,his,her = his+10}; 则枚举元素my、your、his、her的值分别是( )。 A)0 1 2 3 B)0 4 0 10 C)0 4 5 15 D)1 4 5 15 28.下面程序的运行结果是( )。 union myun { struct { int x,y,z; }u; int k; }a; void main( ) { a.u.x = 4;
16、 a.u.y = 5; a.u.z = 6; a.k = 0; printf("%d\n",a.u.x); } A)4 B)0 C)5 D)6 29.表达式11 & 18的值是( )。 A)0 B)1 C)2 D)27 30.当顺利执行了文件关闭操作后,fclose函数的返回值是( )。 A) 0 B)true C) -1 D) 1 得分 阅卷人 复核人 二
17、填空题(每小题2分,共计20分)。 1.C语言源程序编译后生成 程序,然后经过连接生成可执行程序。 2.实型常量有两种表示方法:小数形式和 。 3.rewind函数的功能是 。 4. 若ch是字符型变量,与ch=getchar();功能相同的语句是 。 5.以下程序段要使指针变量p指向一个整型的动态存储单元,请填空。 int * p; p= malloc(sizeof(int)); 6.
18、已知:int *p,a = 2,b = 1;,则执行程序段p = &a;a = *p + b; 后,a的值为 。
7.已知:int x = 1, y = 2, z;,则执行z = x > y ? ++x : ++y;后,z的值为 。
8.当执行下面程序且输入:ABC<回车>时,输出的结果是 。
#include
19、用函数的递归调用求n!(n≥1),请填空。 float f(int n) { if (n==1) return(1); else return ( ); } void main( ) { int n; scanf("%d",&n); printf("%.0f\n",f(n)); } 10.以下程序执行后的输出结果是 。 void main( ) { int a = 3,b = 1,t; t = ( a << 2 ) | b; pri
20、ntf("%d\n",t );
}
得分
阅卷人
复核人
三、程序阅读题(每小题4分,共计20分)。
1.以下程序执行后的输出结果是 。
#include
21、 for ( i = 0;i <10;i ++ ) if(arr[i]<0) k++; printf("%d\n",k ); } 3.以下程序执行后的输出结果是 。 void fun(int a[10]) {int i,j,t; for (i=0;i<9;i++) for (j=0;j<9-i;j++) if (a[j]>a[j+1]) {t=a[j];a[j]=a[j+1];a[j+1]=t; } } void main( ) {int i;
22、int a[10]={4,3,5,1,0,8,2,6,7,9};
fun(a);
for (i=0;i<10;i++)
printf("%3d",a[i]);
printf("\n");
}
4.以下程序执行后的输出结果是 。
#include
23、 printf("%d\n",(++p)-> x ); } 5.以下程序执行后的输出结果是 。 void swap( int *p1 ,int *p2) { int k; k = *p1; *p1 = *p2; *p2 = k; } void main( ) { int a = 3,b = 6,*x = &a,*y = &b; swap( x,y ); printf("%d,%d\n",*x,*y ); } 得分 阅卷人 复核人 四、程序改错题(共2小题,每
24、正确修改一处错误得2分,共计10分)。 注意:不得增行或删行,写出改正后的程序行,使之能够得出正确的结果。 1.下列程序的功能是计算数列1,3,5,…,2n-1,…的前n项之和,其中n由键盘输入。 void main( ) {int s=0,n,i=1; scanf("%d",n); /* 1)该行有错误*/ do { s=s+i; i=i+2; } while (i>2*n-1); /* 2)该行有错误*/ printf("s=%d\n",s); } 2.下列给定的程序中,
25、函数average的功能是:求10个数的平均值。
#include
26、 printf("Please input 10 data:\n"); for (i=0;i<10;i++) scanf("%f",&data[i]); aver=average(data[0]); /* 3)该行有错误*/ printf("averege data is %5.2f\n",aver); } 得分 阅卷人 复核人 五、程序设计题(共3小题,第1小题6分,第2、3小题各7分,共20分)。 1.输入x,计算并输出下列分段函数y的值(结果保留2位小数)。
27、2.在一个已排序的整型数组(设从小到大)中,插入一个整数,使之仍然有序(要求数组中原有的10个整数从键盘按顺序输入)。 3.请先编写一个函数concat(char str1[ ],char str2[ ]),实现两个字符串的连接(注意不要用strcat函数);再编写一个main( )函数进行测试:在主函数中输入两个字符串,然后调用concat函数,最后将连接后的字符串输出。 参考答案 一、单项选择题。从A、B、C、D四个选项中,选择一个最佳答案填入括号内( 每小题1分,共30分,错选、漏选、多选均不得分)。 1 2 3 4 5 6 7 8 9 10
28、B B B C A B D C B D 11 12 13 14 15 16 17 18 19 20 A C B B C C A C B D 21 22 23 24 25 26 27 28 29 30 D A C A C A C B C A 得分 阅卷人 复核人 二、填空题(每小题2分,共20分,错填、漏填均不得分)。 题 号 1 2 3 4 5 答 案 目标 指数形式 使文件的位置指针返回到文件头 scanf(“%c”,&ch); (int *)
29、题 号 6 7 8 9 10 答 案 3 3 ABC n*f(n-1) 13 得分 阅卷人 复核人 三、程序阅读题(每小题4分,共20分) 题 号 1 2 3 4 5 答 案 #### 3 0 1 2 3 4 5 6 7 8 9 250 6,3 说明:对于程序阅读题,如果该题考生所给出的答案仅仅是书写格式上的错误,没有其它方面错误,扣1分,否则该题不得分。 得分 阅卷人 复核人 四、程序改错题(共2小题,每正确修改一处错误得2分,共计10分)。 注意:不得增行或删
30、行,写出改正后的程序行,使之能够得出正确的结果。 1. 1)scanf("%d",&n); 2)while (i<=2*n-1); 2. 1)float aver,sum=0; 2)sum=sum+array[i]; (或者改为sum+=array[i]; 、sum=sum+*(array+i); 、sum+= *(array+i);sum=sum+(*(array+i));也正确) 3)aver=average(data); (或者改为aver=average(&data[0]); 也正确) 得分 阅卷人 复核人 五、程序设计题(共3小题,第1小题6分,第
31、2、3小题各7分,共20分)
评分总则:若考生给出的程序语法正确,符合要求,能够实现具体功能,即可得满分;若程序存在错误,不能得出正确结果,阅卷教师酌情给分,给分方法参考下列评分标准。
1)源程序代码
#include
32、 printf("y=%.2f\n",y); …… 1 分 } 2)源程序代码 #include "stdio.h" main() {int a[11],i,b; printf("imput 10 sorted integer number:\n"); for (i=0;i<10;i++) scanf("%d",&a[i]); …… 2 分 printf("input an integer:\n"); scanf("%d",&b); …… 1 分 for (i=9;i>=
33、0&&a[i]>b;i--)
a[i+1]=a[i]; …… 2 分
a[i+1]=b; …… 1 分
printf("sorted numbers:\n");
for (i=0;i<11;i++)
printf("%5d",a[i]); …… 1 分
}
3)源程序代码
#include
34、 {int i,j; j=strlen(str1); …… 1 分 for (i=0; str2[i]!='\0'; i++) { str1[j]=str2[i]; j++; } …… 1 分 str1[j]='\0'; …… 1 分 } main() { char str1[20],str2[20]; printf("input two string:\n"); gets(str1); gets(str2); …… 1 分 concat(str1,str2); …… 1 分 puts(str1); …… 1 分 } 第 8 页 共 8 页






