2001年4月全国计算机等级考试二级C语言试卷(含答案)
发布时间:2006-10-14 8:53:59   收集提供:gaoqian

一、选择题((1)-(40)题每题1分,(41)-(50)题每题2分,共60分)
下列各题 A) 、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确的选项涂写在答题卡相应位置上,答在试卷上不得分。
(1) 计算机的存储器完整的应包括
A) 软盘、硬盘 B) 磁盘、磁带、光盘
C) 内存储器、外存储器 D) RAM、ROM
(2) 计算机中运算器的作用是
A) 控制数据的输入/输出 B) 控制主存与辅存间的数据交换
C) 完成各种算术运算和逻辑运算 D) 协调和指挥整个计算机系统的操作
(3) 软磁盘处于写保护状态时,其中记录的信息
A) 绝对不会丢失
B) 不能被擦除,但能追加新信息
C) 不能通过写磁盘操作被更新
D) 不能以常规方式被删除,但可以通过操作系统的格式化功能被擦除
(4) 光盘根据基制造材料和记录信息的方式不同,一般可分为
A) CD、VCD
B) CD、VCD、DVD、MP3
C) 只读光盘、可一次性写入光盘、可擦写光盘
D) 数据盘、音频信息盘、视频信息盘
(5) 在计算机系统中,可执行程序是
A) 源代码 B) 汇编语言代码 C) 机器语言代码 D) ASCII码
(6) 计算机软件系统包括
A) 操作系统、网络软件 B) 系统软件、应用软件
C) 客户端应用软件、服务器端系统软件 D) 操作系统、应用软件和网络软件
(7) 目前,一台计算机要连入Internet,必须安装的硬件是
A) 调制解调器或网卡 B) 网络操作系统
C) 网络查询工具 D) WWW浏览器
(8) 在多媒体计算机系统中,不能存储多媒体信息的是
A) 光盘 B) 磁盘 C) 磁带 D) 光缆
(9) 要将当前盘当前目录下一个文本文件内容显示在屏幕上,正确的命令形式是
A) TYPE a*.* B) TYPE abc.exe
C) TYPE pro.c>PRN D) TYPE abc.txt
(10) 下列更改文件名的命令中正确的是
A) REN A:file1 C:F1 B) RENAME A: A:file1 C:F1
C) REN A:file1 F1 D) REN A:file1 \SUB\F1
(11) 已知A盘为DOS系统启动盘,只有A:\DOS下有自动批处理文件,其中内容为:
CD\DOS
MD USER
CD USER
由A盘启动DOS系统后,A盘的当前目录是
A) \DOS B) \DOS\USER C) \ D) \USER
(12) MS-DOS是
A) 分时操作系统 B) 分布式操作系统
C) 单用户、单任务操作系统 D) 单用户、多任务操作系统
(13) 在Windows操作系统中,不同文档之间互相复制信息需要借助于
A) 剪切板 B) 记事本 C) 写字板 D) 磁盘缓冲器
(14) 在Windows操作系统中
A) 同一时刻可以有多个活动窗口
B) 同一时刻可以有多个应用程序在运行,但只有一个活动窗口
C) 同一时刻只能有一个打开的窗口
D) DOS应用程序窗口与Windows应用程序窗口不能同时打开着
(15) 下列叙述中正确的是
A) 所有DOS应用程序都可以在Windows操作系统中正确运行
B) 所有DOS应用程序都不能在Windows操作系统中正确运行
C) 大部分DOS应用程序可以在Windows操作系统中正确运行
D) 为DOS5.0以上版本操作系统编写的应用程序可以在Windows操作系统中正确运行
(16) 下列叙述中正确的是
A) C语言编译时不检查语法
B) C语言的子程序有过程和函数两种
C) C语言的函数可以嵌套定义
D) C语言所有函数都是外部函数
(17) 以下所列的C语言常量中,错误的是
A) 0xFF B) 1.2e0.5 C) 2L D) ‘\72’
(18) 下列选项中,合法的C语言关键字是
A) VAR B) cher C) integer D) default
(19) 以下变量x.、y、z均为double类型且已正确赋值,不能正确表示数学式子 的C语言表达式是
A) x/y*z B) x*(1/(y*z)) C) x/y*1/z D) x/y/z
(20) 若a为int类型,且其值为3,则执行完表达式a+=a-=a*a后,a的值是
A) -3 B) 9 C) -12 D) 6
(21) 设x、y、t均为int型变量,则执行语句:x=y=3;t=++x||++y;后,y的值为
A) 不定值 B) 4 C) 3 D) 1
(22) 若变量已正确说明为float类型,要通过语句scanf(“%f %f %f ”,&a,&b,&c);给a赋于10.0,b赋予22.0,c赋予33.0,不正确的输入形式是:
A) 10<回车> B) 10.0,22.0,33.0<回车>
 22<回车>
 33<回车>
C) 10.0<回车> D) 10 22<回车>
 22.0 33.0<回车> 33<回车>
(23) 若执行以下程序时从键盘上输入9,则输出结果是
A) 11 B) 10 C) 9 D) 8
Main0
{ int n;
 scanf(“%d”,&n);
 if(n++<10) printf(“%d\n”,n);
 else printf(“%d\n”,n--);
}
(24) 若a、 b、c1、c2、x、y、均是整型变量,正确的switch语句是
A) swich(a+b); B) switch(a*a+b*b)
 { case 1:y=a+b; break; {case 3:
 case 0:y=a-b; break; case 1:y=a+b;break;
 } case 3:y=b-a,break;
 }
C) switch a D) switch(a-b)
 { case c1 :y=a-b; break {default:y=a*b;break
 case c2: x=a*d; break case 3:case 4:x=a+b;break
 default:x=a+b; case 10:case 11:y=a-b;break;
 } }
(25) 有以下程序段
int k=0
while(k=1)k++;
while 循环执行的次数是
A) 无限次 B) 有语法错,不能执行
C) 一次也不执行 D) 执行1次
(26) 以下程序执行后sum的值是
A)15 B)14 C) 不确定 D)0
min()
{ int i , sum;
 for(i=1;i<6;i++) sum+=i;
 printf(“%d\n”,sum);
}
(27) 有以下程序段
int x=3
do
{ printf(“%d”,x-=2); }
while (!(--x));
其输出结果是
A) 1 B) 3 0 C) 1 -2 D) 死循环
(28) 若变量c为char类型,能正确判断出c为小写字母的表达式是
A) ‘a’<=c<= ‘z’ B) (c>= ‘a’)||(c<= ‘z’)
C) (‘a’<=c)and (‘z’>=c) D) (c>= ‘a’)&&(c<= ‘z’)
(29) 以下所列的各函数首部中,正确的是
A) void play(var :Integer,var b:Integer)
B) void play(int a,b)
C) void play(int a,int b)
D) Sub play(a as integer,b as integer)
(30) 以下程序的输出结果是
A) 0 B) 29 C) 31 D) 无定值
fun(int x, int y, int z)
{ z=x*x+y*y; }
main()
{ int a=31;
 fun(5,2,a);
 printf(“%d”,a);
}
(31) 下列程序段的输出结果是
A) 2 1 4 3 B) 1 2 1 2 C) 1 2 3 4 D) 2 1 1 2
void fun(int *x, int *y)
{ printf(“%d %d”, *x, *y); *x=3; *y=4;}
main()
{ int x=1,y=2;
 fun(&y,&x);
 printf(“%d %d”,x, y);
}
(32) 下列程序的输出结果是
A) 非法 B)a[4]的地址 C)5 D)3
main()
{ char a[10]={9,8,7,6,5,4,3,2,1,0},*p=a+5;
 printf(“%d”,*--p);
}
(33) 下列程序的运行结果是
A) 6 3 B) 3 6 C) 编译出错 D) 0 0
void fun(int *a, int *b)
{ int *k;
 k=a; a=b; b=k;
}
main()
{ int a=3, b=6, *x=&a, *y=&b;
 fun(x,y);
 printf(“%d %d”, a, b);
}
(34) 下面程序的输出结果是
A) 0 B) 1 C) 10 D) 9
main()
{ int a[ ]={1,2,3,4,5,6,7,8,9,0,},*p;
 p=a;
 printf(“%d\n”,*p+9);
}
(35) 当调用函数时,实参是一个数组名,则向函数传送的是
A) 数组的长度 B) 数组的首地址
C) 数组每一个元素的地址 D) 数组每个元素中的值
(36) 设有以下说明语句
struct ex
{ int x ; float y; char z ;} example;
则下面的叙述中不正确的是
A) struct结构体类型的关键字 B) example是结构体类型名
C) x,y,z都是结构体成员名 D) struct ex是结构体类型
(37) 以下只有在使用时才为该类型变量分配内存的存储类说明是
A) auto和 static B) auto和 register
C) register和 static D) extern和 register
(38) 若fp是指向某文件的指针,且已读到文件末尾,则库函数feof(fp)的返回值是
A) EOF B) -1 C) 非零值 D) NULL
(39) 以下程序的输出结果是
A) 20 B) 21 C) 22 D)23
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);
}
(40) 以下程序的输出结果是
A) 1,5,9 B) 1,4,7 C) 3,5,7 D)3,6,9
main()
{ int i, x[3][3]={1,2,3,4,5,6,7,8,9};
 for(i=0;i<3;i++) printf(“%d,”,x[i][2-i]);
}
(41) 以下程序的输出结果是
A) 18 B) 19 C) 20 D)21
main()
{ int a[3][3]={ {1,2},{3,4},{5,6} },i,j,s=0;
 for(i=1;i<3;i++)
 for(j=0;j<=i;j++)s+=a[i][j];
 printf(“%dn”,s);
}
(42) 以下程序的输出结果是
A) ABCD B) ABCD C) EFG D) EFGH
FGH EFG JK IJKL
KL IJ O
 M
main()
{ char w[][10]={ “ABCD”,”EFGH”,”IJKL”,”MNOP”},k;
 for(k=1;k<3;k++) printf(“%s\n”,w[k]);
}
(43) 当执行下面的程序时,如果输入ABC,则输出结果是
A) ABC6789 B) ABC67 C) 12345ABC6 D) ABC456789
#include “stdio.h”
#include “string.h”
main()
{ char ss[10]=“1,2,3,4,5”;
 gets(ss); strcat(ss, “6789”); printf(“%s\n”,ss);
}
(44) 假定以下程序经编译和连接后生成可执行文件PROG.EXE,如果在此可执行文件所在目录的DOS提示符下键入:
PROG ABCDEFGH IJKL<回车>,则输出结果为
A) ABCDEFG B) IJHL C) ABCDEFGHIJKL D) IJKLABCDEFGH
main( int argc, char *argv[]))
{ while(--argc>0) printf(“%s”,argv[argc]);
printf(“\n”);
}
(45) 以下程序的输出结果是
A) 1 B) 2 C) 3 D) 4
long fun( int n)
{ long s;
 if(n= =1 || n= =2) s=2;
 else s=n-fun(n-1);
 return s;
}
main()
{ printf(“%ld\n”, fun(3)); }
(46) 以下程序的输出结果是
A) 16 B) 2 C) 9 D) 1
#define SQR(X) X*X
main()
{ int a=16, k=2, m=1;
 a/=SQR(k+m)/SQR(k+m);
 printf(“d\n”,a);
}
(47) 若定义了以下函数:
void f(……)
{……
 *p=(double *)malloc( 10*sizeof( double));
……
}
p是该函数的形参,要求通过p把动态分配存储单元的地址传回主调函数,则形参p的正确定义应当是
A) double *p B) float **p C) double **p D) float *p
(48) 以下程序的输出是
A) 10 B) 11 C) 51 D) 60
struct st
{ int x; int *y;} *p;
int dt[4]={ 10,20,30,40 };
struct st aa[4]={ 50,&dt[0],60,&dt[0],60,&dt[0],60,&dt[0],};
main()
{ p=aa;
 printf(“%d\n”,++(p->x));
}
(49) 假定建立了以下链表结构,指针p、q分别指向如图所示的结点,则以下可以将q所指结点从链表中删除并释放该结点的语句组是
A) free(q); p->next=q->next;
B) (*p).next=(*q).next; free(q);
C) q=(*q).next; (*p).next=q; free(q);
D) q=q->next; p->next=q; p=p->next; free(p);






(50) 以下程序的输出结果是
A) 0 B) 1 C) 2 D) 3
main()
{ int x=0.5; char z=’a’;
 printf(“%d\n”, (x&1)&&(z<’z’) ); }

二) 填空题(每空2分,共40分)
 请将每一个空的正确答案写在答题卡【1】至【20】序号的横线上,答在试卷上不得分。
(1) 计算机机领域中,通常用英文单词“Byte”表示 【1】 。
(2) 在DOS环境下,自动批处理的文件名为 【2】 。
(3) 要将当前盘当前目录下所有扩展名为.TXT的文件内容在打印机上打印输出,应使用的单条DOS内部命令为 【3】 。
(4) 在Windows环境下,可以利用单击、双击、拖动这三种鼠标操作之一的 【4】 操作实现窗口的移动。
(5) 在Windows环境下,可以将窗口最小化为 【5】 。
(6) 以下程序的输出结果是 【6】
main()
{ int a=1, b=2;
 a=a+b; b=a-b; a=a-b;
 printf(“%d,%d\n”, a, b );
}
(7) 下列程序的输出结果是16.00,请填空。。
main()
{ int a=9, b=2;
 float x= 【7】 , y=1.1,z;
 z=a/2+b*x/y+1/2;
 printf(“%5.2f\n”, z );
}
(8) 用以下语句调用库函数malloc,使字符指针st指向具有11个字节的动态存储空间,请填空。
st=(char*) 【8】 ;
(9) 下列程序段的输出结果是 【9】 。
main()
{ char b[]=”Hello,you”;
 b[5]=0;
 printf(“%s \n”, b );
}
(10) 下列程序段的输出结果是 【10】 。
int n=’c’;
switch(n++)
{ default: printf(“error”);break;
 case ‘a’:case ‘A’:case ‘b’:case ‘B’:printf(“good”);break;
 case ‘c’:case ‘C’:printf(“pass”);
 case ‘d’:case ‘D’:printf(“warn”);
}
(11) 以下程序通过函数指针p调用函数fun,请在填空栏内,写出定义变量p的语句。
void fun(int *x,int *y)
{ …… }
main()
{ int a=10,b=20;
 【11】 ; /定义变p */
 p=fun; p(&a,&b);
 ……
}
(12) 下列程序的输出结果是 【12】 。
void fun(int *n)
{ while( (*n)--);
 printf(“%d”,++(*n));
}
main()
{ int a=100;
 fun(&a);
}
(13) 以下程序的输出结果是 【13】 。
main()
{ int arr[ ]={30,25,20,15,10,5}, *p=arr;
 p++;
 printf(“%d\n”,*(p+3));
}
(14) 以下程序用来输出结构体变量ex所占存储单元的字节数,请填空。
struct st
{ char name[20]; double score; };
main()
{ struct st ex;
 printf(“ex size: %d\n”,sizeof( 【14】 ));
}
(15) 下面程序把从终端读入的文本(用@作为文本结束标志)输出到一个名为bi.dat的新文件中。请填空。
#include “stdio.h”
FILE *fp;
{ char ch;
 if( (fp=fopen ( 【15】 ) )= = NULL)exit(0);
 while( (ch=getchar( )) !=’@’) fputc (ch,fp);
 fclose(fp);
}
(16) 若变量n中的值为24,则prnt函数共输出 【16】 行,最后一行有 【17】 个数。
void prnt(int n, int aa[ ])
{ int i;
 for(i=1; i<=n;i++)
 { printf(“%6d”, aa[i]);
 if( !(i%5) ) printf(“\n”);
 }
 printf(“\n”);
}
(17) 以下程序中,主函数调用了LineMax函数,实现在N行M列的二维数组中,找出每一行上的最大值。请填空。
#define N 3
#define M 4
void LineMax(int x[N][M])
{ int i,j,p;
 for(i=0; i { p=0;
 for(j=1; j if(x[i][p] printf(“The max value in line %d is %d\n”, i, 【19】 );
 }
}
main()
{ int x[N][M]={1,5,7,4,2,6,4,3,8,2,3,1};
 【20】
}



2001年4月全国计算机等级考试二级笔试答案
C语言
一、 选择题((1)--(40)题每题1分,(41)--(50)题每题2分,共60分。

(1)C (2)C (3)C (4)C (5)C (6)B (7)A (8)D (9)D (10)C
(11)C (12)C (13)A (14)B (15)C (16)D (17)B (18)D (19)A (20)C
(21)C (22)B (23)B (24)D (25)A (26)C (27)C (28)D (29)C (30)C
(31)A (32)C (33)B (34)C (35)B (36)B (37)B (38)C (39)B (40)C
(41)A (42)D (43)A (44)D (45)A (46)B (47)C (48)C (49)B (50)B
二、填空题(每空2分,共40分)
(1)字节
(2)AUTOEXEC。BAT
(3)COPY *。TXT PRN
(4)拖动
(5)图标或按钮
(6)2.1
(7)6.6
(8)Malloc (11) 或malloc(sizeof(char)*11)
(9)Hello
(10) passwarm
(11) void (*p)() 或void(*p)(int*, int*)
(12)0
(13)10
(14)struct st 或ex
(15) “bi.dat”,“w”或“bi.dat”,“wt”或“bi.dat”,“w+t”
(16) 5
(17) 4
(18) sp=j
(19) cx[i][p]
(20) LineMax(x)



 
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