试卷编号:11201
所属语言:试卷方案:试卷总分:共有题型:C 语言
C 语言期末考试100 分
4种
一、单项选择共30 题(共计60 分)第1
题设有定义分)
:int k=0;, 以下选项的四个表达式中与其他三个表达式的值不相同的是( A ).
A:k++
B:k+=1
C:++k
D:k+1
分)
第2题
已知int i=5, 执行语句i+=++i 后, i 的值是( C).
A:10
B:11
C:12
D:A、B、C都不对
第3题(分)
以下程序的功能是: 给r 输入数据后, 计算半径为r 的圆面积s. 程序在编译时出错.
#include <>
void main( )
/* Beginning */
{ int r; float s;
scanf("%d",&r);
s=p*r*r;
printf("s=%f\n",s);
出错的原因是(D ).
A: 注释语句书写位置错误
B: 存放圆半径的变量r 不应该定义为整型
B:-3
C :输岀语句中格式描述符非法
D: 计算圆面积的赋值语句中使用了非法变量
A:1
B:2
C:-1
D:-2
第 6题 (分) 有以下程序 : #include <> void main( )
{ int s=0, a=1, n; scanf("%d", &n); do{
s+=1; a=a — 2;
}while (a!=n );
printf ("%d\n", s );
}
若要使程序的输岀值为 2, 则应该从键盘输入给 n 的值是 ( B ).
A:-1
第 4题 (分)
"ABC " 〃的长度是(B ). A:11
B:7 C:5 D:3 第 5题 (分) 已知 int
j,i=1;, 执行语句j= - i++;后,j 的值是(C ).
第 10 题 (分)
C:-5
D:0
第7题 (分) 执行以下程序后 , 输出的结果是 ( D ).
#include <> void main( )
{ int y=10;
do{
y --;
}while( - - y);
printf("%d\n",y }
A:-1
B:1
C:8
D:0
#include <> void main( )
{ int i,j;
for(i=0,j=1; i<=j+1; i+=2, j
}
A:3
B:2
C:1
D:0
第9题 (分) 有以下程
序段 : int k=0;
while (k=1)k++;
while 循环执行的次数是
A:无限次
B: 有语法错误 , 不能执
行 C:1 次也不执行
D: 执行 1 次
第8题 (分) 以下循环
体的执行次数是 ( C ).
);
(A ).
-)printf("%d\n",i);
#include <> void main( )
{ int m,n,p;
scanf("m=%dn=%dp=%d",&m,&n,&p);
printf("%d%d%d\n",m,n,p);
}
若想从键盘上输入数据,使变量m中的值为123,n中的值为456,p中的值为789,则正确的输入是( A ). A:m=123n=456p=789
B:m=123 n=456 p=789
C:m=123,n=456,p=789
D:123 456 789
第11 题 (分)
设变量已正确定义, 以下能正确计算f=n! 的程序段是(D)
A:f=0; for(i=1;i<=n;i++) f*=i;
B:f=1; for(i=1;i C:f=1; for(i=n;i>1;i++) f*=i; D:f=1; for(i=n;i>=2;i -)f*=i; 第12 题 (分) 在下列程序中, 没有构成死循环的程序段是( B ). A: int i=100; while(1) {i=i%100+1; if(i>100) break;} B:int k=1000; do {++k;} while(k>=10000); 第 15 题 (分) D:int s=36; while(s); --s; 第 13 题 (分) 有如下程序 : #include <> void main( ) { int n=9; while(n>6) { n--;printf("%d",n);} } 该程序段的输出结果是 ( B ). A:987 B:876 C:8765 D:9876 第 14 题 (分) 以下程序的输出结果是 ( D ). #include <> void main( ) { int x=10,y=10,i; for(i=0;x>8;y=++i) A:10 1 9 2 B:9 8 7 6 C:10 9 9 0 D:10 10 9 1 printf("%d %d ",x } -,y); #include<> void main( ) { int n[5]={0,0,0},i,k=2; for(i=0;i { printf("%d\n",n[k]);} } 该程序的输出结果是( D ). A:不确定的值 B:2 C:1 D:0 第16 题 (分) 下列程序执行后的输出结果 是( A ). #include<> void main( ) { char arr[2][4]; strcpy(arr,"you"); strcpy(arr[1],"me"); arr[0][3]='&'; printf("%s \n",arr); } A:you&me B:you C:me D:err 第17 题 (分) 以下程序的输出结果是 ( C ). #include<> void main( ) { int i, x[3][3]={1,2,3,4,5,6,7,8,9}; for(i=0;i<3;i++) printf("%d,",x[i][2 -i]);} A:1,5,9, B:1,4,7, C:3,5,7, D:3,6,9, 第 18 题 (分) 以下数组定义中不正确的 是 ( D ). A:int a[2][3]; B:int b[ ][3]={0,1,2,3}; C:int c[100][100]={0}; D:int d[3][ ]={{1,2},{1,2,3},{1,2,3,4}}; 第 19 题 (分) 以下能正确定义数组并正 确赋初值的语句是 第 20 题 (分) 有以下程序 : int a=4; int f(int n) { int t=0; static int a=5; if(n%2) { int a=6; t+=a++; } else { int a=7; t+=a++; } return t+a++; } main( ) { int s=a,i=0; for( ; i<2; i++) s+=f(i); A:in t N=5,b[N][N]; B:in t a[1][2]={{1},{3}}; C:int c[2][ ]={{1,2},{3,4}}; D:int d[3][2]={{1,2},{3,4}}; (D ). C:3 5 3 5 printf ("d\n",s ); } 程序运行后的输出结果是 (B ) A:24 B:28 C:32 D:36 第 21 题 (分) 以下正确的函数定义形式为 (A) A:double fun(int x, int y) B:double fun(int x; y) C:double fun(int x; int y) D:double fun(int x, y) 第 22 题 (分) C 语言规定,函数返回值的类型是由(D A:return 语句中的表达式类型所决定的 B :调用该函数时的主调函数类型所决定的 C: 调用该函数时系统临时决定的 D: 在定义该函数时所指定的函数类型所决定的 输出结果是 () (注: 5353) void swap1(int c0[ ], int c1[ ]) { int t ; t=c0[0]; c0[0]=c1[0]; c1[0]=t; } void swap2(int *c0, int *c1) { int t; t=*c0; *c0=*c1; *c1=t; } main( ) { int a[2]={3,5}, b[2]={3,5}; swap1(a, a+1); swap2(&b[0], &b[1]); printf("%d %d %d %d\n",a[0],a[1],b[0],b[1]); } A:3 5 5 3 B:5 3 3 5 D:5 3 5 3 第 23 题 (分) 有以下程序 : 第24 题 (分) 以下程序的输出结果是( A ). amovep(int*p, int (*a)[3],int n) { int i, j; for( i=0;i for(j=0;j { *p=a[i][j]; p++; } } main( ) { int *p,a[3][3]={{1,3,5},{2,4,6}}; p=(int *)malloc(100); amovep(p,a,3); printf("%d %d \n",p[2],p[5]); free(p); } A) B) C) D) 程序错误 第25 题 (分) 有以下函数: fun(char *a,char *b) { while((*a!='\0')&&(*b!='\0')&&(*a==*b)) { a++; b++; } return (*a —*b); } 该函数的功能是(D ). A:计算a和b所指字符串的长度之差 B: 将 b 所指字符串复制到 a 所指字符串中 C: 将 b 所指字符串连接到 a 所指字符串后面 D: 比较 a 和 b 所指字符串的大小 第26 题(分) 有以下程序: fun(char p[ ][10]) { int n=0,i; for(i=0;i<7;i++) if(p[i][0]== 'T' ) n++; return n; } main( ) { char str[ ][10]={"Mon","Tue","Wed","Thu","Fri","Sat","Sun"}; printf("%d\n",fun(str)); } 程序执行后的输出结果是( B ). A:1 B:2 C:3 D:0 第27 题(分)有以下程序: main( ) { char str[][10]={"China","Beijing"},*p=str; printf("%s\n",p+10); } 程序运行后的输出结果是( B ). A:China B:Beijing C:ng D:ing 第28 题(分)有以下程序: #define f(x) (x*x) main( ) { int i1, i2; i1=f(8)/f(4) i2=f(4+4)/f(2+2) printf("%d,%d\n",i1,i2); } 程序运行后的输出结果是( C ). A:64, 28 B:4, 4 C:4, 3 D:64, 64 结果是( A ) void change(int k[ ]) { k[0]=k[5]; } main( ) { int x[10]={1,2,3,4,5,6,7,8,9,10},n=0; while(n<=4) { change(&x[n]); n++; } for(n=0;n<5;n++) printf("%d",x[n]); printf("\n"); } A:678910 B:13579 C:12345 D:62345 第 30 题 (分) 在以下程序中,能够通过调用函数 fun(),使main()函数中的指针变量 p 指向一个合法的整型单 元的是 (C ). A:main( ) int *p; fun(p);…} int fun(int *p) { int s; p=&s; } B:main( ) { int *p; fun(&p); …} int fun(int **p) { int s; *p=&s; } C:#include <> main( ) { int *p; 第 29 题 (分) 有以下程序 : A) 678910 B) 13579 C) 12345 D) 62345 fun(&p);…} int fun(int **p) { *p=(int*)malloc(2); } D:#include <> main( ) { int *p; fun(p); … } int fun(int *p) { p=(int*)malloc(sizeof(int)); } 二、程序填空共 1 题(共计10 分)第1题(分) /* ---------- 【程序填空】 功能:计算平均成绩并统计90 分以上人数。 */ main() { int n,m;float grade,average; /***********SPACE***********/ average=n=m= 【】; f%d\n",average/n,m); } 三、程序改错共 1 题 (共计10 分) 第1 题 (分) /* -------------------------------------- 【程序改错】 功能:首先把 b 所指字符串中的字符按逆序存放,然后将 a 所指字符串中的字符和 b 所指字符串中的字符,按排列的顺序交叉合并到 c 所指数组中,过长的剩余字符接在 c 所指数组的尾部。例如:当 a 所指字符串中的内容为“ abcdefg”, b 所指字符串中的内容为“ 1234”时, c 所指数组中的内容应该为“ a4b3c2d1 efg ”;而当a所指字符串中的内容为“ 1234”,b所指字符 串中的内容为“ abcdefg"时,c所指数组中的内容应该为“1g2f3e4dcba” 。 */ #include <> #include <> #include <> void fun( char *a, char *b, char *c ) { int i , j; char ch; i = 0; j = strlen(b)-1; /**********FOUND**********/ while ( i > j ) { ch = b[i]; b[i] = b[j]; b[j] = ch; i++; j--; } /**********FOUND**********/ if ( *a ) { *c = *a; c++; /**********FOUND**********/ if ( *b ) { *c = *b; c++; b++; } } *c = 0; } main() { char s1[100],s2[100],t[200]; clrscr(); printf("\nEnter s1 string : "); scanf("%s",s1); printf("\nEnter s2 string : "); while ( *a &&*b ) { / / 此处 &&改为 ||( 逻辑或 ) a+; } // 此处 a++ // 此处 > 改为 < scanf("%s",s2); fun( s1, s2, t ); printf("\nThe result is : %s\n", t ); } 四、程序设计共 1 题 (共计20 分) 第1题(分) /* --------------------------------- 程序设计】 功能:判断一个整数w的各位数字平方之和能否被 5整除, 可以被 5 整除则返回1,否则返回0。 */ #include "" #include"" int fun(int w) { /**********Program**********/ int s=0,m=w; while(m) {s+=(m%10)*(m%10);m/=10;} if (s%5==0) return 1; else return 0; /********** End **********/ main() { int m; printf("Enter m: "); scanf("%d", &m); printf("\nThe result is %d\n", fun(m)); yzj(); getch(); } yzj() { FILE *IN,*OUT; int c ; int t; int o; IN=fopen("","r"); if(IN==NULL) { printf("Read File Error"); } OUT=fopen("","w"); if(OUT==NULL) { printf("Write File Error"); } for(c=1;c<=5;c++) { fscanf(IN,"%d",&t); o=fun(t); fprintf(OUT,"%d\n",o); } fclose(IN); fclose(OUT); }