全国计算机二级C语言模拟测试含详细解析 6.docx
《全国计算机二级C语言模拟测试含详细解析 6.docx》由会员分享,可在线阅读,更多相关《全国计算机二级C语言模拟测试含详细解析 6.docx(30页珍藏版)》请在冰点文库上搜索。
全国计算机二级C语言模拟测试含详细解析6
1.面向对象方法中,实现对象的数据和操作结合于统一体中的是
A.结合
B.封装
C.隐藏
D.抽象
正确答案:
B你的答案:
解析:
【解析】对象的基本特点是:
标识唯一性、分类性、多态性、封装性、模块独立性好。
封装是指隐藏对象的属性和实现细节,将数据和操作结合于统一体,仅对外提供访问方式,B选项正确。
2.在进行逻辑设计时,将E-R图中实体之间联系转换为关系数据库的
A.关系
B.元组
C.属性
D.属性的值域
正确答案:
A你的答案:
解析:
【解析】E-R模型和关系模式的对照表如下
由表中可以看出,联系转换为关系数据库的关系,A选项正确。
3.线性表的链式存储结构与顺序存储结构相比,链式存储结构的优点有
A.节省存储空间
B.插入与删除运算效率高
C.便于查找
D.排序时减少元素的比较次数
正确答案:
B你的答案:
解析:
【解析】顺序表和链表的优缺点比较如下表:
由表中可以看出链式存储插入与删除运算效率高,故B选项正确。
4.深度为7的完全二叉树中共有125个结点,则该完全二叉树中的叶子结点数为
A.62
B.63
C.64
D.65
正确答案:
B你的答案:
解析:
【解析】在树结构中,定义一棵树的根结点所在的层次为1,其他结点所在的层次等于它的父结点所在的层次加1,树的最大层次称为树的深度。
完全二叉树指除最后一层外,每一层上的结点数均达到最大值,在最后一层上只缺少右边的若干结点。
深度为6的满二叉树,结点个数为2^6-1=63,则第7层共有125-63=62个叶子结点,分别挂在第6层的左边62个结点上,加上第6层的最后1个叶子结点,该完全二叉树共有63个叶子结点,故B选项正确。
5.下列叙述中正确的是
A.所谓有序表是指在顺序存储空间内连续存放的元素序列
B.有序表只能顺序存储在连续的存储空间内
C.有序表可以用链接存储方式存储在不连续的存储空间内
D.任何存储方式的有序表均能采用二分法进行查找
正确答案:
C你的答案:
解析:
【解析】"有序"是特指元素按非递减排列,即从小到大排列,但允许相邻元素相等,A选项错误。
有序表可以顺序存储也可以链式存储,B选项错。
能使用二分法查找的线性表必须满足两个条件:
用顺序存储结构;线性表是有序表,D选项错误。
故C选项正确。
6.设二叉树如下:
则后序遍历序列为
A.ABDEGCFH
B.DBGEAFHC
C.DGEBHFCA
D.ABCDEFGH
正确答案:
C你的答案:
解析:
【解析】二叉树遍历可以分为3种:
前序遍历(访问根结点在访问左子树和访问右子树之前)、中序遍历(访问根结点在访问左子树和访问右子树两者之间)、后序遍历(访问根结点在访问左子树和访问右子树之后)。
本题中前序遍历为ABDEGCFH,中序遍历为DBGEAFHC,后序遍历为DGEBHFCA,故C选项正确。
7.计算机软件包括
A.算法和数据
B.程序和数据
C.程序和文档
D.程序、数据及相关文档
正确答案:
D你的答案:
解析:
【解析】计算机软件由两部分组成:
一是机器可执行的程序和数据;二是机器不可执行的,与软件开发、运行、维护、使用等有关的文档。
故D选项正确。
8.下面描述中不属于软件需求分析阶段任务的是
A.撰写软件需求规格说明书
B.软件的总体结构设计
C.软件的需求分析
D.软件的需求评审
正确答案:
B你的答案:
解析:
解析】需求分析阶段的工作可以分为4个方面:
需求获取、需求分析、编写需求规格说明书和需求评审。
故B选项正确。
9.当数据库中数据总体逻辑结构发生变化,而应用程序不受影响,称为数据的
A.逻辑独立性
B.物理独立性
C.应用独立性
D.空间独立性
正确答案:
A你的答案:
解析:
【解析】数据独立性包括物理独立性和逻辑独立性,物理独立性指数据的物理结构的改变,不会影响数据库的逻辑结构,也不会引起应用程序的改动;逻辑独立性指数据库的总体逻辑结构的改变,不会导致相应的应用程序的改变。
故A选项正确。
10.有三个关系R、S和T如下:
则由关系R和S得到关系T的操作是
A.并
B.投影
C.交
D.选择
正确答案:
A你的答案:
解析:
【解析】用于查询的3个操作无法用传统的集合运算表示,引入的运算为投影运算、选择运算、笛卡尔积。
常用的扩充运算有交、除、连接及自然连接等。
投影,从关系模式中指定若干个属性组成新的关系,T相较于R没有缺少属性,故B选项错误。
选择,从关系中找出满足给定条件的元组的操作称为选择,T相较于R增加了元组,故D选项错误。
交:
R∩S结果是既属于R又属于S的记录组成的集合,T中元组多于R与S,故C选项错误。
并:
R∪S是将S中的记录追加到R后面,与题目中结果相符,故A选项正确。
11.以下叙述正确的是
A.C编译程序把文件后缀为.c的源程序文件编译成文件后缀为.obj的二进制文件
B.C编译程序把文件后缀为.c的源程序文件编译成文件后缀为.exe的可执行文件
C.C编译程序把文件后缀为.obj的二进制文件编译成文件后缀为.exe的可执行文件
D.链接程序把文件后缀为.c的源程序文件链接成文件后缀为.exe的可执行文件
正确答案:
A你的答案:
解析:
【解析】C编译程序把文件后缀为.c的源程序文件编译成文件后缀为.obj的二进制文件,链接将一个或多个目标文件与程序用到的库文件连接起来,形成一个可以在操作系统直接运行的执行程序.exe,故排除B,C,D选项,答案选A选项。
12.以下叙述正确的是
A.循环结构、选择结构、顺序结构都是结构化程序的基本结构
B.计算机可以直接执行C语言程序,不需要做任何转换
C.过于复杂的算法不能使用N-S流程图描述
D.只有不超过20步操作步骤的算法才是简单算法
正确答案:
A你的答案:
解析:
【解析】计算机只能识别机器语言,C语言是高级语言,计算机无法直接执行,排除B选项;N-S流程图是复杂流程算法的描述手段,因此C选项错误;算法的复杂与简单,不能用操作步骤数来衡量,D选项错误;循环结构、选择结构、顺序结构都是结构化程序的基本结构,答案为A选项。
13.有如下程序
#include
main()
{
intx=072;
printf("X=%d.\n",x+1);
}
程序运行后的输出结果是
A.X=115
B.X=73
C.X=59.
D.X=72.
正确答案:
C你的答案:
解析:
【解析】x定义为072,表示x为一个八进制数,%d代表十进制整数输出,x需要转化成十进制为58,在输出时,x+1=59,再输出,答案为C选项,另外输出时不能忘记"."。
14.下面叙述正确的是
A.任何复杂任务都可以分解成简单子任务
B.C语言程序的所有函数只能处于同一个源文件中WEr
C.包含全部三种基本结构的程序才是结构化程序
D.C语言程序可以定义多个不同内容的main函数
正确答案:
A你的答案:
解析:
【解析】C语言程序的函数可以处于不同的源文件,B选项错误;包含一种基本结构的程序就是结构化程序,C选项错误;C语言只可以定义一个main函数,D选项错误,答案为A选项。
15.以下叙述正确的是
A.C程序总是以main()作为程序执行的起始行
B.main()函数若不带参数,其后面的一对圆括号可省略
C.函数体内的定义语句和可执行语句允许任意穿插出现
D.C语言中的语句之间必须用分号作为分隔符
正确答案:
A你的答案:
解析:
【解析】main()函数后面的括号告诉编译器这是一个函数,不可以省略,排除B选项;在复合语句中,不仅可以有执行语句,还可以有定义语句,定义语句应该出现在执行语句的前面,故排除C选项;C语言中的某些语句可以不用分号,例如if语句,故D选项错误;答案为A选项。
16.有以下程序
#include
main()
{
charc;
for(;(c=getchar())!
='#';)putchar(++c);
}
执行时如输入为:
abcdefg##<回车>,则输出结果是
A.abcdefg
B.bcdefgh$
C.bcdefgh$$
D.bcdefgh
正确答案:
D你的答案:
解析:
【解析】for语句中执行的含义是,每次把输入赋给c值,如果不等于'#',则执行putchar(++c),即将当前c值在ASCII码上+1后再输出字符型c值,c的值等于'#',则终止循环,所以输出应该是bcdefgh,答案为D选项。
17.有以下程序
#include
main()
{inta=1,b=0;
for(;a<5;a++)
{if(a%2==0)break;
continue;
b+=a;
}
printf("%d\n",b);
}
程序运行后的输出结果是
A.0
B.1
C.10
D.4
正确答案:
A你的答案:
解析:
【解析】题干中for循环有break和continue语句,且均放在b+=a语句前面,无论if条件是否满足,b+=a都不会被执行,因此b值始终为0,答案为A选项。
18.有以下程序
#include
main()
{
intx=0x13;
if(x=0x12)printf("True");
printf("False\n");
}
程序运行后的输出结果是
A.True
B.TrueFalse
C.False
D.TrueFalseTrue
正确答案:
B你的答案:
解析:
【解析】if(x=0x12)表示x=0x12,此为赋值语句,表达式的值为0x12,非零为真,执行printf("True"),再执行printf("False\n"),因此答案为B选项,注意赋值操作符"="与相等操作符"=="的区别。
19.为了避免在嵌套的if-else语句中产生二义性,C语言规定与else子句配对是
A.与其在同一行上的if子句
B.在其之后最近的不带else的if子句
C.与其缩排位置相同的if子句
D.在其之前最近的不带else的同层if子句
正确答案:
D你的答案:
解析:
【解析】注意if与else的配对关系。
原则是if总是与它上面最近的、未配对的else配对,因此答案为D选项。
20.有以下程序
#include
main()
{inti,a;
for(i=0;i<=10;i++)a=i;
printf("%d,%d\n",i,a);
}
程序的运行结果是
A.11,10
B.10,10
C.10,11
D.11,11
正确答案:
A你的答案:
解析:
【解析】当i=10时,i值赋值给a,同时i+1,再判定是否满足i<=10,i=11时,不满足条件,结束循环。
循环结束时,输出i,a的值为11,10,答案为A选项。
21.有以下程序
#include
voidfun(inta[],intn)
{
inti=0;
for(i=0;i{
if(i%2==0)
a[i]+=n;
else
a[i]-=n;
}
}
main()
{
intc[5]={5,4,3,2,1},i;
fun(c,5);
for(i=0;i<5;i++)printf("%d,",c[i]);
printf("\n");
}
程序运行后的输出结果是
A.10,-1,8,-3,6,
B.5,4,3,2,1,
C.10,2,8,4,6,
D.5,-1,3,-3,1,
正确答案:
A你的答案:
解析:
【解析】fun()函数功能是:
对数组中,下标为偶数的元素累加5,下标为奇数的元素减去5,所以执行完fun()函数后,数组c变为10,-1,8,-3,6,A选项正确。
22.有以下程序
#include
#defineN4
voidfun(inta[][N])
{
inti;
for(i=0;ia[0][i]=a[N-1][N-1-i];
}
main()
{intx[N][N]={{1,2,3,4},
{5,6,7,8},
{9,10,11,12},
{13,14,15,16}},i;
fun(x);
for(i=0;iprintf("\n");
}
程序运行后的输出结果是
A.16,6,11,16,
B.1,6,11,16,
C.4,7,10,13,
D.17,17,17,17,
正确答案:
A你的答案:
解析:
【解析】程序最后输出x[0][0],x[1][1],x[2][2],x[3][3],其中只有x[0][0]的值在fun函数中发生改变,在fun函数中,当i=0时,x[0][0]=x[3][3]=16,因此答案为A选项。
23.有如下程序
#include
intconvert(int*data)
{
return(*data)++;
}
main()
{
intdata=56;
convert(&data);
printf("%d,",data);
data=convert(&data);
printf("%d,\n",data);
}
程序运行后的输出结果是
A.56,57,
B.57,58,
C.57,57,
D.55,57,
正确答案:
C你的答案:
解析:
【解析】convert函数每次都定义了一个指针*data,再将指针变量*data对应地址的值进行加一处理,再返回加1前的值作为结果,因此答案为C选项。
24.设有如下程序段
inta[1]={0};
intb[]={9};
charc[3]={"A","B"};
chard="12";
以下叙述正确的是
A.a,b的定义合法,c,d的定义不合法
B.a,b,c,d的定义都是合法的
C.a,b,c的定义是合法的,d的定义不合法
D.只有a的定义是合法的
正确答案:
A你的答案:
解析:
【解析】inta[1]={0}表示定义一个数组a[1]初值为0,intb[]={9},表示定义一个数组b,其中只有一个值9,系统自动识别数组有1个元素。
charc[3]={"A","B"},数组元素为字符串,需要用二维数组来表示,C选项错误;chard="12";,字符串常量不能赋值给字符变量,D选项错误;因此答案为A选项。
25.设有定义:
intx=2,*p=&x;floaty=3.0;charz='c';,则立即进行以下运算有安全隐患的是
A.p++;
B.x++;
C.y++;
D.z++;
正确答案:
A你的答案:
解析:
【解析】由于x是一个整形变量,将x地址赋值给p指针后,A选项中p++对指针p进行加1运算,p指针的值相当于加4(整型变量的地址占4个字节),此时p指向了未知的内存地址,对未知内存地址进行操作具有安全隐患,故答案为A选项。
26.有以下程序
#include
doublefun(doublea)
{
doublex;
x=a-(int)a;
returnx;
}
main()
{
doublea=3.1415;
printf("%f\n",fun(a));
}
程序的运行结果是
A.3.000000
B.3.141500
C.0.141500
D.0.000000
正确答案:
C你的答案:
解析:
【解析】这里考查了强制转换的概念,在fun函数中,x=a-(int)a表示x取值为a的小数部分,因此,输入a为3.1415,输出x=0.141500,答案为C选项。
27.有以下程序
#include
#include
char*a="you";
char*b="WelcomeyoutoBeijing!
";
main()
{char*p;
p=b;
while(*p!
=*a)p++;
p+=strlen(a)+1;
printf("%s\n",p);
}
程序运行后的输出结果是
A.Beijing!
B.youtoBeijing!
C.WelcomeyoutoBeijing!
D.toBeijing!
正确答案:
D你的答案:
解析:
【解析】while函数判断p指针指向地址的内容是否和a指针指向地址的内容相等,如果不是,则移动指针p+1,当p指向*b字符串中的'y'时,和*a首地址元素相等,退出while语句后,p再向右移动a字符串长度+1个单位地址,此时p指向't',输出't'及剩余的字符串,答案为D选项。
28.有如下程序
#include
#include
main()
{
printf("%d\n",strlen("0\t\nA011\1"));
}
程序运行后的输出结果是
A.8
B.9
C.7
D.10
正确答案:
A你的答案:
解析:
【解析】strlen是求字符串长度的函数,"0\t\nA011\1"是一个长度为8的字符串,其中\t、\n、\1均为转移字符常量,但是长度也是1,因此输出结果是8,答案为A选项。
29.有如下程序
#include
intsum(intdata)
{
staticintinit=1;
returninit+=data;
}
main()
{
inti;
for(i=1;i<=1;i++)
printf("%d,",sum(i));
printf("\n");
}
程序运行后的输出结果是
A.2,
B.2,3,
C.3,
D.1,
正确答案:
A你的答案:
解析:
【解析】在输出函数中,调用sum函数,sum函数作用是定义一个常数init=1,对Init进行叠加主函数传递的data值,随后将和返回给主函数,因此输出为2,答案为A选项。
30.有以下程序
#include
main()
{
chars1[]="programe",s2[]="Language";
char*p1=s1,*p2=s2;
intk;
for(k=0;k<8;k++)
if(*(p1+k)==*(p2+k))
printf("%s\n",(p1+k));
}
程序的运行结果是
A.grameamee
e
B.gae
C.programe
D.无输出字符
正确答案:
A你的答案:
解析:
【解析】定义两个指针变量p1,p2,分别指向数组s1,s2首地址,在for循环中,比较两个指针对应地址的元素是否相等,如果相等,则输出当前指针指向地址的字符串,答案为A选项。
31.以下针对全局变量的叙述错误的是
A.全局变量的作用域是从定义位置开始至源文件结束
B.全局变量是在函数外部任意位置上定义的变量
C.用extern说明符可以限制全局变量的作用域
D.全局变量的生存期贯穿于整个程序的运行期间
正确答案:
C你的答案:
解析:
【解析】在不同编译单位内用extern说明符来扩展全局变量的作用域,extern可以将全局变量作用域扩展到其他文件,而不是限制全局变量的作用域,答案为C选项。
32.有以下程序
#include
#include
typedefstructstu{
charname[10];
chargender;
intscore;
}STU;
voidf(STU*c)
{
strcpy(c->name,"Qian");
c->gender='f';
c->score=350;
}
main()
{
STUa={"Zhao",'m',290},b;
b=a;
f(&b);
printf("%s,%c,%d,",a.name,a.gender,a.score);
printf("%s,%c,%d\n",b.name,b.gender,b.score);
}
程序运行后的输出结果是
A.Zhao,m,290,Qian,f,350
B.Zhao,m,290,Qian,m,290
C.Zhao,m,290,Zhao,m,290
D.Zhao,m,290,Qian,m,350
正确答案:
A你的答案:
解析:
【解析】本题定义了一个结构变量structstu,并且命名为STU,STU结构中包含三个数据。
main函数中,
首先定义两个结构体STU类型的变量a,b,并对a完成初始化,然后将a赋值给b,使得结构体a,b的值都是{"Zhao",'m',290},然后调用f函数,f函数的功能是将形参结构体指针c指向的结构体赋值为{"Qian",'f',350},由于形参是指针,c指向的结构体就是b,所以实参b的值被修改为{"Qian",'f',350},而a的值不变,答案为A选项。
33.下面关于编译预处理的命令行,正确的是
A.#definePAI3.14
B.#DefineEps0.00001
C.##DEFINEFALSE0
D.#defineintINT
正确答案:
A你的答案:
解析:
【解析】宏定义用法一般表达式为#define宏名字符串,A选项满足宏定义用法;
C语言中是区分大小写的,define属于C语言的关键字,不可以大写,因此B,C选项错误;D选项中,int是代