1、二级 C+笔试 333及答案解析(总分:98.00,做题时间:90 分钟)一、B选择题/B(总题数:35,分数:70.00)1.在 C+中用来实现运行时多态性的是( )。(分数:2.00)A.重载函数B.析构函数C.构造函数D.虚函数2.下面程序输出的结果是( )。 #includeiostream using namespace std; int fuc (char *x); int main() coutfuc(“hello“)endl; return 0; int fuc(char *x) char *y=x; while(*y! =/0)y+; return(y-x); (分数:2.0
2、0)A.5B.6C.0D.语法错误,不能输出结果3.在公有派生的情况下,派生类中定义的成员函数只能访问原基类的( )。(分数:2.00)A.公有成员和保护成员B.公有成员和私有成员C.私有成员和保护成员D.公有成员、私有成员和保护成员4.下面程序的输出结果是( )。 #includeiostream using namespace std; int main() int a=2,b= -1,c=2; if(ab) if(b0) c=0; else c+=1; coutcendl; return 0; (分数:2.00)A.0B.1C.2D.35.下面选项中,不属于 C+语句的是( )。(分数:
3、2.00)A.;B.cout“Hello!“endlC.;D.int i=1;int f=i;coutfendl;6.在进行完任何 C+流的操作后,都可以用 C+流的有关成员函数检测流的状态;其中只能用于检测输入流状态的操作函数名称是( )。(分数:2.00)A.failB.eofC.badD.good7.设有两个串 p和 q,求 q在 p中首次出现位置的运算称作( )。(分数:2.00)A.连接B.模式匹配C.求子串D.求串长8.下列叙述中正确的是( )。(分数:2.00)A.一个算法的空间复杂度大,则其时间复杂度也必定大B.一个算法的空间复杂度大,则其时间复杂度必定小C.一个算法的时间复杂
4、度大,则其空间复杂度必定小D.上述三种说法都不对9.下列关于抽象类和纯虚函数的说法错误的是( )。(分数:2.00)A.抽象类只能作为基类使用,而纯虚函数的实现由派生类给出B.抽象类是指具有纯虚函数的类C.纯虚函数是一种特殊的虚函数,它允许没有具体的实现D.一个基类的说明中有纯虚函数,则该基类的派生类一定不再是抽象类10.C+中,对于结构中定义的成员,其默认的访问权限为( )。(分数:2.00)A.protectedB.publicC.staticD.private11.cout是 I/O流库预定义的( )。(分数:2.00)A.常量B.类C.对象D.成员函数12.在任意一棵二叉树中,度为 0
5、的结点总是比度为 2的结点多( )。(分数:2.00)A.1个B.2个C.3个D.4个13.C+语言中 while循环和 dowhile循环的主要区别是( )。(分数:2.00)A.dowhile的循环体至少五条件执行一次B.while的循环控制条件比 dowhile的循环控制条件严格C.dowhile允许从外部转到循环体内D.dowhile的循环体不能是复合语句14.以下数据结构中不属于线性结构的是( )。(分数:2.00)A.队列B.线性表C.二叉树D.栈15.下列叙述中正确的是( )。(分数:2.00)A.软件工程只是解决软件项目的管理问题B.软件工程主要解决软件产品的生产率问题C.软件
6、工程的主要思想是强调在软件开发过程牛需要应用工程化原则D.软件工程只是解决软件开发中的技术问题16.设一棵完全二叉树共有 699个节点,则在该二叉树中的叶子节点数为( )。(分数:2.00)A.349B.350C.255D.35117.若有一个 MyClas类,则执行语句 MyClas a,b(2),*p;后,自动调用该类的构造函数 ( )次。(分数:2.00)A.2B.3C.4D.不确定18.希尔排序法属于( )。(分数:2.00)A.交换类排序法B.插入类排序法C.选择类排序法D.建堆排序法19.已知:int n=10; 在下列定义引用的语句中,正确的是( )。(分数:2.00)A.int
7、 r=5; coutiendl; return 0; (分数:2.00)填空项 1:_45.函数 f()的功能是将形参 x的值转换为二进制数,所得二进制数的每一位数放在一维数组 y中返回。二进制的最低位放在下标为 0的元素中,请将程序补充完整。 void f(int x,int y) int m=0,n; do n=xU 【10】 /U; ym+ =n; x/=2; while(x); (分数:2.00)填空项 1:_46.在 C+中,类的成员有 3种访问权限,它们分别是公有、U 【11】 /U和私有。(分数:2.00)填空项 1:_47.下列程序在构造函数和析构函数中申请和释放类的私有成员,
8、请完成该程序。 class Myclas int *x; public: MyClas(int n); MyClas(); ; MyClas:MyClas(intn) U 【12】 /U; MyClas:MyClas() U 【13】 /U; (分数:2.00)填空项 1:_48.在 C+中,设置虚基类的目的是U 【14】 /U。(分数:2.00)填空项 1:_49.以下程序执行后输出的结果是U 【15】 /U。 #includeiostream #includefstream using namespace std; int main() ofstream ofile(“D:/temp.tx
9、t“); if(!ofile) cout“temp.txt cannot open“endl; return 0; ofile“This is a book“ “ “ 54321endl; ofile.close(); ifstream ifile(“D:/temp.txt“); if(!ifile) cout“temp.txt cannot open“ endl; return 0; charstr40; ifile str; ifile.close(); coutStrendl; return 1; (分数:2.00)填空项 1:_二级 C+笔试 333答案解析(总分:98.00,做题时间
10、:90 分钟)一、B选择题/B(总题数:35,分数:70.00)1.在 C+中用来实现运行时多态性的是( )。(分数:2.00)A.重载函数B.析构函数C.构造函数D.虚函数 解析:解析 C+中的多态性分为两类:编译时的多态性和运行时的多态性。编译时的多态性通过函数重载和模板体现的,而运行时的多态性是通过虚函数体现的。2.下面程序输出的结果是( )。 #includeiostream using namespace std; int fuc (char *x); int main() coutfuc(“hello“)endl; return 0; int fuc(char *x) char *
11、y=x; while(*y! =/0)y+; return(y-x); (分数:2.00)A.5 B.6C.0D.语法错误,不能输出结果解析:解析 函数 fuc()的功能是计算字符串 x的长度,因此程序的输出是 5。3.在公有派生的情况下,派生类中定义的成员函数只能访问原基类的( )。(分数:2.00)A.公有成员和保护成员 B.公有成员和私有成员C.私有成员和保护成员D.公有成员、私有成员和保护成员解析:解析 无论在什么派生情况下,派生类总是能够访问到基类公有和保护成员,而无法访问到基类的私有成员。4.下面程序的输出结果是( )。 #includeiostream using namespa
12、ce std; int main() int a=2,b= -1,c=2; if(ab) if(b0) c=0; else c+=1; coutcendl; return 0; (分数:2.00)A.0B.1C.2 D.3解析:解析 本题考查订语句中 if与 else的搭配问题。C+程序在编译时并不看缩进格式,而只是关心语法结构。根据规定:else 关键字总是与它前面最近的未配对的且可见的那个 if关键字配对。因此上述程序中的 else应该与第 2个订关键字配对,所以程序最后 c的值并没有改变。5.下面选项中,不属于 C+语句的是( )。(分数:2.00)A.;B.cout“Hello!“en
13、dl C.;D.int i=1;int f=i;coutfendl;解析:解析 选项 A和选项 D是复合语句,C 是空语句,而选项 B中没有以“;”结尾,这不是 C+语句。6.在进行完任何 C+流的操作后,都可以用 C+流的有关成员函数检测流的状态;其中只能用于检测输入流状态的操作函数名称是( )。(分数:2.00)A.failB.eof C.badD.good解析:解析 在本题的 4个选项中,只有 eof函数能用于检测输入操作。7.设有两个串 p和 q,求 q在 p中首次出现位置的运算称作( )。(分数:2.00)A.连接B.模式匹配 C.求子串D.求串长解析:解析 设有两个串 p和 q,求
14、 q在 p中首次出现位置的运算称为模式匹配。8.下列叙述中正确的是( )。(分数:2.00)A.一个算法的空间复杂度大,则其时间复杂度也必定大B.一个算法的空间复杂度大,则其时间复杂度必定小C.一个算法的时间复杂度大,则其空间复杂度必定小D.上述三种说法都不对 解析:解析 算法的时间复杂度和空间复杂度之间没有必然联系。9.下列关于抽象类和纯虚函数的说法错误的是( )。(分数:2.00)A.抽象类只能作为基类使用,而纯虚函数的实现由派生类给出B.抽象类是指具有纯虚函数的类C.纯虚函数是一种特殊的虚函数,它允许没有具体的实现D.一个基类的说明中有纯虚函数,则该基类的派生类一定不再是抽象类 解析:解
15、析 一个抽象类的派生类在重新定义一个纯虚函数时,可以继续将之声明为纯虚函数,此时该派生类仍然为抽象类。10.C+中,对于结构中定义的成员,其默认的访问权限为( )。(分数:2.00)A.protectedB.public C.staticD.private解析:解析 C+中,结构与类的不同之处在于结构中的成员默认是公有的,结构的继承默认也是公有的;而类的继承默认是私有的,类的成员默认也是私有的。11.cout是 I/O流库预定义的( )。(分数:2.00)A.常量B.类C.对象 D.成员函数解析:解析 C+中包含了 4个预定义的流对象:cout、cin、cerr、clog。12.在任意一棵二叉
16、树中,度为 0的结点总是比度为 2的结点多( )。(分数:2.00)A.1个 B.2个C.3个D.4个解析:解析 根据二叉树的性质,叶子节点总是比度为 2的节点多一个。13.C+语言中 while循环和 dowhile循环的主要区别是( )。(分数:2.00)A.dowhile的循环体至少五条件执行一次 B.while的循环控制条件比 dowhile的循环控制条件严格C.dowhile允许从外部转到循环体内D.dowhile的循环体不能是复合语句解析:解析 dowhile 语句与 while语句不同的是,dowhile 循环中的语句至少会执行一次,而 while语句中当条件在第一次循环就不满足
17、时,语句一次也不会执行。14.以下数据结构中不属于线性结构的是( )。(分数:2.00)A.队列B.线性表C.二叉树 D.栈解析:解析 线性表、栈和队列所表达和处理的数据都以线性结构为组织形式。15.下列叙述中正确的是( )。(分数:2.00)A.软件工程只是解决软件项目的管理问题B.软件工程主要解决软件产品的生产率问题C.软件工程的主要思想是强调在软件开发过程牛需要应用工程化原则 D.软件工程只是解决软件开发中的技术问题解析:解析 软件工程是计算机软件开发和维护的工程学科,它采用工程的概念原理、技术和方法来开发和维护软件,它把经过实践考验而证明正确的管理技术和当前能够得到的最好技术结合起来。
18、16.设一棵完全二叉树共有 699个节点,则在该二叉树中的叶子节点数为( )。(分数:2.00)A.349B.350 C.255D.351解析:解析 所谓完全二叉树是指除最后一层外,每一层上的结点数均达到最大值;在最后一层上只缺少右边的若干结点。具有 n个结点的完全二叉树,其父结点数为 int(n/2),而叶子结点数等于总结点数减去父结点数。本题 n=699,故父结点数等于 int(699/2)=349,叶子结点数等于 699-349=350。17.若有一个 MyClas类,则执行语句 MyClas a,b(2),*p;后,自动调用该类的构造函数 ( )次。(分数:2.00)A.2 B.3C.
19、4D.不确定解析:解析 C+在创建一个对象时,会自动调用类的构造函数,在构造函数中可以执行初始化成员变量的操作。题目中语句创建了两个对象 a、b 和一个对象指针。在创建 a和 b时,系统会调用类的构造函数。而在创建指针 p时,不调用类的构造函数,因为指针 p本身不定义类对象,而是定义一个可以指向MyClas对象的指针。18.希尔排序法属于( )。(分数:2.00)A.交换类排序法B.插入类排序法 C.选择类排序法D.建堆排序法解析:解析 希尔排序法的基本思想是:将整个无序序列分割成若干小的子序列分别进行插入排序。所以希尔排序法属于插入类排序。19.已知:int n=10; 在下列定义引用的语句
20、中,正确的是( )。(分数:2.00)A.int r=5; coutiendl; return 0; (分数:2.00)填空项 1:_ (正确答案:5)解析:解析 对引用的操作实际上就是对其所代表的数据对象的操作。在本题中,引用 r被变量 i 初始化,r 被赋值为 7即等于 i被赋值。因此输出结果为 5。45.函数 f()的功能是将形参 x的值转换为二进制数,所得二进制数的每一位数放在一维数组 y中返回。二进制的最低位放在下标为 0的元素中,请将程序补充完整。 void f(int x,int y) int m=0,n; do n=xU 【10】 /U; ym+ =n; x/=2; while
21、(x); (分数:2.00)填空项 1:_ (正确答案:2)解析:解析 函数 f()的功能是将形参 x的值转换为二进制数,所以程序的空白处应填入 2。46.在 C+中,类的成员有 3种访问权限,它们分别是公有、U 【11】 /U和私有。(分数:2.00)填空项 1:_ (正确答案:保护)解析:解析 类成员有 3类访问权限:公有(public)、私有(private)和保护(protected)。47.下列程序在构造函数和析构函数中申请和释放类的私有成员,请完成该程序。 class Myclas int *x; public: MyClas(int n); MyClas(); ; MyClas:
22、MyClas(intn) U 【12】 /U; MyClas:MyClas() U 【13】 /U; (分数:2.00)填空项 1:_ (正确答案:x=new int(n),delete x)解析:解析 在类的构造函数中,是申请内存空间,并使指针 x指向构造函数的形参 n,所以构造函数的函数体应为:x=newint(n);。在析构函数中,是释放类的私有成员,即指针变量 x,所以析构函数的函数体应该为 deletex;。48.在 C+中,设置虚基类的目的是U 【14】 /U。(分数:2.00)填空项 1:_ (正确答案:解决二义性问题)解析:解析 C+中可以将共同基类设置为虚基类,这时从不同的路
23、径继承过来的该类成员在内存中只有一个复制,这样就可解决同名成员的二义性。49.以下程序执行后输出的结果是U 【15】 /U。 #includeiostream #includefstream using namespace std; int main() ofstream ofile(“D:/temp.txt“); if(!ofile) cout“temp.txt cannot open“endl; return 0; ofile“This is a book“ “ “ 54321endl; ofile.close(); ifstream ifile(“D:/temp.txt“); if(!ifile) cout“temp.txt cannot open“ endl; return 0; charstr40; ifile str; ifile.close(); coutStrendl; return 1; (分数:2.00)填空项 1:_ (正确答案:This)解析:解析 程序中利用对象 ofile在文件 temp.txt中写入“This is a book 54321”。然后利用对象 ifile打开文件,将其中的数据输入到变量 str中,由于读时遇到空格就终止,所以 str中存放的字符串为“This”。