全国计算机等级考试历年真题与机考题库:二级C语言
上QQ阅读APP看书,第一时间看更新

2017年9月二级C语言真考题库新增试题(1)

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

一、选择题(每小题1分,共40分)

(1)设有一个栈与一个队列的初始状态均为空。现有一个序列的元素为A,B,C,D,E,F,G,H,先分别将序列中的前4个元素依次入栈,后4个元素依次入队;然后分别将栈中的元素依次退栈,再将队列中的元素依次退队。最后得到的序列为()。

(A)A,B,C,D,H,G,F,E

(B)D,C,B,A,H,G,F,E

(C)A,B,C,D,E,F,G,H

(D)D,C,B,A,E,F,G,H

(2)设某棵树的度为3,其中度为2,1,0的节点个数分别为3,4,15,则该树中总节点数为()。

(A)30

(B)22

(C)35

(D)不可能有这样的树

(3)设二叉树的前序序列为ABDEGHCFIJ,中序序列为DBGEHACIFJ。则按层次输出(从上到下,同一层从左到右)的序列为()。

(A)ABCDEFGHIJ

(B)DGHEBIJFCA

(C)JIHGFEDCBA

(D)GHIJDEFBCA

(4)设顺序表的长度为16,对该表进行简单插入排序。在最坏情况下需要的比较次数为()。

(A)15

(B)60

(C)30

(D)120

(5)软件系统总体结构图的作用是()。

(A)描述软件系统结构的图形工具

(B)描述软件系统的控制流

(C)描述软件系统的数据流

(D)描述软件系统的数据结构

(6)不属于对象构成成份的是()。

(A)属性

(B)规则

(C)方法(或操作)

(D)标识

(7)十进制整数设为整数类I,则下面属于类I的实例的是()。

(A)-518

(B)0.518

(C)518E-2

(D).518

(8)结构化程序设计原则强调的是()。

(A)自顶向下

(B)可封装性

(C)可复用性

(D)可恢复性

(9)违背数据流图(DFD)构造规则的是()。

(A)“加工”应既有输入又有输出

(B)“数据存储”间有数据流

(C)“数据流”应标识数据流名

(D)父图子图是指相邻上下两层的数据流图

(10)关系数据库规范化主要为克服数据库逻辑结构中的插入异常、删除异常以及()。

(A)数据丢失的问题

(B)结构不合理的问题

(C)数据不一致的问题

(D)冗余度大的问题

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

(A)C语言既可以用来编写系统软件,又可以用来编写应用软件

(B)机器中只要安装有任一种编译程序,就能对C源程序进行编译

(C)若程序中不使用C语言提供的库函数,则可以不运行连接程序

(D)调试程序时若发现语法错误,改正后即可直接运行,无需再次编译

(12)以下说法正确的是()。

(A)由3种基本结构组成的结构化程序只能解决一些简单的问题

(B)由3种基本结构组成的结构化程序可以解决任何复杂的问题

(C)由3种基本结构组成的结构化程序只能解决那些可以结构化的问题

(D)由3种基本结构组成的结构化程序只能解决一些数学上有解析解的问题

(13)以下说法正确的是()。

(A)C语言标识符中字母、数字和下划线字符必须同时出现

(B)C语言标识符中仅出现下划线字符是不允许的

(C)C语言标识符中可以出现多个字母、数字和下划线字符

(D)C语言标识符中字母、数字和下划线字符不能同时出现

(14)以下属于C语言标识符的是()。

(A)_6_

(B)#6#

(C)@6@

(D)$6$

(15)以下不能作为合法常量的是()。

(A)1.234e0

(B)1.234e04

(C)1.234e+4

(D)1.234e0.4

(16)设有如下语句:

intk=0;

k=printf("OK\n");

则以下叙述中正确的是()。

(A)printf必须作为独立语句出现

(B)变量k得到的是输出的可见字符个数2

(C)变量k得到的是输出字符的总个数3

(D)变量k仍保持初值0

(17)以下说法正确的是()。

(A)赋值语句是一种可执行语句,应当出现在函数的可执行部分

(B)赋值语句可以出现在函数中的任意位置

(C)赋值语句可以出现在函数外单独执行

(D)赋值语句可以出现在源程序中的任意位置

(18)有以下程序:

#include<stdio.h>

main()

{ char*s="01234";

while(*(++s)!='\0')

{ switch(*s-'0')

{ case0:

case1:putchar(*s+1);break;

case2:putchar(*s+1);break;

case3:putchar(*s+1);

default:putchar(*s+1);break;

}

}

}

程序执行后的输出结果是()。

(A)22345

(B)2345

(C)12345

(D)23445

(19)有如下程序:

#include<stdio.h>

main()

inti;

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

putchar('9'-i% 2);

}

程序运行后的输出结果是()。

(A)98989

(B)98765

(C)'9''8''7''6''5'

(D)'98989'

(20)以下关于switch语句的叙述中正确的是()。

(A)所有case的标号都应当是连续的

(B)每个case语句标号后面可以没有break语句

(C)char型常量不能做case的标号使用

(D)default必须放在全部case的最后

(21)有下列程序:

#include<stdio.h>

main()

{ inta=6,i;

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

{ if(a<5)break;

if(a%2){ a+=2;continue;}

a=a+4;

}

printf("%d,%d",i,a);

}

程序执行后的输出结果是()。

(A)4,9

(B)3,18

(C)4,18

(D)4,2

(22)有以下程序:

#include<stdio.h>

main()

inta=1,b=2,c=3;

charflag;

flag=b>=2 &&c<=3;

switch(a)

case1:switch(flag)

case0:printf("**");break;

case1:printf("%%");break;

}

case0:switch(c)

case1:printf("$$");break;

case2:printf("&&");break;

default:printf("##");

}

}

printf("\n");

}

程序运行后的输出结果是()。

(A)**$$

(B)%##

(C)%&&

(D)**##

(23)有以下程序:

#include<stdio.h>

void main()

{ char*s="\ta\018bc";

for(;*s!='\0';s++)

printf("*");

printf("\n");

}

程序运行后的输出结果是()。

(A)******

(B)*********

(C)*****

(D)*******

(24)以下正确的字符常量是()。

(A)"AB"

(B)'\0AB'

(C)'AB'

(D)'\xAB'

(25)有如下程序:

#include<stdio.h>

void fun(int*a,int*b)

{ for(;(*a<*b)||(getchar()!='@');)

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

}

main()

{ inti=0,j=5;

fun(&i,&j);

printf("%d,%d\n",i,j);

}

程序运行时在第一列开始输入:

ab@<回车>

则运行结果是()。

(A)7,1

(B)3,2

(C)0,5

(D)5,0

(26)有下列程序:

#include<stdio.h>

void swap(int*a,int*b)

{ int*tp;

tp=a;a=b;b=tp;

printf("%d,%d,",*a,*b);

}

main()

{ inti=3,j=7,*p=&i,*q=&j;

swap(p,q);

printf("%d,%d",*p,*q);

}

程序执行后的输出结果是()。

(A)3,7,7,3

(B)7,3,7,3

(C)3,7,3,7

(D)7,3,3,7

(27)以下关于函数参数的叙述中,错误的是()。

(A)实参应与其对应的形参类型一致

(B)形参可以是常量、变量或表达式

(C)实参可以是常量、变量或表达式

(D)形参可以是任意合法数据类型

(28)以下有关函数的叙述错误的是()。

(A)C语言规定,不能在函数的内部定义函数

(B)在C语言的函数体中可以有多个return语句

(C)在C语言中函数的实参个数可以有多个,各实参之间用分号隔开

(D)C语言程序总是从main()函数开始执行

(29)以下关于指针的说法错误的是()。

(A)可以向指针中写入任意数据

(B)可以向指针所指内存单元中写入数据

(C)指针可以指向与其基类型相同的普通变量

(D)可以通过加法运算,使指针指向下一个内存单元

(30)有以下程序:

#include<stdio.h>

#defineSWAT(t,a,b)t=a;a=b;b=t;

main()

{ intx=6,y=4,z=3,s=0;

if(x<y)SWAT(s,x,y);

if(x<z)SWAT(s,x,z);

if(y<z)SWAT(s,y,z);

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

}

执行后的输出结果是()。

(A)6,4,3

(B)3,4,6

(C)0,3,4

(D)3,0,0

(31)有以下程序:

#include<stdio.h>

intf(intx[],intn)

{ if(n>1)

return f(x,n-1)+x[n-1]*10;

else

return x[0];

}

main()

{ inta[6]={1,2,3,4},y;

y=f(a,4);

printf("%d",y);

}

程序执行后的输出结果是()。

(A)91

(B)4321

(C)1234

(D)10

(32)有如下程序:

#include<stdio.h>

void get_put()

charch;

ch=getchar();

if(ch !='\n')get_put();

putchar(ch);

}

main()

get_put();

}

程序运行时,输入AB12<回车>,则输出结果是()。

(A)2100

(B)21BA

(C)DCBA

(D)21AB

(33)有以下程序:

#include<stdio.h>

#include<string.h>

void fun(char*s)

intlen;

len=strlen(s);

if(len>2)fun(s+2);

putchar(*s);

}

void main()

char*p="abcdefg";

fun(p);

putchar('\n');

}

程序的运行结果是()。

(A)abcdefg

(B)gfedcba

(C)geca

(D)aceg

(34)有如下程序:

#include<stdio.h>

void convert(charch)

printf("%c",ch);

if(ch <'5')convert(ch+1);

}

main()

convert('0');

}

程序运行后的输出结果是( )。

(A)5

(B)123456

(C)012345

(D)01234

(35)有以下程序:

#include<stdio.h>

intmm;

intfunc(inta)

staticintn=3;

inti;

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

n=n*a;

return n;

}

void main()

inta;

mm=func(2);

a=func(3);

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

}

程序的运行结果是()。

(A)6 34

(B)9 729

(C)39

(D)6 54

(36)有以下程序:

#include<stdio.h>

intfun(char*p)

{ if(*p==0)return 0;

fun(p+1);

putchar(*p);

return 0;

}

main()

{ charch[]="ABCD";

fun(ch);

}

程序运行后的输出结果是()。

(A)DCBA

(B)BCD

(C)ABCD

(D)D

(37)有以下程序:

#include<stdio.h>

intfun(intx,inty)

staticintm=0,i=2;

i+=m+1;m=i+x+y;

return m;

}

void main()

{ intj=1,m=1,k;

k=fun(j,m);

printf("%d,",k);

k=fun(j,m);

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

}

程序运行后的输出结果是( )。

(A)5,5

(B)5,11

(C)11,11

(D)11,5

(38)有下列程序:

#include<stdio.h>

#include<string.h>

main()

{ chara[5][10]={"efg","abcd","mnopq","hijkl","rstuvwxyz"};

char*p[5];

inti,len;

for(i=4;i>=0;i--)

{ p[i]=a[i];

len=strlen(p[i]);

printf("%s",p[i]+len-2);

printf("%c",*(p[i]+len-1));

}

}

程序执行后的输出结果是()。

(A)fggcddpqqkllyzz

(B)yzzkllpqqcddfgg

(C)yzyklkpqpcdcfgf

(D)fgfcdcpqpklkyzy

(39)有以下程序:

#include<stdio.h>

typedefstructbook

charname[50];

doubleprice;

} BOOK;

void fun(BOOK*pd,intnum,intsize);

void main()

BOOKdata[10]={"photoshop",26.8,"计算机原理",15.00,"数据结构",35.6};

intn=3,m=10;

fun(data,n,m);

printf("%s,%s\n",data[8].name,data[9].name);

}

void fun(BOOK*pd,intnum,intsize)

inti,j,t;

doublemx,mn;

mx=mn=pd[0].price;

j=t=0;

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

if(pd[i].price>mx)

{ mx=pd[i].price;j=i;}

if(pd[i].price<mn)

{ mn=pd[i].price;t=i;}

}

pd[size-2]=pd[j];

pd[size-1]=pd[t];

}

程序的运行结果是( )。

(A)数据结构,计算机原理

(B)计算机原理,数据结构

(C)photoshop,计算机原理

(D)数据结构,photoshop

(40)有下列程序:

#include<stdio.h>

#include<string.h>

typedefstructstu {

charname[9];

chargender;

intscore;

} STU;

void f(STU*a)

{ STUc={"Sun",'f',90},*d=&c;

a=d;

strcpy(a->name,c.name);

a->gender=c.gender;

a->score=c.score;

printf("%s,%c,%d,",a->name,a->gender,a->score);

}

main()

{ STUa={"Zhao",'m',85};

f(&a);

printf("%s,%c,%d",a.name,a.gender,a.score);

}

程序执行后的输出结果是()。

(A)Zhao,m,85,Sun,f,90

(B)Sun,f,90,Sun,f,90

(C)Sun,f,90,Zhao,m,85

(D)Zhao,m,85,Zhao,m,85

二、程序填空题

下列给定程序中已建立一个带头节点的单向链表,链表中的各节点按节点数据域中的数据递增有序链接。函数fun的功能是:把形参x的值放入一个新节点并插入链表中,使插入后各节点数据域中的数据仍保持递增有序。

请在程序的下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。

注意:部分源程序给出如下。

不得增行或删行,也不得更改程序的结构!

试题程序:

#include<stdio.h>

#include<stdlib.h>

#defineN8

typedefstructlist

{ intdata;

structlist*next;

} SLIST;

void fun(SLIST*h,intx)

{ SLIST*p,*q,*s;

s=(SLIST*)malloc(sizeof(SLIST));

/********found********/

s->data=【1】;

q=h;

p=h->next;

while(p!=NULL&&x>p->data){

/********found********/

q=【2】

p=p->next;

}

s->next=p;

/********found********/

q->next=【3】

}

SLIST*creatlist(int*a)

{ SLIST*h,*p,*q;inti;

h=p=(SLIST*)malloc(sizeof(SLIST));

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

{ q=(SLIST*)malloc(sizeof(SLIST));

q->data=a[i];p->next=q;p=q;

}

p->next=0;

return h;

}

void outlist(SLIST*h)

{ SLIST*p;

p=h->next;

if(p==NULL)

printf("\nThelistisNULL! \n");

else

{ printf("\nHead");

do{ printf("->%d",p->data);

p=p->next;

} while(p!=NULL);

printf("->End\n");

}

}

main()

{ SLIST*head; intx;

inta[N]={11,12,15,18,19,22,25,29};

head=creatlist(a);

printf("\nThelistbeforeinserting:\n");

outlist(head);

printf("\nEnteranumber:");

scanf("%d",&x);

fun(head,x);

printf("\nThelistafterinserting:\n");

outlist(head);

}

三、程序修改题

下列给定程序中函数fun的功能是:计算正整数num各位上的数字之积。

例如,若输入252,则输出应该是20。若输入202,则输出应该是0。

请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

试题程序:

#include<stdio.h>

#include<conio.h>

longfun(longnum)

/********found********/

longk;

do

k*=num%10;

/********found********/

num\=10;

}while(num);

return(k);

}

main()

longn;

printf("\n pleaseenteranumber:");

scanf("%ld",&n);

printf("\n%ld\n",fun(n));

}

四、程序设计题(共24分)

编写函数fun,其功能是:计算n门课程的平均分,结果作为函数值返回。

例如,若有5门课程的成绩是:90.5,72,80,61.5,55,则函数的值为71.80。

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

试题程序:

#include<stdio.h>

floatfun(float*a,intn)

}

void main()

floatscore[30]={90.5,72,80,61.5,55},aver;

aver=fun(score,5);

printf("\nAveragescoreis:%5.2f\n",aver);

}