C++语言笔试6.docx
- 文档编号:10439334
- 上传时间:2023-02-11
- 格式:DOCX
- 页数:25
- 大小:24.36KB
C++语言笔试6.docx
《C++语言笔试6.docx》由会员分享,可在线阅读,更多相关《C++语言笔试6.docx(25页珍藏版)》请在冰豆网上搜索。
C++语言笔试6
C++语言笔试-6
(总分:
80.00,做题时间:
90分钟)
一、单项选择题
(总题数:
40,分数:
80.00)
1.下列关于栈和队列的描述中,正确的是()。
A)栈是先进先出
B)队列是先进后出
C)队列允许在队头删除元素
D)栈在栈顶删除元素
(分数:
2.00)
A.
B.
C.
D. √
解析:
[解析]栈实际也是线性表,只不过是一种特殊的线性表。
栈是只能在表的一端进行插入和删除运算的线性表,通常称插入、删除的这一端为栈顶,另一端为栈底。
队列是只允许在一端删除,在另一端插入的顺序表,允许删除的一端叫做队头,允许插入的一端叫做队尾。
2.已知二叉树后序遍历序列是CDABE,中序遍历序列是CADEB,它的前序遍历序列是()。
A)ABCDEB)ECABD
C)EACDBD)CDEAB
(分数:
2.00)
A.
B.
C. √
D.
解析:
[解析]由于后序遍历的最后一个元素为E,所以E为根结点,所以它的前序遍历的首个元素为E,故排除A)和D)选项。
由于中序遍历中,元素B在元素根结点E的后面,所以B为二叉树的右子树,并且该二叉树右子树只有一个元素,所以前序遍历的最后一个元素应为B,故选项C)为正确选项,即该二叉树的前序遍历序列是EACDB。
3.在数据流图中,带有箭头的线段表示的是()。
A)控制流B)数据流
C)模块调用D)事件驱动
(分数:
2.00)
A.
B. √
C.
D.
解析:
[解析]数据流图中带箭头的线段表示数据流,沿箭头方向传递数据的通道,一般在旁边标注数据流名。
4.结构化程序设计的3种结构是()。
A)顺序结构,分支结构,跳转结构
B)顺序结构,选择结构,循环结构
C)分支结构,选择结构,循环结构
D)分支结构,跳转结构,循环结构
(分数:
2.00)
A.
B. √
C.
D.
解析:
[解析]程序设计语言仅仅使用顺序、选择和重复(循环)三种基本控制结构就足以表达出各种其他形式结构的程序设计方法。
遵循程序结构化的设计原则,按结构化程序设计方法设计出的程序易于理解、使用和维护;可以提高编程工作的效率,降低软件的开发成本。
5.下列方法中,不属于软件调试方法的是()。
A)回溯法B)强行排错法
C)集成测试法D)原因排除法
(分数:
2.00)
A.
B.
C. √
D.
解析:
[解析]软件调试主要采用以下三种方法:
强行排错法:
作为传统的调试方法,其过程可概括为设置断点、程序暂停、观察程序状态、继续运行程序。
回溯法:
该方法适合于小规模程序的排错、即一旦发现了错误,先分析错误征兆,确定最先发现“症状”的位置。
原因排除法:
原因排除法是通过演绎和归纳,以及二分法来实现。
6.下列选项中,不属于模块间耦合的是()。
A)内容耦合B)异构耦合
C)控制耦合D)数据耦合
(分数:
2.00)
A.
B. √
C.
D.
解析:
[解析]耦合可以分为下列几种,它们之间的耦合度由高到低排列:
内容耦合——若一个模块直接访问另一模块的内容,则这两个模块称为内容耦合。
公共耦合——若一组模块都访问同一全局数据结构,则称为公共耦合。
外部耦合——若一组模块都访问同一全局数据项,则称为外部耦合。
控制耦合——若一模块明显地把开关量、名字等信息送入另一模块,控制另一模块的功能,则称为控制耦合。
标记耦合——若两个以上的模块都需要其余某一数据结构的子结构时,不使用其余全局变量的方式而全使用记录传递的方式,这样的耦合称为标记耦合。
数据耦合——若一个模块访问另一个模块,被访问模块的输入和输出都是数据项参数,则这两个模块为数据耦合。
非直接耦合——若两个模块没有直接关系,它们之间的联系完全是通过程序的控制和调用来实现的,则称这两个模块为非直接耦合,这样的耦合独立性最强。
7.下列特征中不是面向对象方法的主要特征的是()。
A)多态性B)标识惟一性
C)封装性D)耦合性
(分数:
2.00)
A.
B.
C.
D. √
解析:
[解析]面向对象设计方法与面向过程设计方法有本质的不同,其基本原理是:
使用现实世界的概念抽象地思考问题从而自然地解决问题。
其特点包括:
标识惟一性、多态性、封装性、模块独立性、继承和多态性好。
8.在数据库设计中,将E-R图转换成关系数据模型的过程属于()。
A)需求分析阶段B)概念设计阶段
C)逻辑设计阶段D)物理设计阶段
(分数:
2.00)
A.
B.
C. √
D.
解析:
[解析]逻辑结构设计的任务:
概念结构是各种数据模型的共同基础,为了能够用某一DBMS实现用户需求,还必须将概念结构进一步转化为相应的数据模型,这正是数据库逻辑结构设计所要完成的任务。
它包括从E-R图向关系模式转换和逻辑模式规范化及调整、实现。
9.在一棵二叉树上,第5层的结点数最多是()。
A)8B)9C)15D)16
(分数:
2.00)
A.
B.
C.
D. √
解析:
[解析]根据二叉树的性质:
二又树第i(i
1)层上至多有2i-1个结点。
得到第5层的结点数最多是16个。
10.下列有关数据库的描述,正确的是()。
A)数据库设计是指设计数据库管理系统
B)数据库技术的根本目标是要解决数据共享的问题
C)数据库是一个独立的系统,不需要操作系统的支持
D)数据库系统中,数据的物理结构必须与逻辑结构一致
(分数:
2.00)
A.
B. √
C.
D.
解析:
[解析]数据库设计的目的实质上是设计出满足实际应用需求的实际关系模型。
数据库技术的主要目的是有效地管理和存取大量的数据资源,包括:
提高数据的共享性,使多个用户能够同时访问数据库中的数据;减小数据的冗余,以提高数据的一致性和完整性;提供数据与应用程序的独立性,从而减少应用程序的开发和维护代价。
11.以下程序的输出结果是()。
#include<iostream.h>
main()
intb[3][3]=0,1,2,0,1,2,0,1,2,i,j,t=1;
for(i=0;i<3;i++)
for(j=i;j<=i;j++)
t=-t+b[i][b[j][j]];
cout<<t;
A)2B)3C)4D)5
(分数:
2.00)
A.
B.
C. √
D.
解析:
[解析]程序中通过for二重循环依次取二维数组中的数值进行与t的累加。
取数组中的元素为i行和符合循环条件的b[j][j]列的数据。
循环为0,1,2行,对应0,1,2列。
即0,1,2。
所以1+0+1+2=4。
12.当循环队列非空且队尾指针等于队头指针时,说明循环队列已满,不能进行入队运算。
这种情况称为()。
A)下溢B)上溢C)异常D)溢出
(分数:
2.00)
A.
B. √
C.
D.
解析:
[解析]由于头尾指针不断前移,超出向量空间。
这时整个向量空间及队列是满的却产生了“上溢”现象。
13.以下程序的输出的结果是()。
#include<iostream.h>
voidmain()
inti,k,a[10],p[3];
k=5;
for(i=0;i<9;i++)a[i]=i;
for(i=0;i<3;i++)p[i]=a[i*(i+1)];
for(i=0;i<3;i++)k+=p[i]*2;
cout<<k;
A)20B)21C)22D)23
(分数:
2.00)
A.
B. √
C.
D.
解析:
[解析]程序中首先在第一个for循环中将数组a每一个元素赋值为0,1,2,……。
然后在第二个循环中数组p的第i元素为a中的第i*(i+1),即0,2,6,第三个循环中数组p中的每个元素值乘以2,然后加上5,累加。
14.以下程序的执行结果是()。
#include<iostream.h>
intfun(intb[],intn)
inti,r=1;
for(i=0;i<n;i++)
r=r*b[i];
returnr;
voidmain()
intx,a[]=1,2,3,4,5,6,7,8;
x=fun(a,3);
cout<<x<<end1;
A)5B)6C)7D)8
(分数:
2.00)
A.
B. √
C.
D.
解析:
[解析]由程序的main函数入手,调用fun函数,其中参数为数组a和3。
fun函数的功能是for循环中由第一个数组元素开始到第三个元素进行累积。
15.有如下程序:
#include<iostream>
usingnamespacestd;
intmain()
int*p;
*p=9;
cout<<"Thevalueatp:
"<<*p;
return0;
编译运行程序将出现的情况是()。
A)编译时出现语法错误,不能生成可执行文件
B)运行时一定输出:
Thevalueatp:
9
C)运行时一定输出:
Thevalueatp:
*9
D)运行时有可能出错
(分数:
2.00)
A.
B.
C.
D. √
解析:
[解析]题目程序中“int*p;”是定义了一个指针变量p,“*p=9;”是将p当前指向的指针赋为9。
指针p在执行这个赋值操作前并没有初始化这个变量p,所以会有p未初始化的警告错误。
16.下列有关指针的用法中,错误的是()。
A)inti;int*p=&i;B)inti;int*p;i=*p;
C)int*p;p=0;D)inti=5;int*p;p=&i;
(分数:
2.00)
A.
B. √
C.
D.
解析:
[解析]“inti'”语句为定义了一个整型变量i。
“int*p”为定义一个整型指针p。
选项A)中的“int*p=&i;”是定义整型指针变量p,并指向整型i的地址。
选项B)中“i=*p”语句是将p指向的变量赋值给i,而指针p没有初始化,所以选项B)错误。
选项C)中“p=0;”表示p指向0的地址。
选项D)中“&i”为取i的地址,并赋值给p。
17.如果有以下定义及初始化:
inta=3,*p=&a;
则由此可以推断,*p的值是()。
A)变量a的值,即3B)变量a的地址值
C)变量P的地址值D)无意义
(分数:
2.00)
A. √
B.
C.
D.
解析:
[解析]题目中的定义初始化是定义一个整型变量a,初始化为3。
而“int*p=&a;”是定义一个整型指针变量p,将变量a的地址作为指针变量p的初值。
*p是指针变量p指向的存储单元的内容,即变量值。
所以*p指向a的值3。
18.执行语句序列
intx=1,&y=x;
cout<<x<<'-'<<y<<end1;
输出的结果为()。
A)x-xB)1-1C)1-0D)异常
(分数:
2.00)
A.
B. √
C.
D.
解析:
[解析]程序中的“intx=1”定义x为int型变量,并赋值为1。
语句“&y=x”中“&”为引用运算符,&y=x语句可以理解为y具有x的地址,所以y的值也是1,即输出为:
1-1。
19.下列程序输出的结果是()。
#include<stdio.h>
fun1(chara,charb)charc;c=a;a=b;b=c;
fun2(char*a,charb)charc;c=*a;*a=b;b=c;
fun3(char*a,char*b)charc;c=*a;*a=*b;*b=c;
voidmain()
chara,b;
a='A';b='B';fun1(a,b);putchar(a);putchar(b);
a='A';b='B';fun2(&a,b);putchar(a);putchar(b);
a='A';b='B';fun3(&a,&b);putchar(a);putchar(b);
putchar('/n');
A)BABBABB)ABBBBA
C)ABBABAD)ABABBA
(分数:
2.00)
A.
B. √
C.
D.
解析:
[解析]由程序中的主函数main入手,分别调用fun1,fun2,fun3函数,得到输出结果。
其中,三个函数都是实现两个形参的交换功能,只是参数传递的方式不同,有的是地址,有的是传值。
第一个函数中参数采用的是值传递的方式,形参的变化不影响实参。
所以调用fun1后,实参a和b并没有交换,仍然是AB。
第二个调用中,实参a采用的是地址,即传递的是地址,所以形参a的改变会影响实参a的值,即BB。
同理,调用fun3后为BA。
20.下列程序将x、y和z按从小到大的顺序排列,横线处应添加语句()。
template<classT>
voidfun(______)
Ta;
if(x>y)
a=x;x=y;y=a;
if(y>z)
a=y;y=z;z=a;
if(x>y)
a=x;x=y;y=a;
A)Tx,Ty,TzB)Tx;y;z
C)T&x,T&y,T&zD)T&x,&y,&z
(分数:
2.00)
A.
B.
C. √
D.
解析:
[解析]函数fun的类型为void没有任何返回值,函数中变量的改变,即参数的改变应该影响实参。
应该是地址传递方式,即把引用型作为函数形参。
类T是类的抽象,可以利用模板建立各种数据类型的类。
所以补全函数的定义为“T&x,T&y,T&z”。
21.下面c++标识符中正确的是()。
A)_abcB)3abC)intD)+ab
(分数:
2.00)
A. √
B.
C.
D.
解析:
[解析]C++标识符命名的规则:
只能由'auz'、'A'-'z'、'0'-'9'、'-'等字符组成,且数字不能开头,不能与系统保留字冲突。
22.下列哪项不是面向对象程序设计的主要特征()。
A)封装B)继承C)多态D)结构
(分数:
2.00)
A.
B.
C.
D. √
解析:
[解析]面向对象程序设计的特点:
标识惟一性,分类性,多态性,封装性,模块独立性好。
23.已知i=5,j=0,下列各式中运算结果为j=6的表达式是()。
A)j=i+(++j)B)j=j+i++
C)j=++i+jD)j=j+++i
(分数:
2.00)
A.
B.
C. √
D.
解析:
[解析]++在变量前面先执行自身加1的运算,然后再进行其他运算。
++在变量后面先做其他运算,再自身加1。
选项D)的运算式是(j++)+i,因为++的优先级比+高。
24.若整型变量a、b、c、d中的值一次为1、4、3、2。
则条件表达式a<b?
a:
c<d?
c:
d的值是()。
A)1B)2C)3D)4
(分数:
2.00)
A. √
B.
C.
D.
解析:
[解析]首先把c<d?
c:
d算出。
结果为2,表达式a<b?
a:
c<d?
c:
d变为:
a<b?
a:
2,结果为1。
25.下列程序的输出的结果是()。
#include<iostream.h>
voidmain()
inta,b,c,d(5);
c=2,c+=10;
a=b=10;
a*=2;
b/=2;
c%=2;
cout<<a<<","<<b<<","<<c<<end1;
A)20,5,0B)20,7,0
C)20,5,1D)5,20,0
(分数:
2.00)
A. √
B.
C.
D.
解析:
[解析]c+=10使得c=12;a=b=10,a*=2使得a=20;b/=2,b=10/2,使得b=5;c=12%2=0,所以输出值20,5,0。
26.以下程序的执行结果是()。
#include<iostream.h>
classTestClass2
public:
TestClass2();
TestClass2(inti,intj);
voidprintb0;
private:
inta,b;
;
classTestClass1
public:
TestClass1()
TestClass1(inti,intj);
voidprinta();
private:
TestClass2c;
;
Testelass1:
:
TestClass1(inti,intj):
c(i,j)
voidTestClass1:
:
printa()
c.printb();
TestClass2:
:
TestClass2(inti,intj)
a=i;
b=j;
voidTestClass2:
:
printb()
cout<<"a="<<a<<","<<"b="<<b<<end1;
voidmain()
TestClasslm(7,9);
m.printa();
A)a=7,b=8B)a=8,b=7
C)a=7,b=9D)a=8,b=9
(分数:
2.00)
A.
B.
C. √
D.
解析:
[解析]由主函数main入手,定义了TestClass1的对象m,其中参数为7和9。
“m.printa();”中TestClass1中printa为“c.printb();”,其中c为TestClass2的"对象,所以printb为TestClass2中的“voidTestClass2:
:
printb()”,即输出为“a=7,b=9”。
27.以下程序的输出结果是()。
#include<iostream.h>
intx=3;
voidmain()
voidfun();
inti;
for(i=1;i<x;i++)
fun();
voidfun()
staticintx=1;
x*=x+1;
cout<<x<<"";
A)3,3B)2,2C)2,6D)2,5
(分数:
2.00)
A.
B.
C. √
D.
解析:
[解析]由主函数入手,在for循环中调用fun函数,其中调用次数为2次。
fun中x为静态变量,有效到文件结束,所以第一次调用为x=x*(x+1)=1*(1+1)=2,第二次调用2*(2+1)=6。
28.若有以下程序:
#include<iostream>
usingnamespacestd;
intfun()
staticinti=0;
ints=1;
s+=i;
i++;
returns;
intmain()
inti,a=0;
for(i=0;i<5;i++)
a+=fun0;
cout<<a<<end1;
return0;
A)20B)24C)25D)15
(分数:
2.00)
A.
B.
C.
D. √
解析:
[解析]由主函数入手,在for循环中调用fun函数,其中调用次数为5。
fun中i为静态变量,有效到文件结束。
第一次调用fun后为s=1,a=1;第二次调用后s=2,a=3第三次s=3,a=6;第四次s=4,a=10;第五次s=5,a=15。
29.阅读下面程序:
#include<iostream.h>
fun(inta,intb)
intc;
c=a+b;
returnc;
voidmain()
intx=6,y=7,z=8,r;
r=fun((x--,y++,x+y),z--);
cout<<r<<end1;
则该程序的输出结果是()。
A)11B)20C)21D)31
(分数:
2.00)
A.
B.
C. √
D.
解析:
[解析]由主函数入手,定义变量x、y、z,然后调用函数fun,其中的参数为(x--,y++,x+y)的计算结果和z-的计算结果,所以调用fun(13,8)计算结果为21。
30.对虚函数的调用()。
A)一定使用动态联编B)必须使用动态联编
C)一定使用静态联编D)不一定使用动态联编
(分数:
2.00)
A.
B.
C.
D. √
解析:
[解析]虚函数在运行阶段和类的对象绑定在一起,这样成为动态联编。
虚函数声明只能出现在类声明中虚函数原型中,而不能在成员的函数体实现的时候。
必须由成员函数来调用或者通过指针、引用来访问虚函数。
如果通过对象名来访问虚函数,则联编在编译过程中认为是静态联编。
31.下列函数的运行结果是()。
#include<iostream.h>
intadd(inta,intb);
voidmain()
externintx,y;
cout<<add(x,y)<<end1;
intx(20),y(5);
intadd(inta,intb)
ints=a+b;
returns;
A)25B)30C)20D)15
(分数:
2.00)
A. √
B.
C.
D.
解析:
[解析]由主函数:
main入手,定义外部变量x和y,调用函数add。
因为x,y为外部变量,所以“intx(20),y(5);”的赋值在add也是有效的,即add函数的运算结果为25。
32.下面程序的输出结果为()。
#include<iostream.h>
classTestClass
public:
TestClass()va1++;
staticintva1;
intTestClass:
:
va1=0;
voidmain()
TestClasscs1;
cout<<cs1.va1<<"";
TestClasscs2;
TestClasscs3,cs4;
cout<<cs2.va1<<end1;
A)03B)13C)14D)24
(分数:
2.00)
A.
B.
C. √
D.
解析:
[解析]由主函数main入手,定义TestClass类的对象cs1,执行cs1.va1,其中,va1为静态变量,根据“intTestClass:
:
va1=0;”初始化,TestClass中的TestClass(){va1++;}构造函数执行后,va1值为1。
主函数中接着定义对象cs2,cs3,cs4。
执行“cout<<cs2.va1<<end1;”中的va1值为4。
33.下面程序的运行结果是()。
#include<iostream>
usingna
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 语言 笔试