一、选择题((1)-(40)每小题1分,(41)-(50)每小题2分,共60分) 下列各题 A) 、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上,答在试卷上不得分。 (1) 一个完整的计算机系统包括 A.主机、键盘与显示器 B.计算机与外部设备 C.硬件系统与软件系统 D.系统软件与应用软件 (2) 十六进制数1000转换成十进制数是 A.4096 B.1024 C.2048 D.8192 (3) 十进制数269转换成十六进制数是 A.10E B.10D C.10C D.10B (4) 如果用八位二进制补码表示带符号的定点整数,则能表示的十进制数的范围是 A.-127到+127 B.-128到+128 C.-127到+128 D.-128到+127 (5) 下列设备中,既可作为输入设备又可作为输出设备的是 A.鼠标器 B.打印机 C.键盘 D.磁盘驱动器 (6) 下列各叙述中,正确的是 A.正数十进制原码的补码是原码本身 B.所有的十进制小数都能准确地转换为有限位二进制小数 C.汉字的计算机内码就是国标码 D.存储器具有记忆能力,其中的信息任何时候都不会丢失 (7) 在下列操作中,能导致DOS系统重新启动但不进行系统自检的是 A.加电开机 B.按+ C.按++ D.按RESET按钮 (8) 如果给定一个带有通配符的文件名F*.?,则在下列各文件中,它能代表的文件名是 A.FA.EXE B.F.C C.EF.C D.FABC.COM (9) DOS系统启动后,下列文件中常驻内存的是 A.*.COM B.FORMAT.COM C.AUTOEXEC.BAT D.COMMAND.COM (10) 设A盘的目录结构为(画方框的为目录) 如果当前盘为C盘,A盘的当前目录为\D2,则下列对A盘上文件QR.C的指定中,合法的是 A.\D2\D4\QR.C B.D4\QR.C C.A:D4\QR.C D.A:D2\D4\QR.C
(11) 为了要将A盘当前目录(不是根目录)中所有扩展名为.C的文件同名复制到A痰哪柯糪USER中,正确的命令是 A.COPY A:*.C USER\*.C B.COPY A:*.C A:\USER C.COPY A:*.C A:USER\ D.COPY A:*.C A:USER\*.C (12) 为了在屏幕上一次显示当前盘当前目录下的所有扩展名为.TXT的文件内容,下列命令中正确的是 A.TYPE *.TXT B.TYPE *.TXT CON C.COPY *.TXT>CON D.COPY *.TXT CON (13) 设当前盘为A盘,为了将当前盘当前目录下的文件AB1.TXT连接在C盘根目录下的文件XYZ.TXT的后面,正确的命令是 A.COPY C:\XYZ.TXT+AB1.TXT B.COPY AB1.TXT>>C:\XYZ.TXT C.TYPE AB1.TXT>C:\XYZ.TXT D.COPY AB1.TXT+C:\XYZ.TXT>C:\XYZ.TXT (14) 设A盘为启动盘,其目录结构为(画方框的为目录) 其中文件AUTOEXEC.BAT的内容为 MD \XYZ CD \DOS\USER 则由A盘启动成功后,A盘的当前目录是 A.\DOS\USER B.\XYZ C.\ D.\DOS (15) 下列DOS命令中为内部命令的是 A.COMP B.PATH C.PRINT D.FORMAT
(16) 设当前盘为C盘,所用的所有软盘已格式化且容量相同,则下列DOS命令中错误的是 A.DISKCOPY A: C: B.DISKCOPY A: A: C.COPY A:*.* D.COPY A:*.* C: (17) 下列DOS命令中,有错误的是 A.TYPE AAB.FOR>PRN B.TYPE ?AB.FOR C.COPY *.C PRN D.COPY CON PRN (18) 设当前盘为C盘,在当前目录下有全部的DOS系统文件与批处理命令文件AB.BAT,且该批处理命令文件的内容为 FORMAT A:/4 MD \XYZ CD \XYZ RD \XYZ MD \XYZ 如果在1.2软盘驱动器A中插入一张360K容量的软盘片,执行批自理命令文件AB.BAT后,结果A盘的目录结构是 A.根目录 B.根目录----子目录XYZ----子目录XYZ C.根目录 ─┬─ 子目录XYZ └─ 子目录XYZ D.根目录----子目录XYZ (19) 下列带有通配符的文件名,能代表文件ABC.FOR的是 A.*BC.? B.A?.* C.?BC.* D.?.? (20) 设当前盘为C盘,且C盘上含有子目录\DOS,A盘为只有根目录的启动盘(根目录下只有三个DOS系统文件与扩展名为. C的文件)。下列命令组中的两个命令从效果上可以认为等价的是 A.DEL \DOS与RD \DOS B.FORMAT A:与DEL A:*.* C.FORMAT A: /S与DEL A:*.? D.COPY A:F1 F2与REN A:F1 F2
(21) 设a、b和c都是int型变量,且a=3,b=4,c=5,则下面的表达式中,值为0的表达式是 A.’a’&&’b’ B.a<=b C.a||b+c&&b-c D.!((a(22) 请读程序片段: int i=65536; printf("%d\n",i); 上面程序片段的输出结果是 A.65536 B.0 C.有语法错误,无输出结果 D.-1 (23) 设ch是char型变量,其值为A,且有下面的表达式: ch=(ch>=’A’&&ch<=’Z’)?(ch+32):ch 上面表达式的值是 A.A B.a C.Z D.z (24) 若x和y都是int型变量,x=100,y=200,且有下面的程序片段: printf("%d",(x,y)); 上面程序片段的输出结果是 A.200 B.100 C.100 200 D.输出格式符不够,输出不确定的值 (25) 下面各语句行中,能正确进行赋字符串操作的语句行是 A.char st[4][5]={"ABCDE"}; B.char s[5]={’A’,’B’,’C’,’D’,’E’}; C.char *s; s="ABCDE"; D.char *s; scanf("%s",s); (26) 若k是int型变量,且有下面的程序片段: k=-3 if(k<=0) printf("####") else printf("&&&&"); 上面程序片段的输出结果是 A.#### B.&&&& C.####&&&& D.有语法错误,无输出结果 (27) 若x是int型变量,且有下面的程序片段: for(x=3; x<6; x++) printf((x%2)?("**%d"):("##%d\n"),x); 上面程序片段的输出结果是 A.**3 B.##3 C.##3 D.**3##4 ##4 **4 **4##5 **5 **5 ##5 (28) 请读程序: #include f(char *s) { char *p=s; while( *p!=’\0’) p++; return(p-s); } main() { printf("%d\n",f("ABCDEF"));} 上面程序的输出结果是 A.3 B.6 C.8 D.0 (29) 请读程序: #include main() { int a; float b, c; scanf("-?O",&a,&b,& C.; printf("\na=%d, b=%f, c=%f\n", a, b, C.; } 若运行时从键盘上输入9876543210(表示回车),则上面程序的输出结果是 A.a=98, b=765, c=4321 B.a=10, b=432, c=8765 C.a=98, b=765.000000, c=4321.000000 D.a=98, b=765.0, c=4321.0 (30) 请读程序: #include main() { int n[2], i, j, k; for(i=0;i<2;i++) n[i]=0; k=2 for(i=0;ifor(j=0;jprintf("%d\n",n[k]); } 上面程序的输出结果是 A.不确定的值 B.3 C.2 D.1
(31) 请读程序片段: char str[]="ABCD", *p=str; printf("%d\n",*(p+4)); 上面程序的输出结果是 A.68 B.0 C.字符"D"的地址 D.不确定的值 (32) 请读程序片段: #include main() { int a, b; for(a=1;b=1;a<=100;a++) { if(b>=20) break; if(b%3==1) {b+=3; continue; } b-=5; } printf("%d\n",a); } 上面程序的输出结果是 A.7 B.8 C.9 D.10 (33) 若要用下面的程序片段使指针变量p指向一个存储整型变量的动态存储单元: int *p; p=__________ malloc( sizeof(int)); 则应填入 A.int B.inst * C.(*int) D.(int *) (34) 请读程序片段(字符串内没有空格): printf("%d\n",strlen("ATS\n012\1\\")); 上面程序片段的输出结果是 A.11 B.10 C.9 D.8 (35) 请读程序: #include #include main() { char*s1="AbCdEf", *s2="aB"; s1++; s2++; printf("%d\n",strcmp(s1,s2)); } 上面程序的输出结果是 A.正数 B.负数 C.零 D.不确定的值 (36) 请读程序: #include func( int a, int B. { int c; c=a+b; return c; } main() { int x=6, y=7, z=8, r; r=func( x--,y==,x+y),z--); printf("%d\n",r); } 上面程序的输出结果是 A.11 B.20 C.21 D.31 (37) 请读程序: #include int a[]={2,4,6,8}; main() { int i; int *p=a; for(i=0;i<4;i++) a[i]=*p++; printf("%d\n",a[2]); } 上面程序的输出结果是 A.6 B.8 C.4 D.2 (38) 请读程序: #include char fun(char * C. { if( *c<=’Z’ && *c>=’A’) *c-=’A’-’a’; return *c; } main() { char s[81], *p=s; gets(s); while(*p) {*p=fun(p); putchar(*p); p++;} putchar(’\n’); } 若运行时从键盘上输入OPEN THE DOOR(表示回车),则上面程序的输出结果是 A.oPEN tHE door B.open the door C.OPEN THE DOOR D.Open The Door (39) 请读程序: #include void fun( int *s) { static int j=0; do s[j]+=s[j+1]; while(++j<2); } main() { int k, a[10]={1,2,3,4,5}; for(k=1; k<3; k++) fun(a); for(k=0; k<5; k++) printf("%d", a[k]); } 上面程序的输出结果是 A.34756 B.23445 C.35743 D.12345 (40) 请读程序: #include #define SUB(X,Y) (X)*Y main() { int a=3, b=4; printf("%d", SUB(a++, b++)); } 上面程序的输出结果是 A.12 B.15 C.16 D.20
(41) 请读程序: #include main() { int mun=0; while(num<=2) { num++; printf("%d\n",num);} } 上面程序的输出结果是 A.1 B.1 C.1 D.1 2 2 2 3 3 4 (42) 请读程序: #include main() { float x,y; scan("%f",&x); if(x<0.0) y=0.0 else if((x<5.0)&&(x!=2.0)) y=1.0/(x+2.0); else if (x<10.0) y=1.0/x; else y=10.0; printf("%f\n",y); } 若运行时从键盘上输入2.0(表示回车),则上面程序的输出结果是 A.0.000000 B.0.250000 C.0.500000 D.1.000000 (43) 请读程序: #include main() { int x=1, y=0, a=0, b=0; switch(x) { case 1: switch(y) { case 0: a++;break; case 1: b++;break; } case 2: a++; b++; break; } printf("a=%d, b=%d\n",a, B.; } 上面程序的输出结果是 A.a=2, b=1 B.a=1, b=1 C.a=1, b=0 D.a=2, b=2 (44) 若有下面的程序片段: int a[12]={0}, *p[3], **pp, i; for(i=0; i<3; i++) p[i]=&a[i*4]; pp=p; 则对数组元素的错误引用是 A.pp[0][1] B.a[10] C.p[3][1] D.*(*(p+2)+2) (45) 请读程序: #include #include main() { float x,y,z; scan("%f%f",&x,&y); z=x/y; while(1) { if(fabs(z)>1.0) { x=y; y=z; z=x/y; } else break } printf("%f\n",y); } 若运行时从键盘上输入3.6 2.4(表示回车),则输出的结果是 A.1.500000 B.1.600000 C.2.000000 D.2.400000 (46) 请读程序: #include f(in b[], int n) { int i, r; r=1; for(i=0; i<=n; i++) r=r*b[i]; return r; } main() { int x, a[]={ 2,3,4,5,6,7,8,9}; x=f(a, 3); printf("%d\n",x); } 上面程序的输出结果是 A.720 B.120 C.24 D.6 (47) 请读程序: #include #include void fun( char *s) { char a[10]; strcpy( a, "STRING"); s=a; } main() { char *p; fun(p); x=f(a, 3); printf("%s\n",p); } 上面程序的输出结果是(└┘表示空格) A.STRING└┘└┘└┘└┘ B.STRING C.STRING└┘└┘└┘ D.不确定的值 (48) 若已建立下面的链表结构,指针p、s分别指向图中所示的结点,则不能将s所指的结点插入到链表末尾的语句组是 A.s->next=NULL; p=p->next; p->next=s; B.p=p->next; s->next=p->next; p->next=s; C.p=p->next; s->next=p; p->next=s; D.p=(*p).next; (*s).next=(*p).next; (*p).next=s; (49) 请读程序: #include void fun(float *pl, float *p2, float *s) { s=( float * )calloc( 1, sizeof(float)); *s=*p1+ *(p2++); } main() { float a[2]={1.1, 2.2}, b[2]={10.0, 20.0}, *s=a; fun(a, b, s) printf("%f\n",*s); } 上面程序的输出结果是 A.11.100000 B.12.100000 C.21.100000 D.1.100000 (50) 请读程序: #include #include void fun( char *w, int m) { char s, *p1, *p2; p1=w; p2=w+m-1; while (p1{ s=*p1++; *p1=*p2--; *p2=s;} } main() { char a[]="ABCDEFG"; fun( a, strlen(a)); puts(a); } 上面程序的输出结果是 A.GFEDCBA B.AGADAGA C.AGAAGAG D.GAGGAGA
二、填空题(每空2分,共40分) 请将每空的正确答案写在答题卡上【1】-【20】序号后的横线上,答在试卷上不得分。 (1) DOS命令分为内部命令与外部命令,XCOPY命令是 【1】 命令 (2) 为了列出当前盘当前目录中所有第三个字符为C的文件名的有关信息,应该用命令 【2】 。 (3) 设当前盘为A盘,当前目录为\X\Y,A盘上的一个文件QR.C在当前目录下的子目录W中。现已将A盘的当前目录改为\D\XY,当前盘改为C盘,如需指定A盘上该文件应写成 【3】 。 (4) 用十六进制给存储器中的字节地址进行编号,其地址编号是从0000到FFFF,则该存储器的容量是【4】KB。 (5) 设有两个八位二进制数00010101与01000111相加,其结果的十进制表示为 【5】 。 (6) 数学式子 写成C语言表达式是 【6】 。 (7) 下面程序的输出结果是 【7】 。 #include main() { static char b[]="Goodbye"; char *chp=&b[7]; while( --chp >=&b[0]) putchar( *chp); putchar(’\n’); } (8) 下面程序的输出结果是 【8】 。 #include void as( int x, int y, int *cp, int *dp) { *cp=x+y; *dp=x-y; } main() { int a=4, b=3, c, d; as( a, b, &c, &d); printf( ’%d %d\n", c, d); } (9) 请读程序: #include main( int argc, char *argv[]) { int i; printf( ’%d\n", argc); for( i=0; i<=argc+1; i++) printf( "%s ", argv[i]); printf("\n"); } 若上面的程序编译、连接后生成可执行文件ABC.EXE,则输入以下命令行 abc file1 file2(表示回车) 程序执行后的输出结果是 【9】 。 (10) 条件“20(11) 设二进制数a是00101101,若想通过异或运算a^b使a的高4位取反,低4位不变,则二进制数b应是 【11】 。 (12) 若有以下说明和定义语句,则变量w在内存中所占的字节数是 【12】 。 union aa { float x, y; char c[6]; }; struct st { union aa v; float w[5]; double ave; } w; (13) 下面程序的输出结果是 【13】 。 #include #define N 5 fun( char *s, char a, int n) { int j; *s=a; j=n; while( ereturn j; } main() { char s[N+1]; int k, p; for( k=1; k<=N; k++) s[k]=’A’+k+1; printf( "%d\n", fun(s, ’E’, N)); }
(14) 下面程序的输出结果是 【14】 。 #include void fun( char *a1, char *a2, int n) { int k; for( k=0; ka2[k]=( a1[k]-’A’-3+26)&+’A’; a2[n]=’\0’; } main() { char s1[5]="ABCD", s2[5]; fun( s1, s2, 4); puts( s2); } (15) 下面的findmax函数返回数组s中最大元素的下标,数组中元素的个数由t传入,请填空。 findmax( int s[], int t) { int k, p; for( p=0, k=p; pif( s[p]>s[k]) 【15】 。 return k; } (16) 下面程序的输出结果是 【16】 。 #include fun( int x) { int p; if( x==0||x==1) return(3); p=x-fun( x-2); return p; } main() { printf( "%d\n", fun(9));} (17) 下面程序的输出结果是 【17】 。 #include funa( int a, int b) { return a+b;} funb( int a, int b) { return a-b;} sub( int (*t)(), int x, int y) { return((*t)( x,y));} main() { int x, (*p)(); p=funa; x=sub(p,9,3); x+=sub(funb, 8, 3); printf("%d\n", x); } (18) 下面程序的输出结果是 【18】 。 #include main() { char *p[]={ "BOOL", "OPK", "H", "SP"}; int i; for(i=3; i>=0; i--,i--) printf( "%c", *p[i]); printf("\n"); } (19) 为了建立如图所示的存储结构(即每个结点含两个域,data是数据域,next是向结点的指针域),请填空。 data next struct link { char data; 【19】 } node; (20) 下面的程序用来统计文件中字符的个数,请填空。 #include main() { FILE *fp; long num=0; if(( fp=fopen("fname.dat","r"))==NULL) { printf( "Can’t open file! \n"); exit(0);} while 【20】 { fgetc(fp); num++;} printf("num=%d\n", num); fclose(fp); }
1996年4月二级C语言笔试试卷参考答案
一`选择题((1)~(40)题每题1分,(41)~(50)题每题2分,共60分) (1)C (2)A (3)B (4)D (5)D (6)A (7)C (8)B (9)D (10)C (11)B (12)D (13)A (14)C (15)B (16)A (17)B (18)A (19)C (20)C (21)D (22)B (23)B (24)A (25)C (26)D (27)D (28)B (29)C (30)A (31)B (32)B (33)D (34)C (35)A (36)C (37)A (38)B (39)C (40)A (41)C (42)C (43)A (44)C (45)B (46)B (47)D (48)C (49)D (50)C 二` 填空题(每空2分,共40分) (第(2)`(3)空允许小写或大小写混合使用,其它空均须与答案一样) (1) 外部 (2) DIR ?? C*.* (3) A:\X\Y\W\QR.C (4) 64 (5) 92 (6) pow(sin(x),2) * (a+b)/(a-b) 或 sit(x) * sit(x) * (a+b)/(a-b) (7) eybdooG (8) 7 1 (9) 3 abc.exe file1 file2 (注:两个答案,每个1分) (10) ((20 (11) 11110000 (12) 34 (13) 3 (14) XYZA (15) k=p (16) 7 (17) 17 (18) SO (19) struct link *next (20) (!feof(fp))或(feof(fp)==0)
|