二级C语言真题.docx
《二级C语言真题.docx》由会员分享,可在线阅读,更多相关《二级C语言真题.docx(28页珍藏版)》请在冰豆网上搜索。
二级C语言真题
二级C语言真题2017年09月-(3)
一、选择题
1、设某棵树的度为3,其中度为3,1,0的节点个数分别为3,4,15。
则该树中总节点数为
A.22B.30C.35D.不可能有这样的树
2、线性表的长度为n。
在最坏情况下,比较次数为n-1的算法是。
A.寻找最大项B.同时寻找最大项与最小项C.顺序查找D.有序表的插入
3、下列叙述中正确的是。
A.循环队列是队列的链式存储结构
B.能采用顺序存储的必定是线性结构
C.所有的线性结构都可以采用顺序存储结构
D.具有两个以上指针的链表必定是非线性结构
4、设表的长度为n。
在下列结构所对应的算法中,最坏情况下时间复杂度最低的是
A.希尔排序B.有序链表查找
C.堆排序D.循环链表中寻找最大项
5、下面不属于结构化程序设计原则的是
A.模块化B.自顶向下C.可继承性D.逐步求精
6、对软件系统总体结构图,下面描述中错误的是
A.深度等于控制的层数
B.扇入是一个模块直接调用的其他模块数
C.扇出是一个模块直接调用的其他模块数
D.原子模块一定是结构图中位于叶子节点的模块
7、软件集成测试不采用。
A.一次性组装B.自顶向下增量组装
C.自底向上增量组装D.迭代式组装
8、将数据库的结构划分成多个层次,是为了提高数据库的物理独立性和
A.规范程度B.操作独立性C.逻辑独立性D.降低数据冗余
则实体开发人员和实体项目间的联系是
D.多对多
9、公司的开发人员可以同时参加多个项目的开发,A.一对一B.一对多C.多对一
10、定义学生选修课程的关系模式如下:
SC(S#,Sn,C#,Cn,G.(其属性分别为学号、姓名、课程号、课程名、成绩)则该关系的主键为。
A.S#B.C#C.S#,C#D.S#,C#,G
11、以下叙述中正确的是。
A.C语言源程序即使不编译,也是可以直接运行的
B.一个程序要被称为结构化程序,则只能包含循环结构、选择结构、顺序结构C.使用N-S流程图只能描述简单的算法
D.复杂算法是指不能分解成子任务的算法
12、下面说法正确的是。
A.使用只包含3种基本结构的算法可以求解复杂的问题
B.C语言源程序需要把所有过长的函数保存在单独的源文件中才能通过编译
C.有一些特殊的程序语法错误,只有在运行时才能被发现
D.一些完成简单任务的C语言程序,可以不包含main()函数
13、以下选项中,算术表达式的值与其他
3个不同的是。
A
.3/5.B.3./5C.3/5
D
.3.0/5.0
14、
以下完全正确的一组常量是
。
A
.-12U12.E0B.01a.12e3
C
.0.3L1.2e-1D
.0x0123
15、以下字符常量中,输出后仍是原英文字母的是。
A.'\s'B.'\t'C.'\n'D.'\r'
16、有以下程序:
#include
#include
main()
{
ints;floatn,t,pai;
t=1,pai=0,n=1.0,s=1;
while(fabs(t)>1.0e-6)
{
pai+=t;
n+=2;s=-s;t=s/n;
}
printf("total=%f\n",pai);
}程序所计算的是。
A.1-1/2!
+1/3!
-1/5!
+1/7!
-⋯B.1+1/3+1/5+1/7+1/9-⋯
C.1+1/2+1/3+1/4+1/5-⋯D.1-1/3+1/5-1/7+1/9-⋯
17、有如下程序:
#include
main()
{
inta=0,b=1;
if(a++&&b++)
printf("T");
else
printf("F");
a=b++;
printf("a=%d,b=%d\n",a,b);
}程序运行后的输出结果是。
A.Fa=1,b=2B.Fa=1,b=1C.Ta=0,b=2D.Ta=0,b=118、以下各选项中的代码段执行后,变量y的值不为1的是。
A.intx=5,y=0;if(5)y=1;B.intx=5,y=0;if(x)y=1;
C.intx=10,y=0;if(x=y)y=1;D.intx=5,y=10;if(x=y)y=1;
19、设有定义:
intm=1,n=2;
则以下if语句中,编译时会产生错误信息的是
A.if(m>n)m--elsen--;
B.if(m=n){m++;n++;}
C.if(m<0&&n<0){}
D.if(m>0);elsem++;
20、有以下程序:
#include
voidmain()
{
inti,m=0,n=0,k=0;
for(i=9;i<=11;i++)
switch(i/10)
{case0:
m++;n++;break;
case10:
n++;break;default:
k++;n++;}printf("%d%d%d\n",m,n,k);
}程序运行后的输出结果是。
A.451B.354C.154D.132
21、有下列程序:
#include
main(){inta=-1,b=2;for(;a++&&b--;)printf("%d,%d,",a,b);printf("%d,%d",a,b);}程序执行后的输出结果是。
A.0,1,1,0,1,0B.0,1,1,0C
22、有以下程序:
#include
#defineN4
intfun(inta[][N])
{inti,y=0;
for(i=0;iy+=a[1][i]+a[N-1][i];
for(i=0;ia[i][i]=a[i][i]*a[i][i];
returny;
}
main()
{inty,x[N][N]={{11,21,13,4},
{15,6,17,8},
{9,1,11,12},
{3,4,15,6}};
y=fun(x);
printf("%d,%d,%d",y,x[N-3][N-3],x[N-3][N-2]);
}
程序执行后的输出结果是。
A.74,36,17B.74,6,17C.82,36,17D.82,6,17
23、以下程序拟调用getmax函数,找出4个变量中最大的一个,但程序不完整。
具体程序如下:
#includeintgetmax(intx,inty)
{returnx>yx:
y;}
voidmain()
{
inta,b,c,d,mx;
scanf("%d%d%d%d",&a,&b,&c,&d);
printf("max=%d\n",);
}
以下选项若填入下划线处,不能实现上述功能的是。
A.getmax(getmax(getmax(a,b),c),d)B.getmax(getmax(a,b),getmax(c,d))
C.getmax(a,getmax(b,getmax(c,d)))D.mx=(getmax(a,b),getmax(c,d))
24、以下叙述中错误的是。
A.在同一源程序文件中,函数名必须唯一B.凡是带有返回值的库函数,都不能通过加分号而作为独立的语句出现C.不同函数中的形式参数可以同名
D.返回基本数据类型的库函数的调用,均可以出现在赋值号右边的表达式中
25、关于函数返回值,以下说法错误的是。
A.函数返回值可以是整个数组
B.函数返回值可以是一个数
C.函数返回值可以是一个指针
D.函数返回值可以是一个函数的入口地址
26、有下列程序:
#include
#defineN4
intfun(inta[][N])
{inti,y=0;
for(i=0;iy+=a[0][i]+a[N-1][i];
for(i=1;iy+=a[i][0]+a[i][N-1];
returny;
}
main()
{inty,x[N][N]={{1,2,3,4},
{2,1,4,3},
{3,4,1,2},
{4,3,2,1}};
y=fun(x);
printf("%d",y);
}
程序执行后的输出结果是。
A.40B.35C.30D.3227、设有如下程序段:
(a)inta[2]={0};
(b)intb[]={0};
(c)charC[2]="ABC";
(d)chard="ABC";
则以下叙述正确的是。
A.只有数组a、b的定义是合法的B.数组a、b、c、d的定义都是合法的
C.只有数组c、d的定义是合法的D.只有数组c的定义是合法的
28、有以下程序:
#include
voidswap(int*pa,int*pb)
{
intt;
t=*pa;*pa=*pb;*pb=t;
}
voidfun(int*ds,intn)
{
inti,midx;
midx=0;
for(i=1;iif(ds[i]swap(ds,ds+midx);
}
voidmain()
{
intdata[]={37,31,26,17,61,12},i;
for(i=0;i<5;i++)fun(data+i,6-i);
for(i=0;i<6;i++)printf("%3d",data[i]);printf("\n");
}
程序的运行结果是
B.373126176112
D.121726313761
A.613731261712
C.176112373126
30、有以下程序:
#include
voidfun(doublex,double*y,double*z)
{*y=*y-1.0;*z=*z+x;}
main()
{doublea=2.5,b=9.0,*pa,*pb;
pa=&a;pb=&b;
fun(b-a,pa,pb);printf("%f\n",a);
}程序运行后的输出结果是。
A.8.000000B.9.000000C.1.500000D.10.500000
31、使用数组名作为函数的实参时,传递给形参的是
A.数组第一个元素的值B.数组的首地址
C.数组中全部元素的值D.数组元素的个数
32、有下列程序:
34、有以下程序:
#includemain()
{charb[]="abcdefg",*chp=b;
while(*chp)
{if((ehp-b)%3==0)putchar(*chp);
++chp;
}
}程序的运行结果是。
A.cfB.defgC.adgD.aceg
35、有下列程序:
#include
#include
main()
{charv[4][10],*p[4],*t;
inti,j;
for(i=0;i<4;i++)
{p[i]=v[i];
scanf("%s",p[i]);
}
for(i=0;i<3;i++)
for(j=i+1;j<4;j++)if(strcmp(p[i],p[j])>0)
{t=p[i];p[i]=p[j];p[j]=t;}for(i=0;i<4;i++)
printf("%s",p[i]);
}
程序执行时若输入:
WelcomeyoutoBeijing<回车>,则输出结果是
A.BeijingWelcometoyouB.BeijingtoWelcomeyou
C.WelcomeyoutoBeijingD.toyouBeijingWelcome
36、以下涉及字符串数组、字符指针的程序片段,没有编译错误的是。
A.charline[];line="=============":
B.char*name[10],*str;name="HelloWorld";
C.charstr1[10],str2[10]="prog.c";str1=str2;
D.charname[10],*str="HelloWorld";
37、若要使int型变量a、b、c、d的值都为0,以下写法中错误的是。
A.autointa,b,c,d;a=b=c=d=0;B.autointa=b=c=d=0;
C.autointa=0,b=a,c=b,d=c;D.staticinta,b,c,d;
38、有如下程序:
#include
main()
{
inta=1,b;
b=(a>>2)%3;
printf("%d,%d",a,b);
}
程序运行后的输出结果是。
A.1,1B.2,0C.1,0D.2,1
39、有下列程序:
#include
main()
{intx=3,y=5,z1,z2;
z1=y^x^y:
z2=x^y^x;
printf("%d,%d\n",z1,z2);
}
程序执行后的输出结果是。
A.7,7B.5,3C.8,8D.3,5
40、有下列程序:
#include
#include
typedefstructstu{
charname[9];
chargender;
intscore;
}STU;
STUf(STUa)
{STUc={"Sun",'f',90};
strcpy(a.name,c.name);
a.gender=c.gender;
a.score=c.score;
returna;
}
main()
{STUa={"Zhao",'m',85},b={"Qian",'f',95};
b=f(a);
printf("%s,%c,%d,%s,%c,%d",a.name,a.gender,a.score,b.name,b.gender,b.score);
}
程序执行后的输出结果是。
A.Zhao,m,85,Sun,f,90B.Zhao,m,85,Qian,f,95
C.Sun,f,90,Sun,f,90D.Sun,f,90,Qian,f,95二、程序填空题
41、下列给定程序中,函数fun的功能是:
求ss所指字符串数组中长度最短的字符串所在的行下标,作为函数值返回,并把其串长放在形参n所指的变量中。
ss所指字符串数组中共有M个字符串,且串长小于N。
请在程序的下划线处填入正确的内容,使程序得出正确的结果。
注意:
部分源程序给出如下。
不得增行或删行,也不得更改程序的结构!
试题程序:
#include
#include
#defineM5
#defineN20
intfun(char(*ss)[N],int*n){inti,k=0,len=N;
for(i=0;i<;i++)
{len=strlen(ss[i]);
if(i==0)*n=len;
if(len*n)
{*n=len;
k=i;
return();
}
main()
{char
ss[M][N]={"shanghai","guangzhou","beijing","tianjing","chongqing"};intn,k,i;
printf("\nTheoriginalstringsare:
\n");
for(i=0;ik=fun(ss,&n);
printf("\nThelengthofshorteststringis:
%d\n",n);printf("\nTheshorteststringis:
%s\n",ss[k]);
}
三、程序修改题
42、下列给定程序中函数fun的功能是:
将tt所指字符串中的小写字母全部改为对应的大写字母,其他字符不变。
例如,若输入“Ab,cD”,则输出“AB,CD”。
请改正程序中的错误,使它能得出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构
试题程序:
#include
>
#include
>
#inelude
>
char*fun(chartt[]){inti;for(i=0;tt[i];i++)
tt[i]+=32;return(tt);
}
main()
{
chartt[81];
printf("\nPleaseenterastring:
");gets(tt);
printf("\nTheresultstringis:
\n%s",fun(tt));}
四、程序设计题
(共24分)
43、编写函数fun,其功能是:
将所有大于1小于整数m的非素数存入xx所指数组中,非素数的个数通过k返回。
例如,若输入17,则应输出:
46891012141516。
注意:
部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句试题程序:
#include
#include
#include
voidfun(intm,int*k,intxx[])
{
}
voidmain()
{
intm,n,zz[100];system("CLS");
printf("\nPleaseenteranintegernumberbetween10and100:
");scanf("%d",&n);
fun(n,&m,zz);
printf("\n\nThereare%dnon-primenumberslessthan%d:
",m,n);for(n=0;n}
答案:
一、选择题
1、B
[解析]在树结构中,一个节点所拥有的后件个数称为该节点的度,所有节点中最大的度称为树的度,树中的节点数即为树中所有节点的度数之和再加1。
假设本题中度为2的节点数为n,总节点数为m,m=3×3+1×4+n×2+1,叶子节点数15=m-(3+4+n),得n=8,则m=9+4+8×2+1=30。
故答案为B选项。
2、A
[解析]线性表的长度为n,在最坏情况下,寻找最大项的比较次数为n-1。
故答案为A选项。
3、C
[解析]循环队列就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,它是队列的顺序存储结构形式。
对于满二叉树与完全二叉树也可以按层次进行顺序存储。
有两个以上指针的链表,是线性还是非线性,取决于指针域的指向。
所有的线性结构都可以采用顺序存储结构。
故
答案为C选项。
4、D
[解析]最坏情况下,希尔排序所需要比较次数为n1.5,循环链表中寻找最大项需要n-1次,有序链表查找需要n次,堆排序次数为nlog2n。
因此循环链表中寻找最大项复杂度最低。
故答案为D选项。
5、C
[解析]结构化程序设计方法的原则包括:
自顶向下、逐步求精、模块化、限制使用goto语句。
故答案为C选项。
6、B
[解析]软件系统总体结构图中,扇入是指调用一个给定模块的模块个数,扇出是指由一个模块直接调用的其他模块数,深度指控制的层数,原子模块指树中位于叶子节点的模块。
故答案为B选项。
7、D
[解析]集成测试时将模块组装成程序通常采用两种方式:
非增量方式组装和增量方式组装。
非增量方式也称为一次性组装方式,是将测试好的每一个软件单元一次组装在一起再进行整体测试;增量方式是将已测试好的模块逐步组装成较大系统,在组装过程中边连接边测试,以发现连接过程中产生的问题。
增量方式包括自顶向下、自底向上、自顶向下与自底向上相结合的混合增量方法。
故答案为D选项。
8、C
[解析]数据库系统通常采用三级模式结构并且提供两级映射功能,其中的外模式/模式映射保证了数据库系统具有较高的逻辑独立性,而模式/内模式映射保证了数据库系统具有较高的物理独立性。
故答案为C选项。
9、D
[解析]开发人员可以参加多个项目,而项目开发人员不止一个,那么开发人员和项目之间是多对多关系。
故答案为D选项。
10、C
[解析]本题关系模式SC(S#,Sn,C#,Cn,G)(其属性分别为学号、姓名、课程号、课程名、成绩),单依靠学号不能标识唯一元组,需要学号、课程号共同来标识唯一元组,因此学号、课程号(S#、C#)为该关系的主键。
故答案为C选项。
11、B
[解析]C语言源程序必须经过编译、链接,生成二进制可执行文件,才可以运行,选项A错误;由3
种基本结构:
即循环结构、选择结构、顺序结构构成的程序称为结构化程序,选项B正确;使用N-S
流程图可以描述任何算法,选项C错误;可以将复杂算法分解成多个子任务来解决,这种程序的设计方法称为模块化设计,选项D错误。
故本题答案为B选项。
12、A
[解析]由3种基本结构,即循环结构、选择结构、顺序结构构成的算法称为结构化算法,由3种基本
结构组成的算法可以解决任何复杂的问题,选项A正确;C语言源程序不需要把过长的函数单独保存也可以编译,选项B错误;C语言程序需要经过编译、链接生成二进制文件才可以运行,其中编译阶段可以检查出语法错误,选项C错误;每个C语言程序无论简单还是复杂,都必须包含main()函数,选项D错误。
故本题答案为A选项。
13、C
[解析]C语言中除法运算有两个运算数,两个整数的除法运算会舍去小数部分,结果为整数。
由于C
语言中浮点数的小数形式必须要有小数点,所以选项