全国计算机等级考试二级笔试卷基础知识和C语言程序设计
(考试时间120分钟,满分100分)
1996年4月6日一、选择题((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) 按<Ctrl>+<Break>
C) 按<Ctrl>+<Alt>+<Del> 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<b)&&!c||1)
(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<stdio.h>
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<stdio.h>
main()
{ int a; float b,c;
scanf("%2d%3f%4f",&a,&b,&c);
printf("\na=%d,b=%f,c=%f\n",a,b,c);
}
若运行时从键盘上输入9876543210<CR>(<CR>表示回车),则上面程序的输出结果是
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<stdio.h>
main()
{ int n[2],i,j,k;
for(i=0;i<2;i++) n[i]=0;
k=2
for(i=0;i<k;i++)
for(j=0;j<k;j++) n[j]=n[j]+1;
printf("%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<stdio.h>
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<stdio.h>
#include<string.h>
main()
{ char*s1="AbCdEf",*s2="aB";
s1++; s2++;
printf("%d\n",strcmp(s1,s2));
}
上面程序的输出结果是
A) 正数 B) 负数 C) 零 D) 不确定的值
(36) 请读程序:
#include<stdio.h>
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<stdio.h>
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<stdio.h>
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<CR>(<CR>表示回车),则上面程序的输出结果是
A) oPEN tHE door B) open the door C) OPEN THE DOOR D) Open The Door
(39) 请读程序:
#include<stdio.h>
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<stdio.h>
#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<stdio.h>
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<stdio.h>
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<CR>(<CR>表示回车),则上面程序的输出结果是
A) 0.000000 B) 0.250000 C) 0.500000 D) 1.000000
(43) 请读程序:
#include<stdio.h>
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<math.h>
#include<stdio.h>
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<CR>(<CR>表示回车),则输出的结果是
A) 1.500000 B) 1.600000 C) 2.000000 D) 2.400000
(46) 请读程序:
#include<stdio.h>
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<stdio.h>
#include<string.h>
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<stdio.h>
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<stdio.h>
#include<string.h>
void fun( char *w,int m)
{ char s,*p1,*p2;
p1=w; p2=w+m-1;
while (p1<p2)
{ 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<stdio.h>
main()
{ static char b[]="Goodbye";
char *chp=&b[7];
while( --chp >=&b[0]) putchar( *chp);
putchar('\n');
}
(8) 下面程序的输出结果是 【8】 。
#include<stdio.h>
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<stdio.h>
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<CR>(<CR>表示回车)
程序执行后的输出结果是 【9】 。
(10) 条件“20<x<30或x<-100”的C语言表达式是 【10】 。
(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 <stdio.h>
#define N 5
fun( char *s,char a,int n)
{ int j;
*s=a; j=n;
while( e<s[j]) j--;
return 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<stdio.h>
void fun( char *a1,char *a2,int n)
{ int k;
for( k=0; k<n; k++)
a2[k]=( a1[k]-'A'-3+26)%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; p<t; p++)
if( s[p]>s[k]) 【15】 。
return k;
}
(16) 下面程序的输出结果是 【16】 。
#include <stdio.h>
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 <stdio.h>
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 <stdio.h>
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 <stdio.h>
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<x)&&(x<30))||(x<-100) 或 20<x&&x<30||x<-100
(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)