2000年4月全国计算机等级考试二级C语言笔试试卷
更新于:2007年9月19日 念时
一、选择题((1)--(40)每小题1分, (41)--(50)每小题2分, 共60分)下列各题 A))、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项在答题卡相应位置上涂黑,答在试卷上不得分。
(1) 下列述叙中正确的是
A) 显示器和打印机都是输出设备 B) 显示器只能显示字符
C) 通常的彩色显示器都有7种颜色 D) 打印机只能打印字符和表格
(2) 微型计算机中运算器的主要功能是进行
A) 算术运算 B) 逻辑运算 C) 算术和逻辑运算 D) 初等函数运算
(3) COMMAND。COM是DOS系统的最外层模块,通常称之为
A) 引导程序 B) 输入输出系统 C) 命令处理系统 D) 文件管理系统
(4) 电子邮件是
A)网络信息检索服务 B)通过Web网页发布的公告信息
C)通过网络实时交互的信息传递方式 D)一种利用网络交换信息的非交互式服务
(5) 和十进制数225相等的二进制数是
A) 11101110 B) 11111110 C) 10000000 D) 11111111
(6) 下列叙述中正确的是
A) 指令由操作数和操作码两部分组成 B) 常用参数xxMB表示计算机的速度
C) 计算机的一个字长总是等于两个字节 D) 计算机语言是完成某一任务的指令集
(7) 计算机的内存储器比外存储器
A) 价格便宜 B) 存储容量大 C) 读写速度快 D) 读写速度慢
(8) 设当前盘为C盘,执行DOS命令"COPY B:\A.TXT PRN"之后,结果是
A) B盘上的A.TXT文件被复制到C盘的PRN文件 B) 屏幕上显示B盘上的A.TXT文件内容
C) B盘上的A.TXT文件内容在打印机上输出 D) B盘上的A.TXT文件被复制到B盘上的PRN文件
(9) 要将当前盘当前目录下的两个文件X1.TXT和B1.TXT连接起来之后存入B盘当前目录下并且命名Z.TXT,无论B盘当前目录是什么,完成这件任务可以使用的命令是
A) COPY A:X1.TXT+C:B1.TXT Z.TXT B) COPY X1.TXT+C:\WS\B1.TXT B:\Z.TXT
C) COPY A:X1.TXT+C:\WS\B1.TXT D) COPY X1.TXT+B1.TXT B:Z.TXT
(10) 下列四组DOS命令中,功能等价的一组是
A) COPY A:*.* B:与DISKCOPY A: B: B) COPY ABC.TXT+XYZ.TXT 与TYPE XYZ.TXT>>ABC.TXT
C) COPY ABC.TXT+XYZ.TXT与COPY XYZ.TXT+ABC.TXT D) TYPE *.FOR>CON与COPY *.FOR CON
(11) 设当前目录为D:\BB,现要把D:\AA目录下首字符是A的文本文件全部删除,
应该使用命令
A) DEL A*.TXT B) DEL \AA\A.TXT
C) DEL \AA\A*.TXT D) DEL \AA\A?.TXT
(12) 在Windows中,启动应用程序的正确方法是
A) 用鼠标指向该应用程序图标 B) 将该应用程序窗口最小化成图标
C) 将该应用程序窗口还原 D) 用鼠标双击该应用程序图标
(13) 在Windows中,终止应用程序执行的正确方法是
A) 将该应用程序窗口最小化成图标 B) 用鼠标双击应用程序窗口右上角的还原按钮
C) 用鼠标双击应用程序窗口中的标题栏 D) 用鼠标双击应用程序窗口左上角的控制菜单框
(14) 在微机系统中,对输入输出设备进行管理的基本程序模块(BIOS)存放在
A) RAM中 B) ROM中 C) 硬盘中 D) 寄存器中
(15) 使计算机病毒传播范围最广的媒介是
A) 硬磁盘 B) 软磁盘 C) 内部存储器 D) 互联网
(16) 设有 int x=11; 则表达式 (x++ * 1/3) 的值是
A) 3 B) 4 C) 11 D) 12
(17) 下列程序的输出结果是
A) 3 B) 3.2 C) 0 D) 3.07
main()
{ double d=3.2; int x,y;
x=1.2; y=(x+3.8)/5.0;
printf("%d \n", d*y);
}
(18) 下列程序执行后的输出结果是(小数点后只写一位)
A) 6 6 6.0 6.0 B) 6 6 6.7 6.7
C) 6 6 6.0 6.7 D) 6 6 6.7 6.0
main()
{ double d; float f; ling l; int i;
i=f=1=d=20/3;
printf("%d %ld %f %f \n", i,l,f,d);
}
(19) 下列变量定义中合法的是
A) short _a=1-.le-1; B) double b=1+5e2.5; C) long do=0xfdaL; D) float 2_and=1-e-3;
(20) 设 int x=1, y=1; 表达式(!x||y--)的值是
A) 0 B) 1 C) 2 D) -1
(21) 与 y=(x>0?1:x<0?-1:0);的功能相同的if语句是
A) if (x>0) y=1; B) if(x)
else if(x<0)y=-1; if(x>0)y=1;
else y=0; else if(x<0)y=-1;
else y=0;
C) y=-1 D) y=0;
if(x) if(x>=0)
if(x>0)y=1; if(x>0)y=1;
else if(x==0)y=0; else y=-1;
else y=-1;
(22) 以下循环体的执行次数是
A) 3 B) 2 C) 1 D) 0
main()
{ int i,j;
for(i=0,j=1; i<=j+1; i+=2, j--)printf("%d \n",i);
}
(23) 以下叙述正确的是
A) do-while语句构成的循环不能用其它语句构成的循环来代替。 B) do-while语句构成的循环只能用break语句退出。
C) 用do-while语句构成的循环,在while后的表达式为非零时结束循环。
D) 用do-while语句构成的循环,在while后的表达式为零时结束循环。
(24) 下列程序执行后的输出结果是
A) G B) H C) I D) J
main()
{ int x='f'; printf("%c \n",'A'+(x-'a'+1)); }
(25) 执行下面的程序段后,变量k中的值为
A) 不定值 B) 33 C) 30 D) 10
int k=3, s[2];
s[0]=k; k=s[1]*10;
(26) 若已定义:
int a[ ]={0,1,2,3,4,5,6,7,8,9], *p=a,i;
其中 0≤i≤9, 则对a数组元素不正确的引用上
A) a[p-a] B) *(&a[i]) C) p[i] D) a[10]
(27) 下列程序执行后的输出结果是
A) 6 B) 7 C) 8 D) 9
void func(int *a,int b[])
{ b[0]=*a+6; }
main()
{ int a,b[5];
a=0; b[0]=3;
func(&a,b); printf("%d \n,b[0]);
}
(28) 下列程序的运行结果是
A) a=%2,b=%5 B) a=2,b=5
C) a=d, b=d D) a=%d,b=%d
#include <stdio.h>
main()
{ int a=2,c=5;
printf("a=%d,b=%d\n",a,c); }
(29) 下列程序执行后的输出结果是
A) 3 B) 6 C) 9 D) 随机数
main()
{ int a[3][3], *p,i;
p=&a[0][0];
for(i=p; i<9; i++) p[i]=i+1;
printf("%d \n",a[1][2]);
}
(30) 设有数组定义: char array [ ]="China"; 则数组 array所占的空间为
A) 4个字节 B) 5个字节 C) 6个字节 D) 7个字节
(31) 下列程序的输出结果是
A) 4 B) 6 C) 8 D) 10
int b=2;
int func(int *a)
{ b += *a; return(b);}
main()
{ int a=2, res=2;
res += func(&a);
printf("%d \n",res);
}
(32) 在以下四组中,每组有两个分别运算的函数,运算结果相同的是
A) 4 B) 2 C) 2 D) 0
main()
{ int i, j, m=0, n=0;
for(i=p; i<2; i++)
for(j=0; j<2; j++)
if(j>=i) m=1; n++;
printf("%d \n",n);
}
(33) 下列程序的输出结果是
A) 5 B) 6 C) 7 D) 8
struct abc
{ int a, b, c; };
main()
{ struct abc s[2]={{1,2,3},{4,5,6}}; int t;
t=s[0],a+s[1],b;
printf("%d \n",t);
}
(34) 设 int b=2;表达式(b>>2)/(b>>1)的值是
A) 0 B) 2 C) 4 D) 8
(35) 在C程序中,可把整型数以二进制形式存放到文件中的函数是
A) fprintf函数 B) fread函数 C) fwrite函数 D) fputc函数
(36) 下列程序执行后的输出结果是
A) -32767 B) FFFE C) -1 D) -32768
main()
{ char x=0xFFFF; printf("%d \n",x--); }
(37) 若有定义: float w; int a, b; 则合法的switch语句是
A) switch(w) B) switch(a);
{ case 1.0: printf("*\n"); { case 1 printf("*\n");
case 2.0: printf("**\n"); case 2 printf("**\n");
} }
C) switch(b) D) switch(a+b);
{ case 1: printf("*\n"); { case 1: printf("*\n");
default: printf("\n"); case 2: printf("**\n");
case 1+2: printf("**\n"); default: printf("\n");
} }
(38) 以下程序段的执行结果是
A) a=12 y=12 B) a=12 y=12
a=14 y=16 a=16 y=28
a=16 y=20
a=18 y=24
C) a=12 y=12 D) a=12 y=12
a=14 y=26
a=14 y=44
int a, y;
a=10; y=0;
do
{ a+=2; y+=a;
printf("a=%d y=%d\n",a,y);
if(y>20) break;
{ while(a=14);
.
.
.
(39) 若有以下调用语句,则不正确的fun函数的首部是
A) void fun(int m, int x[]) B) void fun(int s, int h[41])
C) void fun(int p, int *s) D) void fun(int n, int a)
main()
{ …
int a[50],n;
…
fun(n, &a[9]);
…
}
(40) 语句printf("a\bre\'hi\'y\\\bou\n");的输出结果是
A) a\bre\'hi\'y\\\bou B) a\bre\'hi\'y\bou
C) re'hi'you D) abre'hi'y\bou
(说明:'\b'是退格符)
(41) 请选出正确的程序段
A) int *p; B) int *s, k;
scanf("%d",p); *s=100;
… …
C) int *s, k; D) int *s, k;
char *p, c; char *p, e;
s=&k; s=&k;
p=&c; p=&c;
*p='a'; s=p;
… *s=1;
…
(42) 已知指针p的指向如下图所示,则执行语句 *--p;后*p的值是
A) 30 B) 20 C) 19 D) 29
a[0] a[1] a[2] a[3] a[4]
┌──┬──┬──┬──┬──┐
│ 10 │ 20 │ 30 │ 40 │ 50 │
└──┴──┴──┴──┴──┘
(43) 设已有定义: char *st="how are you"; 下列程序段中正确的是
A) char a[11], *p; strcpy(p=a+1,&st[4]); B) char a[11]; strcpy(++a, st);
C) char a[11]; strcpy(a, st); D) char a[], *p; strcpy(p=&a[1],st+2);
(44) 下列程序执行后的输出结果是
A) you&ne B) you C) me D) err
mai()
{ char arr[2][4];
strcpy(arr,"you"); strcpy(arr[1],"me");
arr[0][3]='&';
printf("%s \n",arr);
}
(45) 下列程序执行后的输出结果是
A) hello B) hel C) hlo D) hlm
void func1(int i);
void func2(int i);
char st[]="hello,friend!";
void func1(int i)
{ printf("%c",st[i]);
if(i<3){i+=2;func2(i);}
}
void func2(int i)
{ printf("%c",st[i]);
if(i<3){i+=2;func1(i);}
}
main()
{ int i=0; func1(i); printf("\n");}
(46) 假定下列程序的可执行文件名为prg.exe,则在该程序所在的子目录下输入命
令行: prg hello good<回车>后,程序的输出结果是
A) hello good B) hg C) hel D) hellogood
main()(int argc, char *argv[])
{ int i;
if(argc<-0)return;
for(i=1;i<argc;i++) printf("%c", *argv[i]);
}
(47) 下列程序执行后的输出结果是
A) 6 B) 8 C) 10 D) 12
#define MA(x) x*(x-1)
main()
{ int a=1,b=2; printf("%d \n",MA(1+a+b));}
(48) 有以下结构体说明和变量的定义,且如下图所示指针p指向变量a,指针q指向
变量b。则不能把结点b连接到结点a之后的语句是
A) a.next=q; B) p.next=&b;
C) p->next=&b; D) (*p).next=q;
struct node
{ char data;
struct node *next;
{ a,b,*p=&a,*q=&b;
data next data next
┌──┬──┐ ┌──┬──┐
a│ 5 │ │ b│ 9 │ 0 │
└──┴──┘ └──┴──┘
↑p ↑q
(49) 变量a所占内存字节数是
A) 4 B) 5 C) 6 D) 8
union U
{ char st[4];
int i;
long l;
};
struct A
{ int c;
union U u;
}a;
(50) 执行下列程序时输入:123<空格>456<空格>789<回车>,输出结果是
A) 123,456,789 B) 1,456,789 C) 1,23,456,789 D) 1,23,456
main()
{ char s[100]; int c, i;
scanf("%c",&c); scanf("%d",&i); scanf("%s",s);
printf("%c,%d,%s \n",c,i,s);
}
二)填空题(每空2分,共40分)
请将每空的正确答案写在答题卡上[1] ̄[20]序号的横线上,答在试卷上不得分。
(1) 计算机网络按通信距离来划分,可分为局域网和广域网。因特网属于 [1] 。
(2) 当前盘是C,确保在D盘的根目录下建立一个子目录USER的一条DOS命令是 [2] 。
(3) 要将当前盘当前目录中所有扩展名为.TXT的文件内容显示在屏幕上的DOS命令是 [3] 。
(4) DOS命令分为内部命令和外部命令,CHKDSK命令是 [4] 命令。
(5) 在Windows中,为了终止一个应用程序的运行,首先单击该应用程序窗口中的控制菜单框,然后在控制菜单中单击 [5] 命令。
(6) 设有以下变量定义,并已赋确定的值char w; int x; float y; double z;则表达式:w*x+z-y所求得的数据类型为 [6] 。
(7) 若x为int类型,请以最简单的形式写出与逻辑表达式!x等价的C语言关系表达式[7] 。
(8) 若有如下图所示五个连续的int类型的存储单元并赋值如下图,a[0]的地址小于
a[4]的地址。p和s是基类型为int的指针变量。请对以下问题进行填空。
a[0] a[1] a[2] a[3] a[4]
┌──┬──┬──┬──┬──┐
│ 22 │ 33 │ 44 │ 55 │ 66 │
└──┴──┴──┴──┴──┘
1,若p已指向存储单元a[1]。通过指针p,给s赋值,使s指向最后一个存储单元a[4]的语句是 [8] 。
2,若指针s指向存储单元a[2],p指向存储单元a[0],表达式s-p的值是 [9] 。
(9) 下面函数用来求出两个整数之和,并通过形参传回两数相加之和值,请填空。
int add(int x, int y, [10] z)
{ [11] =x+y; }
(10) 下面程序的功能是:计算1到10之间奇数之和及偶数之和,请填空。
#include <stdio.h>
main()
{ int a, b, c, i;
a=c=0;
for(i=0;i<10;i+=2)
{ a+=i;
[12] ;
c+=b;
}
printf("偶数之和=%d\n",a);
printf("奇数之和=%d\n",c-11);
}
(11) 下面程序的功能是:输出100以内能被3整除且个位数为6的所有整数,请填空。
#include <stdio.h>
main()
{ int i, j;
for(i=0; [13]; i++)
{ j=i*10+6;
if( [14] ) continue;
printf("%d",j);
}
}
(12) 下面程序的功能是:将字符数组a中下标值为偶数的元素从小到大排列,其它元
素不变。请填空。
#include <stdio.h>
#include <string.h>
main()
{ char a[]="clanguage",t;
int i, j, k;
k=strlen(a);
for(i=0; i<=k-2; i+=2)
for(j=i+2; j<=k; [15] )
if( [16] )
{ t=a[i]; a[i]=a[j]; a[j]=t; }
puts(a);
printf("\n");
}
(13) 以下程序的运行结果是 [17]
#include <stdio.h>
main()
{ int k=4, m=1, p;
p=func(k,m); printf("%d,",p);
p=func(k,m); printf("%d \n",p);
}
func(int a, int b)
{ static int m=0, i=2;
i+=m+1;
m=i+a+b;
return m;
}
(14) 以下程序的功能是:将无符号八进制数字构成的字符串转换为十进制整数。例
如,输入的字符串为:556,则输出十进制整数366。请填空。
#include <stdio.h>
main()
{ char *p, s[6];
int n;
p=s;
gets(p);
n=*p-'0';
while( [18] !='\0')n=n*8+*p-'0';
printf("%d \n",n);
}
(15) 函数 void fun(float *sn, int n)的功能是:根据以下公式计算S,计算结果
通过形参指针sn传回;n通过形参传入,n的值大于等于0。请填空。
1 1 1 1
S=1- ─ + ─ - ─ + … ──
3 5 7 2n+1
void fun( float *sn, int n)
{ float s=0.0, w, f=-1.0;
int i=0;
for(i=0; i<=n; i++)
{ f= [19] * f;
w=f/(2*i+1);
s+=w;
}
[20] =s;
}