1996年4月全国计算机等级考试二级C语言试卷(含答案)
发布时间:2006-10-14 8:54:00   收集提供:gaoqian

一、选择题((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("%2d%3f%4f",&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;ifor(j=0;j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
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( e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
void fun( char *a1, char *a2, int n)
{ int k;
for( k=0; 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if( 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)



 
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50