计算机等级考试二级C语言习题解析.docx
《计算机等级考试二级C语言习题解析.docx》由会员分享,可在线阅读,更多相关《计算机等级考试二级C语言习题解析.docx(17页珍藏版)》请在冰豆网上搜索。
计算机等级考试二级C语言习题解析
2006年4月全国计算机等级考试二级C语言笔试试题及答案
一、选择题(1~10每题2分,11~50每题1分,共60分)
下列各题A、B、C、D四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡的相应位置上,答在试卷上不得分。
(1)下列选项中不属于结构化程序设计方法的是()。
A)自顶向下B)逐步求精C)模块化D)可复用
结构化程序设计方法的一个缺点是不可复用。
(2)两个或两个以上模块之间关联的紧密程序称为()。
A)耦合度B)内聚度C)复杂度D)数据传输特性
(3)下列叙述正确的是()。
A)软件测试应由程序开发者来完成
B)程序经调试后一般不需要再测试
C)软件维护只包括对程序代码的维护
D)以上三种说法都不对
(4)按照“后进先出”原则组织数据的数据结构是()。
A)队列B)栈C)双向链表D)二叉树
后进先出:
堆栈先进先出:
队列
(5)下列叙述中正确的是()。
A)线性链表是线性表的链式存储结构
B)栈与队列是非线性结构
C)双向链表非线性结构
D)只有根节点的二叉树是线性结构
(6)对如下二叉树
进行后序遍历的结果为()。
A)ABCDEFB)DBEAFCC)ABDECFD)DEBFCA
(7)在深度为7的满二叉树中,叶子节点的个数为()。
A)32B)31C)64D)63
(8)“商品”与“顾客”两个实体集之间的联系一般是()。
A)一对一B)一对多C)多对一D)多对多
(9)在E-R图中,用来表示实体的图形是()。
A)矩形B)椭圆形C)菱形D)三角形
(10)数据库DB、数据库系统DBS、数据库管理系统DBMS之间的关系是()。
A)DB包含DBS和DBMSB)DBMS包含DB和DBS
C)DBS包含DB和DBMSD)没有任何关系
(11)以下不合法的用户标识符是()。
A)j2_KEYB)DoubleC)4dD)_8_
(12)以下不合法的数值常量是()。
A)011B)1e1C)8.0E0.5D)0xabcd
(13)以下不合法的字符常量是()。
A)'\018'B)'\"'C)'\\'D)'\xcc'
(14)表达式3.6-5/2+1.2+5%2的值是()。
A)4.3B)4.8C)3.3D)3.8
(15)以下能正确定义字符串的语句是()。
A)charstr[]={'\064'};B)charstr="\x43";
C)charstr=";D)charstr[]="\0";
(16)以下数组定义中错误的是()。
A)intx[][3]={0};B)intx[2][3]={{1,2},{3,4},{5,6}};
C)intx[][3]={{1,2,3},{4,5,6}};D)intx[2][3]={1,2,3,4,5,6};
(17)若要求从键盘读入含有空格字符的字符串,应使用函数()。
A)getc()B)gets()C)getchar()D)scanf()
(18)以下四个程序中,完全正确的是()。
A)#includeB)#include
main();main()
{/*programming*/{/*/programming/*/
printf("programming!
\n");}printf("programming!
\n");}
C)#includeD)#include
main()main()
{/*/*programming*/*/{/*programming*/
printf("programming!
\n");}printf("programming!
\n");}
(19)若有定义:
floatx=1.5;inta=1,b=3,c=2;,则正确的switch语句是()。
A)switch(x)B)switch(int(x))
{case1.0:
printf("*\n");{case1:
printf("*\n");
case2.0:
printf("**\n");}case2:
printf("**\n");}
C)switch(a+b)D)switch(a+b)
{case1:
printf("*\n");{case1:
printf("*\n");
case2+1:
printf("**\n");}casec:
printf("**\n");}
(20)若各选项中所用变量已正确定义,函数fun中通过return语句返回一个函数值,以下选项中错误的程序是()。
A)mian()B)floatfun(inta,intb){……}
{……x=fun(2,10);……}main()
floatfun(inta,intb){……}{……x=f(i,j);……}
C)floatfun(int,int);D)main()
main(){floatfun(inti,intj);
{……x=fun(2,10);……}……x=fun(i,j);……}
floatfun(inta,intb){……}floatfun(inta,intb){……}
(21)在以下给出的表达式中,与while(E)中的(E)不等价的表达式是()。
A)(!
E==0)B)(E>0||E<0)C)(E==0)D)(E!
=0)
(22)要求通过while循环不断读入字符,当读入字母N时结束循环,若变量已正确定义以下正确的程序段是()。
A)while((ch=getchar())!
='N')printf("%c",ch);
B)while(ch=getchar()!
='N')printf("%c",ch);
C)while(ch=getchar()=='N')printf("%c",ch);
D)while((ch=getchar())=='N')printf("%c",ch);
(23)已定义以下函数()。
intfun(int*p)
{return*p;}
fun函数返回值是()。
A)不确定的值B)一个整数
C)形参p中存放的值D)形参p的地址值
(24)若有说明语句:
double*p,a;,则能通过scanf语句正确给输入项读入数据的程序段是()。
A)*p=&a;scanf("%lf",p);B)*p=&a;scanf("%f",p);
C)p=&a;scanf("%lf",*p);D)p=&a;scanf("%lf",p);
(25)现有以下结构体说明和变量定义,如图所示,指针p、q、r分别指向一个链表连续的三个节点。
structnode
{chardata;
structnode*next;
}*p,*q,*r;
现要将q和r所指向的节点前后交换位置,同时要保持链表的连续,以下不能完成此操作的语句是()。
A)q->next=r->next;p->next=r;r->next=q;
B)p->next=r;q->next=r->next;r->next=q;
C)q->next=r->next;r->next=q;p->next=r;
D)r->next=q;p->next=r;q->next=r->next;
(26)有以下程序段:
structst
{intx;int*y;}*pt;
inta[]={1,2},b[]={3,4};
structstc[2]={10,a,20,b};
pt=c;
以下选项中表达式的值为11的是()。
A)*pt->yB)pt->xC)++pt->xD)(pt++)->x
(27)设fp为指向某二进制文件的指针,且已读到此文件末尾,则函数feof(fp)的返回值为
A)EOFB)非0值C)0D)NULL
(28)设有以下语句
inta=1,b=2,c;
c=a^(b<<2);
执行后,c的值为()。
A)6B)7C)8D)9
(29)有以下程序:
#include
main()
{
charc1,c2,c3,c4,c5,c6;
scanf("%c%c%c%c",&c1,&c2,&c3,&c4);
c5=getchar();c6=getchar();
putchar(c1);putchar(c2);
printf("%c%c\n",c5,c6);
}
程序运行后,若从键盘输入(从第一列开始)
123<回车>
45678<回车>
则输出结果是()。
A)1267B)1256C)1278D)1245
(30)有以下程序:
main()
{
inty=10;
while(y--);
printf("y=%d\n");
}
程序执行后的输出结果是()。
A)y=0B)y=-1
C)y=1D)while构成无限循环
(31)有以下程序:
main()
{
inta=0,b=0,c=0,d=0;
if(a=1)b=1;c=2;
elsed=3;
printf("%d,%d,%d,%d\n",a,b,c,d);
}
程序输出()。
A)0,1,2,0B)0,0,0,3C)1,1,2,0D)编译有错
(32)有以下程序:
main()
{
inti,j,x=0;
for(i=0;i<2;i++)
{
x++;
for(j=0;j<=3;j++)
{
if(j%2)continue;
x++;
}
x++;
}
printf("x=%d\n",x);
}
程序执行后的输出结果是()。
A)x=4B)x=8C)x=6D)x=12
(33)有以下程序:
intfun1(doublea){returna*=a;}
intfun2(doublex,doubley)
{
doublea=0,b=0;
a=fun1(x);b=fun1(y);return(int)(a+b);
}
main()
{doublew;w=fun2(1.1,2.0);..........}
程序执行后变量w中的值是()。
A)5.21B)5C)5.0D)0.0
(34)有以下程序:
main()
{inti,t[][3]={9,8,7,6,5,4,3,2,1};
for(i=0;i<3;i++)printf("%d",t[2-i][i]);
}
程序执行后的输出结果是()。
A)753B)357C)369D)751
(35)有以下程序:
fun(charp[][10])
{intn=0,i;
for(i=0;i<7;i++)
if(p[i][0]=='T')n++;
returnn;
}
main()
{charstr[][10]={"Mon","Tue","Wed","Thu","Fri","Sat","Sun"};
printf("%d\n",fun(str));
}
程序执行后的输出结果是()。
A)1B)2C)3D)0
(36)有以下程序:
main()
{inti,s=0,t[]={1,2,3,4,5,6,7,8,9};
for(i=0;i<9;i+=2)s+=*(t+i);
printf("%d\n",s);
}
程序执行后的输出结果是()。
A)45B)20C)25D)36
(37)有以下程序:
voidfun1(char*p)
{char*q;
q=p;
while(*q!
='\0')
{(*q)++;q++;}
}
main()
{chara[]={"Program"},*p;
p=&a[3];fun1(p);printf("%s\n",a);
}
程序执行后的输出结果是()。
A)ProhsbnB)PrphsbnC)ProgsbnD)Program
(38)有以下程序:
voidswap(char*x,char*y)
{chart;
t=*x;*x=*y;*y=t;
}
main()
{char*s1="abc",*s2="123";
swap(s1,s2);
printf("%s,%s\n",s1,s2);
}
程序执行后的输出结果是()。
A)123,abcB)abc,123C)1bc,a23D)321,cba
(39)有以下程序:
intfun(intn)
{if(n==1)return1;
else
return(n+fun(n-1));
}
main()
{intx;
scanf("%d",&x);x=fun(x);
printf("%d\n",x);
}
执行程序时,给变量x输入10,程序的输出结果是()。
A)55B)54C)65D)45
(40)有以下程序:
intfun(intx[],intn)
{staticintsum=0,i;
for(i=0;ireturnsum;
}
main()
{inta[]={1,2,3,4,5},b[]={6,7,8,9},s=0;
s=fun(a,5)+fun(b,4);printf("%d\n",s);
}
程序执行后的输出结果是()。
A)45B)50C)60D)55
(41)有以下程序:
main()
{union
{charch[2];
intd;
}s;
s.d=0x4321;
printf("%x,%x\n",s,ch[0],s.ch[1]);
}
在16位编译系统上,程序执行后的输出结果是()。
A)21,43B)43,21C)43,00D)21,00
(42)有以下程序:
main()
{char*p[]={"3697","2584"};
inti,j;longmun=0;
for(i=0;i<2;i++)
{j=0;
while(p[i][j]!
='\0')
{if(p[i][j]-'0')%2)mun=10*mun+p[i][j]-'0';
j+=2;
}
}
printf("%d\n",mun);
}
程序执行后的输出结果是()。
A)35B)37C)39D)3975
(43)执行以下程序后,text.txt文件的内容是(若文件能正常打开)
#include
main()
{FILE*fp;
chars1="Fortran",*s2="Basic";
if((fp=fopen("test.txt","wb"))==NULL)
{printf("Can'topentest.txtfile");exit
(1);}
fwrite(s1,7,1,fp);/*把从地址s1开始的7个字符写到fp所指文件中*/
fseek(fp,0L,SEEK_SET);/*文件位置指针移到文件开头*/
fwrite(s2,5,1,sp);
fclose(fp);
}
A)BasicanB)BasicFotranC)BasicD)FortranBasic
(44)以下叙述中错误的是()。
A)C语言源程序经编译后生成后缀为.obj的目标程序
B)C程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件
C)用C语言编写的程序称为源程序,它以ASCII代码形式放在一个文本文件中
D)语言中的第一条可执行语句和非执行语句最终被转换成二进制的机器指令
(45)以下叙述中错误的是()。
A)算法正确的程序最终一定会结束
B)算法正确的程序可以有零个输出
C)算法正确的程序可以有零个输入
D)算法正确的程序对于相同的输入一定有相同的结果
(46)以下叙述中错误的是()。
A)C程序必须由一个或一个以上的函数组成
B)函数调用可以作为一个独立的语句存在
C)若函数有返回值,必须通过return语句返回
D)函数形参的值也可以传回对应的实参
(47)设有以下定义和语句()。
charstr[20]="Program",*p;
p=str;
则以下叙述中正确的是()。
A)*p与str[0]中的值相等
B)str与p的类型完全相同
C)str数组长度和p所指向的字符串长度相等
D)数组str中存放的内容和指针变量p中存放的内容相同
(48)以下叙述中错误的是()。
A)C程序中的#include和#define行均不是C语句
B)除逗号运算符外,赋值运算符的优先级最低
C)C程序中,j++是赋值语句
D)C程序中,+、-、*、/、%号是算术运算符,可用于整型和实型的运算
(49)以下叙述中正确的是()。
A)预处理命令行必须位于C源程序的起始位置
B)在C语言中,预处理命令行都以“#”开头
C)每个C程序必须在开头包含预处理命令行:
#include
D)C语言的预处理不能实现宏定义和条件编译的功能
(50)以下叙述中错误的是()。
A)可以通过typedef增加新的类型
B)可以用typedef将已存在的类型用一个新的名字来代表
C)用typedef定义新的类型名后,原有类型名仍有效
D)用typedef可以为各种类型起别名,但不能为变量起别名
二、填空题(每空2分,共40分)
请将每一个空的正确答案写在答题卡【1】至【20】序号的横线上,答在试卷上不得分。
(1)对长度为10的线性表进行冒泡排序,最坏情况下需要比较的次数为【1】。
(2)在面向对象方法中,类描述的是具有相似属性与操作的一组对象。
(3)在关系模型中,把数据看成是二维表,每一个二维表称一个【3】。
(4)程序测试分为静态分析和动态测试。
其中【4】是指不执行程序,而只是对程序文本进行检查,通过阅读和讨论,分析和发现程序中的错误。
(5)数据独立性分为逻辑独立性与物理独立性。
当数据的存储结构改变时其逻辑结构可以不变,因此基于逻辑结构的应用程序不必修改,称为【5】。
(6)若变量a、b已定义为int类型并赋值21和55,要求用printf函数以a=21,b=55的形式输出,请写出完整的输出语句【6】。
(1)45
(2)类(3)关系(4)静态分析(5)物理独立性(6)printf("a=%d,b=%d",a,b)
(7)a+b>c&&a+c>b&&b+c>a
(7)以下程序用于判断a、b、c能否构成三角形,若能则输出YES,否则输出NO。
当a、b、c输入三角形三条边的长时,确定a、b、c能构成三角形的条件是需同时满足三条件:
a+b>c,a+c>b,b+c>a。
请填空。
main()
{floata,b,c;
scanf("%f%f%f",&a,&b,&c);
if(【7】)printf("YES\n");/*a.b.c能构成三角形*/
elseprintf("NO\n");/*a.b.c不能构成三角形*/
}
(8)以下程序的输出结果是30。
main()
{inta[3][3]={{1,2,9},{3,4,8},{5,6,7}},i,s=0;
for(i=0;1<3;i++)s+=a[i][i]+a[i][3-i-1];
printf("%d\n",s);
}
(9)当运行以下程序时,输入abcd,程序的输出结果是:
a*b*c*d*。
insert(charstr[])
{inti;
i=strlen(str);
while(i>0)
{str[2*i]=str[i];str[2*i-1]='*';i--;}
printf("%s\n",str);
}
main();
{charstr[40];
scanf("%s",str);insert(str);
}
(10)下面程序的运行结果是:
11。
fun(intt[],intn)
{inti,m;
if(n==1)returnt[0];
else
if(n>=2){m=fun(t,n-1);returnm;}
}
main();
{inta[]={11,4,6,3,8,2,3,5,9,2};
printf("%d\n",fun(a,10));
}
(11)现在有两个C程序文件T18.c同在TC系统目录(文件夹)下,其中T18.c文件如下:
#include
#include"myfun.c"
main()
{fun();printf("\n");}
myfun.c文件如下:
voidfun();
{chars[80],c;intn=0;
while((c=getchar())!
='\n')s[n++]=c;
n--;
while(n>=0)printf("%c",s[n--]);
}
当编译连接通过后,运行程序T18时,输入Thank!
,则输出结果是:
ahT。
(12)以下函数fun的功能是返回str所指字符串中以形参c中字符开头的后续字符串的首地址,例如:
str所指字符串为;Hello!
,c中的字符为e,则函数返回字符串:
ello!
的首地址。
若str所指字符串为空串或不包括c中的字符,则函数返回NULL。
请填空。
char*fun(char*str,charc)
{intn=0;char*p=str;
if(p!
=NULL)
while(p[n]!
=c&&p[n]!
='\0')n++;
if(p[n]=='\0')returnNULL;
return(p+n或str+n);
}
(13)以下程序的功能是:
输出100以内(不含100)能被3整除且个位数为6的所有整数。
请填空。
main()
{inti,j;
for(i=0;i<=9或i<10;i++)
{j=i*10+6;
if(j%3!
=0)continue;
prntf("%d",j);
}
}
(14)以下isprime函数的功能是判断形参a是否为素数,是素数则函数返回1,否则返回为0。
请填空。
intisprime(inta)
{inti;
for(i=2;i<=a/2;i++)
if(a%i==0)return0;
return1;
}
(15)