打印本文 打印本文  关闭窗口 关闭窗口  
1998年4月全国计算机等级考试二级C语言笔试试题及答案
作者:佚名  文章来源:不详  点击数  更新时间:2008/4/18 14:06:34  文章录入:杜斌  责任编辑:杜斌

一、选择题((1)-(40)每小题1分,(41)-(50)每小题2分,共60分)
  下列各题 A) 、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项在答题卡相应位置上涂黑,答在试卷上不得分。
(1) 所谓“裸机”是指
  A.单片机
  B.单板机
  C.不装备任何软件的计算机
  D.只装备操作系统的计算机
(2) 下列存储器中,存取速度最快的是
  A.软盘
  B.硬盘
  C.光盘
  D.内存
(3) 系统软件中最重要的是
  A.操作系统
  B.语言处理程序
  C.工具软件
  D.数据库管理系统
(4) CPU处理的数据基本单位为字,一个字的字长
  A.为8个二进制位
  B.为16个二进制位
  C.为32个二进制位
  D.与CPU芯片的型号有关
(5) 打印当前屏幕内容应使用的控制键是
  A.Scroll-Lock
  B.Num-Lock
  C.PgDn
  D.PrtSc(Print Screen)
(6) 能将高级语言源程序转换成目标程序的是
  A.调试程序
  B.解释程序
  C.编译程序
  D.编辑程序
(7) 二进制数1110111.11转换成十进制数是
  A.119.375
  B.119.75
  C.119.125
  D.119.3
(8) 十六进制数FF.1转换成十进制数是
  A.255.0625
  B.255.125
  C.127.0625
  D.127.125
(9) 3.5英寸软盘片的一个角上有一个滑动块,如果移动该滑块露出一个小孔,则该软盘
  A.不能读但能写
  B.不能读也不能写
  C.只能读不能写
  D.能读写
(10) 控制键^C的功能为
  A.终止当前操作
  B.系统复位
  C.暂停标准输出设备的输出
  D.结束命令行
(11) COMMAND.COM为命令处理程序,DOS系统启动后,它
  A.驻留在外存,需要时再装入内存
  B.常驻内存,包含所有内部命令
  C.不能处理外部命令
  D.不能处理后缀为.EXE的可执行文件
(12) 为了将所有扩展名为.PAS的文件改成扩展名为.P,应使用命令
  A.REN *.PAS *.?AS
  B.REN PAS P
  C.REN *.PAS *.P
  D.REN *.PAS *.P??
(13) 设当前盘中文件XY.C的路径为\A\B\XU,当前目录为\A\B。为了查看文件XY.C的内容,应使用命令
  A.TYPE XU\XY.C
  B.TYPE \XU\XY.C
  C.DIR XU\XY.C
  D.DIR \A\B\XU\XY.C
(14) 要将提示符改成当前盘当前目录后加一个大于号">",应使用命令
  A.PROMPT
  B.PROMPT $p$g
  C.PROMPT $$
  D.PROMPT C\>
(15) 设C盘根目录中有一个批处理文件A.BAT,当前盘为A盘。为了执行该批处理文件,下列命令中一定正确的是
  A.C:\A
  B.C:A.BAT
  C.A.BAT
  D.\A.BAT
(16) 设当前盘为C盘,将A盘根目录下的文件目录信息存放到当前盘当前目录下的文件AB中,应使用命令
  A.TYPE A:\>AB
  B.DIR >AB
  C.DIR A:\>AB
  D.DIR \>AB
(17) 可执行文件ABC.EXE所需要的输入数据已经按格式存放在文件XYZ中,要求将执行结果在打印机上打印输出。下列命令中正确的是
  A.ABCXYZ
  C.ABC>XYZPRN
(18) 在当前盘当前目录下有一个文件A.BAT,其内容为
   CD \
   MD \XYZ\AB\B\C
   CD XYZ\AB\B
  在正确执行上述文件后,接着执行下列命令时,不会发生错误的是
  A.MD C
  B.RD \XYZ
  C.RD C
  D.RD B
(19) 下列命令组中两个命令互相等价的是
  A.TYPE AB.TXT 与 DIR AB.TXT
  B.DISKCOMP A: B: 与 COMP A:*.* B:*.*
  C.TYPE AB.TXT>>XY.TXT 与 COPY AB.TXT XY.TXT
  D.TYPE AB.TXT>XY.TXT 与 COPY AB.TXT XY.TXT

(20) 设A盘为启动盘,其目录结构为
   其中文件AUTOEXEC.BAT的内容如下:
   MD \XYZ
   CD \DOS\USER
  则由A盘启动成功后,A盘的当前目录是
  A.\DOS\USER
  B.\XYZ
  C.根目录
  D.\DOS

(21) 在C语言提供的合法的关键字是
  A.swicth
  B.cher
  C.Case
  D.default
(22) 在C语言中,合法的字符常量是
  A.‘\084’
  B.‘\x43’
  C.‘ab’
  D.“\0”
(23) 若已定义x和y为double类型,则表达式:x=1,y=x+3/2的值是
  A.1
  B.2
  C.2.0
  D.2.5
(24) 合法的数组定义是
  A.int a[]="string";
  B.int a[5]={0,1,2,3,4,5};
  C.vhst s="string";
  D.char a[]={0,1,2,3,4,5};
(25) 设a为整型变量,不能正确表达数学关系:1010&&a>15
  D.!(a<=10)&&!(a>=15)
(26) 若t为double类型,表达式t=1,t5,t++的值是
  A.1
  B.6.0
  C.2.0
  D.1.0
(27) 若有定义和语句:
  char s[10]:s="abcd";printf("%s\n",s);
  则结果是(以下u代表空格)
  A.输出abcd
  B.输出a
  C.输出abcduuuuu
  D.编译不通过
(28) 若有定义和语句:
  int **pp,*p,a=10,b=20;
  pp=&p;p=&a;p=&b;printf("%d\n",*p,**pp);
  则输出结果是:
  A.10,20
  B.10,10
  C.20,10
  D.20,20
(29) 若有以下定义和语句:
  int u=010,v=0x10,w=10;
  printf("%d,%d,%d\n,u,v,w);
  则输出结果是:
  A.8,16,10
  B.10,10,10
  C.8,8,10
  D.8,10,10
(30) 若有以下定义和语句
   char c1=’b’,c2=’e’;
   printf("%d,%c\n",c2-c1,c2-’a’+"A");
   则输出结果是:
  A.2,M
  B.3,E
  C.2,E
  D.输出项与对应的格式控制不一致,输出结果不确定
(31) 若有以下定义:
   char s[20]="programming",*ps=s;
   则不能代表字符o的表达式是
  A.ps+2
  B.s[2]
  C.ps[2]
  D.ps+=2,*ps
(32) 若ij已定义为int类型,则以下程序段中内循环体的总的执行次数是
   for (i=5;i;i--)
   for(j=0;j<4;j++){...}
  A.20
  B.25
  C.24
  D.30
(33) 若有以下定义和语句:
  char *s1="12345",*s2="1234";
  printf("%d\n",strlen(strcpy(s1,s2)));
  则输出结果是
  A.4
  B.5
  C.9
  D.10
(34) 若有以下定义和语句:
  int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
  则不能表示a数组元素的表达式是
  A.*p
  B.a[10]
  C.*a
  D.a[p-a]
(35) 下面程序的输出是
   main()
   { char *s="121";
   int k=0, a=0, b=0;
   do {k++;
   if(k%2==0) {a=a+s[k]-’0’;
   continue;}
   b=b+s[k]-’0’;
   a=a+s[k]-’0’;
   }
   while (s[k+1]);
   printf("k=%d a=%d b=%d\n",k,a,
  B.;
  A.k=3 a=2 b=3
  B.k=3 a=3 b=2
  C.k=2 a=3 b=2
  D.k=2 a=2 b=3
(36) 下面程序的输出是
   main()
   { unsigned a=32768;
   printf("a=%d\n",a);
   }
  A.a=32768
  B.a=32767
  C.a=-32767
  D.a=-1

(37) 若有以下定义:
  float x;int a,b;
  则正确的switch 语句是
  A.switch(x)
  B.switch(x)
  { case1.0:printf("*\n"); { case1,2:printf("*\n");
  case2.0:printf("**\n"); case3:printf("**\n");
  } }
  C.switch (a+
  B.
  D.switch (a+
  B.;
  { case 1:printf("\n"); { case 1:printf(."*\n");
  case 1+2:printf("**\n"); case 2:printf("**\n");
  } }
(38) 若有定义:int x,y;char a,b,c;并有以下输入数据(此处< CR> 代表换行符,/u代表空格):
  1u2
  AuBuC
  则能给x赋整数1,给y赋整数2,给a赋字符A,给b赋字符B,给c赋字符C 的正确程序段是
  A.scanf("x=%d y+%d",&x,&y);a=getchar();b=getchar();c=getchar();
  B.scanf("%d %d",&x,&y);a=getchar();b=getchar();c=getchar();
  C.scanf("%d%d%c%c%c,&x,&y,&a,&b,&
  C.;
  D.scanf("%d%d%c%c%c%c%c%c:&x,&y,&a,&a,&b,&b,&c,&
  C.;
(39) 以下程序输出的结果是
  #include
  #include
  main()
  { char w[][10]={"ABCD","EFGH","IJKL","MNOP"},K;
  for (k=1;k<3;k++)
  printf("%s\n",&w[k][k]);
  }
  A.ABCD
  B.ABCD
  FGH EFG
  KL IJ
  M
  C.EFG
  D.FGH
  JK KL
  O
(40) 若有以下的定义:
  int a[]={1,2,3,4,5,6,7,88,9,10}, *p=a;
  则值为3的表式是
  A.p+=2, *(p++)
  B.p+=2,*++p
  C.p+=3, *kp++
  D.p+=2,++*p
(41) 假定所有变量均已正确说明,下列程序段运行后x的值是
   a=b=c=0;x=35;
   if(!a)x--;
   else if(
  B.;
   if(
  C.x=3;
   else x=4;
  A.34
  B.4
  C.35
  D.3
(42) 在以下一组运算符中,优先级最高的运算符是
  A.<=
  B.=
  C.%
  D.&&
(43) 若有以下定义和语句:
  int w[2][3],(*pw)[3];
  pw=w;
  则对w数组元素非法引用是
  A.*(w[0]+2)
  B.*(pw+1)[2]
  C.pw[0][0]
  D.*(pw[1]+2)
(44) 若有以下程序片段:
  char str[]="ab\n\012\\\"";
  printf(Ý",strlen(str));
   上面程序片段的输出结果是
  A.3
  B.4
  C.6
  D.12
(45) 函数调用:strcat(strcpy(str1,str2),str3)的功能是
  A.将串str1复制到串str2中后再连接到串str3之后
  B.将串str1连接到串str2之后再复制到串str3之后
  C.将串str2复制到串str1中后再将串str3连接到串str1之后
  D.将串str2连接到串str1之后再将串str1复制到串str3中
(46) 以下对C语言函数的有关描述中,正确的是
  A.在C中,调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参
  B.C函数既可以嵌套定义又可以递归调用
  C.函数必须有返回值,否则不能使用函数
  D.C程序中有调用关系的所有函数必须放在同一个源程序文件中
(47) 以下叙述中不正确的是
  A.在C中,函数中的自动变量可以赋初值,每调用一次,赋一次初值。
  B.在C中,在调用函数时,实在参数和对应形参在类型上只需赋值兼容。
  C.在C中,外部变量的隐含类别是自动存储类别。
  D.在C中,函数形参可以说明为register变量。
(48) 以下程序的输出结果是
  #include
  subl(char a,char
  B.{char c; c=a;a=b;b=c;}
  sub2(char* a,char
  B.{char c; c=*a;*a=b;b=c;}
  sub3(char* a,char*
  B.{char c; c=*a;*a=*b;*b=c;} { char a,b;
   a=’A’;b=’B’;sub3(&a,&
  B.;putchar(a);putchar(
  B.;
   a=’A’;b=’B’;sub2(&a,
  B.;putchar(a);prtchar(
  B.;
   a=’A’;b=’B’;sub1(a,
  B.;putchar(a);putchar(
  B.;
  }
  A.BABBAB
  B.ABBBBA
  C.BABABA
  D.BAABBA

(49) 设有如下定义:
  struct sk
  {int a;float b;}data,*p;
  若有p=&data;,则对data中的a域的正确引用是
  A.(*p).data.a
  B.(*p).a
  C.p->data.a
  D.p.data.a
(50) 以下对枚举类型名的定义中正确的是
  A.enum a={one,two,three};
  B.enum a {one=9,two=-1,three};
  C.enum a={"one","two","three"};
  D.enum a {"one","two","three"};

二、填空题(每空2分,共40分)
请将每空的正确答案写在答题卡 【1】 至 【20】序号的横线上,答在试卷上不得分。
(1) 与十进制数101等值的二进制数为 【1】 。
(2) DOS命令分为内部命令和外部命令,XCOPY命令属于 【2】 。
(3) 设当前盘为A盘,当前系统提示符为">",在不改变当前盘的情况下,显示C盘的当前目录的路径,应使用命令 【3】 。
(4) 自动批处理文件名必须是 【4】 。
(5) 设当前盘当前目录下有两个文件W.TXT,现要将文件P.TXT连接到文件W.TXT的后面,若使用COPY命令,则完整的命令为 【5】 。
(6) 请写出以下数学式的C语言表达式 6
──. 
a 
───
b.c 

(7) 若已知a=10,b=20,则表达式!ab)
 printf("****y%d\n",y);
 else
 printf("####x=%\n",x);

(11) 在对文件进行操作的过程中,若要求文件的位置回到文件的开头,应当调用的函数是 11 函数.──

(12) 若函数fun的类型void,且有以下定义和调用语句:
 #define M 50
 main()
 { int a[M];
 . . . 
 fun(a);
 . . . 
 }
 定义fun函数首部可以用三种不同的形式,请写出这三种形式: 12 .13 .14
 ─ ─ ─
 (注意:①形参的名字请用q,②使用同一种风格).

 (13) 若给fun函数的形参s传送字符串:"uuuu6354abc",则函数的返回值是 15

 ─.
 log fun(char s[]) {long n;int sign;
 for(;isspace(*s);s++); sign+(*s==’-’)?-1:1;
 if(*s==’+’‖*s==’-’s++; for(n=0;isdigit(*s);s++)
 n=10*n+(*s-’0’); return sign * n;

(14) 以下函数用来在w数组中插入x,w数组中的数已按由小到大顺序存放,n 所指存储单元中存放数组中数据的个数.插入后数组中的数仍有序.请填空.
 void fun (char *w,char x,int *n)
 { int i,p; 
 p=0;
 w[*n]=x; 
 while (x>w[p]) 16
 ──;
 for(i=*n;i>p;i--)w[i]= 17 
 ─;
 w[p]=x;
 ++ *n;
 }

  (15) fun1函数的调用语句为:fun1(&a,&b,&c); 它将三个整数按由大到小的顺序调整后依次放入a,b,c,三个变量中,a中放量大数.请填空.
 void fun2 (int *x,int *y)
 { int t; 
 t=*x; *x=*y;*y=t;
 }
 void fun1 (int *pa,int *pb,int *pc)
 { if(*pc>*pb) fun2( 18)
 ───;
 if(*pa<*pc)fun2(19)
 ──;

 if(*pa<*pb)fun2(20)
 ──; }
〖完〗

1998年4月全国计算机等级考试二级笔试C试卷答案

一、选择题((1)--(40)题每题1分,(41)--(50)题每题2分,共60分。
(1)C (2)D (3)A (4)D (5)D (6)C 7)B (8)A (9)C (10)A
(11)B (12)C (13)A (14)B (15)A (16)C (17)D (18)C (19)D (20)C
(21)D (22)B (23)C (24)D (25)A (26)D (27)D (28)D (29)A (30)B
(31)A (32)A (33)A (34)B (35)C (36)C (37)C (38)D (39)D (40)A
(41)B (42)C (43)B (44)C (45)C (46)A (47)C (48)A (49)B (50)B
二、填空题(每空2分,共40分)
(1) 1100101或(1100101)2
(2) 外部命令(答 外部 不扣分)
(3)cd c:(cd与C:中间至少要有一个空格)
(4)AUTOEXEC.BAT
(5)COPY W.TXT+P.TXT 或copy w.txt+p.txt w.txt
(6)a/(b*c)或a/(a*b)或a/b/c 或a/c/b
(7)1
(8)###a=26,b=13,c=19
(9)*(p+5)或p[5] 
(10)if(a<=b){x=1;printf("####x=%d\n",x);}else {y=2;printf("****y=%d\n",y);} 
或if(a>b){y=2;printf("****y=%d\n",y);}else{x=1;printf("####"x=%d\n",x);}
或if(a<=b) printf("####"x=%d\n",x=1);else printf("****y=%d\n",y=2);
或if(a>b) printf("****y=%d\n",y=2);else printf("####"x=%d\n",x=1);
(11)rewind或 fseek 
(12)(13)(14) void fun(int *q); 或 void fun(q) int *q;
 void fun(int q[]); void fun(q) int q[];
 void fun(int q[M]); void fun(q) int q[M];
说明:以上两组答案中(A)三个答案可以任意次序 (B)标识符q可以用字母或下划线开头以字母、数字和下划线组成的名字代替。(C)两种风格可以混用。
(15)6354
(16)p++ 或 ++p 或 p=p+1 或p+=1或p=1+p 
(17)w[i-1]或 *(w+i-1)
(18) pc ,pb 或 pb , pc 
(19)pc , pa 或 pa , pc
(20)pb , pa或 pa , pb

打印本文 打印本文  关闭窗口 关闭窗口