全国计算机等级考试二级笔试卷基础知识和C语言程序设计
(考试时间120分钟,满分100分)
1997年4月选择题((1)-(40)每小题1分,(41)-(50)每小题2分,共60分)
下列各题 A),B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上,答在试卷上不得分。
(1) 下列设备中只能作为输入设备的是
A) 磁盘驱动器 B) 鼠标器 C) 存储器 D) 显示器
(2) 下列DOS组合控制键中,能使标准输出同时送到屏幕与打印机的是
A) Ctrl+Break B) Ctrl+P C) Ctrl+C D) Ctrl+H
(3) 通常所说的386机是
A) 8位机 B) 16位机 C) 32位机 D) 64位机
(4) 二进制数01100100转换成十六进制数是
A) 64 B) 63 C) 100 D) 144
(5) 十六进制数100转换成十进制数是
A) 1024 B) 512 C) 256 D) 128
(6) 对于存有重要数据的5.25英寸软盘,防止计算机病毒感染的方法是
A) 不要与有病毒的软盘放在一起 B) 在写保护口贴上胶条
C) 保持软盘清洁 D) 定期对软盘格式化
(7) 在启动DOS系统时,启动盘的根录下必须包含的文件是
A) START.COM B) COMMAND.COM C) FORMAT.COM D) BOOT.COM
(8) DOS系统启动后,下列文件中常驻内存的是
A) DOS.COM B) COMMAND.COM C) DISKCOPY.COM D) SYS.COM
(9) 下列名字中,不能作为DOS磁盘文件名的是
A) JTU B) 93GZ.PRG C) CON D) ATT&T.BAS
(10) 下列命令中属于内部命令的是
A) SYS B) COMP C) DIR D) DISKCOMP
(11) 下列文件名中,能与ABC?.?匹配的是
A) AB12.C B) ABCD.FOR C) ABC.TXT D) ABCD.C
(12) 要列出当前盘当前目录中第三个字符为"B"的所有文件的清单,可使用的命令为
A) DIR **B*.* B) DIRB*.? C) DIRB.* D) DIRB*.*
(13) 设当前盘为C盘,其根目录下有两个子目录D1与D2,且当前目录为D1,若要进入子目录D2,可使用的命令为
A) CD D2 B) CD D2\ C) CD \D2 D) CD D1\D2
(14) 设当前盘为C盘,A盘当前目录为根目录。为了删除A盘目录\WS下扩展名为.TXT的所有文件,可用的命令为
A) DEL WS\*.TXT B) DEL \WS\*.TXT C) DEL A:\WS\?.TXT D) DEL A:WS\*.TXT
(15) 设当前盘为C盘,C盘当前目录为\AAA\BBB\A\B\X。下列命令中能正确执行的是
A) MD \AAA\BBB\A B) MD X C) MD \ D) MD \AAA\BBB\A\B\X
(16) 在下列各组的两个命令中,根据给定的条件,执行效果互相等价的是
A) DEL \DOS 与 RD \DOS(当前盘上有目录\DOS)
B) FORMAT A:与 DEL A:*.*(A盘为启动盘)
C) DISKCOPY A,B,与 COPY A:*.* B:(A盘为启动盘)
D) COPY F1 F2 与 TYPE F1>F2(当前盘当前目录下有文件F1)
(17) 为了在1.2MB的高密驱动器A中格式化一张360KB的启动盘,可用的命令为
A) FORMAT A: B) FORMAT A:/S/1 C) FORMAT A:/S/4 D) FORMAT A:/S
(18) 要在打印机上输出当前盘当前目录下扩展名为.TXT的所有文件内容,正确的命令为
A) COPY *.TXT PRN B) COPY *.TXT>PRN C) TYPE *.TXT PRN D) TYPE *.TXT>PRN
(19) 设B盘目录结构如下:
设B盘的当前目录为\F2,要将A盘当前目录下的文件P.BAS复制到B盘的F3子目录中,可用的命令为
A) COPY P.BAS B, B) COPY A:P.BAS B:\
C) COPY A:P.BAS B:\F3 D) COPY A:P.BAS B:F3\
(20) 设当前盘为A盘,要将B盘当前目录下的两个文件A.TXT与X.TXT连接后以文件名Y.TXT存放到A盘的当前目录中,可用的命令为
A) COPY A.TXT+X.TXT A:Y.TXT B) COPY B:A.TXT+X.TXT A:Y.TXT
C) COPY B:A.TXT+B:X.TXT >Y.TXT D) COPY B:A.TXT+B:X.TXT Y.TXT
(21) C语言中最简单的数据类型包括
A) 整型、实型、逻辑型 B) 整型、实型、字符型
C) 整型、字符型、逻辑型 D) 整型、实型、逻辑型、字符型
(22) C语言中,运乍对象必须是整型数的运算符是
A) % B) \ C) %和\ D) * *
(23) 为表示关系x≥y≥z,应使用C语言表达式
A) (x>=y)&&(y>=z) B(x>=y)AND(y>=z) C)(x>=y>=z) D)(x>=y)&(y>=z)
(24) 下述对C语言字符数组的描术中错误的是
A) 字符数组可以存放字符串
B) 字符数组中的字符串可以整体输入、输出
C) 可以在赋值语句中通过赋值运算符"="对字符数组整体赋值
D) 不可以用关系运算符对字符数组中的字符串进行比较
(25) 设有如下定义,int x=10,y=3,z; 则语句
printf("%d\n",z=(x%y,x/y)); 的输出结果是
A) 1 B) 0 C) 4 D) 3
(26) 以下程序的输出结果是
main()
{ int x=10,y=10;
printf("%d %d\n",x--,--y); }
A) 10 10 B) 9 9 C) 9 10 D) 10 9
(27) 定义如下变题和数组:
int i;
int x[3][3]={1,2,3,4,5,6,7,8,9};
则下面语句的输出结果是
for(i=0;i<3;i++) printf("%d",x[i][2-1]);
A) 1 5 9 B) 1 4 7 C) 3 5 7 D) 3 6 9
(28) 若要求在if后一对圆括号中表示a不等于0的关系,则能正确表示这一关系的表达式为
A) a<>0 B) !a C) a=0 D) a
(29) 阅读程序:
#include<stdio.h>
main()
{ int a[10]={1,2,3,4,5,6,7,8,9,0},*p;
p=a;
printf("%x\n",p);
printf("%x\n",p+9); }
该程序有两个printf 语句,如果第一个printf 语句输出的是194,则第二个printf语句的输出结果是
A) 203 B) 204 C) 1a4 D) 1a6
(30) 设有如下函数定义:
int f(char *s)
{ char *p=s;
while(*p!='\0') p++;
return(p-s); }
如果在主程序中用下面的语句调用上述函数,则输出结果为
printf("%d\n",f("goodbey!"));
A) 3 B) 6 C) 8 D) 0
(31) 以下说法中正确的是
A) C语言程序总是从第一个的函数开始执行
B) 在C语言程序中,要调用的函数必须在main()函数中定义
C) C语言程序总是从main()函数开始执行
D) C语言程序中的main()函数必须放在程序的开始部分
(32) 执行下面的程序后,a的值为
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; } }
A) 7 B) 8 C) 9 D) 10
(33) 以下程序段的输出结果是
int x=3;
do { printf("%3d",x-=2);} while(!(--x));
A) 1 B) 3 0 C) 1-2 D) 死循环
(34) 定义如下变量,int n=10; 则下列循环的输出结果是
while(n>7)
{ n--;
printf("%d\n",n); }
A) 10 B) 9 C) 10 D) 9
9 8 9 8
8 7 8 7
7 6
(35) 两次运行下面的程序,如果从键盘上分别输入6和4,则输出结果是
main( )
{ int x;
scanf("%d",&x);
if(x + + >5) printf("%d",x);
else printf("%d\n",x - -); }
A) 7和5 B) 6和3 C) 7和4 D) 6和4
(36) 设有如下定义,char *aa[2]={"abcd","ABCD"}; 则以下就法中正确的是
A) aa数组成元素的值分别是"abcd"和ABCD"
B) aa是指针变量,它指向含有两个数组元素的字符型一维数组
C) aa数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址
D) aa数组的两个元素中各自存放了字符'a'和'A'的地址
(37) 以下程序的输出结果是
main( )
{ int a=-1,b=4,k;
k=(+ +a〈0)&&!(b - -〈=0);
printf("%d%d%d\n",k,ab); }
A) 104 B) 103 C) 003 D) 004
(38) 设有以下定义:
int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};
int (*prt)[3]=a,*p=a[0];
则下列能够正确表示数组元素a[1][2]的表达式是
A) *((*prt+1) [2]) B) *(*(p+5)) C) (*prt+1)+2 D) *(*(a+1)+2)
(39) 下列程序的输出结果是
main( )
{ char*p1,*p2,str[50]="xyz";
p1="abcd";
p2="ABCD";
strcpy(str+2,strcat(p1+2,p2+1);
printf)"%s",str); }
A) xyabcAB B) abcABz C) ABabcz D) xycdBCD
(40) 执行下面的程序后,a的值是
#define SQR(X) X*X
main( )
{ int a=10,k=2,m=1;
a/=SQR(k+m)/SQR(k+m);
printf("%d\n",a); }
A) 10 B) 1 C) 9 D) 0
(41) 下列程序执行后输出的结果是
#include <stdio.h>
f(int a)
{ int b=0; static c=3:
a=c+ +,b+ +;
return (a); }
main( )
{ int a=2,i,k;
for(i=0;i〈2;i=+ +〉 k=f(a+ +);
printf("%d\n",k); }
A) 3 B) 0 C) 5 D) 4
(42) 下列程序的输出结果是
main( )
{ int a[5]={2,4,6,8,10},*P,* *k;
p=a; k=&p;
printf("%d",*(p++)); printf("%d\n",* *k); }
A) 4 4 B) 2 2 C) 2 4 D) 4 6
(43) 阅读下列程序:
main( )
{ int n[3],i,j,k;
for(i=0;i〈3;i++〉 n[i]=0;
k=2;
for (i=0;i〈k;i++〉
for (j=0;j〈k;j++〉 n[j]=n[i]+1;
printf("%d\n",n[1]); }
下述程序运行后输出结果是
A) 2 B) 1 C) 0 D) 3
(44) 字符'0'的ASCII码的十进制数为48,且数组的第0个元素在低位,则以下程序的输出结果是
#include<stdio.h>
main( )
{ union { int i[2]; long k; char c[4]; }r,*s=&r;
s->i[0]=0x39;
s->i[1]=0x38;
printf("%c\n",s->c[0]) }
A) 39 B) 9 C) 38 D) 8
(45) 设有以下定义:
typedef union { long i;int k[5];char c;}DATE;
struct date { int cat;DATE cow;double dog;}too;
DATE max;
则下列语句的执行结果是
printf("%d",sizeof(struct date)+sizeof(max));
A) 25 B) 30 C) 18 D) 8
(46) 执行以下程序后,y的值是
main ( )
{ int a[]={2,4,6,8,10};
int y=1,x,*p;
p=&a[1];
for(x=0;x<3;x++) y + = * (p + x);
printf("%d\n",y); }
A) 17 B) 18 C) 19 D) 20
(47) 下列程序执行后输出的结果是
int d=1;
fun (int q)
{ int d=5;
d + =p + +; printf("%d".d); }
main( )
{ int a=3;
fun(a);
d + = a + +; printf("%d\n",d); }
A) 8 4 B) 9 6 C) 9 4 D) 8 5
(48) 下列程序的输出结果是
main( )
{ char ch[2][5]={"6934,"8254"},*p[2];
int i,j,s=0;
for(i=0;i<2;i + +) p[i]=ch[i];
for(i=0;i<2;i + +)
for(j=0;p[i][j]>'\0'&&p[i][j]<='9';j+=2) s=10*s+p[i][j]-'0';
printf("%d\n",s);
A) 6385 B) 69825 C) 63825 D) 693825
(49) 以下程序的输出结果是
fut (int**s,int p[2][3])
{ **s=p[1][1]; }
main( )
{ int a[2][3]={1,3,5,7,9,11},*p;
p=(int*)malloc(sizeof(int));
fut(&p,a);
primtf("%d\n",*p); }
A) 1 B) 7 C) 9 D) 11
(50) 以下程序的输出结果是
#include"ctype.h"
space (char *str)
{ int i,t;char ts[81];
for(i=0,t=0;str[i]!='\0';i+=2)
if(! isspace(*str+i)&&(*(str+i)!='a'))
ts[t++]=toupper(str[i]);
ts[t]='\0';
strcpy(str,ts); }
mian( )
{ char s[81]={"a b c d e f g"};
space(s);
puts(s); }
A) abcdeg B) bcde C) ABCDE D) BCDE
二、填空题(每空2分,共40分)
请将每空的正确答案写在答题卡上【1】-【20】序号的横线上,答在试卷上不得分。
(1) 十进制数112.375转换成十六进制数为 【1】 。
(2) 存储200个32×32点阵的汉字信息需 【2】 KB。
(3) 数字符号0的ASCII码十进制表示为48,数字符号9的ASCII码十进制表示为 【3】 。
(4) DOS命令分为内部命令与外部命令,TREE命令属于 【4】 命令。
(5) 自动批处理文件的文件名为【5】 。
(6)表示条件:10<x<100或者说x<0的C语言表达式是【6】 。
(7) 下列程序的输出结果是【7】
main()
{ char b[]="ABCDEFG";
char *chp=&b[7];
while(--chp>&b[0]) putchar(*chp);
putchar('\n'); }
(8) 下列程序的输出结果是【8】 。
int ast(int x,int y,int * cp,int * dp)
{ *cp=x+y; *dp=x-y; }
main()
{ int a,b,c,d;
a=4;b=3;
ast(a,b,&c,&d);
printf("%d %d/n",c,d); }
(9) 以下程序的功能是:人键盘上输入若干个学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束输入.请填空.
main()
{ float x,amax,amin;
scanf("%f",&x);
amax=x; amin=x;
while(【9】)
{ if(x>amax) amax=x;
if(【10】) amin=x;
scanf("%f",&x); }
printf("\namax=%f\namin=%f\n",amax,amin); }
(10) 下面程序通过函数average计算数组中各元素的平均值,请填空.
float average(int * pa,int n)
{ int i;
float avg=0.0;
for(i=0;i<n;i++) avg=avg+【11】;
avg=【12】;
return avg; }
main()
{ int i,a[5]={2,4,6,8,10};
float mean;
mean=average(a,5); printf("mean=%f\n",mean);}
(11) 阅读程序:
#include "string.h"
#include "stdio.h"
strle(char a[],char b[])
{ int num=0,n=0;
while(*(a+num)!='\0'),num++;
while(b[n]){ *(a+num)=b[n];num++;n++;}
return (num);}
main()
{ char str1[81],str2[81],*p1=str1,*p2=str2;
gets(p1); gets(p2);
printf("%d\n",strle(p1,p2)); }
运行上面程序,如果从键盘上输入字符串qwerty和字符串abcd则程序的输出结果是 【13】 。
(12) 以下程序的输出结果是 【14】 。
fun(int n,int *s)
{ int f1,f2;
if(n = =1||n = =2) *s=1;
else { fun(n-1,&f1); fun(n-2,&f2); *s=f1+f2;} }
main()
{ int x;
fun(6,&x); printf("%d\n",x); }
(13) 阅读程序:
main()
{ char str1[]="how do you do",str2[10];
char *p1=str1,*p2=str2;
scanf("%s",p2); printf("%s",p2); printf("%s\n",p1); }
运行上面的程序,输入字符串HOW DO YOU DO 则程序的输出结果是【15】 。
(14) 以下程序由终端输入一个文件名,然后把从终端键盘输入的字符依次存放到该文件中,用#作为结束输入的标志.请填空.
#include <stdio.h>
main()
{ FILE * fp;
char ch,fname[10];
printf("lnput the name of file\n");
gets(fname);
if((fp=【16】)==NULL)
{ printf("Cannot open\n"); exit(0);}
printf("Enter data\n");
while((ch=getchar())!='#') fputc(【17】,fp);
fclose(fp); }
(15) 以下函数creat用来建立一个带头结点的单向链表,新产生的结点总是插在链表的末尾。单向链表的头指针作为函数值返回.请填空:
#include<stdio.h>
struct list { char data; struct list * next; };
struct list * creat()
{ struct list * h,* p,* q;
char ch;
h=【18】 malloc(sizeof(struct list));
p=q=h;
ch=getchar();
while(ch!='?')
{ p=【19】 malloc(sizeof(struct list));
p->data=ch;
p->next=p;
q=p;
ch=getchar();
}
p->next='\0';
【20】
}
〖完〗
1997年4月二级C笔试试卷参考答案一 选择题((1)~(40)题每题1分,(41)~(50)题每题2分,共60分)
(1)B
(2)B
(3)C
(4)A
(5)C
(6)B
(7)B
(8)B
(9)C
(10)C
(11)D
(12)D
(13)C
(14)D
(15)B
(16)D
(17)C
(18)A
(19)C
(20)D
(21)B
(22)A
(23)A
(24)C
(25)D
(26)D
(27)C
(28)D
(29)D
(30)C
(31)C
(32)B
(33)C
(34)B
(35)A
(36)D
(37)D
(38)D
(39)D
(40)B
(41)D
(42)C
(43)D
(44)B
(45)B
(46)C
(47)A
(48)A
(49)C
(50)D
二 填空题(每空2分,共40分)
((1)至(5)题中所有字母都允许大`小写或大小写混合)
(1) 【1】 70.6
(2) 【2】 25(答25KB不扣分)
(3) 【3】 57
(4) 【4】 外部(答外部命令不扣分)
(5) 【5】 AUTOEXEC.BAT(答AUTOEXEC扣1分)
(6) 【6】 (x>10 && x<100)││x<0 或(1010 && x<100) 或 0>x││(10< && x<100)
(并且括号有无都可以)
(7) 【7】 GFEDCB
(8) 【8】 7 1
(9) 【9】 x>=0.0 或 !(x<0) 或!(x<0.0)
或0.0<=x 或!(0.0>x) 或! (0>x)
(10)【10】 xx 或 amin>=x
【11】 *(pa+i) 或 pa[i]
【12】 avg/n 或avg/(float)n 或 avg/(double)n
(11)【13】 10
(12)【14】 8
(13)【15】 HOW how do you do (说明:HOW 和how之间有无空格均可)
(14)【16】 fopen(fname,"w")说明:"w"开头的字符串均可)
【17】 ch
(15)【18】 (struct list *)
【19】 (struct list *)
【20】 return(h); 或 return h;