笔试样卷 一、选择题(每小题1分,共10分) 1.在 C 语言中,逻辑值“真”用 ( 1) 表示。 ( 1) (A) true (B) 大于 0 的数 (C) 非零整数 (D) 非零的数 2.下列程序中有 3 个具有相同功能,只有 ( 2) 所完成的功能与其他程序不同。 ( 2) (A) sum=0; (B) sum=0; i=0; i=1; while(i<=50) while(i++<50) sum+=i++; sum+=i; (C) sum=0; (D) sum=0; i=0; i=0; while(i<50) while(++i<=50) sum+=++i; sum+=i; 3.已知下列程序: #include "stdio.h" main(int argc,char *argv[]) { int i; for(i=0;i<argc;i++) printf("%s\n",argv[i]); } 该程序的可执行文件名为 program.exe,运行程序时键入的命令行为: program apple orange banana 则执行结果为 ( 3) 。 ( 3) (A) (B) (C) (D) PROGRAM PROGRAM.EXE apple p apple apple orange a orange orange banana o banana banana b 4.在下列选项中,不正确的表达式是 ( 4) 。 ( 4) (A) a>b>c (B) x=a+b>c+d=y (C) a=1,b=2,c=3 (D) p++ 5.若有定义 int a[ ]={1,2,3,4,5},*p=a;则下面错误的运算式是 ( 5) 。 ( 5) (A ) *(p+=3) (B) a[3]++ (C) (a+=2) (D) ++p, ++p, *p 6.下列函数调用不正确的是 ( 6) 。 ( 6) (A) putchar(putchar(ch)) (B) str=gets(s) (C) fclose(fp) (D) fopen(fp) 7.定义 char *s 且执行 s=malloc(255)之后,能正确输入一个串的是 ( 7) 。 ( 7) (A) scanf("%s",&s); (B) scanf("%c",&s[0]); (C) scanf("%s",s); (D) scanf("%s",*s) 8.已知: int a=1, b=2, c=3 则表达式 ~( a<<b^c)运行结果为 ( 8) 。 ( 8) ( A) 8 ( B) -8 ( C) 7 ( D) -7 9. main() { char s[]="abcdefg"; printf("%s",&s[3]); } 程序的运行结果为 ( 9) 。 ( 9) ( A) c ( B) d ( C) cdefg ( D) defg 10. #include "stdio.h" void f(char *s,char *t) { int i=0,j=0; while(*(s+i)) i++; while(s[i++]=t[j++]); } main() { char s[]="xyz",t[]="abc"; f(s,t); printf("%s\n",s); } 程序运行结果为 ( 10) 。 ( 10) ( A) abc ( B) xyzabc ( C) xyz ( D) xyz abc 二、读程序,并选出正确的答案(每空3 分,共45分) 1.如下程序: #include <stdio.h> main() { union EXAMPLE{ struct{ int x; int y; }in; int a; int b; }e; e.a=1; e.b=2; e.in.x=e.a*e.b; e.in.y=e.a+e.b; printf("\n%d",e.in.x); printf("\n%d",e.in.y); printf("\n%d",e.a); printf("\n%d",e.b); } 第一个 printf 行的输出为 ( 11) 。 ( 11) (A) 4 (B) 5 (C) 6 (D) 7 第二个 printf 行的输出为 ( 12) 。 ( 12) (A) 5 (B) 6 (C) 7 (D) 8 第三个 printf 行的输出为 ( 13) 。 ( 13) (A) 4 (B) 5 (C) 6 (D) 7 第四个 printf 行的输出为 ( 14) 。 ( 14) (A) 4 (B) 5 (C) 6 (D) 7 2.阅读程序,写出程序循环 3 次分别输出为 ( 15) 、 ( 16) 、 ( 17) 。 extern int a; main() { int i; for(i=1;i<4;i++) { ++a; printf("%d,",a); s(); } } int a=9; int s() { int a=100; static int b=10; ++a; printf("%d,%d\n",a,b); b+=10; } ( 15) (A) 1, 10, 10 (B) 10,101,10 (C) 10,11,10 (D) 1,101,10 ( 16) (A) 11,101,20 (B) 102,101,10 (C) 11,101,10 (D) 101,11,20 ( 17) (A) 102,101,10 (B) 12,102,30 (C) 102,101,30 (D) 12,101,30 3.写出下列程序运行结果。 #include "stdio.h" #include "stdlib.h" main() { char ps1[10]="1234",ps2[10]="5678",*s1=ps1,*s2=ps2; while (*s1) s1++; while(*s2) { *s1=*s2; s1++; s2++; } *s1='\0'; printf("%s\n",ps1); 输出为 : ( 18) 。 printf("%s\n",ps2); 输出为 : ( 19) 。 } ( 18) (A) 1234 (B) 5678 (C) 678 (D) 12345678 ( 19) (A) 3456 (B) 5678 (C) 12345678 (D) 1234 4.下列程序: #include "stdio.h" f(int a) {int b=0; static int c=3; b=a+c++; return(b); } main() {int a=2,i,k=0; for(i=1;i<=2;i++) { k=f(a++)+k; printf("k=%d\n",k); } } 程序运行的结果为 ( 20) 。 ( 20) (A) k=5 (B) k=5 (C) k=5 (D) k=5 k=11 k=12 k=6 k=7 若将函数中的 static int c=3;换成 int c=3;,则程序运行结果为 ( 21) 。 ( 21) (E) k=5 (F) k=5 (G) k=5 (H) k=5 k=11 k=12 k=6 k=7 5. #include "a:f1.c" main() { int a,b; scanf("%d,%d",&a,&b); f1(a,b); printf("a=%d,b=%d\n",a,b); } 软盘上 f1.c 文件的内容如下 : f1(x,y) int x,y; {int t; if(x>y) {t=x;x=y;y=t;} } 程序运行输入的数据为: 10,5 输出结果为 ( 22) 。 ( 22) (A) a=5,b=10 (B) a=10,b=5 (C) 程序不能运行 (D) 函数调用有错 6.若 x,y 是整型变量,则执行以下语句后的 x 的值是 ( 23) , y 的值是 ( 24) 。 for (y=1,x=1;y<=50;y++) { if (x>=10) break; if (x%2==1) { x+=5;continue; } x-=3; } ( 23) (A) 1 ( B) 6 ( C) 7 ( D) 10 ( 24) (A) 6 ( B) 2 ( C) 4 ( D) 8 7. main() { char a[5][10]={ "ab","efgh","ijk","mnop","st"}; char *b[5]= {"ab","efgh","ijk","mnop","st"}; char **ptr; int i; ptr=b; for(i=0;i<4;i++) L1:printf("%s",ptr[i]); printf("\n"); for(i=0;i<=4;i++) printf("%s",*(a+i)); printf("\n"); } L1 行输出结果为 ( 25) 。 ( 25) (A) abef ( B) abefg ( C) abefghijkmnopst ( D) abefghijkmnop 三、程序填空(每空3分,共45分) 1.打印以下的扬辉三角形(要求打印出 10 行) 。 1 1 1 1 2 1 1 3 3 1 … #include "stdio.h" main() {int k[10][10],i,j; for (i=0;i<10;i++) { for (j=0;j<i+1;j++) { if (j==0) {k[i][j]=1; printf(" 1");} else if(i==1) { k[i][j]=1; printf(" 1");} else if( ( 26) ) { k[i][j]=1; printf(" 1");} else { ( 27) printf("%3d", k[i][j]);} } printf("\n"); } } 2.软盘上已有一个数据文件 data1.dat,存储的数据形式为: 1, 2, 3 4, 5, 6 7, 8, 9 10, 11, 12 13, 14, 15 16, 17, 18 19, 20, 21 22, 23, 24 25, 26, 27 28, 29, 30 要将该数据文件的数据取出,存放在一个数组中,并显示在屏幕上。请将程序完善。 #include "stdio.h" main() { int i,a[10][3]; char fname[10]; FILE *fp; printf("input data filename:"); scanf("%s",fname); /*输入的文件名为 ( 28) */ fp=fopen(fname,( 29) ); for(i=0;i<10;i++) ( 30) (fp,"%d,%d,%d",&a[i][0],&a[i][1],&a[i][2]); fclose(fp); printf("output data is:\n"); for(i=0;i<10;i++) printf("%5d,%5d,%5d\n",a[i][0],a[i][1],a[i][2]); } 3.从键盘输入若干学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束。 请完善程序。 main() { float x, lmax, lmin; scanf ("%f", ( 31) ); lmax=x; lmin=x; while ( ( 32) ) { if (x>lmax) lmax=x; if ( ( 33) ) lmin=x; scanf("%f",&x); } printf("\nlmax=%f\nlmin=%f\n",lmax,lmin); } 4.下面的程序能将字符串 How do you do!反向输出到屏幕上。请完善程序。 #include "stdio.h" main() { print("\n How do you do! \n"); } print(char *string) { char *str= ( 34) ; if(*str== ( 35) ) return; while(*str)str++; --str; printf("%c",*str); *str=NULL; print( ( 36) ); } 5.下列程序是将字符串 temp 后移 length 个位置,移出的字符移到串首。请完善程序。 #include "stdio.h" #include "string.h" main() { void backmove(); char temp[81]; int length=3; gets(temp); backmove(temp,length); printf("%s\n",temp); return; } void backmove(x,m) char *x; int m; { int i,j,n; char ch; n=strlen(x); for(j=0;j<m;j++) { ch= ( 37) ; for(i=0;i<n-1;i++) *(x+n-1-i)= ( 38) ; *x=ch; } } 6.以下程序把从键盘输入的字符存放到一个文件中,用 ' # ' 作为结束符 .请按题意要求 填空完善程序。 #include <stdio.h> main() { FILE *fp; char ch,fname[10]; printf("Input the file name:\n"); gets(fname); if((fp=fopen( ( 39) ,"w"))==NULL) { printf("cannot open file\n"); exit(0); } while(ch= ( 40) ) fputc(ch,fp); fclose(fp); }