一、选择题 下列各题 A、B、C、D.四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上,答在试卷上不得分。 (1) 用8位无符号二进制数能表示的最大十进制数为 A.127 B.128 C.255 D.256 (2) 在64位高档微机中,一个字长所占的二进制位数为 A.8 B.16 C.32 D.64 (3) 在Windows环境下,为了复制一个对象,在用鼠标拖动该对象时应同时按住 A.Alt键 B.Esc键 C.Shift键 D.Ctrl键 (4) 在Windows菜单中,暗淡(灰色)的命令项表示该命令 A.暂时不能用 B.正在执行 C.包含下一层菜单 D.包含对话框 (5) 在DOS环境下,为了得到TYPE命令的帮助信息,正确的DOS命令为 A.TYPE B.TYPE/H C.TYPE/* D.TYPE/? (6) 下列选项中,能作为合法DOS文件名的是 A.ANP/A.DAT B.ABCCOM C.ECD.BASIC D.XY+Z.TXT (7) 下列叙述中正确的是 A.在Windows环境下,最大化的窗口是不能移动的 B.在Windows环境下,应用程序窗口最小化后,该应用程序暂停执行 C.在Windows环境下,只有最小化的窗口才能关闭 D.在Windows环境下,不能关闭最大化的窗口 (8) 在Windows环境下,工具栏中的复制按钮是 A.打印机图标 B.剪刀标志 C.复制标志 D.粘贴标志 (9) 在Windows98环境下,若要将整个屏幕上显示的内容存入剪贴板,可以按 A.Ctrl+PrintScreen键 B.Alt+PrintScree键 C.Shift+PrintScreen键 D.PrintScreen键 (10) 目前,计算机病毒扩散最快的途径是 A.通过软件复制 B.通过网络传播 C.通过磁盘考贝 D.运行游戏软件 (11) 以下叙述中正确的是 A.C语言比其他语言高级 B.C语言可以不用编译就能被计算机识别执行 C.C语言以接近英语国家的自然语言和数学语言作为语言的表达形式 D.C语言出现的最晚,具有其他语言的一切优点 (12) C语言中用于结构化程序设计的三种基本结构是 A.顺序结构、选择结构、循环结构 B.if、switch、break C.for、while、do-while D.if、for、continue (13) 在一个C程序中 A.main函数必须出现在所有函数之前 B.main函数可以在任何地方出现 C.main函数必须出现在所有函数之后 D.main函 (14) 下列叙述中正确的是 A.C语言中既有逻辑类型也有集合类型 B.C语言中没有逻辑类型但有集合类型 C.C语言中有逻辑类型但没有集合类型 D.C语言中既没有逻辑类型也没有集合类型 (15) 下列关于C语言用户标识符的叙述中正确的是 A.用户标识符中可以出现在下划线和中划线(减号) B.用户标识符中不可以出现中划线,但可以出现下划线 C.用户标识符中可以出现下划线,但不可以放在用户标识符的开头 D.用户标识符中可以出现在下划线和数字,它们都可以放在用户标识符的开头 (16) 若有以下程序段(n所赋的是八进制数) int m=32767,n=032767 printf("%d,%o/n",m,n); 执行后输出结果是 A.32767,32767 B.32767,032767 C.32767,77777 D.32767,077777 (17) 下列关于单目运算符++、--的叙述中正确的是 A.它们的运算对象可以是任何变量和常量 B.它们的运算对象可以是char型变量和int型变量,但不能是float型变量 C.它们的运算对象可以是int型变量,但不能是double型变量和float型变量 D.它们的运算对象可以是char型变量、int型变量和float型变量 (18) 若有以下程序段 int m=0xabc,n=0xabc; m-=n; printf("%X\n",m); 执行后输出结果是 A.0X0 B.0x0 C.0 D.0XABC (19) 有以下程序段 int m=0,n=0; char c='a'; scanf("%d%c%d",&m,&c,&n); printf("%d,%c,%d\n",m,c,n); 若从键盘上输入:10A10<回车>,则输出结果是: A.10,A,10 B.10,a,10 C.10,a,0 D.10,A,0 (20) 有以下程序 main() { int i; for(i=0;i<3;i++) switch(i) { case 1: printf("%d",i); case 2: printf("%d",i); default: printf("%d",i); } } 执行后输出结果是 A.011122 B.012 C.012020 D.120 (21) 有以下程序 main() { int i=1,j=1,k=2; if((j++‖k++)&&i++) printf("%d,%d,%d\n",i,j,k); } 执行后输出结果是 A.1,1,2 B.2,2,1 C.2,2,2 D.2,2,3 (22) 有以下程序 main() { int a=5,b=4,c=3,d=2; if(a>b> C. printf("%d\n", D.; else if((c-1>= D.==1) printf("%d\n",d+1); else printf("%d\n",d+2) } 执行后输出结果是 A.2 B.3 C.4 D.编译时有错,无结果 (23) 有以下程序 main() { int p[7]={11,13,14,15,16,17,18},i=0,k=0; while(i<7&&p[i]%2){k=k+p[i];i++;} printf("%d\n",k); } 执行后输出结果是 A.58 B.56 C.45 D.24 (24) 有以下程序 main() { int i=0,s=0; do{ if(i%2){i++;continue;} i++; s +=i; }while(i<7); printf("%d\n",s); } 执行后输出结果是 A.16 B.12 C.28 D.21 (25) 有以下程序 main() { int i=10,j=1; printf("%d,%d\n",i--,++j); } 执行后输出结果是 A.9,2 B.10,2 C.9,1 D.10,1 (26) 有以下程序 main() { char a,b,c,*d; a='\'; b='\xbc'; c='\0xab'; d="\017"; print("%c%c%c\n",a,b,c,* D.; } 编译时出现错误,以下叙述中正确的是 A.程序中只有a='\';语句不正确 B.b='\xbc';语句不正确 C.d="\0127";语句不正确 D.a='\';和c='\0xab';语句都不正确 (27) 有以下程序 int fl(int x,int y) { return x>y?x:y; } int f2(int x,int y) { return x>y?y:x; } main() { int a=4,b=3,c=5,d,e,f; d=f1(a, B.; d=f1(d, C.; e=f2(a, B.; e=f2(e, C.; f=a+b+c-d-e; printf("%d,%d,%d\n",d,f,e); } 执行后输出结果是 A.3,4,5 B.5,3,4 C.5,4,3 D.3,5,4 (28) 有如下程序 void f(int x,int y) { int t; if(x } main() { int a=4,b=3,c=5; f(a, B.; f(a, C.; f(b, C.; printf("%d,%d,%d\n",a,b, C.; } 执行后输出结果是 A.3,4,5 B.5,3,4 C.5,4,3 D.4,3,5 (29) 若有以下定义和语句 #include int a=4,b=3,*p,*q,*w; p=&a; q=&b; w=q; q=NULL; 则以下选项中错误的语句是 A.*q=0; B.w=p; C.*p=a; D.*p=*w; (30) 有以下程序 int *f(int *x,int *y) { if(*x<*y) return x; else return y; } main() { int a=7,b=8,*p,*q,*r}; } 执行后输出结果是 A.7,8,8 B.7,8,7 C.8,7,7 D.8,7,8 (31) 有以下程序 main() { char *s[]={"one","two","three"},*p; p=s[1]; printf("%c,%s\n",*(p+1),s[0]); } 执行后输出结果是 A.n,two B.t,one C)w,one D.o,two (32) 有以下程序 main() { int x[8]={8,7,6,5,0,0},*s; s=x+3 printf("%d\n",s[2]); } 执行后输出结果是 A.随机值 B.0 C.5 D.6 (33) 以下能正确定义数组并正确赋初值的语句是 A.int N=5,b[N][N]; B.int a[1][2]={{1},{3}}; C.int c[2][]={{1,2},{3,4}}; D.int d[3][2]={{1,2},{34}}; (34) 有以下程序 main() { int m[][3]={1,4,7,2,5,8,3,6,9}; int i,j,k=2; for(i=0;i<3;i++) { printf("%d",m[k][i]); } } 执行后输出结果是 A.4 5 6 B.2 5 8 C.3 6 9 D.7 8 9 (35) 以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。 #define N 10 void arrin(int x[N]) { int i=0; while(i scanf("%d", ); } 在下划线处应填入的是 A.x+i B.&x[i+1] C.x+(i++) D)&x[++i] (36) 有以下程序 main() { char s[]="\n123\\"; printf("%d,%d\n",strlen(s),sizeof(s)); } 执行后输出结果是 A.赋初值的字符串有错 B.6,7 C.5,6 D.6,6 (37) 阅读以下函数 fun(char *s1,char *s2) { int i=0; while(s1[i]==s2[i]&& s2[i]!='\0')i++; return(s1[i]== && s2{i}!=='\0'); } 此函数的功能是 A.将s2所指字符串赋给s1 B.比较s1和s2所指字符串的大小,若s1比s2的大,函数值为1,否则函数值为0 C.比较s1和s2所指字符串是否相等,若相等,函数值为1,否则函数值为0 D.比较s1和s2所指字符串的长度,若s1比s2的长,函数值为1,否则函数值为0 (38) 以下叙述中正确的是 A.全局变量的作用域一定比局部变量的作用域范围大 B.静态(stati C.类别变量的生存期贯穿于整个程序的运行期间 C.函数的形参都属于全局变量 D)未在定义语句中赋初值的auto变量和static变量的初值都是随机值 (39) 设有如下说明 typedef struct { int n; char c; double x;}STD; 则以下选项中,能正确定义结构体数组并赋初值的语句是 A.STD tt[2]={{1,'A',62},{2, 'B',75}}; B.STD tt[2]={1,"A",62},2, "B",75}; C.struct tt[2]={{1,'A'},{2, 'B'}}; D.structtt[2]={{1,"A",62.5},{2, "B",75.0}}; (40) 有以下程序 main() { union { unsigned int n; unsigned char c; }u1; ul.c=`A`; printf("%c\n",u1.n); } 执行后输出结果是 A.产生语法错 B.随机值 C.A D.65 (41) 有以下程序 main() { char str[]="xyz",*ps=str; while(*ps)ps++; for(ps--;ps-str>=0;ps--) puts(ps); } 执行后的输出结果是 A.yz B.z C.z D.x xyz yz yz xy xyz xyz (42) 有以下程序 main() { int a[][3]={{1,2,3},{4,5,0}},{*pa}[3],i; pa=a; for(i=0;i<3;i++) if(i<2) pa[1][i]=pa[1][i]-1; else pa[1][i]=1; printf("%d\n",a[0][1]+a[1][1]+a[1][2]); } 执行后输出结果是 A.7 B.6 C.8 D.无确定值 (43) 有以下程序 void fun(int *a,int i,int j) { int t; if(i { t=a[i];a[i]=a[j];a[j]=t; fun(a,++i,--j); } } main() { int a[]={1,2,3,4,5,6},i; fun(a,0,5) for(i=0;i<6;i++) printf("%d",a[i]); } 执行后的输出结果是 A.6 5 4 3 2 1 B.4 3 2 1 5 6 C.4 5 6 1 2 3 D.1 2 3 4 5 6 (44) 有以下程序 main(int arge,char *argv[]) { int n,i=0; while(arv[1][i]!='\0' { n=fun(); i++;} printf(%d\n",n*arg C.; } int fun() { static int s=0; s+=1; return s; } 假设程序经编译、连接后生成可执行文件exam.exe,若键入以下命令行 exam 123<回车> 则运行结果为 A.6 B.8 C.3 D)4 (45) 以下程序段中,能够通过调用函数fun,使main函数中的指针变量p指向一个合法的整型单元的是 A.main() B.main { int *p; { int *p; fun(p); fun(&p); } } int fun(int *p) int fun(int **p) { int s; p=&s;} { int s;*p=&s;} C.#include D.#include main() main() { int *p; { int *p; fun(&p); fun(p); } } int fun(int **p) int fun(int *p) { *p=(int *)malloc(2);} { p=(int *)malloc(sizeo(int));} (46) 若要说明一个类型名STP,使得定义语句STP s等价于char *s,以下选项中正确的是 A.typedef STP char *s; B.typedef *char STP; C.typedef stp *char; D.typedef char* STP; (47) 设有如下定义 struct ss { char name[10]; int age; char sex; }std[3],*p=std; 下面各输入语句中错误的是 A.scanf("%d",&(*p).age); B.scanf("%s",&std.name); C.scanf("%c",&std[0].sex) D.scanf("%c",&(p->sex)); (48) 设char型变量x中的值为10100111,则表达式(2+x)^(~3)的值是 A.10101001 B.10101000 C.11111101 D.01010101 (49) 以下叙述中不正确的是 A.C语言中的文本文件以ASCⅡ码形式存储数据 B.C语言中对二进制文件的访问速度比文本文件快 C.C语言中,随机读写方式不适用于文本文件 D.C语言中,顺序读写方式不适用于二进制文件 (50) 以下程序企图把从终端输入的字符输出到名为abc.txt的文件中,直到从终端读入字符#号时结束输入和输出操作,但程序有错。 #include main() { FILE *fout; char ch; fout=fopen('abc.txt','w'); ch=fgetc(stdin); while(ch!='#') { fputc(ch,fout); ch=fgetc(stdin); } fclose(fout); } 出错的原因是 A.函数fopen调用形式错误 B.输入文件没有关闭 C.函数fgetc调用形式错误 D.文件指针stdin没有定义 (42) 有以下程序 main() { int a[][3]={{1,2,3},{4,5,0}},{*pa}[3],i; pa=a; for(i=0;i<3;i++) if(i<2) pa[1][i]=pa[1][i]-1; else pa[1][i]=1; printf("%d\n",a[0][1]+a[1][1]+a[1][2]); } 执行后输出结果是 A.7 B.6 C.8 D.无确定值 (43) 有以下程序 void fun(int *a,int i,int j) { int t; if(i<J) { t=a[i];a[i]=a[j];a[j]=t; fun(a,++i,--j); } } main() { int a[]={1,2,3,4,5,6},i; fun(a,0,5) for(i=0;i<6;i++) printf("%d",a[i]); } 执行后的输出结果是 A.6 5 4 3 2 1 B.4 3 2 1 5 6 C.4 5 6 1 2 3 D.1 2 3 4 5 6 (44) 有以下程序 main(int arge,char *argv[]) { int n,i=0; while(arv[1][i]!='\0' { n=fun(); i++;} printf(%d\n",n*argc); } int fun() { static int s=0; s+=1; return s; } 假设程序经编译、连接后生成可执行文件exam.exe,若键入以下命令行 exam 123<回车> 则运行结果为 A.6 B.8 C.3 D.4 (45) 以下程序段中,能够通过调用函数fun,使main函数中的指针变量p指向一个合法的整型单元的是 A) main() B) main { int *p; { int *p; fun(p); fun(&p); } } int fun(int *p) int fun(int **p) { int s; p=&s;} { int s;*p=&s;} C) #include D) #include main() main() { int *p; { int *p; fun(&p); fun(p); } } int fun(int **p) int fun(int *p) { *p=(int *)malloc(2);} { p=(int *)malloc(sizeo(int));} (46) 若要说明一个类型名STP,使得定义语句STP s等价于char *s,以下选项中正确的是 A.typedef STP char *s; B.typedef *char STP; C.typedef stp *char; D.typedef char* STP; (47) 设有如下定义 struct ss { char name[10]; int age; char sex; }std[3],*p=std; 下面各输入语句中错误的是 A.scanf("%d",&(*p).age); B.scanf("%s",&std.name); C.scanf("%c",&std[0].sex) D.scanf("%c",&(p->sex)); (48) 设char型变量x中的值为10100111,则表达式(2+x)^(~3)的值是 A.10101001 B.10101000 C. 11111101 D.01010101 (49) 以下叙述中不正确的是 A.C语言中的文本文件以ASCⅡ码形式存储数据 B.C语言中对二进制文件的访问速度比文本文件快 C.C语言中,随机读写方式不适用于文本文件 D.C语言中,顺序读写方式不适用于二进制文件 (50) 以下程序企图把从终端输入的字符输出到名为abc.txt的文件中,直到从终端读入字符#号时结束输入和输出操作,但程序有错。 #include main() { FILE *fout; char ch; fout=fopen('abc.txt','w'); ch=fgetc(stdin); while(ch!='#') { fputc(ch,fout); ch=fgetc(stdin); } fclose(fout); } 出错的原因是 A.函数fopen调用形式错误 B.输入文件没有关闭 C.函数fgetc调用形式错误 D.文件指针stdin没有定义 二、填空题(每空2分,共20分) 请将每空的正确答案写在答题卡上【1】-【20】序号的横线上,答在试卷上不得分。 (1) 用十六进制绘存储器中的字节地址进行编号,若地址编号从000到FFFF,则该存诸器的容量为【1】KB。 (2) 假设在当前盘的当前目录下有两个文件A.TXT和B.TXT,现要将文件B.TXT合并连接到文件A.TXT的后面。若使用COPY命令,则完整的命令为【2】。 (3) E-mail地址由用户和域名两部分组成,这两部分的分隔符为【3】。 (4) 假设在当前盘当前目录下有一个可执行程序USER.EXE。现要执行该程序,并要求在执行过程中将显示输出的结果信息存入当前盘当前目录的文件OUT.DAT中,则完整的DOS命令为【4】。 (5) 在DOS环境下,表示打印机的设备文件名为【5】 。 (6) 若有语句 int i=-19,j=i%4; printf("%d\n",j); 则输出结果是 【6】 。 (7) 若有程序 main() { int i,j; scanf("i=%d,j=%d";&i,&j); printf("i=%d,j=%d\n",i,j); } 要求给i赋10,给j赋20,则应该从键盘输入 【7】 。 (8) 若有以下程序 main() { int p,a=5; if(p=a!=0) printf("%d\n",p); else printf("%d\n",p+2); } 执行后输出结果是 【8】 。 (9) 若有以下程序 main() { int a=4,b=3,c=5,t=0; if(a if(a printf("%d %d %d\n",a,b,c); } 执行后输出结果是 【9】 。 (10) 若有以下程序 main() { int a[4][4]={{1,2,-3,-4},{0,-12,-13,14},{-21,23,0,-24},{-31,32,-33,0}}; int i,j,s=0; for(i=0;i<4;i++) { for(j=0;j<4;j++) { if(a[i][j]<0)continue; if(a[i][j]==0)break; s+=a[i][j]; } } printf("%d\n",s); } 执行后输出的结果是 【10】 。 (11) 若有以下程序 main() { char a; a='H'-'A'+'0'; print("%c\n",a); } 执行后的输出结果是 【11】 。 (12) 若有以下程序 int f(int x,int y) { return(y-x)*x; } main() { int a=3,b=4,c=5,d; d=f(f(3,4),f(3,5)); printf("%d\n",d); } 执行后输出的结果是【12】。 (13) 函数YangHui的功能是把杨辉三角形的数据赋给二维数组的下半三角,形式如下 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 其构成规律是: 第0列元素和主对角线无素均为1 其余元素为其左上方和正上方元素之和 数据的个数每行递增1 请将程序补充完整。 #defint N 6 void YangHui(int *[N][N]) { int i,j; x[0][0]=1 for(i=1;i<N;I++) { x[i][0]= 【13】 =1; for(j=1;j<I;J++) x[i][j]= 【14】 ; } } (14) 以下函数的功能是删除字符串s中的所有数字字符。请填空。 void dele(char *s) { int n=0,i; for(i=0,s[i];i++) if(【15】) s[n++]=s[i]; s[n]=【16】; } (15) 设函数findbig已定义为求3个数中的最大值。以下程序将利用函数指针调用findbig函数。请填空。 main() { int findbig(int,int,int); int (*f)(),x,yz,z,big; f=【17】; scanf("%d%d%d",&x,&y,&z); big=(*f)(x,y,z); printf("bing=%d\n",big); } (16) 以下程序的输出结果是【18】 。 #defint MCRA(m) 2*m #define MCRB(n,m) 2*MCRA(n)+m main() { int i=2,j=3; printf("%d\n",MCRB(j,MCRA(i))); } (17) 设有以下定义 struct ss { int info;struct ss *link;}x,y,z; 且已建立如下图所示链表结构: □□ →□□→□□ X Y Z 请写出删除点y的赋值语句【19】 。 (18) 已有文本文件test.txt,其中的内容为:Hello,everyone!。以下程序中,文件test.txt已正确为"读"而打开,由文件指针fr指向该文件,则程序的输出结果是 【20】 。 #include main() { FILE *fr; char str[40]; …… fgets(str,5,fr); printf("%s\n",str); fclose(fr); } 全国计算机等级考试二级C笔试答案 一、选择题 1-5:CDDAD 6-10:BACDB 11-15:CABDB 16-20:ADCAA 21-25:CBDAB 26-30:DCDAB 31-35:CBDCC 36-40:CCBAC 41-45:CAAAC 46-50:DBDDA 二、填空题 (1) 64 (2) COPY A.TXT+B.TXT A.TXT (3) @ (4) USER >OUT.DAT (5) PRN或LPT1或LPT2 (6) -3 (7) i=10,j=20 (8) 1 (9) 5 0 3 (10) 58 (11) 7 (12) 9 (13) x[i][i]和x[i-1][j-1]+x[i-1][j] (14) !(s[i]>='0'&&s[i]<='9')和'\0' (15) findbig (16) 16 (17) x.link=y.link; (18) Hell