20039月全国计算机等级考试二级C语言笔试试题及答案

 (考试时间120分钟,满分100分)

  一、选择题((1~40)每题1分,(41~50)每题2分,共60分)

  (1)在计算机中,一个字节所包含二进制位的个数是

A2             B4

C8           D16

  (2)在多媒体计算机中,CD-ROM属于

A.存储媒体B.传输媒体

C.表现媒体D.表示媒体

  (3)在DOS系统中,带有通配符的文件名*.*表示

A.硬盘上的全部文件

B.当前盘当前目录中的全部文件

C.当前盘上的全部文件

D.根目录中的全部文件

  (4)十六进制数100转换为十进制数为

A256             B512

C1024            D64

  (5)能将高级语言编写的源程序转换为目标程序的软件是

A.汇编程序B.编辑程序

C.解释程序D.编译程序

  (6)在Internet中,用于在计算机之间传输文件的协议是

ATELNET         BBBS

CFTP             DWWW

  (7)在Windows环境下,资源管理器左窗口中的某文件夹左边标有""标记表示

A.该文件夹为空B.该文件夹中含有子文件夹

C.该文件夹中只包含有可执行文件D.该文件夹中包含系统文件

  (8)在Windows环境下,下列叙述中正确的是

A.在"开始"菜单中可以增加项目,也可以删除项目

B.在"开始"菜单中不能增加项目,也不能删除项目

C.在"开始"菜单中可以增加项目,但不能删除项目

D.在"开始"菜单中不能增加项目,但可以删除项目

  (9Windows环境进入DOS方式后,返回Windows环境的命令为

AQUIT                    BWIN

CEXIT                    DESC

  (10下列叙述中正确的是

A.计算机病毒只感染可执行文件

B.计算机病毒只感染文本文件

C.计算机病毒只能通过软件复制的方式进行传播

D.计算机病毒可以通过读写磁盘或网络等方式进行传播

  (11)以下叙述中正确的是

AC程序中注释部分可以出现在程序中任意合适的地方

B.花括号"{""}"只能作为函数体的定界符

C.构成C程序的基本单位是函数,所有函数名都可以由用户命名

D.分号是C语句之间的分隔符,不是语句的一部分

  (12)以下选项中可作为C语言合法整数的是

A10110B      B0386

C0Xffa        Dx2a2

  (13)以下不能定义为用户标识符的是

Ascanf              BVoid

C_3com_            Dint

  (14)有以下程序

main()

{ int a;char c=10;

floatf=100.0; double x;

a=f/=c*=(x=6.5);

printf("%d%d %3.1f %3.1f\n",a,c,f,x);

}

  程序运行后的输出结果是

A1 65 1 6.5              B1 65 1.5 6.5

C1 65 1.0 6.5             D2 65 1.5 6.5

  (15)以下选项中非法的表达式是

A0<=x<100

Bi=j==0

C(char)(65+3)

Dx+1=x+1

16)有以下程序

main()

{ inta=1,b=2,m=0,n=0,k;

k=(n=b>a)||(m=aprintf("%d,%d\n",k,m);

}

  程序运行后的输出结果是

A0,0               B0,1

C1,0               D1,1

  (17)有定义语句:int x, y;,若要通过scanf("%d,%d",&x,&y);语句使变量x得到数值11,变量y得到数值12,下面四组输入形式中,错误的是

A11 12<回车>

B11, 12<回车>

C11,12<回车>

D11,<回车>

12<回车>

  (18)设有如下程序段:

int x=2002,y=2003;

printf("%d\n",(x,y));

  则以下叙述中正确的是

A.输出语句中格式说明符的个数少于输出项的个数,不能正确输出

B.运行时产生出错信息

C.输出值为2002

D.输出值为2003

  (19)设变量xfloat型且已赋值,则以下语句中能将x中的数值保留到小数点后两位,并将第三位四舍五入的是

Ax=x*100+0.5/100.0;

Bx=(x*100+0.5)/100.0;

Cx=(int)(x*100+0.5)/100.0;

Dx=(x/100+0.5)*100.0;

  (20)有定义语句:int a=1,b=2,c=3,x;,则以下选项中各程序段执行后,x的值不为3的是

A if (celse if (belse x=3; else x=1;

C if (a<3) x=3;

Dif (aif (a<2) x=2; if (bif (a<1) x=1; if (c  (21)有以下程序

main()

{ ints=0,a=1,n;

scanf("%d",&n);

do

{ s+=1;a=a-2; }

while(a!=n);

printf("%d\n",s);

}

  若要使程序的输出值为2,则应该从键盘给n输入的值是

A-1

B-3

C-5

D0

  (22)若有如下程序段,其中sabc均已定义为整型变量,ac均已赋值(c大于0

s=a;

for(b=1;b<=c;b++)s=s+1;

  则与上述程序段功能等价的赋值语句是

As=a+b;

Bs=a+c;

Cs=s+c;

Ds=b+c;

  (23)有以下程序

main()

{ intk=4,n=0;

for( ; n{ n++;

if(n%3!=0)continue;

k--; }

printf("%d,%d\n",k,n);

}

  程序运行后的输出结果是

A1,1

B2,2

C3,3

D4,4

  (24)要求以下程序的功能是计算:s= 1+1/2+1/3+……+1/10

  (资料来源:东方教育网http://www.eastedu.com.cn)

main()

{ int n;float s;

s=1.0;

for(n=10;n>1;n--)

s=s+1/n;

printf("%6.4f\n",s);

}

  程序运行后输出结果错误,导致错误结果的程序行是

As=1.0;

Bfor(n=10;n>1;n--)

Cs=s+1/n;

Dprintf("%6.4f\n",s);

  (25)已定义ch为字符型变量,以下赋值语句中错误的是

Ach='\';

Bch=62+3;

Cch=NULL;

Dch='\xaa';

  (26)若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是

A.函数调用可以作为独立的语句存在

B.函数调用可以作为一个函数的实参

C.函数调用可以出现在表达式中

D.函数调用可以作为一个函数的形参

  (27)有以下函数定义:

void fun(intn, double x) { …… }

  若以下选项中的变量都已正确定义并赋值,则对函数fun的正确调用语句是

Afun(int y,double m);

Bk=fun(10,12.5);

Cfun(x,n);

Dvoid fun(n,x);

  (28)有以下程序

voidfun(char *a, char *b)

{ a=b;(*a)++; }

main()

{ charc1='A',c2='a',*p1,*p2;

p1=&c1;p2=&c2; fun(p1,p2);

printf("%c%c\n",c1,c2);

}

  程序运行后的输出结果是

AAb

Baa

CAa

DBb

  (29)若程序中已包含头文件stdio.h,以下选项中,正确运用指针变量的程序段是

Aint *i=NULL;

B float *f=NULL;

scanf("%d",i);*f=10.5;

Cchar t='m', *c=&t;

Dlong *L;

*c=&t; L='\0';


30有以下程序

#include

main()

{printf("%d\n",NULL); }

  程序运行后的输出结果是

A0

B1

C-1

DNULL没定义,出错

31)已定义c为字符型变量,则下列语句中正确的是

Ac='97';

Bc="97";

Cc=97;

Dc="a";

  (32)以下不能正确定义二维数组的选项是

Aint a[2][2]={{1},{2}};

Bint a[][2]={1,2,3,4};

Cint a[2][2]={{1},2,3};

Dint a[2][]={{1,2},{3,4}};

  (33)以下选项中不能正确把cl定义成结构体变量的是

Atypedef struct

Bstruct color cl

{ int red;{ int red;

int green;int green;

int blue;int blue;

} COLOR; };

COLOR cl;

Cstruct color

Dstruct

{ int red;{ int red;

int green;int green;

int blue;int blue;

} cl; } cl;

  (34)以下能正确定义一维数组的选项是

Aint num[];

B #define N 100 intnum[N];

Cint num[0..100];

Dint N=100;

int num[N];

  (35)下列选项中正确的语句组是

Achar s[8]; s={"Beijing"};

Bchar *s; s={"Beijing"};

Cchar s[8]; s="Beijing";

Dchar *s; s="Beijing";

  (36)已定义以下函数

fun(int *p)

{ return *p;}

  该函数的返回值是

A.不确定的值

B.形参p中存放的值

C.形参p所指存储单元中的值

D.形参p的地址值

  (37)下列函数定义中,会出现编译错误的是

Amax(int x,int y,int *z)

Bint max(int x,y)

{ *z=x>y? x:y; } { int z;

z=x>y ?x:y;

return z;

}

Cmax(int x,int y)

Dint max(int x,int y)

{ int z; {return(x>y?x:y); }

z=x>y?x:y;return(z);

}

  (38)有以下程序

#include

#defineF(X,Y) (X)*(Y)

main()

{ int a=3,b=4;

printf("%d\n",F(a++, b++));

}

  程序运行后的输出结果是

A12

B15

C16

D20

  (39)有以下程序

fun(int a,int b)

{ if(a>b)return(a);

elsereturn(b);

}

main()

{ int x=3,y=8, z=6, r;

r=fun(fun(x,y),2*z);

printf("%d\n",r);

}

  程序运行后的输出结果是

A3

B6

C8

D12

  (40)若有定义:int *p[3];,则以下叙述中正确的是

A.定义了一个基类型为int的指针变量p,该变量具有三个指针

B.定义了一个指针数组p,该数组含有三个元素,每个元素都是基类型为int的指针

C.定义了一个名为*p的整型数组,该数组含有三个int类型元素

D.定义了一个可指向一维数组的指针变量p,所指一维数组应具有三个int类型元素

  (41)以下程序中函数scmp的功能是返回形参指针s1s2所指字符串中较小字符串的首地址

#include

#include

char*scmp(char *s1, char *s2)

{if(strcmp(s1,s2)<0)

return(s1);

elsereturn(s2);

}

main()

{ int i;char string[20], str[3][20];

for(i=0;i<3;i++)gets(str[i]);

strcpy(string,scmp(str[0],str[1]));/*库函数strcpy对字符串进行复制*/

strcpy(string,scmp(string,str[2]));

printf("%s\n",string);

}

  若运行时依次输入:abcdabbaabc三个字符串,则输出结果为

Aabcd

Babba

Cabc

Dabca

42)有以下程序

struct s

{ int x,y; }data[2]={10,100,20,200};

main()

{ struct s*p=data;

printf("%d\n",++(p->x));

}

  程序运行后的输出结果是

A10

B11

C20

D21

  (43)有以下程序段

main()

{ int a=5,*b,**c;

c=&b;b=&a;

  ……

}

  程序在执行了c=&b;b=&a;语句后,表达式:**c的值是

A.变量a的地址

B.变量b中的值

C.变量a中的值

D.变量b的地址

  (44)有以下程序

#include

main()

{ charstr[][20]={"Hello","Beijing"},*p=str;

printf("%d\n",strlen(p+20));

}

  程序运行后的输出结果是

A0

B5

C7

D20

  (45)已定义以下函数

fun(char*p2, char *p1)

{while((*p2=*p1)!='\0'){ p1++;p2++; } }

  函数的功能是

A.将p1所指字符串复制到p2所指内存空间

B.将p1所指字符串的地址赋给指针p2

C.对p1p2两个指针所指字符串进行比较

D.检查p1p2两个指针所指字符串中是否有'\0'

  (46)有以下程序

main()

{ int x=3,y=2, z=1;

printf("%d\n",x/y&~z);

}

  程序运行后的输出结果是

A3

B2

C1

D0

  (47)若fp已正确定义并指向某个文件,当未遇到该文件结束标志时函数feof(fp)的值为

A0

B1

C-1

D.一个非0

  (48)下列关于C语言数据文件的叙述中正确的是

A.文件由ASCII码字符序列组成,C语言只能读写文本文件

B.文件由二进制数据序列组成,C语言只能读写二进制文件

C.文件由记录序列组成,可按数据的存放形式分为二进制文件和文本文件

D.文件由数据流形式组成,可按数据的存放形式分为二进制文件和文本文件

  (49)有以下程序

main()

{ inta[3][3],*p,i;

p=&a[0][0];

for(i=0;i<9;i++)p[i]=i+1;

printf("%d\n",a[1][2]);

}

  程序运行后的输出结果是

A3

B6

C9

D2

  (50)有以下结构体说明和变量定义,如图所示,指针pqr分别指向一个链表中的三个连续结点。

struct node

{ int data;

struct node*next;

} *p, *q,*r;

_______________________________

| data nextdata next data next |

| →□□□□□□→ |

|p q r |

|______________________________|

  现要将qr所指结点的先后位置交换,同时要保持链表的连续,以下错误的程序段是

Ar->next=q;q->next=r->next; p->next=r;

Bq->next=r->next;p->next=r; r->next=q;

Cp->next=r;q->next=r->next; r->next=q;

  (资料来源:东方教育网http://www.eastedu.com.cn)

Dq->next=r->next;r->next=q; p->next=r;

二、填空题(每空2分,共40分)

  (1)计算机软件分为系统软件与应用软件,UNIX属于1

  (2)假设在当前盘的当前目录下有两个文件A.TXTB.TXT,现要将文件B.TXT合并连接到文件A.TXT的后面。若使用TYPE命令,则完整的命令为2

  (3Internet的信息服务方式分为基本服务和扩展服务,电子邮件属于3

  (4)在Windows环境下,利用菜单命令删除固定硬盘上的文件与文件夹,实际上是将需要删除的文件与文件夹移动到4文件夹中。

  (5)在Windows环境下,为了进行"添加/删除程序"操作,首先打开5,然后双击其中的相应图标。

  (6)以下程序运行后的输出结果是6

main()

{ int p=30;

printf("%d\n",(p/3>0? p/10 : p%3));

}

  (7)以下程序运行后的输出结果是7

main()

{ char m;

m='B'+32;printf("%c\n",m);

}

  (8)以下程序运行后的输出结果是8

main()

{ inta=1,b=3,c=5;

if (c=a+b)printf("yes\n");

elseprintf("no\n");

}

  (9)以下程序运行后的输出结果是9

main()

{ inti,m=0,n=0,k=0;

for(i=9;i<=11;i++)

switch(i/10)

{ case 0:m++;n++;break;

case 10:n++; break;

default:k++;n++;

}

printf("%d%d %d\n",m,n,k);

}

  (10)执行以下程序后,输出'#'号的个数是10

#include

main()

{ int i,j;

for(i=1;i<5; i++)

for(j=2;j<=i; j++) putchar('#');

}

  (11)以下程序的功能是调用函数fun计算:m=1-2+3-4++9-10,并输出结果。请填空。

int fun( intn)

{ intm=0,f=1,i;

for(i=1;i<=n; i++)

{ m+=i*f;

f= 11 ;

}

return m;

}

main()

{printf("m=%d\n", 12 ); }

  (12)以下程序运行后的输出结果是13

main()

{ inti,n[]={0,0,0,0,0};

for(i=1;i<=4;i++)

{n[i]=n[i-1]*2+1;

printf("%d",n[i]);

}

}

  (13)以下程序运行后的输出结果是14

main()

{ inti,j,a[][3]={1,2,3,4,5,6,7,8,9};

for(i=0;i<3;i++)

for(j=i+1;j<3;j++)a[j][i]=0;

for(i=0;i<3;i++)

{for(j=0;j<3;j++) printf("%d ",a[i][j]);

printf("\n");

}

}

  (14)以下程序运行后的输出结果是15

int a=5;

fun(int b)

{ static inta=10;

a+=b++;

printf("%d",a);

}

main()

{ int c=20;

fun(c);

a+=c++;

printf("%d\n",a);

}

15)请在以下程序第一行的下划线处填写适当内容,使程序能正确运行。

  〖16 ( double,double);

main()

{ doublex,y;

scanf("%lf%lf",&x,&y);

printf("%lf\n",max(x,y));

}

doublemax(double a,double b)

{return(a>b ? a:b); }

  (16)以下程序运行后输入:3,abcde<回车>,则输出结果是17

#include

move(char*str, int n)

{ char temp;int i;

temp=str[n-1];

for(i=n-1;i>0;i--)str[i]=str[i-1];

str[0]=temp;

}

main()

{ chars[50]; int n, i, z;

scanf("%d,%s",&n,s);

z=strlen(s);

for(i=1;i<=n; i++) move(s, z);

  (资料来源:东方教育网http://www.eastedu.com.cn)

printf("%s\n",s);

}

  (17)以下程序运行后的输出结果是18

fun(int x)

{if(x/2>0) fun(x/2);

printf("%d",x);

}

main()

{ fun(6); }

  (18)已有定义如下:

struct node

{ int data;

struct node*next;

} *p;

  以下语句调用malloc函数,使指针p指向一个具有struct node类型的动态存储空间。请填空。

p = (structnode *)malloc( 19 );

  (19)以下程序的功能是将字符串s中的数字字符放入d数组中,最后输出d中的字符串。例如,输入字符串:abc123edf456gh,执行程序后输出:123456。请填空。

#include

#include

main()

{ chars[80], d[80]; int i,j;

gets(s);

for(i=j=0;s[i]!='\0';i++)

if( 20 ) { d[j]=s[i]; j++; }

d[j]='\0';

puts(d);

}

20039月全国计算机等级考试二级C语言笔试试卷参考答案

  一、选择题

  (1 C 2 A 3 B 4 A 5 D

  (6 C 7 B 8 A 9 C 10D

  (11A 12C 13D 14B 15D

  (16C 17A 18D 19C 20C

  (21B 22B 23C 24C 25A

  (26D 27C 28A 29D 30A

  (31C 32D 33B 34B 35D

  (36C 37B 38A 39D 40B

  (41B 42B 43C 44C 45A

  (46D 47A 48D 49B 50A

  二、填空题

  (11系统软件

  (22 TYPE B.TXT>> A.TXT

  (33基本服务

  (44回收站

  (55控制面板

  (66 3

  (77 b

  (88 yes

  (99 1 3 2

  (1010 6

  (1111 -f

12 fun(10)

  (1213 1 3 7 15

  (1314 1 2 3

0 5 6

0 0 9

  (1415 30 25

  (1516 double max

  (1617 cdeab

  (1718 1 3 6

  (1819sizeof(struct node)

  (1920 s[i]>='0'&& s[i]<='9'