二级C语言真题.docx

上传人:b****8 文档编号:23831027 上传时间:2023-05-21 格式:DOCX 页数:32 大小:40.82KB
下载 相关 举报
二级C语言真题.docx_第1页
第1页 / 共32页
二级C语言真题.docx_第2页
第2页 / 共32页
二级C语言真题.docx_第3页
第3页 / 共32页
二级C语言真题.docx_第4页
第4页 / 共32页
二级C语言真题.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

二级C语言真题.docx

《二级C语言真题.docx》由会员分享,可在线阅读,更多相关《二级C语言真题.docx(32页珍藏版)》请在冰豆网上搜索。

二级C语言真题.docx

二级C语言真题

二级C语言真题2017年09月-(3)

(总分:

100.00,做题时间:

90分钟)

一、选择题(总题数:

40,分数:

40.00)

1.设某棵树的度为3,其中度为3,1,0的节点个数分别为3,4,15。

则该树中总节点数为。

(分数:

1.00)

A.22

B.30V

C.35

D.不可能有这样的树

解析:

[解析]在树结构中,一个节点所拥有的后件个数称为该节点的度,所有节点中最大的度称为树的度,树中的节点数即为树中所有节点的度数之和再加1。

假设本题中度为2的节点数为n,总节点数为m,

m=3<3+lX4+nX2+1,叶子节点数15=m-(3+4+n),得n=8,_则m=9+4+8<2+1=3Q故答案为B选项。

2.线性表的长度为n。

在最坏情况下,比较次数为n-1的算法是。

(分数:

1.00)

A.寻找最大项V

B.同时寻找最大项与最小项

C.顺序查找

D.有序表的插入

解析:

[解析]线性表的长度为n,在最坏情况下,寻找最大项的比较次数为n-1。

故答案为A选项。

3.下列叙述中正确的是。

(分数:

1.00)

A.循环队列是队列的链式存储结构

B.能采用顺序存储的必定是线性结构

C.所有的线性结构都可以采用顺序存储结构V

D.具有两个以上指针的链表必定是非线性结构

解析:

[解析]循环队列就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,它是队列的顺序存储结构形式。

对于满二叉树与完全二叉树也可以按层次进行顺序存储。

有两个以上指针的链表,是线性还是非线性,取决于指针域的指向。

所有的线性结构都可以采用顺序存储结构。

故答案为C

选项。

4.设表的长度为n。

在下列结构所对应的算法中,最坏情况下时间复杂度最低的是。

(分数:

1.00)

A.希尔排序

B.有序链表查找

C.堆排序

D.循环链表中寻找最大项V

解析:

[解析]最坏情况下,希尔排序所需要比较次数为n1.5,循环链表中寻找最大项需要n-1次,有序链表查找需要n次,堆排序次数为nlog2n。

因此循环链表中寻找最大项复杂度最低。

故答案为D选项。

5.下面不属于结构化程序设计原则的是。

(分数:

1.00)

A.模块化

B.自顶向下

C.可继承性V

D.逐步求精

解析:

[解析]结构化程序设计方法的原则包括:

自顶向下、逐步求精、模块化、限制使用goto语句。

答案为C选项。

6.对软件系统总体结构图,下面描述中错误的是。

(分数:

1.00)

A.深度等于控制的层数

B.扇入是一个模块直接调用的其他模块数V

C.扇出是一个模块直接调用的其他模块数

D.原子模块一定是结构图中位于叶子节点的模块

解析:

[解析]软件系统总体结构图中,扇入是指调用一个给定模块的模块个数,扇出是指由一个模块直接

调用的其他模块数,深度指控制的层数,原子模块指树中位于叶子节点的模块。

故答案为B选项。

7.软件集成测试不采用。

(分数:

1.00)

A.一次性组装

B.自顶向下增量组装

C.自底向上增量组装

D.迭代式组装V

解析:

[解析]集成测试时将模块组装成程序通常采用两种方式:

非增量方式组装和增量方式组装。

非增量方式也称为一次性组装方式,是将测试好的每一个软件单元一次组装在一起再进行整体测试;增量方式是将已测试好的模块逐步组装成较大系统,在组装过程中边连接边测试,以发现连接过程中产生的问题。

量方式包括自顶向下、自底向上、自顶向下与自底向上相结合的混合增量方法。

故答案为D选项。

8.将数据库的结构划分成多个层次,是为了提高数据库的物理独立性和。

(分数:

1.00)

A.规范程度

B.操作独立性

C.逻辑独立性V

D.降低数据冗余

解析:

[解析]数据库系统通常采用三级模式结构并且提供两级映射功能,其中的外模式/模式映射保证了

数据库系统具有较高的逻辑独立性,而模式/内模式映射保证了数据库系统具有较高的物理独立性。

故答案为C选项。

9.公司的开发人员可以同时参加多个项目的开发,则实体开发人员和实体项目间的联系是。

(分数:

1.00)

A.一对一

B.一对多

C.多对一

D.多对多V

解析:

[解析]开发人员可以参加多个项目,而项目开发人员不止一个,那么开发人员和项目之间是多对多关系。

故答案为D选项。

10.定义学生选修课程的关系模式如下:

SC(S#,Sn,C#,Cn,G)(其属性分别为学号、姓名、课程号、课程名、成绩)

则该关系的主键为。

(分数:

1.00)

A..S#

B..C#

C.S#,C#V

D.S#,C#,G

解析:

[解析]本题关系模式SC(S#,Sn,C#,Cn,G)(其属性分别为学号、姓名、课程号、课程名、成绩),单依靠学号不能标识唯一元组,需要学号、课程号共同来标识唯一元组,因此学号、课程号(S#、C#)为该

关系的主键。

故答案为C选项。

11.以下叙述中正确的是。

(分数:

1.00)

A.C语言源程序即使不编译,也是可以直接运行的

B.一个程序要被称为结构化程序,则只能包含循环结构、选择结构、顺序结构V

C.使用N-S流程图只能描述简单的算法

D.复杂算法是指不能分解成子任务的算法

解析:

[解析]C语言源程序必须经过编译、链接,生成二进制可执行文件,才可以运行,选项A错误;由

3种基本结构:

即循环结构、选择结构、顺序结构构成的程序称为结构化程序,选项B正确;使用N-S流

程图可以描述任何算法,选项C错误;可以将复杂算法分解成多个子任务来解决,这种程序的设计方法称

为模块化设计,选项D错误。

故本题答案为B选项。

12.下面说法正确的是。

(分数:

1.00)

A.使用只包含3种基本结构的算法可以求解复杂的问题V

B.C语言源程序需要把所有过长的函数保存在单独的源文件中才能通过编译

C.有一些特殊的程序语法错误,只有在运行时才能被发现

D.—些完成简单任务的C语言程序,可以不包含main()函数

解析:

[解析]由3种基本结构,即循环结构、选择结构、顺序结构构成的算法称为结构化算法,由3种基

本结构组成的算法可以解决任何复杂的问题,选项A正确;C语言源程序不需要把过长的函数单独保存也

可以编译,选项B错误;C语言程序需要经过编译、链接生成二进制文件才可以运行,其中编译阶段可以检查出语法错误,选项C错误;每个C语言程序无论简单还是复杂,都必须包含main()函数,选项D错误。

故本题答案为A选项。

13.以下选项中,算术表达式的值与其他3个不同的是。

(分数:

1.00)

A.3/5.

B.3./5

C.3/5V

D.3.0/5.0

解析:

[解析]C语言中除法运算有两个运算数,两个整数的除法运算会舍去小数部分,结果为整数。

由于

C语言中浮点数的小数形式必须要有小数点,所以选项A(5.)、B(3.)和D(3.0和5.0)都是浮点数,选项A、

B运算时自动将另一个整数转换成浮点数,然后再运算。

选项D中两个都是浮点数,浮点数的除法运算结

果还是浮点数,所以本题中选项A、B、D运算结果是浮点数,选项C运算结果是整数。

故本题答案为C选

项。

14.以下完全正确的一组常量是。

(分数:

1.00)

A.-12U12.E0

B.01a.12e3

C.0.3L1.2e-1

D.0x0123.V

解析:

[解析]实数的指数形式如下:

尾数E(e)整型指数,其中字母E或e之前必须要有数字,E或e后面

的指数必须是整数;整型常量中U表示无符号类型,L表示长整型,0x开头表示十六进制形式的整数。

项A中,由于U表示无符号类型,只能表示正整数,所以-12U错误;选项B中a不合法;选项C中L只能

修饰整数,所以0.3L是错误的;选项D中,0x0表示十六进制形式的整数0,123.表示实数,省略了小数点后面的0,正确。

故本题答案为D选项。

15.以下字符常量中,输出后仍是原英文字母的是。

(分数:

1.00)

A."/s"V

B."/t"

C."/n"

D."/r"

解析:

[解析]在本题中,选项B、CD都是转义字符常量,其中"/t"表示代表Tab键,"/n"表示回车换行,"/r"表示回车符。

选项A中的"/s",其中""是转义字符,不显示;"s"可以原样输出。

故本题答案为A选项。

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);

}

程序所计算的是。

(分数:

1.00)

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-…V

解析:

[解析]main()函数首先定义整型变量s,初值为1,定义float类型的n、t、pai,其中n初值1.0,

t初值为1,pai初值为0owhile循环判断t的绝对值(fabs()为求float类型值的绝对值)是否大于1.0*10-6,若t的绝对值大于1.0*10-6,那么执行下列语句:

pai+=t;n+=2;s=-s;t=s/n;所以每轮循环pai累加s/n(其中s是上一轮s的相反数,n是上一轮n累加2的值)。

第一轮循环时,pai被赋值为1,s是正数,所以最终pai的计算结果是:

1-1/3+1/5-1/7+1/9-……故本题答案为D选项。

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);

}

程序运行后的输出结果是o

(分数:

1.00)

A.Fa=1,b=2V

B.Fa=1,b=1

C.Ta=0,b=2

D.Ta=0,b=1

解析:

[解析]main()函数首先定义整型变量a、b,分别赋初值为0、1;a++&&b++f先执行a++,其中a++

是后缀自增运算符,整个a++表达式的值为0,由a++&&b++的短路原则,b++不再执行,所以if语句不成

立,执行else语句,输出"F",此时a完成自增运算,值为1;接着执行a=b++,同理后缀自增运算符使得先将b的值赋给a(a的值为1),再执行b++,b的值为2,最终程序输出:

“Fa=1,b=2'。

故本题答案为A选项。

18.以下各选项中的代码段执行后,变量y的值不为1的是o

(分数:

1.00)

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;V

D.intx=5,y=10;if(x=y)y=1;

解析:

[解析]选项A的if条件表达式5的值为真,执行y=1,y的值为1;选项B的if条件表达式x的值为5,也是真,执行y=1,y的值为1;选项C的if条件表达式x=y是赋值语句,将y的值0赋给x,表达式的值为0,if语句不执行,y值为0;选项D的if条件表达式x=y是赋值语句,将y的值10赋给x,表达式的值为10,执行y=1,y的值为1。

故本题答案为C选项。

19.设有定义:

intm=1,n=2;

则以下if语句中,编译时会产生错误信息的是。

(分数:

1.00)

A.if(m>n)m--elsen--;V

B.if(m=n){m++;n++;}

C.if(mv0&&nv0){}

D.if(m>0);elsem++;

解析:

[解析]选项A中,if语句的语句块m--后面少了分号,不合法,编译会出错,其他选项的语句都是正确的。

故本题答案为A选项。

20.有以下程序:

#includevstdio.h>

voidmain()

{

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

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

switch(i/10)

{case0:

m++;n++;break;

case10:

n++;break;

default:

k++;n++;

}

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

}

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

(分数:

1.00)

A.451

B.354

C.154

D.132V

解析:

[解析]由程序可知:

for语句的循环体语句是switch语句;循环体变量i初值为9,取值分别是i=9、10、11。

当i=9时,表达式i/10为0,执行case0语句:

m++n++;break;此时m的值为1,n的值为1;当i=10时,表达式i/10为1,执行default语句:

k++;n++;此时k的值为1,n的值为2;当i=11时,表达式i/10为1,执行default语句:

k++;n++;此时k的值为2,n的值为3,循环结束,程序输出结果为:

132。

故本题答案为D。

21.有下列程序:

#includevstdio.h>

main()

{inta=-1,b=2;

for(;a++&&b--;)

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

}

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

(分数:

1.00)

A.0,1,1,0,1,0

B.0,1,1,0

C.0,1,1,1V

D.0,1,1,1,1,1

解析:

[解析]for循环中,表达式a++&&b--的值决定循环是否执行。

第一轮循环时,a初值为-1,b初值为2,由于a++是后缀自增运算符,b--是后缀自减运算符,a++&&b--的值等价于-1&&2,结果为1;执行for循环的循环体,此时a的值为0,b的值为1,输出a、b的值为0、1。

第二轮循环时,a的初值为0,b的初值为1,表达式a++&&b--首先执行a++,结果为0,a自增为1;由于短路原则,b--不再执行,整个表达式的值为0,for循环终止;执行循环体外的printf()语句,输出1、1。

故本题答案为C选项。

22.有以下程序:

#include

#defineN4

intfun(inta[][N])

{inti,y=0;

for(i=0;i

y+=a[1][i]+a[N-1][i];

for(i=0;i

a[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]);

}

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

(分数:

1.00)

A.74,36,17V

B.74,6,17

C.82,36,17

D.82,6,17

解析:

[解析]main()函数首先定义一个二维数组x,它是N行N列的整型二维数组,然后将数组x传给函

数fun()。

在函数fun()中,第一个for循环将数组a中,行下标为1的所有元素与行下标为N-1(3)的所

有元素累加赋给y,所以y的值为15+6+17+8+3+4+15+6=74;第二个for循环将对角线上的三个元素:

a[0][0]a[1][1]、a[2][2]分别平方后赋给自身,由于a是数组x的地址,对a数组元素的修改会同步修改实参x

的元素值,a[0][0]为121,a[1][1]为36,a[2][2]为121,调用完fun()函数后,程序输出y、x[1][1]、

x[1][2]的值分别是:

74、36、17。

故本题答案为A选项。

23.以下程序拟调用getmax函数,找出4个变量中最大的一个,但程序不完整。

具体程序如下:

#include

intgetmax(intx,inty)

{returnx>yx:

y;}

voidmain()

{

inta,b,c,d,mx;

scanf("%d%d%d%d",&a,&b,&c,&d);

printf("max=%d/n",);

}以下选项若填入下划线处,不能实现上述功能的是。

(分数:

1.00)

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))V

解析:

[解析]getmax()函数接收两个整型变量x、y,使用条件运算符返回x和y中的较大值;main()函

数首先输入a、b、c、d四个整数值,然后通过调用getmax()函数,输出它们的最大值。

假设x、y是整数,选项A中,首先执行getmax(a,b),返回a和b中的较大值x,再执行getmax(x,c),返回x、c中的较大值y,最后执行getmax(y,d),返回y、d中的较大值,满足题意,正确;选项B中,首先执行getmax(a,b),返回a、b的较大值x,再执行getmax(c,d),返回c、d中的较大值y,最后执行getmax(x,y),返回x、y中的较大值,正确;选项C中,首先执行getmax(c,d),返回c、d的较大值x,再执行getmax(b,x),返回b、x中的较大值y,最后执行getmax(a,y),返回a、y中的较大值,正确;选项D中,首先执行getmax(a,b),返回a、b的较大值x,再执行getmax(c,d),返回c、d中的较大值y,最后执行逗号表达式(x,y),返回值为y,不满足题意。

故本题答案为D选项。

24.以下叙述中错误的是。

(分数:

1.00)

A.在同一源程序文件中,函数名必须唯一

B.凡是带有返回值的库函数,都不能通过加分号而作为独立的语句出现V

C.不同函数中的形式参数可以同名

D.返回基本数据类型的库函数的调用,均可以出现在赋值号右边的表达式中

解析:

[解析]在同一源文件中,函数名必须唯一,选项A叙述正确。

函数的调用有两种形式:

(1)出现在

表达式中,有可以出现在赋值号右边的表达式中;

(2)作为独立的语句完成某种操作。

因此选项B叙述错误,

选项D叙述正确。

不同函数的形参可以同名,它们的作用域都限制在各自的函数体内,选项C叙述正确。

故本题答案为B选项。

25.关于函数返回值,以下说法错误的是。

(分数:

1.00)

A.函数返回值可以是整个数组V

B.函数返回值可以是一个数

C.函数返回值可以是一个指针

D.函数返回值可以是一个函数的入口地址

解析:

[解析]函数的返回值可以是整数、实数、字符、指针、结构体或一个函数的地址等,但不能是整个数组,C语言中对数组的操作都是通过下标引用或指针,不能整体操作。

故本题答案为A选项。

26.有下列程序:

#include

#defineN4

intfun(inta[][N])

{inti,y=0;

for(i=0;i

y+=a[0][i]+a[N-1][i];

for(i=1;i

y+=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);

}

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

(分数:

1.00)

A.40

B.35

C.30V

D.32

解析:

[解析]main()函数首先定义一个二维数组x,它是N行N列整型数组,然后调用fun函数,传入数组x;un函数中第一个for循环将二维数组a的行下标为0(第一行)的所有元素与行下标为N-1(最后一行)的所有元素累加赋给y;第二个for循环将二维数组a的列下标为0(第一列)且行下标为1、2的元素与列下标为N-1(最后一列)且行下标为1、2的所有元素累加再次赋给y,最后将y返回。

所以main()函数调用完fun()函数后,y的值等价于:

1+2+3+4+4+3+2+I+2+3+3+2,结果为30。

故本题答案为C选项。

27.设有如下程序段:

(a)inta[2]={0};

(b)intb[]={0};

(c)charC[2]="ABC";

(d)chard="ABC";

则以下叙述正确的是。

(分数:

1.00)

A.只有数组a、b的定义是合法的V

B.数组a、b、c、d的定义都是合法的

C.只有数组c、d的定义是合法的

D.只有数组c的定义是合法的

解析:

[解析](a)中定义一个整型数组a,它包含两个整型元素,两个元素都初始化为0,正确;(b)中定

义一个整型数组b,数组大小为1,包含一个元素0,正确;(c)中定义字符数组c,它包含2个字符元素,初始化的字符串中包含3个字符,不合法;(d)中定义一个字符d,使用一个字符串初始化,不合法。

故本

题答案为A选项。

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;i

if(ds[i]

swap(ds,ds+midx);

}

voidmain()

{

intdata[]={37,31,26,17,61,12},i;

for(i=0;iv5;i++)

fun(data+i,6-i);

for(i=0;iv6;i++)

printf("%3d",data[i]);

printf("/n");

}

程序的运行结果是。

(分数:

1.00)

A.613731261712

B.373126176112

C.176112373126

D.12172631

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 军事政治

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1