全国计算机等级考试二级C语言真题题库2+Word文件下载.docx
《全国计算机等级考试二级C语言真题题库2+Word文件下载.docx》由会员分享,可在线阅读,更多相关《全国计算机等级考试二级C语言真题题库2+Word文件下载.docx(16页珍藏版)》请在冰豆网上搜索。
特别的,当队尾指针rear=m+1时,置rear=1。
退队运算时,排头指针进1(即front+1),然后删除front指针指向的位置上的元素,当排头指针front=m+1时,置front=1。
从排头指针front指向的后一个位置直到队尾指针rear指向的位置之间所有的元素均为队列中的元素。
如果rear-front>0,则队列中的元素个数为rear-front个;
如果rear-front<0,则队列中的元素个数为rear-front+m。
该题中m-1<m,即rear-front<0,则该循环队列中的元素个数为(m-1)-m+m=m-1。
4.某棵树只有度为3的节点和叶子节点,其中度为3的节点有8个,则该树中的叶子节点数为()。
A.15
B.16
C.17
D.不存在这样的树
[解析]树是一种简单的非线性结构,直观地来看,树是以分支关系定义的层次结构。
在树结构中,一个节点所拥有的后件个数称为该节点的度,所有节点中最大的度称为树的度。
由于只有度为3的节点和叶子节点,可知最后一层都为叶子节点,倒数第二层一部分节点度为3,一部分为叶子节点,其余的节点的度均为3,计算度为3的节点总数(33-1-1)/2<8<(34-1-1)/2可知,树共有4层,前两层有度为3的节点(33-1-1)/2=4个,第三层有33=9个节点,其中4个是度为3的节点,5个是叶子节点,所以该树中的叶子节点数为4×
3+5=17。
故选C选项。
5.某二叉树共有530个节点,其中度为2的节点有250个,则度为1的节点数为()。
A.29
B.30
C.249
D.251
[解析]在树结构中,一个节点所拥有的后件个数称为该节点的度,所有节点中最大的度称为树的度。
对任何一棵二叉树,度为0的节点总是比度为2的节点多一个。
二叉树节点总数为530,度为2的节点有250个,则度为0的节点有251个,那么度为1的节点个数为530-250-251=29。
6.若某二叉树中的所有节点值均大于其左子树上的所有节点值,且小于右子树上的所有节点值,则该二叉树遍历序列中有序的是()。
A.前序序列
B.中序序列
C.后序序列
D.以上说法均可以
[解析]二叉树遍历可以分为3种:
前序遍历(访问根节点在访问左子树和访问右子树之前)、中序遍历(访问根节点在访问左子树和访问右子树两者之间)、后序遍历(访问根节点在访问左于树和访问右子树之后)。
由于节点值均大于其左子树上的所有节点值,且小于右子树上的所有节点值,那么只要遍历时访问根节点在访问左于树和右子树之间,遍历序列有序,即中序序列有序。
故选B选项。
7.将C语言的整数设为整数类I,则下面属于类I实例的是()。
A.-103
B.10E3
C.10.3
D.“0103”
[解析]整数类实例包括:
十进制常量用0~9表示,不能以0开头;
八进制常量用0~7表示,必须用0开头;
十六进制常量用0~9和A~F(a~f)表示,必须以0x或0X开头。
本题中B选项是科学计数法表示的浮点数实例,C选项是浮点数实例,D选项是字符串实例。
8.下列叙述中正确的是()。
A.软件包括程序、数据和文档
B.软件包括程序和数据
C.软件包括算法和数据结构
D.软件包括算法和程序
[解析]计算机软件由两部分组成:
一是机器可执行的程序和数据;
二是机器不可执行的,与软件开发、运行、维护、使用等有关的文档。
9.软件生命周期是指()。
A.软件的定义和开发阶段
B.软件的需求分析、设计与实现阶段
C.软件的开发阶段
D.软件产品从提出、实现、使用维护到停止使用退役的过程
[解析]通常把软件产品从提出、实现、使用、维护到停止使用、退役的过程称为软件生命周期。
A、B、C选项均为生命周期的一部分。
故选D选项。
10.下列叙述中正确的是()。
A.数据库系统可以解决数据冗余和数据独立性问题,而文件系统不能
B.数据库系统能够管理各种类型的文件,而文件系统只能管理程序文件
C.数据库系统可以管理庞大的数据量,而文件系统管理的数据量较少
D.数据库系统独立性较差,而文件系统独立性较好
[解析]数据管理技术的发展经历了3个阶段:
人工管理阶段、文件系统阶段和数据库系统阶段。
三者各自的特点如下表所示。
数据库系统可以解决数据冗余和数据独立性问题,而文件系统不能。
数据库系统和文件系统的区别不仅在于管理的文件类型与数据量的多少,数据库系统具有高度的物理独立性和一定的逻辑独立性,而文件系统独立性较好。
故本题答案为A选项。
11.关于程序模块化,以下叙述错误的是()。
A.程序模块化可以提高程序运行的效率
B.程序模块化可以提高程序编制的效率
C.程序模块化可以提高程序代码复用率
D.程序模块化可以提高调试程序的效率
[解析]模块化程序的优点:
(1)易于维护和复用,可以提高程序编制的效率;
(2)易于分工合作;
(3)易于模块化调试测试。
模块化程序的副作用:
(1)可能会降低程序运行效率;
(2)设计的前期工作需要多花费时间。
可知B,C,D选项正确。
答案为A选项。
12.以下正确使用C语言标识符的是()。
A.&3
B.#3
C._3
D.-3
[解析]C语言合法标识名的命名规则是:
(1)标识符由字母、数字和下划线组成;
(2)第一个字符不能是数字只能是字母或下划线。
A选项的第一个字符为&,非法;
B选项,第一个字符为#,非法;
D选项,第一个字符为-,非法。
答案为C选项。
13.若有定义:
inta,b,c;
以下程序段的输出结果是()。
a=11;
b=3;
c=0;
printf(”%d\n”,c=(a/b,a%b));
A.2
B.0
C.3
D.1
[解析]C语言中,逗号运算符可以把两个以上(包含两个)的表达式连接成一个表达式。
逗号运算符的优先级是所有运算符中级别最低的,逗号运算符保证左边的子表达式运算结束后才进行右边的子表达式的运算。
也就是说,逗号运算符是一个序列点,其左边所有副作用都结束后,才对其右边的子表达式进行运算,并以最右边表达式的值作为整个逗号表达式的值。
因此变量c的值为a%b即11%3=2。
故答案为A选项。
14.以下选项中合法的C语言常量是()。
A.’C-STR’
B.2014.1
C.”\1.0
D.2EK
[解析]所谓常量是指在程序运行的过程中,其值不能被改变的量。
在C语言中,有整型常量、实型常量、字符常量和字符串常量等类型。
A选项是字符串,但使用单引号,错误;
C、D选项,为实型常量中指数形式,但指数形式e(E)之前必须是数字,之后必须为整数,错误。
故答案为B选项。
15.设有定义:
intx,y,z;
,且各变量已赋正整数值,则以下能正确表示代数式“
”的C语言表达式是()。
A.1.0/x/y/z
B.1/x*y*z
C.1/(x*y*z)
D.1/x/y/(double)z
[解析]代数表达式1/(x·
y·
z)是小数,转为C语言的表达式必须是小数。
A选项由于1.0为浮点数,计算结果自动转换为浮点数,故A选项正确。
B、C、D选项的表达式均为0。
16.有以下程序:
当执行程序时,按下列方式输入数据(从第1列开始,代表回车,注意:
回车也是一个字符)12<CR>34<CR>则输出结果是()。
A.
B.12
C.1234
D.
[解析]scanf()函数从标准输入输出中读入两个字符’1’、’2’分别赋给变量a、b,遇到回车自动结束,但回车符已经存入缓冲区,函数getchar()将从中接受了回车符,故c被赋值为回车符,第二个getchar()读人字符’3’,因此a=’1’,b=’2’,c=,d=’3’。
17.有以下程序:
执行时输入:
123<回车>,则输出结果是()。
A.2,2,3,4,4,4,
B.2,3,4,
C.2,2,3,4,
D.2,3,3,4,5,6,
[解析]continue语句的作用是跳过循环体中剩余的语句而强行执行下一次循环。
在switch…case语句中,如果没有break会导致多个分支重叠。
因此,输人1,2,3,则执行case1:
printf("
%d"
,b+1);
case2:
%d,"
continue;
后结束。
2则执行case2:
printf(”%d,"
3则执行default:
得到的结果是2,2,3,4。
故答案为C选项。
18.有以下程序:
3.62.4<回车>,则输出结果是()。
A.2.400000
B.1.500000
C.1.600000
D.2.000000
[解析]题目中程序执行过程中关键语句z=x/y的结果为:
z=1.5,if条件成立,得x=2.4,y=2.4,z=1.0,下一次循环if条件不成立跳出循环,按照格式打印y值为2.400000。
19.有以下程序:
0后,则输出结果是()。
A.5,
B.0,0,0,0,0,
C.0,1,2,3,4,
D.0,1,
[解析]scanf(”%c”,&c),输入的字符,题目中输入了0,字符0对应于ASCII码为48,因此for循环中,i的范围从0~5,均小于48,if条件不成立,直接执行下一条语句printf,因此得到的结果是0,1,2,3,4。
20.以下程序拟实现计算sum=1+1/2+1/3+…+1/50。
程序运行后,不能得到正确结果,出现问题的语句是()。
A.sum+=1/i;
B.while(i<50);
C.sum=1.0;
D.i++;
[解析]选项A中,sum+=1/i;
i为整型,因此1/i是整型类型,当1/i有小数时,小数部分会被截断。
因此1/i结果始终为0,导致结果出错,应改为sum+=1.0/i。
因此答案为A选项。
21.若有定义语句:
doublea,*p=&a;
以下叙述中错误的是()。
A.定义语句中的*号是一个间址运算符
B.定义语句中的*号是一个说明符
C.定义语句中的p只能存放double类型变量的地址
D.定义语句中*p=&a把变量a的地址作为初值赋给指针变量p
[解析]指针运算符(通常称为间接引用运算符:
indirectionoperator或复引用运算符:
dereferencingoperator)返回其操作数(即一个指针)所指向的对象的值。
定义语句中的*号不是一个间址运算符,而是定义指针变量的说明符,因此,A项错误,B选项正确,原则上说变量p可以放double兼容性的变量地址,C选项正确,根据指针的赋值运算,可知D选项正确。
22.关于函数返回值,以下叙述正确的是()。
A.函数可以返回整个结构体,即使结构体中有数组
B.函数只能返回基本数据类型的数值或指针
C.函数不可以返回一个数组
D.函数不能没有返回值
[解析]函数返回值可以为整型、实型、字符型、指针和结构类型,也可以没有返回值,因此A选项正确,可以返回数组指针,因此可知B、C、D选项错误。
放答案为A选项。
23.有以下程序:
程序运行后的输出结果是()。
A.24
B.720
C.120
D.6
[解析]函数fun()求数组指定返回的元素的积。
函数fun(a,3)求的是数组a[0]~a[3]的积。
因此结果为2*3*4*5=120,故答案为C选项。
24.若有语句:
inta[3][4],(*p)[4];
p=a;
,则以下选项中叙述错误的是()。
A.系统将开辟一个名为p的二维数组,p[0][0]中的值即为a[0][0]中的值
B.p+1代表a[1][0]的地址
C.p中将存放a数组的首地址
D.p+2代表a数组最后一行的首地址
[解析](*p)[4]定义了一个数组指针。
p可以指向类似于arry[][4]的数组,题设中,p不是一个二维数组,只是可以指向这类二维数组,因此A选项错误。
p+1代表了第一行第一个元素的地址,p=a指向数组a的首地址,则B、C选项正确,同理可知D选项也正确。
25.有以下程序:
A.B,C,D,E,
B.A,B,C,D,
C.C,D,E,F,
D.B,D,F,H,
[解析]函数change()的作用是从数组尾部将数组内的元素值加1。
数组的初始值为ABCD,因此经change()后,得到的值为BCDE。
26.设有以下程序段:
floata[8]={1.0,2.0};
intb[1]={0};
charc[]={”A”,”B”};
chard==“1”;
以下叙述正确的是()。
A.只有变量c的定义是合法的
B.只有变量a,b、c的定义是完全合法的
C.所有变量的定义都是完全合法的
D.只有变量a,b的定义是完全合法的
[解析]floata[8]={1.0,2.0};
定义了一个包含8个float型元素的数组,并初始化了数组的前2项,其他项是随机数。
intb[1]={0},定义了只有一个int型元素的数组,并初始化为0。
charc[]={"
A"
,"
B"
};
定义一个char型数组,大小有初始化元素决定,但初始化值是字符串,类型不兼容,编译出错。
chard="
1"
,;
定义一个char型变量,但是初始化赋值字符串,类型不兼容,编译出错。
因此只有数组a,b的定义和初始化正确。
故答案为D选项。
27.有以下程序:
2<回车>,则输出结果是()。
A.1234
B.5431
C.1235
D.3214
[解析]第一个for循环初始化数组a,分别为1,3,5,随机数,形成了基本有序的序列,再将输入的数字插入到数组a,使它们形成有序序列。
因此可以分析出,打印的结果为1,2,3,5。
28.有以下程序:
}程序运行后的输出结果是()。
A.9
B.-1
C.10
[解析]while(p<a+n&&*p!
=x)p++;
当p=a;
n=10,x=10;
时while循环条件成立,直到p=a+9,结束循环,执行下一条语句,if条件成立,返回p-a,此时执行p-a=a+9-a=9;
因此,输出9。
29.有以下程序:
A.ejoty
B.afkpu
C.agmsy
D.eimqu
[解析]数组a是二维数组,数组w存放二维数组a行列值相同的位置上的元素,由a[5][10]可得w[0]~w[4]的元素分别是agmsy,因此打印结果为agmsy。
30.语句printf("
%d\n"
,strlen("
\t\"
\\\n\'
\065\08AB"
));
的输出结果是()。
A.6
B.7
C.8
D.9
[解析]字符串"
中共有13个字符,而strlen()函数从字符串第一个字符开始扫描,直到碰到第一个结束符'
\0'
为止,然后返回计数器值(长度不包含"
\0"
)。
故输出结果为6。
31.有以下程序:
A.012345
B.876543210
C.876543
D.012345678
[解析]fun(*ss,m1,m2)的作用是,如果m1>m2交换数组元素ss[m1],ss[m2]。
因此,fun(ss,0,5)后ss的0,1,2,3,4,5,6,7,8,\0。
fun(ss,9,6)后ss的0,1,2,3,4,5,\0,8,7,6。
fun(ss,0,9)后ss的0,1,2,3,4,5,\0,8,7,6。
因此打印结果012345。
32.有以下程序;
A.1,2,1,2,2,4
B.1,2,6,6,7,8
C.1,2,2,4,2,4
D.1,2,6,6,2,4
[解析]全局变量与函数体内局部变量同名时,局部变量会覆盖全局变量,因此在sub1()函数内,全局变量m,n是不可见的,在函数sub1()内对m,n操作的是局部变量,对全局变量不产生影响。
但在sub2()函数内,由于没有和全局变量重名,因此在此函数内,m,n是可见的。
因此,第一个printf()打印的是全局变量m,n,故打印的是1,2;
第二个printf(),调用sub1()。
没有修改全局变量m,n,故打印的是1,2;
第三个printf(),之前调用了sub2(),修改了全局变量m,n,因此,打印的是2,4。
33.有以下程序:
A.-263
B.2
C.0
D.-26
[解析]isspace(c)检查参数c是否为空格字符。
若参数c为空格字符,则返回TRUE,否则返回NULL(0)。
Isdigit(c)函数检查参数c是否为阿拉伯数字0到9。
返回值若为阿拉伯数字,则返回TRUE,否则返回NULL(0)。
fun()函数的第一个for循环判断字符串是否为负号。
第二个for循环获取符号后面的数字字符,并将它们转化为整数。
若遇到了非数字的字符则跳出,最后返回数组的结果。
因此,可知首先获取负号,紧接着获取数值26,遇到了字符a,跳出返回-26,因此打印的结果是-26。
34.设有定义:
structcomplex{intreal,unreal;
}datal={1,8},data2;
则以下赋值语句中错误的是()。
A.data2=(2,6);
B.data2=data1;
C.data2.real=data1.real;
D.data2.real=data1.unreal;
[解析]结构体变量建议在定义的时候进行初始化。
结构体常见的几种初始化方法如下:
计算机内核喜欢用第一种,使用第一种和第二种时,成员初始化顺序可变。
因此,可以判断A选项错误。
35.有以下程序:
A.11,11
B.29,29
C.26,29
D.121,121
[解析]#define命令是C语言中的一个宏定义命令,标识符一般使用大写,为了区分其他标识符,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本。
宏定义不进行其他操作,仅仅只是替换标识符。
S(k+j+2)=k+j+2*k+j+2/k+j+2,经计算可得29,S(j+k+2)=j+k+2*k+j+2/j+k+2,经计算可得29。
因此输出为29,29。
答案为B选项。
36.若有定义:
typedefint*T[10];
Ta;
则以下选项与上述定义中a的类型完全相同的是()。
A.int*a[10];
B.int(*a)[10];
C.inta[10];
D.int(*a[10])();
[解析]C语言允许由用户自己定义类型说明符,也就是说允许由用户为数据类型取”别名”。
类型定义符typedef即可用来完成此功能,可以完全代替原来的类型说明符。
因此,变量a的类型为int*a[10]。
typedefint*T[10],由于[]运算符优先级高于*,可以看成typedefint[10]*T,替换T可得int[10]*a=>int*a[10],因此,答案为A选项。
37.有以下程序:
A.6,5,4,3,2,1,
B.1,2,3,4,5,6,
C.1,1,1,1,1,1
D.6,6,6,6,6,6