1998年9月全国计算机等级考试二级C语言试卷(含答案)
发布时间:2006-10-14 8:53:57   收集提供:gaoqian


一、选择题((1)-(40)每小题1分, (41)-(50)每小题2分, 共60分)
下列各题 A) 、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上,答在试卷上不得分。
(1) 通常所说的主机主要包括
A) CPU B) CPU和内存 C) CPU、内存与外存 D) CPU、内存与硬盘
(2) 在微机系统中,最基本的输入输出模块BIOS存放在
A) RAM中 B) ROM中 C) 硬盘中 D) 寄存器中
(3) 一个24*24点阵的汉字字形信息所占的字节数为
A) 2 B) 24 C) 32 D) 72
(4) bit的意思是
A) 字 B) 字长 C) 字节 D) 二进制位
(5) 某学校的工资管理程序属于
A) 系统程序 B) 应用程序 C) 工具软件 D) 文字处理软件
(6) 与十六进制数BB等值的十进制数是
A) 187 B) 188 C) 185 D) 186
(7) 设一张软盘已染上病毒,能清除病毒的措施是
A) 删除该软盘上的所有文件 B) 格式化该软盘
C) 删除该软盘上的所有可执行文件 C) 删除该软盘上的所有批处理文件
(8) 一张3.5英寸双面高密度软盘片的容量为
A) 360KB B) 720KB C) 1.44MB D) 1.2MB
(9) 与二进制小数0.1等值的十六进制小数为
A) 0.1 B) 0.2 C) 0.4 D) 0.8
(10) DOS系统的热启动与冷启动的不同之处为热启动时
A) 不检测键盘、处设接口与内存 B) 不提示用户输入日期与时间
C) 不用装入COMMAND.COM文件 D) 不能从软盘启动
(11) 为了将磁盘上的文件K1,K2,K3,依次连接在文件K4的后面,应使用命令
A) COPY K1+K2+K3 K4 B) COPY K1+K2+K3+K4
C) COPY K1+K2+K3+K4 K4 D) COPY K4+K1+K2+K3
(12) 下列文件名中可以作为批处理文件名的是
A) AUTOEXC.C B) AUTOEXEC C) ATX.BAT D) AUTO.TXT
(13) 要打印输出当前盘的根目录下所有文件与子目录清单,应使用命令
A) DIR \ >PRN B) TYPE \ >PRN C) DIR >PRN C) TYPE >PRN
C) DIR >PRN D) TYPE >PRN
(14) 设可执行文件ABC.EXE所需要的本该由键盘输入的数据已经按格式存放在文件XYZ中,并要求执行结果放在XYZ中输入数据的后面。下列命令中正确的是
A) ABCXYZ B) ABC>XYZ
C) ABC<XYZ D) ABC>>XYZ
(15) 设当前盘中某一目录路径为\A\B\C,当前目录为\A。下列命令中肯定出错的是
A) MD \A\C B) CD.. C) MD \A\B\A D) MD \A\B
(16) 设A盘的目录结构如下:

 根目录
 │
 ┌────┬────┬──┴───┬─────┬────┐
 │ │ │ │ │ │
 ABC D1子目录 DX.C Q.DAT D2子目录 A.FOR
 │ │
 ┌────┬┴──┬───┐ ┌─────┼────┐
 │ │ │ │ │ │ │
 B.PAS D3子目录 Y.BAS A.C A1.C D4子目录 XYZ.C
 │
 ┌───┬──┴─┬───┐
 │ │ │ │
 QR.C NA.C A.TXT B.C

如果当前盘为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
(17) 下列DOS命令中,有错误的是
A) TYPE AAB.FOR>CON B) TYPE ? AB.FOR
C) COPY *.C CON D) COPY CON PRN
(18) 设当前盘为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) AB1.TXT+C:\XYZ.TXT>C:\XYZ.TXT
(19) 下列命令中合法的是
A) DISKCOPY A: A: B) DISKCOPY A: C:
C) DISKCOPY C: A: D) DISKCOPY C: D:
(20) 设当前盘中某一目录路径为\A\B\C\D\XU,当前目录为\A。要将根目录下扩展名为.C的所有文件复制到当前目录下,并将扩展名改为.FOR,应使用命令
A) COPY \*.C *.FOR B) COPY *.C \A\*.FOR
C) COPY *.FOR \*.C D) COPY \A\*.C *.FOR
 (21) 下列不正确的转义字符是
A) '\\' B) '\" C) '074' D) '\0'
(22) 若有以下定义:
 char a; int b;
 float c; double d;
 则表达式a*b+d-c值的类型为
A) float B) int C) char D) double
(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) 设a=1,b=2,c=3,d=4,则表达式:
A) 765.12<回车> B) i=100,f=765.12<回车>
C) 100<回车>765.12<回车> D) x=100<回车>y=765.12<回车>
(29) 设x和y均为int型变量,则执行下的循环后,y值为
 for(y=1,x=1;y<=50;y++)
 { if(x>=10))break;
 if (x%2==1)
 { x+=5; continue;}
 x-=3;
 }
A) 2 B) 4 C) 6 D) 8
(30) 给出以下定义:
char x[ ]="abcdefg";
char y[ ]={'a','b','c','d','e','f','g'};
则正确的叙述为
A) 数组X和数组Y等价 B) 数组x和数组Y的长度相同
C) 数组X的长度大于数组Y的长度 D) 数组X的长度小于数组Y的长度
(31) 以下叙述中不正确的是
A) 在不同的函数中可以使用相同名字的变量
B) 函数中的形式参数是局部变量
C) 在一个函数内定义的变量只在本函数范围内有效
D) 在一个函数内的复合语句中定义的变量在本函数范围内有效
(32) 假定a和b为int型变量,则执行以下语句后b的值为
a=1; b=10;
do
{ b-=a; a++; }
while (b--<0) ;
A) 9 B) -2 C) -1 D) 8
(33) 设j为int型变量,则下面for循环语句的执行结果是
 for( j=10;j>3;j--)
 { if(j%3)j--;
 --j; --j;
 printf("%d ",j);
 }
A) 6 3 B) 7 4 C) 6 2 D) 7 3
 (34) 设有以下宏定义:
#define N 3
#define Y(n) ( (N+1)*n)
则执行语句:z=2 * (N+Y(5+1));后,z的值为
A) 出错 B) 42 C) 48 D) 54
(35) 设P1和P2是指向同一个int型一维数组的指针变量,k为int型变量,则不能正确执行的语句是
A) k=*P1+*P2; B) p2=k; C) P1=P2; D) K=*P1 * (*P2);
(36) 设有如下定义:
int arr[]={6,7,8,9,10};
int * ptr;
则下列程序段的输出结果为
ptr=arr;
* (ptr+2)+=2;
printf ("%d,%d\n",*ptr,*(ptr+2));
A) 8,10 B) 6,8 C) 7,9 D) 6,10
(37) 以下程序的输出结果是
main()
{ int i,k,a[10],p[3]:
K=5;
for (i=0;i<10;i++) a[i]=i;
for (i=0;i<3;i++) p[i]=a[i*(i+1)];
for (i=0;i<3;i++) k+=p[i]*2;
printf("%d\n",k);
}
A) 20 B) 21 C) 22 D)23
(38) 执行以下程序段后,m的值为
 int a[2][3]={ {1,2,3},{4,5,6} };
 int m,*p;
 p=&a[0][0];
 m=(*p)*(*(p+2))*(*(p+4));
 A) 15 B) 14 C) 13 D) 12
(39) 有以下程序段
 char arr[]="ABCDE";
 char *ptr;
 for(ptr=arr;ptr
 main()
 { union
 { int k;
 char i[2];
 } *s,a;
 s=&a;
 s->i[0]=0x39; s->i[1]=0x38;
 printf("%x\n",s->k);
 }
 输出结果是
A) 3839 B) 3938 C) 380039 D) 390038
(42) 有以下程序
 #include
 main()
 { int a,b,c=246;
 a=c/100%9;
 b=(-1)&&(-1);
 printf("%d,%d\n",a,b);
 }
输出结果是
A) 2,1 B) 3,2 C) 4,3 D) 2,-1
(43) 设有如下定义:
int (*ptr)*();
则以下叙述中正确的是
A) ptr是指向一维组数的指针变量
B) ptr是指向int型数据的指针变量
C) ptr是指向函数的指针,该函数返回一个int型数据
D) ptr是一个函数名,该函数的返回值是指向int型数据的指针
(44) 有以下程序
 #include
 struct stu
 { int num;
 char name[10];
 int age;
 };
 void fun(struct stu *p)
 { printf("%s\n",(*p).name); }
 main()
 {
 struct stu students[3]={ {9801,"Zhang",20},
 {9802,"Wang",19},
 {9803,"Zhao",18} };
 fun(students+2);
 }
输出结果是
A) Zhang B)Zhao C) Wang D) 18
(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) 26 B) 30 C) 18 D) 8
(46) 有以下程序
 main()
 { char a[]="programming", b[]="language";
 char *p1,*p2;
 int i;
 p1=a; p2=b;
 for(i=0;i<7;i++)
 if(*(p1+i)==*(p2+i)) printf("%c",*(p1+i));
 }
 输出结果是
A) gm B) rg C) or D) ga
(47) 有以下程序
viod fun (int a,int b,int c)
{ a=456; b=567; c=678;}
main()
{ int x=10, y=20,z=30;
fun (x,y,z);
printf("%d,/%d\n",c,d);
}
输出结果是
A)30,20,10 B)10,20,30 C) 456,567,678 D) 678,567,456
(48) 有以下程序
int fun(int x,int y,int *cp,int *dp)
{ *cp=x+y; *dp=x-y; }
main()
{ int a, b, c, d;
a=30; b=50;
fun(a,b,&c,&d);
 printf("%d,%d\n", c, d);
}
输出结果是
A) 50,30 B) 30,J50 C) 80,-20 D) 80,20
(49) 有以下程序
 main()
 { int i, j;
 for(j=10;j<11;j++)
 { for(i=9;i=j-1)printf("%d",j);
 }
 }
输出结果是
A) 11 B) 10 C) 9 D) 10 11
(50) 有以下程序
#include "atdio.h"
int abc(int u,intv);
main ()
{ int a=24,b=16,c;
 c=abc(a,b);
 printf('%d\n",c);
}
nt abc(int u,int v)
{ int w;
 while(v)
 { w=u%v; u=v; v=w }
 return u;
}
输出结果是
A) 6 B) 7 C) 8 D) 9
二、填空题(每空2分,共40分)
请将每空的正确答案写在答题卡【1】-【20】序号的横线上,答在试卷上不得分.
(1) 自动批自理文件名为【1】 。
(2) DOS命令分为内部命令与外部命令,COMP命令属于【2】命令。
(3) 设当前为C盘,现要用一条DOS命令在打印机上输出A盘当前目录下所有扩展名为.DAT的文件内容。这一条DOS命令应为【3】 。
(4) 要将当前盘当前目录下的子目录XYZ中所有扩展名为.BAK 的文件名改成扩展名为.FOR,应使用的DOS命令为【4】 。
(5) 设DOS外部命令文件所在的路径均已用PATH命令打通。现要将当前盘当前目录下的文件WST.TXT设置为只读属性,应使用的DOS命令为【5】 。
(6) 设x和y均为int型变量,且x=1,y=2,则以下表达式的值为【6】 。
1.0+x/y
(7) 设i,j,k均为int型变量,则执行完下面的for循环后,k的值为【7】 。
for(i=0,j=10;i<=j;i++,j--)
k=i+j;
(8) 设有以下定义的语句:
 int a[3][2]={10,20,30,40,50,60}, (*p)[2];
 p=a;
 则 *(*(p+2)+1)值为【8】 。
(9) 以下程序的输出结果是【9】 。
 #include
 int fun(int x,int y)
 { static int m=0,i=2;
 i+=m+1;
 m=i+x+y;
 return m
 }
 main()
 { int j=4,m=1,k;
 k=fun(j,m); printf("%d,",k);
 k=fun(j,m); printf("%d\n",k);
 }
(10) 函数fun的功能是:使一个字符串按逆序存放,请填空
 void fun (char str[])
 { char m; int i,j;
 for(i=0,j=strlen(str);i<【10】;i++,j--)
 { m=str[i];
 str[i]=【11】;
 str[j-1]=m;
 }
 printf("%s\n",str);
 }
(11) 以下程序的功能是:从键盘上输入一行字符,存入一个字符数组中,然后输出该字符串,请填空。
 #include"ctype.h"
 #include"stdio.h"
 main()
 { char str[81],*sptr;
 int i;
 for(i=0;i<80;i++)
 { str[i]=getchar();
 if(str[i]=='\n') break;
 }
 str[i]=【12】;
 sptr=str;
 while(*sptr) putchar(*sptr【13】);
 }
(12) 以下程序用来对从键盘上输入的两个字符串进行比较,然后输出两个字符串中第一个不相同字符的ASCII码之差。例如:输入的两个字符串分别为abcdef和abceef,则输出为-1。请填空。
 #include
 main()
 { char str[100],str2[100],c;
 int i,s;
 printf("\n input string 1:\n"); gest(str1);
 printf("\n input string 2:\n"); gest(str2);
 i=0;
 while((strl[i]==str2[i]&&(str1[i]!=【14】))
 i++;
 s=【15】;
 printf("%d\n",s);
 }
(13) 以下程序的功能是:从键盘上输入一个字符串, 把该字符串中的小写字母转换为大写字母,输出到文件test.txt中,然后从该文件读出字符串并显示出来。请填空。
 #include
 main()
 { FILE *fp;
 char str[100]; int i=0;
 if((fp=fopen("text.txt",【16】))==NULL)
 { printf("can't open this file.\n");exit(0);}
 printf("input astring:\n"); gest(str);
 while (str[i])
 { if(str[i]>='a'&&str[i]<='z')
 str[i]=【17】;
 fputc(str[i],fp);
 i++;
 }
 fclose(fp);
 fp=fopen("test.txt",【18】);
 fgets(str,100,fp);
 printf("%s\n",str);
 fclose(fp);
 }
(14) 以下程序可以把从键盘上输入的十进制数(long型)以二到十六进制形式输出,请填空。
 #include.
 main()
 { char b[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C'
 ,'D','E','F'};
 int c[64],d,i=0,base;
 long n;
 printf("enter a number:\n"); scanf("%ld",&n);
 printf("enter new base:\n"); scanf("%d",&base);
 do
 { c[i]=【19】;
 i++; n=n/base;
 } while(n!=0);
 printf("transmite new base:\n");
 for(--i;i>=0;--i)
 { d=c[i];
 printf("%c",b【20】;
 }
 }



1998年9月
基础知识和C语言程序设计
答案及评分标准
 一、选择题((1)-(40)题每题1分;(41)-(50)题每题2分)
(1)B (2)B (3)D (4)D (5)B (6)A (7)B (8)C (9)D (10)A
(11)D (12)C (13)A (14)B (15)D (16)C (17)B (18)A (19)A (20)A
(21)C (22)D (23)A (24)D (25)B (26)C (27)C (28)B (29)C (30)C
(31)D (32)D (33)B (34)C (35)B (36)D (37)B (38)A (39)D (40)D
(41)A (42)A (43)C (44)B (45)B (46)D (47)A (48)C (49)B (50)C
 二、填空题(每空2分,共4分)
(1)至(5)题中所有字母都允许大,小写或大小写混合
(1) 【1】AUTOEXEC.BAT
(2) 【2】外部(答 外部命令不扣分)
(3) 【3】COPY A:*.DAT PRN
(在 COPY 后面与A:*.DAT后面都至少要有一个空格)
(4) 【4】RENXYZ\*.BAK *.FOR 或RENAME XYZ\*.BAK*.FOR
(在REN 或RENAME 后面与XYZ\*.BAK 后面都至少要有一个空格)
(5) 【5】ATTRIB+R WST.TXT
(在ATTRIB 后面与+R后面都至少有一个空格)或ATTRIB WST.TXT+R(在ATTRIB后面与WST.TXT后面都至少要有一个空格)
(6) 【6】1.0或1
(7) 【7】10
(8) 【8】60
(9) 【9】8,17
(10) 【10】 strlen(str )/2或strlen(str)/2.0或0.5*strlen(str)或j或j-1
【11】 str[j-1]或*(str+j-1)
(11) 【12】 '\0' 或0
【13】 ++
(12) 【14】 '\0'或0
【15】 strl[i]-str2[i]
(13) 【16】 "w"或"w+"或"wt"或"w+t"或"""wt+"
【17】 str[i]-32 或str[i]-('a'-'A'或str[i]-'a'+'A'
【18】 "r"或"r+"或"r+t"或"rt+"
(14) 【19】 n%base
【20】 [d]



 
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