2021二级c语言考试真题
一、选择题(请在【答题】菜单上选择【选择题】命令,启动选择题测试程序,按照题目上的内容进行答题。作答选择题时键盘被封锁,使用键盘无效,考生须使用鼠标答题。选择题部分只能进入一次,退出后不能再次进入。选择题部分不单独计时。)
1、有以下程序
#include <stdio.h>
int fun (int x,int y)
{
if(x!=y) return ((x+y)/2);
else return (x);
}
main()
{
int a=4,b=5,c=6;
printf("%d\n",fun(2*a,fun(b,c)));
}
程序运行后的输出结果是()。
A. 3
B. 6
C. 8
D. 12
【答案】
一个完整的c语言程序B
【解析】
fun的功能是求两数的平均数,并且参数和结果都为整型。题中是用一个函数作为另一个函数的参数,所以应该先做里面嵌套的函数即fun(b,c),值为5。fun(2*a,fun(b,c))即为计算fun(2*4,5),所以结果为(5+8)/2=6。答案选择B 选项。
2、下列选项中不属于结构化程序设计原则的是()。
A.可封装
B.自顶向下
C.模块化
D.逐步求精
【答案】
A
【解析】
结构化程序设计的基本原则包括:①模块化;②自顶向下;③逐步求精;④限制使用goto语句。可封装是面向对象的设计思想。答案选择A选项。
3、以下叙述中正确的是()。
A.如果企图通过一个空指针来访问一个存储单元,将会得到一个出错信息B.即使不进行强制类型转换,在进行指针赋值运算时,指针变量的基类型也可以不同
C.设变量p是一个指针变量,则语句p=0;是非法的,应该使用p=NULL;  D.指针变量之间不能用关系运算符进行比较
【答案】
A
【解析】
空指针意味着该指针没有指向任何具体的变量,所以不能访问一个存储单元,A 正确。指针的赋值运算只能在同一数据类型之间进行,故选项B错。语句p=0和p=NULL是一样的,都是把一个空指针赋给指针变量p,故选项C错。指针之间能进行关系运算,比较的是地址值的大小,选项D错。答案选择A选项。
4、读取二进制文件的函数调用形式为“fread(buffer,size,count,fp);”,其中buffer代表的是()。
A.一个内存块的首地址,代表读入数据存放的地址
B.一个整型变量,代表待读取的数据的字节数
C.一个文件指针,指向待读取的文件
D.一个内存块的字节数
【答案】
A
【解析】
“fread(void*buffer,size t_size,size t_count,FILE*stream);”功能是从一个文件流中读数据,读取count个元素,每个元素占size个字节,如果调用成功返回count,出错或读到文件末尾时返回的记录数小于count,也可能返回0。buffer:用于接收数据的内存地址,大小至少是size*count个字节;size:单个元素的大小,单位是字节;count:元素的个数,每个元素占size 个字节;stream:输入流。答案选择A选项。
5、有以下程序
#include <stdio.h>
int k=5;
void f(int *s)
{
s=&k;
}
main()
{
int m=3,*p=&m;
f(p);
printf("%d,%d\n",m,*p);
}
程序的运行结果是()。
A. 3,3
B. 5,5
C. 3,5
D. 5,3
【答案】
A
【解析】
考查函数传参。C语言中,数据只能从实参单向传递给形参,指针作为函数参数时,形参仍然作为实
参的副本被赋值,形参指针变量的指向改变不能影响实参指针变量的指向。结果不变,答案选择A选项。
6、以下叙述中正确的是()。
A.程序的算法只能使用流程图来描述
B.结构化程序的三种基本结构是循环结构、选择结构、顺序结构
C. N-S流程图只能描述简单的顺序结构的程序
D.计算机可以直接处理C语言程序,不必进行任何转换
【答案】
B
【解析】
程序的算法可以用流程图、程序语句、伪代码和流程图以及文字进行描述,选项A错误;N-S能完整描述程序的所有结构,不仅仅包括简单的顺序结构,选项C错误;C语言的源文件需要经过编译、链接生
成可执行文件后才可以被计算机执行,选项D错误;循环结构、选择结构、顺序结构是结构化程序的三种基本结构,答案选择B选项。
7、要求通过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);
【答案】
A
【解析】
A项正确,“(ch=getchar())!='N'”表示先把getchar()函数的返回值赋值给ch,然后判断,当读入字母不为
N时,ch与'N'不相等,执行打印函数
printf,当读入字母N时,ch与'N'相等,循环结束,同理知选项D错误。B项错误,“ch=getchar()='N'”表达式从右向左计算,会把´N´赋值给getchar()函数的返回值,而getchar()函数的返回值是右值,不可改变,出现编译错误;C项错误,“ch=getchar()=='N'”中“==(等于)”的优先级高于“=
(赋值)”,它等价于“ch=(getchar()=='N')”,此时ch的取值是0或1。答案选择A选项。
8、某二叉树有5个度为2的结点,则该二叉树中的叶子结点数是()。
A. 10
B. 8
C. 6
D. 4
【答案】
C
【解析】
由二叉树的性质可知,对于任何一棵二叉树,其终端结点(叶子结点)数等于度为2的结点数加1。所以该二叉树的叶子结点数为5+1=6。答案选择C选项。
9、有以下程序
#include <stdio.h>
main()
{
printf("%d\n", NULL);
}
程序运行后的输出结果是()。
A. 1
B.变量无定义,输出不确定
C. -1
D. 0
【答案】
D
【解析】
在C语言中,NULL和0的值都是一样的,但是为了目的和用途及容易识别的原因,NULL用于指针和对象,0用于数值。答案选择D选项。
10、以下叙述中错误的是()。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。