一、选择题((1)—(40)每题1分,(41)—(50)每题2分,共60分) 下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上,答在试卷上不得分。 (1) 在32位计算机中,一个字长所占的字节数为 A.1 B.2 C.4 D.8 (2) 与十进制数511等值的十六进制数为 A.1FF B.2FF C.1FE D.2FE (3) 能将高级语言编写的源程序转换成目标程序的是 A.编程程序 B.编译程序 C.解释程序 D.链接程序 (4) 在计算机系统中,存储一个汉字的国标码所需要的字节数为 A.1 B.2 C.3 D.4 (5) 下列带有通配符的文件名中,能表示文件ABC.TXT的是 A.*BC.? B.A?.* C.?BC.* D.?.? (6) 在多媒体计算机系统中,不能用以存储多媒体信息的是 A.光缆 B.软盘 C.硬盘 D.光盘 (7) DOS命令“COPY/?”的功能是 A.将当前盘当前目录中的所有文件复制到当前盘的根目录下 B.将当前盘当前目录中所有以单个字符命名的文件复制到当前盘的根目录下 C.以提示方式复制文件 D.显示COPY命令的帮助信息 (8) 在Windows环境下,若要将当前活动窗口存入剪贴板,则可以按 A.Ctrl+PrintScreen键 B.Ctrl+PrintScreen键 C.Shift+PrintScreen键 D.PrintScreen键 (9) 在Windows环境下,单击当前应用程序窗口中的“关闭”按钮,其功能是 A.将当前应用程序转为后台运行 B.退出Windows后再关机 C.退出Windows后重新启动计算机 D.终止当前应用程序的运行 (10) 在Windows环境中,粘贴按钮是 A. B. C. D. (11) 以下叙述中正确的是 A.构成C程序的基本单位是函数 B.可以在一个函数中定义另一个函数 C.main()函数必须放在其它函数之前 D.所有被调用的函数一定要在调用之前进行定义 (12) 以下选项中合法的实型常数是 A.5E2.0 B.E-3 C..2E0 D.1.3E (13) 以下选项中合法的用户标识符是 A.long B._2Test C.3Dmax D.A.dat (14) 已知大写字母A的ASCII码值是65,小写字母a的ASCII码是97,则用八进制表示的字符常量‘\101’是 A.字符A B)字符a C)字符e D)非法的常量 (15) 以下非法的赋值语句是 A.n=(i=2,++i); B)j++; C.++(i+1); D)x=j>0; (16) 设a和b均为double型变量,且a=5.5、b=2.5,则表达式(int)a+b/b的值是 A)6.500000 B)6 C.5.500000 D.6.000000 (17) 已知i、j、k为int型变量,若从键盘输入:1,2,3<回车>,使i的值为1、j的值为2、k的值为3,以下选项中正确的输入语句是 A.scanf(“---”,&i,&j,&k); B.scanf(“%d %d %d”,&i,&j,&k); C.scanf(“%d,%d,%d”,&i,&j,&k); D.scanf(“i=%d,j=%d,k=%d”,&i,&j,&k); (18) 与数学式子 对应的C语言表达式是 A.3*x^n(2*x-1) B.3*x**n(2*x-1) C.3*pow(x,n)*(1/(2*x-1)) D.3*pow(n,x)/(2*x-1) (19) 设有定义:long x=-123456L;,则以下能够正确输出变量x值的语句是 A)printf(“x=%d\n”,x); B.printf(“x=\n”,x); C)printf(“x=L\n”,x); D)printf(“x=%LD\n”,x); (20) 若有以下程序: main() { int k=2,i=2,m; m=(k+=i*=k);printf(“%d,%d\n”,m,i); } 执行后的输出结果是 A.8,6 B.8,3 C.6,4 D.7,4 (21) 已有定义:int x=3,y=4,z=5;,则表达式!(x+y)+z-1 && y+z/2的值是 A.6 B.0 C.2 D.1 (22) 有一函数, ,以下程序段中不能根据x值正确计算出y值的是 A.if(x>0) y=1; B.y=0; else if(x==0) y=0; if(x>0) y=1; else y=-1; else if(x<0) y=-1; C)y=0; D)if(x>=0) if(x>=0); if(x>0) y=1; if(x>0) y=1 ; else y=0; else y=-1; else y=-1;
(23) 以下选项中,与k=n++完全等价的表达式是 A.k=n,n=n+1 B.n=n+1,k=n C.k=++n D.k+=n+1 (24) 以下程序的功能是:按顺序读入10名学生4门课程的成绩,计算出每位学生的平均分并输出,程序如下: main() { int n,k; float score ,sum,ave; sum=0.0; for(n=1;n<=10;n++) { for(k=1;k<=4;k++) { scanf(“%f”,&score); sum+=score;} ave=sum/4.0; printf(“NO%d:%f\n”,n,ave); } } 上述程序运行后结果不正确,调试中发现有一条语句出现在程序中的位置不正确。这条语句是 A.sum=0.0; B.sum+=score; C.ave=sun/4.0; D.printf(“NO%d:%f\n”,n,ave); (25) 有以下程序段 int n=0,p; do{scanf(“%d”,&p);n++;}while(p!=12345 &&n<3); 此处do—while循环的结束条件是 A.P的值不等于12345并且n的值小于3 B.P的值等于12345并且n的值大于等于3 C.P的值不等于12345或者n的值小于3 D.P的值等于12345或者n的值大于等于3 (26) 有以下程序 main() { int a=15,b=21,m=0; switch(a%3) { case 0:m++;break; case 1:m++; switch(b%2) { default:m++; case 0:m++;break; } } printf(“%d\n”,m); } 程序运行后的输出结果是 A.1 B.2 C.3 D.4 (27) C语言中,函数值类型的定义可以缺省,此时函数值的隐含类型是 A.void B.int C.float D.double (28) 若有说明:int n=2,*p=&n,*q=p;,则以下非法的赋值语句是 A.p=q; B.*p=*q; C.n=*q; D.p=n; (29) 有以下程序 float fun(int x,int y) { return(x+y); } main() { int a=2,b=5,c=8; printf(“%3.0f\n”,fun(int)fun(a+c, B.,a- C.); } 程序运行后的输出结果是 A.编译出错 B.9 C.21 D.9.0 (30) 有以下程序 void fun(char *c,int D. { *c=*c+1;d=d+1; printf(“%c,%c,”,*c, D.; } main() { char a=’A’,b=’a’; fun(&b,a); printf(“%c,%c\n”,a, B.; } 程序运行后的输出结果是 A)B,a,B,a B.a,B,a,B C.A,b,A,b D.b,B,A,b (31) 以下程序中函数sort的功能是对a所指数组中的数据进行由大到小的排序 void sort(int a[],int n) { int i,j,t; for(i=0;i for(j=i+1,j if(a[i]} main() { int aa[10]={1,2,3,4,5,6,7,8,9,10},i; sort(&aa[3],5); for(i=o;i<10;i++) print(“%d,”,aa[i]); printf(‘\n”); } 程序运行后的输出结果是 A)1,2,3,4,5,6,7,8,9,10 B.10,9,8,7,6,5,4,3,2,1, C.1,2,3,8,7.6.5.4.9,10 D.1,2,10,9,8,7,6,5,4,3 (32) 有以下程序 int f(int n) { if (n==1) return 1; else return f(n-1)+1; } main() { int i,j=0; for(i=i;i<3;i++) j+=f(i); printf(“%d\n”,j); } 程序运行后的输出结果是 A.4 B.3 C.2 D.1
(33) 有以下程序 main() { char a[ ]={‘a’,‘b’,‘c’,‘d’, ‘e’, ‘f’, ‘g’,‘h’,‘\0’}; int i,j; i=sizeof(a); j=strlen(a); printf(“%d,%d\b”i,j); } 程序运行后的输出结果是 A)9,9 B)8,9 C)1,8 D)9,8 (34) 以下程序中函数reverse的功能是将a所指数组中的内容进行逆置。 void reverse(int a[ ],int n) { int i,t; for(i=0;i { t=a[i]; a[i]=a[n-1-i];a[n-1-i]=t;} } main() { int b[10]={1,2,3,4,5,6,7,8,9,10}; int i,s=0; reverse(b,8); for(i=6;i<10;i++) s+=b[i]; printf(“%d\n”,s); } 程序运行后的输出结果是 A.22 B.10 C.34 D.30 (35) 有以下程序 main() { int aa[4][4]={{1,2,3,4},{5,6,7,8},{3,9,10,2},{4,2,9,6}}; int i,s=0 for(i=0;i<4;i++) s+=aa[i][1]; printf(“%d\n”,s); } 程序运行后的输出结果是 A.11 B.19 C.13 D.20 (36) 有以下程序 #include main() { char *p=“abcde\Ofghjik\0”; printf(“%d\n”,strlen(p)); } 程序运行后的输出结果是 A.12 B.15 C.6 D.5 (37) 程序中头文件typel.h 的内容是: #define N 5 #define M1 N*3 程序如下: #define “type1.h” #define M2 N*2 main() { int i; i=M1+M2; printf(“%d\n”,i); } 程序编译后运行的输出结果是: A.10 B.20 C.25 D.30 (38) 有以下程序 #include main() { FILE *fp; int i=20,j=30,k,n; fp=fopen(“d1.dat”“w”); fprintf(fp,“%d\n”,i);fprintf(fp,“%d\n”j); fclose(fp); fp=fopen(“d1.dat”, “r”); fp=fscanf(fp,“%d%d”,&k,&n); printf(“%d%d\n”,k,n); fclose(fp); } 程序运行后的输出结果是 A.20 30 B.20 50 C.30 50 D.30 20 (39) 以下叙述中错误的是 A.二进制文件打开后可以先读文件的末尾,而顺序文件不可以 B.在程序结束时,应当用fclose函数关闭已打开的文件 C.在利用fread函数从二进制文件中读数据时,可以用数组名给数组中所有元素读入数据 D.不可以用FILE定义指向二进制文件的文件指针 (40) 有以下程序 #include main(int argc,char *argv[]) { int i,len=0; for(i=1;iprintf(“%d\n”,len); } 程序编译连接后生成的可执行文件是ex1.exe,若运行时输入带参数的命令行是: ex1 abcd efg 10<回车> 则运行的结果是: A.22 B.17 C.12 D.9
(41) 有以下程序 int fa(int x) { return x*x; } int fb(int x) { return x*x*x; } int f(int (*f1)(),int (*f2)(),int x) { return f2(x)-f1(x); } main() { int i; i=f(fa,fb,2); printf(“%d\n”,i); } 程序运行后的输出结果是 A.-4 B.1 C.4 D.8 (42) 有以下程序 int a=3; main() { int s=0; { int a=5; s+=a++; } s+=a++;printf(“%d\n”,s); } 程序运行后的输出结果是 A.8 B.10 C.7 D.11 (43) 有以下程序 void ss(char *s,char t) { while(*s) { if(*s==t) *s=t-‘a’+’A’; s++; } } main() { char str1[100]=“abcddfefdbd”,c=’d’; ss(str1,c); printf(“%s\n”,str1); } 程序运行后的输出结果是 A.ABCDDEFEDBD B.abcDDfefDbD C.abcAAfefAbA D.Abcddfefdbd (44) 有以下程序 struct STU { char num[10]; float score[3]; }; main() { struct stu s[3]={{“20021”,90,95,85}, {“20022”,95,80,75}, {“20023”,100,95,90}},*p=s; int i; float sum=0; for(i=0;i<3,i++) sum=sum+p->score[i]; printf(“%6.2f\n”,sum); } 程序运行后的输出结果是 A.260.00 B.270.00 C.280.00 D.285.00 (45) 设有如下定义: struck sk { int a; float b; }data; int *p; 若要使P指向data中的a域,正确的赋值语句是 A.p=&a; B.p=data.a; C. p=&data.a; D.*p=data.a; (46) 有以下程序 #include struct NODE { int num; struct NODE *next; }; main() { struct NODE *p,*Q,*R; p=(struct NODE*)malloc(sizeof(struct NODE)); q=(struct NODE*)malloc(sizeof(struct NODE)); r=(struct NODE*)malloc(sizeof(struct NODE)); p->num=10; q->num=20; r->num=30; p->next=q;q->next=r; printf(“%d\n”,p->num+q->next->num); } 程序运行后的输出结果是 A.10 B.20 C.30 D.40 (47) 若有以下说明和定义 typedef int *INTEGER; INTEGER p,*q; 以下叙述正确的是 A.P是int型变量 B.p是基类型为int的指针变量 C.q是基类型为int的指针变量 D.程序中可用INTEGER代替int类型名 (48) 有以下程序 main() { unsigned char a,b,c; a=0x3; b=a|0x8; c=b<<1; printf(“%d%d\n”,b,c); } 程序运行后的输出结果是 A.–11 12 B.–6 –13 C.12 24 D.11 22
(49) 有以下程序 #include main() { char *p,*q; p=(char*)malloc(sizeof(char)*20); q=p; scanf(“%s%s”,p,q); printf(“%s%s\n”,p,q); } 若从键盘输入:abc def<回车>,则输出结果是: A.def def B.abc def C.abc d D.d d (50) 以下程序中函数f的功能是将n个字符串按由大到小的顺序进行排序。 #include void f(char p[][10],int n) { char t[20]; int i,j; for(i=0;ifor(j=i+1;jif(strcmp(p[i],p[j])<0) { strcpy(t,p[i]);strcpy(p[i],p[j]);strcpy(p[j],t);} } main() { char p[][10]={“abc”,“aabdfg”,“abbd”,“dcdbe”,“cd”};int i; f(p,5); printf(“%d\n”,strlen(p[0])); } 程序运行后的输出结果是 A.6 B.4 C.5 D.3 二、填空题(每空2分,共40分) 请将答案分别写在答题卡中序号为【1】至【20】的横线上,答在试卷上不得分。 1、计算机软件分为系统软件和应用软件,操作系统属于 [1] 。 2、在DOS环境下,代表键盘和显示器的设备文件名为 [2] 。 3、支持Internet基本服务的协议是 [3] 。 4、从Windows环境进入MS-DOS方式后,返回Windows环境的DOS命令为 [4] 。 5、某微型机的运算速度为2MIPS,则该微型机每秒执行 [5] 条指令。 6、设有定义:int n,*k=&n;以下语句将利用指针变量k读写变量n中的内容,请将语句补充完整。 scanf(“%d, ” [6] ); printf(“%d\n”, [7] 。); 7、以下程序运行后的输出结果是 [8] 。 main() { int x=10,y=20,t=0; if(x==y)t=x;x=y;y=t; printf(“%d,%d \n”,x,y); } 8、以下程序运行后的输出结果是 [9] 。 main() { int x=15; while(x>10 && x<50) { x++; if(x/3){x++;break;} else continue; } printf(“%d\n”,x); } 9、有以下程序: #include main() { char c; while((c=getchar( ))!=’?’) putchar(--c); } 程序运行时,如果从键盘输入:Y?N?<回车>,则输出结果为 [10] 。 10、以下程序运行后的输出结果是 [11] 。 void fun(int x,int y) { x=x+y;y=x-y;x=x-y; printf(“%d,%d,”,x,y); } main() { int x=2,y=3; fun(x,y); printf(“%d,%d\n”,x,y); } 11、以下函数的功能是计算s=1+ + +……+ ,请填空。 double fun(int n) { double s=0.0,fac=1.0; int i; for(i=1,i<=n;i++) { fac=fac [12] ; s=s+fac; } return s; } 12 fun函数的功能是:首先对a所指的N行N列的矩阵,找出各行中的最大的数,再求这N个最大值中的最小的那个数作为函数值返回。请填空。 #include #define N 100 int fun(int(*a)[N]) { int row,col,max,min; for(row=0;row{ for(max=a[row][0],col=1;colif( [13] )max=a[row][col]; if( row==0)min=max; else if( [14] )min=max; } return min; }
13、函数sstrcmp()的功能是对两个字符串进行比较。当s所指字符串和t所指字符串相等时,返回值为0;当s所指字符串大于t所指字符串时,返回值大于0;当s所指字符串小于t所指字符串时,返回值小于0(功能等同于库函数strcmp())。请填空。 #include int sstrcmp(char *s,char *t) { while(*s&&*t&& *s== [15] ) { s++;t++;} return [16] ; } 14、下面程序的运行结果是 [17] 。 #define N 10 #define s(x) x*x #define f(x) (x*x) main() { int i1,i2; i1=1000/s(N); i2=1000/f(N); printf(“%d %d\n”,i1,i2); } 15、下面程序的运行结果是: [18] 。 void swap(int *a,int *b) { int *t; t=a; a=b; b=t; } main() { int x=3,y=5,*p=&x,*q=&y; swap(p,q); printf(“%d%d\n”,*p,*q); } 16、下面程序的运行结果是: [19] 。 typedef union student { char name[10]; long sno; char sex; float score[4]; }STU; main() { STU a[5]; printf(“%d\n”,sizeof(a)); } 17、若fp已正确定义为一个文件指针,d1.dat为二进制文件,请填空,以便为“读”而打开此文件:fp=fopen( [20] );。
2002年9月全国计算机等级考试二级C语言试卷答案 一、选择题(⑴-(40)题每题1分,(41)-(50)题每题2分,其60分) (1) C (2)A (3)B (4)B (5) C (6) A (7) D (8) D (9) D (10) D (11) A (12) D (13) B (14) A (15) C (16) D (17) C (18) C (19) B (20) C (21) D (22) C (23) A (24) A (25) D (26) A (27) B (28) D (29) B (30) D (31) C (32) B (33) D (34) A (35) B (36) D (37) C (38) A (39) D (40) D (41) C (42) A (43) B (44) B (45) C (46) D (47) B (48) D (49) A (50) C 二、填空题答案(每空2分,共40分) (1) 【1】 系统软件 (2) 【2】 CON 或 CON: (3) 【3】 TCP/IP 或者 传输控制协议/网际协议 (4) 【4】 EXIT 或者 exit (5) 【5】 二百万 或者 两百万 或者 2百万 或者 200万 或者 2000000 或者 2,000,000 (6) 【6】 20,0 (7) 【7】 17 (8) 【8】 X (9) 【9】 3,2,2,3 (10) 【10】 /i 或者 *1.0/i 或者 *1/i 或者 *(1.0/i) 或者 /(double)i (11) 【11】 1000 10 (12) 【12】 3 5 (13) 【13】 80 (14) 【14】 "d1.dat","rb"#"d1.dat","r+b"#"d1.dat","rb+" (15) 【15】 k (16) 【16】 *k (17) 【17】 maxmax 或者 a[row][col]>=max (18) 【18】 maxmax 或者 min>=max (19) 【19】 *t 或者 t[0] (20) 【20】 *s-*t 或者 *s-t[0] 或者 s[0]-*t 或者 s[0]-t[0]
|