二级C++笔试337文档格式.docx
《二级C++笔试337文档格式.docx》由会员分享,可在线阅读,更多相关《二级C++笔试337文档格式.docx(21页珍藏版)》请在冰点文库上搜索。
![二级C++笔试337文档格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/10/7b1a3aaa-8aa3-48bb-aacf-65cbf8062370/7b1a3aaa-8aa3-48bb-aacf-65cbf80623701.gif)
C.不允许使用GOTO语句
D.语言中所没有的控制结构,应该采用前后一致的方法来模拟
[解析]限制使用GOTO语句是结构化程序设计的原则和方法之一,但不是绝对不允许使用GOTO语句。
选项A)、B)、D)为结构化程序设计的原则。
4.实现运行时的多态性要使用()。
A.重载函数
B.析构函数
C.构造函数
D.虚函数
[解析]C++中函数重载和运算符重载实现的多态性属于静态多态性,在程序编译时系统就能决定调用的是哪个函数。
动态多态性是在程序运行过程中才动态确定操作所针对的对象。
动态多态性是通过虚函数实现的。
5.下列是重载为非成员函数的运算符函数原型,其中错误的是()。
A.Fractionoperator+(Fraction,Fraction);
B.Fractionoperator-(Praction);
C.Fraction&
operator=(Fraction&
Fraction);
D.Fraction&
operator+=(Fraction&
[解析]由于取负运算符“-”是一元运算符,当作为成员函数重载时参数表中没有参数,那个唯一的操作数以this指针的形式隐藏在参数表中。
故选项C)错误。
6.下列程序输出的结果是()。
#include<stdio.h>
fun1(chara,charb)charc;
c=a;
a=b;
b=c;
fun2(char*a,charb)charc;
c=*a;
*a=b;
fun3(char*a,char*b)charc;
*a=*b;
*b=c;
chara,b;
a='
A'
;
b='
B'
fun1(a,b);
putchar(
A.;
B.;
b
[解析]由程序中的主函数main入手,分别调用fun1,fun2,fun3函数,得出输出结果。
其中,3个函数都是实现的两个形参的交换功能,只是值传递的方式不同,有的是引用,有的是传值。
第一个函数中参数采用的是值传递的方式,形参的变化不影响实参。
所以d调用fun1后,实参a和b并没有交换,仍然是AB。
第二个调用中,实参a采用的是地址,即传递的是地址,所以形参a的改变会影响实参a的值,即BB。
同理,调用fun3后为BA。
7.下列工具中为需求分析常用工具的是()。
A.PAD
B.PFD
C.N-S
D.DFD
[解析]需求分析常用的工具有数据流图(DFD)、数据字典(DD)、判定树和判定表。
PAD(问题分析图)、PFD(程序流程图)、N-S(盒式图)都是详细设计的常用工具,不是需求分析的工具。
8.有如下程序:
intx=3;
do
x-=2;
cout<<x;
while(!
(--x));
执行这个程序的输出结果是()。
A.1
C.1-2
D.死循环
[解析]此题考查的是do-while循环语句。
do-while循环首先执行do语句中的循环体,再判断是否需要继续执行循环。
题目中do语句“x-=2”,while语句中“--x”即x为0,取反为非0,循环继续执行;
执行“x-=2”和“--x”取反后,循环结束程序退出。
9.类模板template<classT>classx...,其中友元函数f对特定类型T(如int),使函数f(x<int>)成为x<int>模板类的友元,则其说明为()。
A.friendvoidf();
B.friendvoidf(x<T>);
C.friendvoidA:
:
f();
D.friendvoidC<T>:
f(x<T>);
[解析]声明一个函数模板的格式:
template<棋板形参表声明>函数声明。
调用模板函数时,如果与模板实参中最后的若干个参数有关的信息可以从模板函数的实参中获得,则相关的模板实参可以省略。
10.由于常对象不能被更新,因此()。
A.通过常对象只能调用它的常成员函数
B.通过常对象只能调用静态成员函数
C.常对象的成员都是常成员
D.通过常对象可以调用任何不改变对象值的成员函数
[解析]此题考查的是常对象与常成员函数的概念。
使用const关键字修饰的对象称为常对象,它不能被更新,所以常对象只能调用常成员函数而不能调用其他成员函数;
使用const关键字声明的成员函数是常成员函数,它也不能被更新,常成员函数只能调用常成员函数而不能调用其他函数。
11.下列程序的运行结果为()。
inta=2;
intb=a+1;
cout<<a/b<<endl;
A.0.66667
B.0
C.0.7
D.0.66666666
[解析]因为题目中定义的变量a和b均为整型数据,所以a/b即2/3得到的仍然是整型数据,得到0。
12.下列运算符中,()运算符在C++中不能重载。
A.&
&
B.[]
C.:
[解析]此题考查的是运算符的有关概念。
运算符重载是针对C++原有运算符进行的,不能通过重载创造新的运算符;
除了“.”、“.*”、“->*”、“:
”、“?
”这5个运算符之外,其他运算符都可以重载。
13.在ios中提供控制格式的标志位中,()是转换为十六进制形式的标志位。
A.hex
B.oct
C.dec
D.left
[解析]格式控制标志hex格式控制是整数按十六进制输出;
oct格式控制是整数按八进制输出:
dec格式控制是整数按十进制输出;
left输出数据在指定的宽度内左对齐。
14.下列程序的输出结果是()。
main()
intm=5;
if(m++>5)
cout<<m;
elsecout<<m--;
A.7
B.6
C.5
D.4
[解析]此题中,因为m++>5成立(此时m的值变为6),所以执行语句cout<<m;
输出结果为6。
15.有如下类定义:
classFoo
public:
Foo(intv):
value(v)//①
~Foo()//②
private:
Foo()//③
intvalue=0;
//④
其中存在语法错误的行是()。
A.①
B.②
C.⑧
D.④
[解析]此题考查的是类的定义。
C++语言规定,在类体内不允许对所定义的数据成员进行初始化。
16.在C++程序中,如果要求通过函数来实现一种简单的功能,并且要求尽可能加快程序的执行速度,则应该选用()。
A.内联函数
B.重载函数
C.递归调用
D.嵌套调用
[解析]此题考查的是内联函数的相关知识点。
C++引入内联函数是用它来代替C语言中的预处理宏函数,内联函数在调用时,是将表达式用内联函数体来替换,这样会加快程序的执行速度。
17.下列选项中,不是算法的基本特征的是()。
A.完整性
B.可行性
C.有穷性
D.拥有足够的情报
[解析]作为一个算法,一般应该具有下列4个特征:
①可行性,即考虑到实际的条件能够达到一个满意的结果;
②确定性,算法中的第一个步骤都必须是有明确定义的;
③有穷性,一个算法必须在有限的时间内做完;
④拥有足够的情报。
18.下列程序的输出的结果是()。
inti,k,a[10],p[3];
k=5;
for(i=0;
i<9;
i++)a[i]=i;
i<3;
i++)p[i]=a[i*(i+1)];
i++)k+=p[i]*2;
cout<<k;
A.20
B.21
C.22
D.23
[解析]程序中首先在第一个for循环中将a每一个元素赋值为0,1,2……。
然后在第二个循环中p的第i元素为a中的第i*(i+1),即0,2,6,第三个循环中每个p中的元素值乘以2,然后加上5,累加。
答案为21。
19.下列关于模板的叙述中,错误的是()。
A.模板声明中的第一个符号总是关键字template
B.在模板声明中用“<”和“>”括起来的部分是模板的形参表
C.类模板不能有数据成员
D.在一定条件下函数模板的实参可以省略
[解析]类模板不是一个实实在在的类,本身在编译中不会生成任何代码;
用类模板定义一个对象时,不能省略实参;
类模板的成员函数都是模板函数。
C++中可以为类模板的参数设置默认值,可以有数据成员,选项C)错误。
20.有如下类定义:
classAA
inta;
intgetRef()constreturn&
a;
//①
intgetValue()constreturna;
//②
voidset(intn)consta=n;
//③
friendvoidshow(AAa
A.constcout<<a;
[解析]此题考查了常成员函数和友元函数的概念。
选项A)中,getRef()函数的返回值和函数类型不符,故错误;
选项C)中set()常成员函数改变了数据成员的值,这是不允许的;
选项D)中show()函数被同时定义成友元函数和常成员函数是错误的。
21.有如下程序:
#include<iostream>
usingnamespacestd;
classBase
voidfun()cout<<"
Base:
fun"
<<endl;
classDerived:
publicBase
voidfun()
______
cout<<"
Derived:
intmain()
Derivedd;
d.fun();
return0;
已知其执行后的输出结果为:
fun
则程序中下划线处应填入的语句是()。
A.Base.fun();
B.Base:
fun();
C.Base->fun();
D.fun();
[解析]此题考查的是继承的使用。
分析题目可知,横线处应填入对基类成员函数fun()的调用语句,此处只能使用作用域运算符“:
”才能调用到基类的同名函数。
22.有如下程序:
int*p;
*p=9;
cout<<"
Thevalueatp:
"
<<*p;
编译运行程序将出现的情况是()。
A.编译时出现语法错误,不能生成可执行文件
B.运行时一定输出:
9
C.运行时一定输出:
*9
D.运行时有可能出错
[解析]此题考查的是指针的使用。
本题中,在给*p赋值前,指针p并没有指向一个具体的对象。
此时可以通过编译,但运行时由于p中为随机值,该赋值可能会破坏内存中某个重要的地址空间的内容,导致程序出错。
23.线性表进行二分法检索,其前提条件是()。
A.线性表以顺序方式存储,并按关键码值排好序
B.线性表以顺序方式存储,并按关键码的检索频率排好序
C.线性表以链式方式存储,并按关键码值排好序
D.线性表以链式方式存储,并按关键码的检索频率排好序
[解析]对线性表进行二分法检索,要求线性表是按顺序方式存储,并按关键码值的大小排好序,而不是按关键码的检索频率排序。
24.下列关于类和对象的叙述中,错误的是()。
A.一个类只能有一个对象
B.对象是类的具体实例
C.类是对某一类对象的抽象
D.类和对象的关系是一种数据类型与变量的关系
[解析]此题考查的是类和对象的相关概念。
类是将不同的数据和与这些数据相关的操作封装起来装在一起的集合体。
对象是类的具体实例,也即类是对某一类对象的抽象,类和对象之间可以说是数据类型与变量的关系。
一个类可以有无数个对象。
25.下列选项中不属于结构化程序设计方法的是()。
A.自顶向下
B.逐步求精
C.模块化
D.可复用
[解析]结构化程序设计的主要原则概括为自顶向下,逐步求精,限制使用GOTO语句。
26.以下都是C++语言标识符的是()。
A.dsfa,df4,f$
B.huhj,a^,k2
C.3k,hj_9
D._ok,jk,k8
[解析]此题考查的是标识符。
标识符是由数字、字母以及下划线构成,其中第一个字符必须是字母或下划线,中间不能有空格;
标识符的长度是任意的,但由于编译系统的限制一般不超过31个字符;
标识符中的大小写字母是不同的;
定义标识符时不能采用系统的保留字。
符合这些要求的只有选项D)。
27.下列关于软件测试的描述中正确的是()。
A.软件测试的目的是证明程序是否正确
B.软件测试的目的是使程序运行结果正确
C.软件测试的目的是尽可能多地发现程序中的错误
D.软件测试的目的是使程序符合结构化原则
[解析]软件测试是为了尽可能多地发现程序中的错误,尤其是至今尚未发现的错误。
28.下列程序运行后的输出结果是()。
voidfun(int,int,int*);
intx,y,z;
fun(5,6,&
x);
fun(7,x,&
y);
fun(x,y,&
z);
cout<<x<<"
"
<<y<<"
<<z<<endl;
voidfun(inta,intb,int*c)
b+=a;
*c=b-a;
A.5,5,5
B.6,6,6
C.5,6,7
D.7,7,7
[解析]由程序中的main函数入手,分别调用fun函数,第一个调用中x参数为引用地址,调用后x的值为6,因为参数为地址,所以第二个调用中的x参数值为6,调用后y的计算结果为6。
同理,z在第三个函数调用后z的值为6。
29.用链表表示线性表的优点是()。
A.便于随机存取
B.花费的存储空间较顺序存储少
C.便于插入和删除操作
D.数据元素的物理顺序和逻辑顺序相同
[解析]在链表中因为除了存放数据元素之外,还要存放指针,所以链表花费的存储空间比顺序表还要多。
在插入和删除数据元素时,只需要移动相应的记录指针即可。
在链表中,数据的物理结构与逻辑结构不一定相同,因为是靠指针来实现对数据的指定,所以不能进行随机存取。
30.下列有关指针的用法中错误的是()。
A.inti;
int*p=&
i;
B.inti;
i=*p;
C.int*p;
p=0;
D.inti=5;
p=&
[解析]“inti;
”语句定义了一个整型变量i。
“int*p”定义了一个整型指针p。
选项A)中的“int*p=&
”是定义整型指针变量p,并指向整型i的地址。
选项B)中“i=*p”语句是将p指向的变量赋值给i,而指针p没有初始化,所以选项B)错误。
选项C)中“p=0;
”表示p指向0的地址。
选项D)中“&
i”为取i的地址,并赋值给p。
31.在数据库设计中,将E-R图转换为关系模式的过程属于()。
A.需求分析阶段
B.逻辑设计阶段
C.概念设计阶段
D.物理设计阶段
[解析]数据库设计阶段主要包括需求分析、概念设计、逻辑设计和物理设计。
其中逻辑设计的主要工作是将E-R图转换为关系模式。
32.软件需求分析阶段的工作,可以分为4个方面:
需求获取、需求分析、编写需求规格说明书以及()。
A.阶段性报告
B.需求评审
C.总结
D.都不正确
[解析]需求分析是软件定义时期的最后一个阶段。
可以概括为4个方面:
①需求获取:
②需求分析;
③编写需求规格说明书;
④需求评审。
33.结构化分析方法是面向()的自顶向下、逐步求精进行需求分析的方法。
A.对象
B.数据结构
C.数据流
D.目标
[解析]结构化分析方法是面向数据流进行需求分析的方法,采用自顶向下、逐步求精,建立系统的处理流程,以数据流图和数据字典为主要工具,建立系统的逻辑模型。
34.下列程序的运行结果为()。
35.下列程序的输出结果是()。
#ificlude<iostream>
cout.fill('
*'
);
cout.width(5);
cout<<oct<<100<<endl;
A.**100
B.**144
C.100**
D.144**
[解析]cout.fill()用于设置或返回输出的填充字符,默认是空格,fill()函数的设置一直有效,直到下一个fiN()函数改变该值为止。
cout.width()用于设置或返回(不带参数)输出数据的字段宽度,此函数的设置只对下一个输出有效。
注意:
默认为输出数据在指定宽度内右对齐,oct格式控制是整数按八进制输出。
二、填空题(总题数:
15,分数:
30.00)
36.数据库系统的主要特点为数据集成性、数据的高1和低冗余性、数据独立性和数据统一管理和控制。
填空项1:
__________________
(正确答案:
共享性)
[解析]数据库系统中的数据能被不同的应用程序使用,实现了数据的高度共享,从而降低了数据的冗余,这也是数据库的主要目的。
37.数据库的逻辑模型设计阶段的任务是将1转换成关系模式。
E-R图)
[解析]数据库逻辑设计的任务是将概念模型进一步转化成相应的数据模型。
而E-R图是主要的概念模型,因此数据库的逻辑设计的主要工作是将E-R图转换成关系模式。
38.在面向对象方法中,1描述的是具有相似属性与操作的一组对象。
类)
[解析]在面向对象方法中,把具有相同属性和方法的对象称为类,类是对象的抽象,对象是类的实例。
39.最简单的交换排序方法是1。
冒泡排序)
[解析]交换排序是指借助数据元素之间的互相交换进行排序的一种方法,冒泡排序是一种最简单的交换排序方法,它是通过相邻元素之间的相互交换逐步将线性表变成有序。
40.在链表的运算过程中,能够使空表与非空表的运算统一的结构是1。
循环链表)
[解析]在循环链表中,由于设置了一个头结点,因此在任何情况下,循环链表中至少有一个结点存在,从而使空表与非空表的运算统一。
41.插入排序算法的主要思想:
每次从未排序序列中取出一个数据,插入到已排序序列中的正确位置。
Insert类的成员函数sort()实现了插入排序算法,请填空。
classInsert
Insert(int*b0,intn0):
b(b0),n(n0)<);
//参数b0是某数组首地址,n是数组元素个数
voidsort()
//此函数假设已排序序列初始化状态只包含b[0],未排序序列初始为b[1]...b[n-1]
for(inti=1;
i<n;
++i)