版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
国家二级(C++)笔试模拟试卷17(共9套)(共440题)国家二级(C++)笔试模拟试卷第1套一、公共基础选择题(本题共10题,每题1.0分,共10分。)1、下列叙述中错误的是A、一种数据的逻辑结构可以有多种存储结构B、数据的存储结构与数据处理的效率无关C、数据的存储结构与数据处理的效率密切相关D、数据的存储结构在计算机中所占的空间不一定是连续的标准答案:2知识点解析:一种数据的逻辑结构根据需要可以表示成多种存储结构,常用的存储结构有顺序、链接、索引等,选项A和选项D正确。采用不同的存储结构,其数据处理的效率不同,因此,在进行数据处理时,选择合适的存储结构是很重要的,选项C正确,选项B错误,应为所选。2、下列关于栈的叙述正确的是A、在栈中只能插入数据B、在栈中只能删除数据C、栈是先进先出的线性表D、栈是先进后出的线性表标准答案:8知识点解析:栈是一种特殊的线性表,其插入与删除运算都只在线性表的一端进行。在这种线性表的结构中,一端封闭,不允许插入与删除元素;另一端开口,允许插入与删除元素。在栈中不仅能插入数据,也能删除数据,选项A与B都错。栈是后进先出的线性表,而不是先进先出的线性表,选项C的说法错误,选项D正确。3、一棵二叉树中共有70个叶子结点与80个度为1的结点,则该二叉树中的总结点数为A、221B、219C、231D、229标准答案:2知识点解析:在任意一棵二叉树中,度为0的结点(也就是叶子结点)总比度为2的结点多一个。由于本题中的二叉树有70个叶子结点,所以有69个度为2的结点。该二叉树中总结点数为:度为2的结点数+度为1的结点数+度为0的结点数=69+80+70=219。4、下列叙述中正确的是A、线性链表中的各元素在存储空间中的位置必须是连续的B、线性链表中的表头元素一定存储在其他元素的前面C、线性链表中的各元素在存储空间中的位置不一定是连续的,但表头元素一定存储在其他元素的前面D、线性链表中的各元素在存储空间中的位置不一定是连续的,且各元素的存储顺序也是任意的标准答案:8知识点解析:在线性表的链式存储结构中,各数据结点的存储序号不连续,且各结点在存储空间中的位置关系与逻辑关系也不一致。在线性链表中,各数据元素之间的前后件关系是由各结点的指针域来指示的。所以,选项D正确。5、下面对对象概念描述错误的是A、任何对象都必须有继承性B、对象是属性和方法的封装体C、对象间的通讯靠消息传递D、操作是对象的动态属性标准答案:1知识点解析:继承是面向对象的方法的一个主要特征。继承是使用已有的类定义做为基础建立新类的定义技术。已有的类可当做基类来引用,则新类相应地可当做派生类来引用。但并不是所有的对象都必须有继承性。因此,选项A中的说法是错误的,应为所选。6、在结构化设计方法中生成的结构图(SC)中,带有箭头的连线表示A、模块之间的调用关系B、程序的组成成份C、控制程序的执行顺序D、数据的流向标准答案:1知识点解析:在结构图中,用带有箭头的连线表示模块之间的调用关系。箭头由前一个模块指向后一个模块,表示前一个模块调用后一个模块。本题的正确答案为A。7、下列叙述中正确的是A、接口复杂的模块,其耦合程度一定低B、耦合程度弱的模块,其内聚程度一定低C、耦合程度弱的模块,其内聚程度一定高D、上述三种说法都不对标准答案:4知识点解析:影响模块之间耦合的主要因素有两个:模块之间的连接形式,模块接口的复杂性。一般来说,接口复杂的模块,其耦合程度要比接口简单的的模块强,所以选项A的说法错误;耦合程度弱的模块,其内聚程度一定高,选项B错误;选项C正确。8、在关系模型中,A、为了建立一个关系,首先要构造数据的逻辑关系B、表示关系的二维表中各元组的每一个分量还可以分成若干数据项C、一个关系的属性名表称为关系模式D、一个关系可以包括多个二维表标准答案:4知识点解析:在关系模型中,不需要事先构造数据的逻辑关系,只要将数据按照一定的关系存入计算机,也就是建立关系,选项A错误。对于表示关系的二维表,其最基本的要求是,表中元组的每一个分量必须是不可分的数据项,即不允许表中再有表,选项B和D错误。本题的正确答案是C。9、下列关系运算中,能使经运算后得到的新关系中属性个数多于原来关系中属性个数的是A、选择B、连接C、投影D、并标准答案:2知识点解析:连接运算是对两个关系进行的运算,其意义是从两个关系的笛卡尔积中选出满足给定属性间一定条件的那些元组。而两个关系的笛卡尔积中的属性个数是两个原关系中的属性个数之和。即两个关系经连接运算后得到的新关系中属性个数多于原来关系中属性个数。正确答案是B。10、下列关于E-R图的描述中正确的是A、E-R图只能表示实体之间的联系B、E-R图只能表示实体和实体之间的联系C、E-R图只能表示实体和属性D、E-R图能表示实体、属性和实体之间的联系标准答案:8知识点解析:E-R图中,用3种图框分别表示实体、属性和实体之间的联系:矩形框表示实体,框内标明实体名;椭圆状框表示实体的属性,框内标明属性名;菱形框表示实体间的联系,框内标明联系名;实体与其属性之间以无向边连接,菱形框与相关实体之间也用无向边连接,并在无向边旁标明联系的类型。综上所述,用E-R图不仅可以简单明了地描述实体及其相互之间的联系,还可以方便地描述多个实体集之间的联系和一个实体集内部实体之间的联系。选项A、B、C的说法都错误,本题的正确答案是D。二、选择题(本题共25题,每题1.0分,共25分。)11、面向对象程序设计将数据和()放在一起,作为一个相互依存、不可分割的整体来处理。A、对数据的操作B、信息C、数据隐藏D、数据抽象标准答案:1知识点解析:面向对象语言包含3个要素,即对象、类和继承。这3个要素反映了面向对象的传统观念。面向对象程序设计的本质是把数据和对数据的操作当成一个整体即对象。12、设a和b均为double型变量,且a=5.5、b=2.5,则表达式(int)a+b/b的值是A、6.5B、6C、5.5D、6标准答案:8知识点解析:本题考核运算符的优先级和数据类型转换,此方面的知识点应该着重掌握。在表达式中,优先级最高的是(int)a,结果是5。其次是b/b,结果是1.0,最后相加结果为6.000000(表达式的最终结果为double型)。13、for(intx=0,y=0;!x&&y<=5;y++)语句执行循环的次数是A、0B、5C、6D、无数次标准答案:4知识点解析:本题考核for循环语句。题中x=0,则!x永远为真,对于条件表达式“!x&&y<=5”只考虑“y<=5”,由于每次循环y都增加1,而且y从0开始到5。所以可知总共循环了6次。14、下列关于类中成员函数特征的描述中错误的是A、类的成员函数一定是内联函数B、类的成员函数可以重载C、成员函数可以设置参数的默认值D、成员函数可以是静态的标准答案:1知识点解析:本题考核类的定义。类的成员函数描述类所表达的问题的行为。类中所有的成员函数都必须在类体中进行说明。但成员函数的定义既可以在类体内给出,也可以在类体外给出。在类定义体中实现的函数都是内联函数。在定义体外实现的函数可以通过在函数说明和定义上分别加上inline来表示该函数是内联的,否则不是内联函数。15、设有语句:charstr1[]="string",str2[8],*str3,*str4="string";,则下列对库函数strcpy调用不正确的是A、strcpy(str1,"Hello1");B、strcpy(str2,"Hello2");C、strcpy(str3,"Hello3");D、strcpy(str4,"Hell04");标准答案:4知识点解析:本题考核函数调用。函数strcpy的函数原型为:char*strcpy(char*strDest,constchar*trSrC);,其功能是复制strSrc所有字符到strDest,并返回strDest。根据函数strcpy的原型可知选项A)、B)和D)的调用都是正确的。在C)选项中,由于指针*str3没有初始化其字符长度,容易引起访问越界,故是不正确的。16、不能作为函数重载的判断依据的是A、constB、返回类型C、参数个数D、参数类型标准答案:2知识点解析:本题考核函数重载。所谓函数重载,是指同一个函数名可以对应多个函数的实现。进行函数重载时,要求同名函数在参数个数上不同,或者参数类型上不同。即重载函数不许具有相同的形参列表。函数的返回类型不能作为函数重载的判断依据。const是函数的一部分参与函数的重载17、有如下数组声明:intvalue[30];,下标值引用错误的是A、value[30]B、value[0]C、value[10]D、value[20]标准答案:1知识点解析:本题考核对数组的引用。在C++语言中,数组的下标是从0开始的,最大的下标值比所定义的数组长度的值小1。同时需要注意的是,C++语言中,编译和执行时并不检查数组下标是否越界。因此value[30]在编译阶段是正确的,但是在运行时会出现错误。18、设有以下语句,对a数组元素的引用中(其中0<=i<10)不正确的是inta[10]={0,1,2,3,4,5,6,7,8,9},*p=a;A、a[p-a]B、*(&a[i])C、p[i]D、*(*(a+i))标准答案:8知识点解析:本题考核数组与指针。A选项中,p为指针,数组名a代表数组的首地址,所以p-a就是指针到数组首地址的偏移量。B选项中,&a[i]是取数组a中第i个元素的地址,而对于*(&a[i],由指针运算符*的运算规则可知,语句*(&a[i]就是返回地址&a[i]空间中存放的值,也即a[i]。C)选项,由于指针p已指向数组a,所以p[i]就等于a[i]。这是常用的一种数组元素引用方式。D)选项是以指针方式对数组元素进行引用,由于a只是代表数组的首地址,并不是指针,所以表达式*(*(a+i)是错误的,正确的引用应该为:*(*(p+i))。19、有以下程序#include<iostream>usingnamespacestd;inta;intfun();intmain(){externinta;intb;a=100;b=fun();cout<<b<<end1;return0;}intfun(){externinta;return(10*A);}其程序运行后的输出结果是A、100B、10C、1000D、10000标准答案:4知识点解析:本题考核变量的作用域、生存周期和存储类别(自动、静态、存储器、外部)。先来了解外部变量:外部变量用关键字extern表示。由于外部变量可以被程序中的所有函数共同访问,其作用域为全局,因此也称为全局变量。对于外部变量而言,“定义变量”和“说明变量”是两个不同的概念。定义a为外部变量是告诉编译程序,a是一个外部变量,并要求系统为a分配一个固定的永久存储空间。a的值在整个程序的运行期间都存在,只有当定义它的程序运行结束时,它的存储空间才释放。外部变量定义后,当程序中的函数要引用外部变量时,应在函数中作引用说明。在此程序中,在第二行定义了一个外部变量a,主函数main给外部变量赋的初始值为100,当调用函数fun()时,外部变量a的值传到函数fun()中,因此函数所返回的值为100*10=1000。20、以下函数实现的功能是voidfun(char*s){char*p,*q,temp;p=s;q=s+strlen(s)-1;while(p<q){temp=*p;*p=*q;*p=temp;p++;q--;}}A、将一个字符串首尾颠倒B、计算字符串的长度C、统计字符串中的空格个数D、将字符串中的小写字母变成大写字母标准答案:1知识点解析:本题考核while循环语句和指针的使用。在该函数中,循环开始时,指针p指向字符串的第1个字符,指针q指向字符串的最后一个字符,首先交换这两个字符:然后,指针p前进一个字符位置(指向下一个字符),指针q后退一个字符位置(指向前一个字符);经过若干次循环,条件p<q将为假(即指针p和指针q相遇),循环结束。从而实现了将一个字符串首尾颠倒的功能。21、有如下类的定义。空格处的语句是classMyClass{______intx,y;public:MyClass(inta=0,intb=0){x=a;y=b;}staticvoidchange(){x-=10;y-=10;}};A、staticB、constC、privateD、不需要填入内容标准答案:1知识点解析:本题考核静态数据成员和静态成员函数。类的静态成员函数只可以直接访问类中的静态成员,不能直接访问类中的非静态成员。对于上述类的定义,由于在静态成员函数change()访问了类MyClass的数据成员x和y,只能把x和y定义为静态数据成员。22、设有以下定义和程序:#include<iostream.h>classA1{public:voidshow1(){cout<<"classA1”<<end1;}};classA2:publicA1{public:voidshow2(){cout<<"classA2"<<end1;}};classA3:protectedA2{public:voidshow3(){cout<<"classA1”<<end1;}};voidmain(){A1obj1;A2obj2;A3obj3;}则以下不合语法的调用语句是A、obj1.show1();B、obj2.show1();C、obj3.show1();D、obj2.show2();标准答案:4知识点解析:本题考核派生类的使用以及访问权限问题。C++中,通过类的对象只能访问类的公有成员,不能访问类的保护成员和私有成员。A2是A1的公有派生类,A3是A2的保护派生类,所以类A1的成员函数show1()在类A3中呈现保护属性,不能通过A3类的对象访问。23、如果算符函数调用格式的表达式:x.operator-(operator++(y,0)中的“-”是作为成员函数重载的,“++”是作为友元函数重载的,那么该表达式还可以表示为:()A、x-y++B、x-(++y)C、(x++)-yD、++x-y标准答案:1知识点解析:本题考核运算符的重载。假定已经作为某个类的成员函数重载了二元运算符+,且c1、c2都是该类的对象,则c1.operator+(c2)与c1+c2含义相同。如果+作为该类的非成员函数重载,则operator+(c1,c2)与c1+c2含义相同。同时一元运算符“++”重载函数调用中采用了虚拟参数,说明++为后缀的,所以其等价的表达式为“x-y++”。24、有以下程序:#include<iostream>#include<math>usingnamespacestd;classpoint{private:doublex;doubley;public:point(doublea,doubleB){x=a;y=b;}frienddoubledistance(pointa,pointB);A、1B、5C、4D、6标准答案:4知识点解析:本题考核友元函数的应用。分析程序:类point中定义了两个私有成员x和y,以及一个友元函数distance。从而,函数distance可以访问类point中的任何成员。在函数distance中,返回值为sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y))。由此可知,函数distance的功能是计算a、b两点之间的距离。在主函数main中,先定义两点:p1(1,2)和p2(5,2)。然后调用函数distance计算两点之间的距离为4,所以程序最后输出为4。25、在进行了任何C++流的操作后,都可以用C++流的有关成员函数检测流的状态,其中只能用于检测刚进行的操作是否失败函数名是A、failB、eofC、badD、good标准答案:1知识点解析:C++中可以用文件流对象的下列成员函数来判别文件流的当前状态。函数isopen()判定流对象是否与一个打开的文件相联系,若是,返回true,否则返回false;函数good()刚进行的操作成功时返回true,否则返回false:函数fail()与good()相反,刚进行的操作失败时返回true,否则返回false:函数bad()如果进行了非法操作返回true,否则返回false;函数eof()进行输入操作时,若到达文件尾返回true,否则返回false。其中,eof函数只能用于输入流操作。26、下列有关拷贝构造函数的描述中错误的是A、拷贝构造函数是一种构造函数B、拷贝构造函数与一般的构造函数一样,可以设置多个形参C、每一个类中都必须有一个拷贝构造函数D、拷贝构造函数的功能是用一个已知对象去初始化一个正在创建的对象。标准答案:2知识点解析:本题考核拷贝构造函数的概念。拷贝初始化构造函数实际上也是构造函数,它是在初始化时被调用,将一个已知对象的数据成员的值拷贝给正在创建的另一个同类的对象。拷贝构造函数具有的特点是:拷贝构造函数也是一种构造函数,因此函数名与类相同,并且不能指定函数返回类型;只有一个参数,是对同类的某个对象的引用;每一个类中都必须有一个拷贝构造函数。如果类中没有声明拷贝构造函数,编译器会自动生成一个具有上述形式的公有的拷贝构造函数。27、带有虚基类的多层次派生类构造函数的成员初始化列表中都要列出虚基类的构造函数,这样对虚基类的子对象初始化A、与虚基类下面的派生类个数有关B、多次C、二次D、一次标准答案:8知识点解析:本题考核虚基类以及构造函数。使用虚基类解决二义性问题的关键是在派生类中只产生一个虚基类对象。虚基类子对象由最派生类的构造函数通过调用虚基类的构造函数进行初始化(最派生类的构造函数的成员初始化列表中必须列出对虚基类构造函数的调用,否则,表示使用该虚基类的缺省构造函数)。由于最派生类总是相对,因此,从虚基类直接或间接派生的派生类中的构造函数的成员初始化列表中都要列出对虚基类构造函数的调用。但只有用于建立对象的最派生类的构造函数才调用虚基类的构造函数,此时最派生类的所有基类中列出的对虚基类的构造函数的调用在执行过程中都被忽略,从而保证对虚基类子对象只初始化一次。28、下列关于this指针的叙述中,正确的是A、this指针是一个隐含指针,它隐含于类的成员函数中B、只有在使用this时,系统才会将对象的地址赋值给thisC、类的友元函数也有this指针D、this指针表示了成员函数当前操作的数据所属的对象标准答案:8知识点解析:本题考核this。类的每一个成员函数都有一个隐含定义的常量指针,称为this指针。它是成员函数所属对象的指针,它指向类对象的地址。成员函数可以通过这个指针知道自己属于哪一个对象。当对一个对象调用成员函数时,编译程序先将对象的地址赋值给this指针,然后调用成员函数,每次成员函数存取数据时,则隐含使用this指针。但是在使用this指针时需要注意的是:this指针只能在类的成员函数中使用,它指向该成员函数被调用的对象。this指针一般用于返回当前对象自身;静态成员函数没有this指针。因为类只有一个静态成员函数实例,所以使用this指针没有什么意义。在静态成员函数中使用this指针会引起编译错误。29、有以下程序#include<iostream>usingnamespacestd;classBase{private:charc;public:Base(charn):c(n){}~Base(){cout<<c;}};classDerived:publicBase{private:charc;public:Derived(charn):Base(n+1),c(n){}~Derived(){cout<<c;}};intmain(){Derivedobj(’x’);return0;}执行后的输出结果是A、xyB、yxC、xD、y标准答案:1知识点解析:本题考核继承与派生中继承基类的数据成员与成员函数。在C++中,由于析构函数不能被继承,因此在执行派生类的析构函数时,基类的析构函数也将被调用。执行顺序是先执行派生类的析构函数,再执行基类的析构函数,其顺序与执行构造函数的顺序正好相反。在此题的程序中,在主函数main结束时,派生类Derived对象obj将被删除,所以就会调用对象的析构函数。先调用派生类的析构函数,输出x,然后调用基类的析构函数,输出y。30、以下程序的输出结果是#include<iostream>usingnameSpacestd;intmain(){cout.fill(’*’);cout.width(5);cout<<hex<<100<<end1;return0;}A、**100B、***64C、100**D、64***标准答案:2知识点解析:本题考核格式控制数据的输入输出。语句“cout.fill(’*’);”是将填充字符设置成’*’,在输出数据时,如果数据宽度小于设置的宽度,则空闲位置要用’*’填满,语句“cout.width(5);”是将数据的输出宽度设置成5,关键字hex的作用是将整数按十六进制输出,即输出64,又由于初始状态为右对齐,所以程序最终输出***64。31、有以下程序#include<iostream>usingnamespacestd;classBase{private:charc;public:Base(charn):c(n){}~Base(){cout<<c;}};classDerived:publicBase{private:charc;public:Derived(charn):Base(n+1),c(n){}~Derived(){cout<<c;}};intmain(){Derivedobj(’x’);return0;}执行后的输出结果是A、10B、20C、30D、0标准答案:2知识点解析:本题考核虚基类。本题中,虽然Derived1和Derived2都是由共同的基类x派生而来的,但由于引入了虚基类,使得它们分别对应基类的不同副本。这时数据成员x只存在一份拷贝,不论在类Derived1修改,还是在类Derived2中修改,都是直接对这惟一拷贝进行操作。本题程序执行语句“Derivedobj”时,就会先调用虚基类Base的构造函数,使得x=0,然后执行类Derived1的构造函数使得x=10,再执行类Derived2的构造函数,使得x=20。最后输出x的值为20。32、有如下程序:#include<iostream>usingnamespacestd;classBase{private:charc;piblic:Base(charn):c(n){}~Base(){cout<<C;}};classDeriVed:publicBase{private:charc;public:Derived(charn):Base(n+1),c(n){}~Derived(){cout<<c;}};intmain(){Derivedobj(’x’);return0;}执行上面的程序将输出A、xyB、yxC、xD、y标准答案:1知识点解析:在C++中,由于析构函数不能被继承,因此在执行派生类的析构函数时,基类的析构函数也将被调用。执行顺序是先执行派生类的析构函数,再执行基类的析构函数,其顺序与执行构造函数的顺序正好相反。在此题的程序中,在主函数main结束时,派生类Derived对象。obj将被删除,所以就会调用对象的析构函数。先调用派生类的析构函数,输出x,然后调用基类的析构函数,输出y。33、关于在调用模板函数时实参的使用,下列表述中正确的是A、对于虚拟类型参数所对应的模板实参,如果能从模板函数的实参中获得相同的信息,则都可以省略B、对于虚拟类型参数所对应的模板实参,如果它们是参数表中的最后的若干个参数,则都可以省略C、对于虚拟类型参数所对应的模板实参,若能够省略则必须省略D、对于常规参数所对应的模板实参,任何情况下都不能省略标准答案:8知识点解析:模板函数的实参可以省略,但模板实参的省略并不是必然的,而是有条件的。在调用一个模板函数时,编译系统需要足够的信息来判别每个虚拟类型参数所对应的实际类型,可以从两个不同的渠道获得这样的信息:从模板实参表(用<和>括起来的参数表)或从模板函数实参表(用()括起来的参数表),模板实参的信息优先于函数实参的信息。如果从后者获得的信息已经能够判定其中部分或全部虚拟类型参数所对应的实际参数,而且它们又正好是参数表中最后的若干个参数,则模板实参表中的那几个参数可以省略。如果模板实参表中的实参都被省略了,则连空表<>也可以不要。反之,对于某个模板实参,如果从模板函数的实参表中无法获得同样的信息,就不能省略:或者虽然能够获得同样的信息,但在它后面还有其他不能省略的实参,则其自身还是不能省略。由此可知只有D)选项的说法是正确的。34、有如下程序:#include<iostream>usingnamespacestd;classpoint{intx,y;public:point(intvx,intvy){x=vx;y=vy;}point(){x=0;y=0;}pointoperator+(pointp1){pointp;intpx=x+p1.x;intpy=y+p1.y;returnpoint(px,py);}pointoperator-(pointp1){pointp;intpx=x-p1.x;intpy=y-p1.y;returnpoint(px,py);}voidprint(){cout<<x<<","<<y<<end1;}};intmain(){pointp1(10,10),p2(20,20);p1=p1+p2;p1.print();retrun0;}执行后的输出结果是A、10,10B、20,20C、10,20D、30,30标准答案:8知识点解析:本题主要考查C++中运算符重载的机制与实现。运算符重载函数一般分为成员函数形式和友元函数形式,这两种形式都可以访问类中的私有成员。本题中的运算符重载形式为成员函数形式。程序在类point中声明了私有数据成员intx和inty,并定义了两种形式的构造函数以完成对对象的初始化;之后,程序对运算符“+”进行了重载,另其输入参数为类point的对象,输出为操作符“+”右侧该对象的私有数据成员x和y与操作符“+”左侧同类型对象的私有数据成员x和y的加和:print()函数则输出对象中数据成员的值。程序main()函数中,实例化了类point的两个对象p1和p2,并完成对对象的初始化。在语句“p1=p1+p2;”中,由于操作符“+”左右两端的操作数为point类的对象,复合类point定义中的操作符“+”的重载函数,因此程序将调用重载后的操作符函数,并返回两point对象数据成员的加和值,覆盖对象p1的数据成员。因此print()函数输出对象p1的数据成员值应该为:x=10+20=30,y=10+20=3035、有如下程序#include<iostream>usingnameSpacestd;classbase{public:vinualvoidf1(){cout<<"F1Base";}virtualvoidf2(){cout<<"F2Base";}};classderive:publicbase{voidf1(){cout<<"F1Derive";}voidf2(intx){cout<<"F2Derive";}};intmain(){baseobj1,*p;deriveobj2;p=&obj2;p—>f1();p—>f2();return0;}执行后的输出结果是A、F1DeriveF2BaseB、F1DeriveF2DeriveC、F1BaseF2BaseD、F1BaseF2Derive标准答案:1知识点解析:本题主要考查C++中虚函数机制及其继承过程中的要点。虚函数在基类中加关键字virtual声明,在派生类中重新定义;如果派生类没有覆盖虚函数,则程序执行中将会执行基类的虚函数版本。题目程序中,建立了基类base,其内函数voidf1()和voidf2()均被声明为虚函数,并在调用时会显式的发出声明。派生类derive利用public方式继承基类base,并覆盖其基类base中的虚函数f1();对于base中的虚函数f2(),由于派生类derive中的同名函数f2()中带有参数intx,因此被编译器认为是函数重载,而不作虚函数覆盖处理,因此实际上派生类derive中包含两个f2()函数,一个不带参数,调用时执行基类base中的f2()函数版本,一个带参数intx,调用时执行重载后的版本。题目main()函数中,定义了基类对象。obj1和基类指针*p,同时定义了派生类对象。obj2。p指向。obj2时:p—>f1()函数调用执行派生类覆盖后的版本,输出D1:p->f2()由于不带参数,因此执行未经派生类覆盖的函数版本,即基类base中的f1()函数版本。三、公共基础填空题(本题共5题,每题1.0分,共5分。)36、一个节点的子节点个数称为该节点的【】。标准答案:度知识点解析:在一个树结构中,一个节点拥有子节点个数称为该节点的度。所有节点中最大的度称为树的度。37、类是一个支持集成的抽象数据类型,而对象是类的【】。标准答案:实例知识点解析:在面向对象方法中,将属性、操作相似的对象归为类,也就是说,类是具有共同属性、共同方法的对象的集合。所以,类是对象的抽象,它描述了属于该对象类型的所有对象的性质,而一个对象则是其对应类的一个实例。38、软件测试分4个步骤进行,即单元测试、集成测试、确认测试和【】。标准答案:系统测试知识点解析:软件测试按4个步骤进行,即单元测试、组装测试、确认测试和系统测试。通过这些步骤地实施来验证软件是否合格。39、【】是在进行了成功的测试之后才开始的。它与软件测试不同,测试的目的是发现错误,进一步诊断和改正错误,则是调试的任务。标准答案:程序调试知识点解析:本题考查软件测试和软件调试的区别。软件测试贯穿整个软件生命期,它是尽可能的发现软件中的错误。软件调试主要在开发阶段,它是在测试成功后开始,诊断和改正程序中潜在的错误。40、数据库系统由数据库、【】、硬件平台、数据库管理员和软件平台所组成。标准答案:数据库管理系统知识点解析:本题考查数据库系统的组成部分,其中硬件平台包括计算机、网络。软件平台包括操作系统、数据库系统开发工具和接口软件。四、填空题(本题共8题,每题1.0分,共8分。)41、下列程序在输入m后,求满足条件“n!<=m<=(n+1)!”的值n,请将程序补充完整。#include<iostream>usingnamespacestd;intmain(){intn,m,jc=1;cin>>m;for(n=2;jc<=m;n++)jc=jc*n;cout<<"n="<<【】<<end1;return0;}标准答案:(n-2)知识点解析:研究本题中包含的语句“jc<=m;”和“jc=jc*n:”,可发现本题是通过求出“n!”的值jc并检查该值是否大于m;如果小于等于,继续循环求出“(n+1)!”直到jc>m。跳出循环后,得到n的值并输出。题中要填出n的输出值,但应注意:如果直接填n,是错误的。因为在循环语句中先求出jc=jc*n,如果这时的jc>m,循环还没结束,n的值就比要求的值大1,结束循环后,执行n++后,再判断jc<=m,所以n的值比所求的大2,故应填入n-2。42、以下函数的功能是删除字符串s中的所有数字字符。请填空。voiddele(char*s){intn=O;for(i=0;s[i];i++){if(【】)s[n++]=s[i];}s[n]=’\0’;}标准答案:s[i]<’0’||s[i]>’9’知识点解析:从一个字符串中删除某个字符的方法是从字符串的第1个字符开始一一判断该字符是否是要删除的字符,若不是,则把它放到结果字符串中;若是,则不放入结果字符串中。由此可知,本题空白处应判断s[i]是否为数字字符,只有在不是数字字符的情况下才存入结果字符串中,所以应填入:s[i]<’0’||s[i]>’9’。最后应在结果字符串的末尾加上字符结束标识符’\0’。43、下面程序的运行结果是【】#include<iostream>usingnamespacestd;intfun(intn){staticintm=2;m=m+n;returnm;}intmain(){inta=3,b=4;intx;x=fun(a);x=fun(b);cout<<x<<end1;returnO;}标准答案:9知识点解析:本题主要考察C++中变量的存储类别及其生存周期。函数fun()中的变量m被定义为静态static变量,即为局部静态变量,其特点是只在函数内部可见,但存储在全局数据区,函数执行过后变量仍存在。主函数第一次调用fun()函数后,将实参a=3赋值给形参n,因此返回值为:x=m=m+n=2+3=5。主函数再次调用fun()函数时,由于m存储在全局数据区,因此其值仍然为5,由此得到此次返回值:x=m=m+n=5+4=9。因此程序的最后输出为9。44、如果类Alpha继承了类Beta,则类Alpha称为派生类,类Beta称为【】类。标准答案:基知识点解析:在C++语言中,可以从一个类派生出另一个类。派生其他类的类称为基类(或父类),被派生的类称为派生类(或子类)。一个派生类可以从一个基类派生,也可以从多个基类派生。从一个基类派生的继承称为单继承,从多个基类派生的继承称为多继承。45、下面程序是一个堆栈的类模板,在横线处填上适当语句,完成类模板的定义。#defineMAXSIZE100template<classT>classStack{Ts[MAXSIZE];inttop;public:stack(){top=1;}voidpush(TnewValue){if(top<MAXSIZE){top=top+1;s[top]=newValue;}elsecout<<"堆栈满,无法进栈"<<end1;}voidpop();};【】{if(top>1){cout<<s[top]<<end1;top=top-1;}elsecout<<"堆栈空!"<<end1;}标准答案:template<classT>/voidstack<T>::pop()知识点解析:本程序用类模板方式设计一个栈类stack<T>,其中有两个私有数据成员s[](存放栈元素)和top(栈顶元素下标),以及两个公有成员函数push()(元素入栈)、pop()(元素出栈)。46、下面程序的输出结果是【】。#include<iostream>usingnamespacestd;classA{inta,b;public:A(){a=b=0;}A(intaa,intbb):a(aA),b(bB){cout<<"a="<<a<<","<<"b="<<b<<",";}~A(){cout<<"D";};intmain(){Ax,y(2,3);return0;}标准答案:a=2,b=3DD知识点解析:本题主要考核构造函数与析构函数的应用。主函数中定义A类对象x时无输出,定义对象y时调用构造函数输出a=2,b=3。在主函数结束前,对象x,y都调用各自的析构函数输出DD。所以最后答案为a=2,b=3DD。47、若有以下程序:#include<iostream>usingnamespacestd;classBase{public:voidwho(){cout<<"classBase"<<end1;}};classDerivedl:publicBase{public:voidwho(){cout<<"classDerivedl"<<end1;}};classDerived2:publicBase{public:voidwho(){cout<<"classDerived2"<<end1;}};intmain(){Base*p;Derivedlobj1;Derived2obi2;p=&obj1;p=&obj2;p->who();return0;}则该程序运行后的输出结果是【】。标准答案:classDerived2知识点解析:本题考核对象指针的应用。主函数中定义了一个Base类对象指针p,然后逐步被赋值为obj1和obj2,最后通过对象指针p调用函数who(),也即调用Derived2中的函数who(),输出classDerived2。48、有以下程序:#include<fstream>#include<string>usingnamespacestd;intmain(){charch[]="Theend";ofstreamoutstr("d:\\put.txt",ios_base::app);for(inti=0;i<strlen(ch);i++)outstr.put(ch[i]);outstr.close();return0;}程序实现的功能是【】。标准答案:在文件put.txt的尾部追加写入一串字符知识点解析:解本题的关键是要了解文件打开模式常量ios_base::app的含义。常量iosbase::app表示为添加数据而打开文件(总是在文件尾部写),因此上述程序实现的功能就是在文件尾部写入数组ch中字符串。国家二级(C++)笔试模拟试卷第2套一、公共基础选择题(本题共10题,每题1.0分,共10分。)1、算法的时间复杂度是指A、执行算法程序所需要的时间B、算法程序的长度C、算法程序中的指令条数D、算法执行过程中所需要的基本运算次数标准答案:D知识点解析:算法的时间复杂度实际上就是执行算法程序所需要的计算工作量。为了客观地反映算法性能,在度量算法的时间复杂度时,应该与编写算法程序所使用的程序设计语言、执行算法程序时所使用的计算工具以及程序员的水平无关。选项A错误,因为同一算法程序在运行速度不同的计算机上运行时,其计算时间是不同的。选项B错误。算法所编写的程序长度往往与程序设计语言以及程序员的水平有关,同一个算法,用不同的程序设计语言或者不同的程序员所编写出的程序其长度可能会大不相同.选项C错误,因为根据一个算法所编制出的程序中,其指令条数往往与程序设计语言以及程序员的水平有关,不能用算法程序中的指令条数来度量算法的时间复杂度。所以,本题的正确答案为D。2、设栈S的初始状态为空。元素a,b,c,d,e,f依次通过栈S,若出栈的顺序为b,d,c,f,e,a,则栈S的容量至少应该为A、3B、4C、5D、6标准答案:A知识点解析:根据题中给定的条件,可以作如下的模拟操作:①元素a,b进栈,栈中有2个元素,分别为a,b;②元素b出栈后,元素c,d进栈,栈中有3个元素,分别为a,c,d;③元素d,c出栈后,元素e,f进栈,栈中有3个元素,分别为a,e,f;④最后,元素f,e,a出栈,栈为空。可以看出,进栈的顺序为a,b,c,d,e,f,出栈的顺序为b,d,c,f,e,a,满足题目要求。每次进栈操作后,栈中最多有3个元素,所以,为了顺利完成这些操作,栈的容量应至少为3。本题的正确答案为A。3、在最坏情况下,下列排序方法中时间复杂度最小的是A、冒泡排序B、快速排序C、插入排序D、堆排序标准答案:D知识点解析:在最坏情况下:冒泡排序需要的比较次数为n(n-1)/2;快速排序需要的比较次数也为n(n-1)/2;插入排序需要的比较次数也为n(n-1)2;堆排序需要比较的次数为O(nlog2n)。可知,在最坏情况下,堆排序的时间复杂度最小,本题的正确答案为D。4、在模块化程序设计中,按功能划分模块的原则是A、各模块的功能尽量单一,且各模块之间的联系尽量的少B、各模块的功能尽量单一,且各模块之间的联系尽量紧密C、各模块应包括尽量多的功能D、各模块应包括尽量多的输入输出操作标准答案:A知识点解析:模块化设计是指把一个大程序按人们能理解的大小规模进行分解。划分模块的基本原则是使每个模块都易于理解。按照人类思维的特点,按功能来划分模块最为自然。在按功能划分模块时,要求各模块的功能尽量单一,各模块之间的联系尽量少。所以,选项A正确;选项B错误;选项C错误。本题的正确答案为A。5、数据结构分为逻辑结构和存储结构,下列数据结构中不属于存储结构的是A、线性链表B、二叉链表C、栈与队列D、循环队列标准答案:C知识点解析:线性链表是线性表的链式存储结构;二叉链表是二又树的链式存储结构;栈与队列分别是特殊的线性表;循环队列是队列的一种顺序存储结构。可知,线性链表、二叉链表、循环队列均属于存储结构,而栈与队列属于逻辑结构。选项C为正确答案。6、下列叙述中正确的是A、软件就是程序清单B、软件就是存放在计算机中的文件C、软件应包括程序清单以及运行结果D、软件包括程序、数据和文档标准答案:D知识点解析:计算机软件是计算机系统中与硬件相互依存的另一部分,包括程序、数据及相关文档的完整集合。用一个等式表示,则为:软件=程序+文档+数据选项A、B、C错误,正确答案是D。7、在结构化方法中,软件功能分解属于下列软件开发中的阶段是A、概要设计B、需求分析C、详细设计D、编程调试标准答案:A知识点解析:概要设计的任务是划分出构成系统的各物理元素以及设计出软件的结构(如确定模块及模块间的关系)。设计过程通常分为以下几步:提出可选择方案;选择合理方案;推荐最佳方案;功能分解;设计软件结构;制定测试计划;最后提交概要设计文档。软件功能分解属于概要设计阶段。本题的正确答案为A。8、下列叙述中正确的是A、程序设计过程中的主要工作是编制程序B、程序设计的主要目标是编制出运行结果正确的程序C、不良的程序设计风格会增加程序的复杂性D、上述三种说法都不对标准答案:C知识点解析:程序设计过程中包括很多步骤,编制程序只是其中的一步。所以,选项A错误。程序设计的最终产品是程序,但仅设计和编制出一个运行结果正确的程序是不够的,还应养成良好的程序设计风格。所以,选项B错误。程序设计的根本目标是要降低程序的复杂性和提高程序的可读性。而程序的复杂性主要来自以下两个方面:问题固有的复杂性;不良的设计风格人为增加了程序的复杂性。所以,良好的设计风格对于降低程序的复杂性是很重要的,并且,好的设计风格是好的程序风格的基本保证。选项C正确。9、下列叙述中正确的是A、用E-R图能够表示实体集之间一对一的联系、一对多的联系、多对多的联系B、用E-R图只能表示实体集之间一对一的联系C、用E-R图只能表示实体集之间一对多的联系D、用E-R图表示的概念数据模型只能转换为关系数据模型标准答案:A知识点解析:用E-R图可以简单明了地描述实体及其相互之间的联系,用E-R图还可以方便地描述多个实体集之间的联系和一个实体集内部实体之间的联系。所以,选项A正确,选项B与C错误。为了建立用户所要求的数据库,必须把概念结构(用E-R图表示的概念数据模型)转换为某个具体的数据库管理系统所支持的数据模型,这就是逻辑结构设计所要完成的任务。在已给定数据库管理系统的情况下,数据库的逻辑设计可以分两步来进行:①将概念模型转换成一般的数据模型;②将一般的数据模型转换为特定的数据库管理系统所支持的数据模型。可知,用E-R图表示的概念数据模型不仅能转换为关系数据模型,还可以转换为其他数据模型,如网状模型和层次模型等。所以,选项D说法错误。10、关系表中的每一横行称为一个A、元组B、字段C、属性D、码标准答案:A知识点解析:在关系模型中,把数据看成一个二维表,每一个二维表称为一个关系。关系表中的每一横行称为一个元组。本题的正确答案是A。二、选择题(本题共25题,每题1.0分,共25分。)11、一个函数为voidf(int,charch=’a’),另一个函数为voidf(int),则它们A、不能在同一程序中定义B、可以在同一程序中定义并可重载C、可以在同一程序中定义,但不可以重载D、以上说法均不正确标准答案:C知识点解析:本题函数的调用。只要满足参数列表不同的条件,就可以在同一程序中对同名的函数进行定义。但是由于其中一个函数有默认值,因此当程序中出现语句“x=f(10);”时,就会产生二义性,不能确定调用函数f(10)还是调用函数f(10,’a’),此时这两个函数不能重载。12、下面关于对象概念的描述中,错误的是A、C++中的对象就是C语言中的结构变量B、对象代表着正在创建的系统中的一个实体C、对象是一个状态和操作(或方法)的封装体D、对象之间的信息传递是通过消息进行的标准答案:A知识点解析:本题考核对象的概念。C++中的对象与C语言中的结构变量是不一样的。对象是某一类类型的变量,而结构变量是结构类型的变量。同时C++对C的结构有了扩展,结构可以和类一样使用。结构除了可以包含数据成员外,还可以包含成员函数;成员也可以加上public、private和protected访问控制;结构之间也可以继承。两者惟一的不同之处是,结构中的成员默认是公有的,结构的继承默认是公有的,而类的继承默认是私有的,类的成员默认也是私有的.13、实现运行时的多态性要使用A、重载函数B、析构函数C、构造函数D、虚函数标准答案:D知识点解析:本题考核虚函数的应用。动态联编一直要到程序运行时才能确定调用哪个函数。虚函数是实现动态联编的必要条件之一。没有虚函数一定不能实现动态联编,但有虚函数存在时,必须同时满足下列条件,才能实现动态联编:类之间满足子类型关系;调用虚函数操作的是指向对象的指针或对象引用,或者是由成员函数调用虚函数。14、若有定义:intk,*q;,则下列各选项中赋值表达式正确的是A、q=(&k+1)B、q=&kC、q=kD、*q=&k标准答案:B知识点解析:本题考核指针的赋值操作。A)选项中,&k表示变量k在内存中的地址,而后面的1是整型常量,所以此选项不正确。C)选项中,是把整型变量的值直接赋给指针变量q,由于赋值没有兼容性,所以这是错误的。D)选项中,企图把k在内存中的地址赋给一个整型变量(*q在此代表一整型变量),这也是不允许的,地址值不能直接转换为一个整数。15、()是以一种完全通用的方法来设计函数或类而不必预先说明将被使用的每个对象的类型。A、模板B、类C、对象D、函数标准答案:A知识点解析:本题考核模板的概念。模板是以一种完全通用的方法来设计函数或类而不必预先说明将被使用的每个对象的类型。16、在进行任何C++流的操作后,都可以用C++流的有关成员函数检测流的状态;其中只能用于检测输入流状态的操作函数名称是A、failB、eofC、badD、good标准答案:B知识点解析:本题考核C++的输入,输出流。C++中函数eof()的作用是进行输入操作时,若到达文件尾返回true,否则返回false。eof函数只能用于输入流操作。17、按照标识符的要求,下列选项中,()符号不能组成标识符。A、连接符B、下划线C、大小写字母D、数字字符标准答案:A知识点解析:本题考核C++的标识符定义。C++规定标识符由大小写字母、数字字符(0~9)和下划线组成,并且以字母或下划线开始,后跟0个或多个字母,数字字符或下划线。由此可知A)选项中的连接符不能用于组成标识符。18、已知枚举类型定义语句为:enumToken{NAME,NUMBER,PLUS=5,MINUS,PRINT=10};则下列说法中错误的是A、枚举常量NAME的值为1B、枚举常量NUMBER的值为1C、枚举常量MINUS的值为6D、枚举常量PRINT的值为10标准答案:A知识点解析:本题考核C++数据类型中枚举。枚举类型定义了一些整型符号常量的集合,使用枚举类型时应该注意以下几点:枚举类型的第一个常量默认值是0;枚举类型常量的值允许彼此相同;虽然枚举类型常量是整数类型,但是不允许使用整数直接赋值给枚举类型变量,也不允许与整数进行运算,只可以与整数进行比较。由此可知枚举常量NAME的值应为0。所以A)选项是错误的。19、以下程序段的输出结果是intx=5;do{cout<<x--<<end1;}while(!x);A、5B、无任何输出C、4D、陷入死循环标准答案:A知识点解析:本题考查循环语句do-while语句的执行情况.根据do-while循环语句功能特点可得:首先无条件执行循环体,表达式x--的值为5,输出为5,x的值变为4,然后检查条件(!x)为假(false),则循环结束。20、下列数组的定义中,会产生错误的是A、inta[]=(’0’,’1’,’2’,’3’,’4’,’5’,’6’);B、inta[10]={0,1,2,3,4,5,6};C、chara[5]="hello";D、chara[5]={’h’,’e’,’1’,’1’,’o’};标准答案:C知识点解析:本题考核数组的定义和初始化。下面逐项进行分析:A)选项中,数组a的定义和初始化符合数组的定义和初始化语法,故正确:B)选项中,数组a初始化的值虽然没有10个,但对于少的部分,系统会自动补0,所以B)选项中数组的定义也是正确;C)选项中,数组a的长度为5,但字符串“hello”的长度为5+1=6,字符串结束符‘\0’无法存储在数组中,所以是错误的;D)选项中,数组a的定义是正确的。21、若有以下程序:#include<iostream>usingnamespacestd;voidsub(intx,inty,int*z){*z=y+x;}intmain(){inta,b,c;sub[8,4.&a);sub(6,a,&b);sub(a.b,&c);cout<<a<<","<<b<<","<<c<<end1;return0;}程序运行后的输出结果是A、12,18,30B、-12,6,8C、6,8,10D、12,-18,16标准答案:A知识点解析:本题考核对指针作为函数的参数的理解程度。分析程序:函数sub为void型。函数的形参中,z是一个int型的指针变量,因此它只能从实参接收一个int型变量的地址。在函数sub体中,语句:*z=y+x;的功能是把形参y与x的和值放入形参z所指的存储单元中。在主函数中,3次调用sub函数。第一次调用时,把8和4分别传递给形参x和y,把主函数中变量a的地址传递给形参z,这样形参就指向了主函数中的变量a,在sub函数中执行语句*z=y/x;后,把12放入z所指的存储单元中,即变量a被赋值11。以此类推,最后b被赋值18,c被赋值30。所以最后输出是12,18,30。22、在下面的类定义中,错误的语句是classSample{public:Sample(intval);//①~Sample()://②private:inta=2.5;//③Sample();//④};A、①②③④B、②C、③D、①②③标准答案:C知识点解析:本题考核类的定义。C++不能类的定义中给数据成员赋初值。23、下面的描述中表达错误的是A、公有继承时基类中的public成员在派生类中仍是public的B、公有继承时基类中的private成员在派生类中仍是private的C、公有继承时基类中的protected成员在派生类中仍是protected的D、私有继承时基类中的public成员在派生类中是private的标准答案:B知识点解析:C++中,继承方式控制了基类中具有不同访问属性的成员在派生类中的访问属性。基类中的私有成员在派生类中是隐蔽的,只能在基类内部访问。所以B)选项是错误的。派生类中的成员不能访问基类的中私有成员,但可以访问基类中的公有成员和保护成员。此时派生类对基类中各个成员的访问能力与继承方式无关,但继承方式将影响基类成员在派生类中的访问控制属性,基类中公有和保护成员在派生类中的访问控制属性将随着继承方式而改变:派生类从基类公有继承时,基类的公有成员和保护成员在派生类中仍然是公有成员和保护成员;派生类从基类私有继承时,基类的公有成员和保护成员在派生类中都改变为私有成员,派生类从基类保护继承时,基类的公有成员在派生类中改变为保护成员,基类的保护成员在派生类中仍然为保护成员.所以,A)、C)和D)选项都是正确的。24、运算符函数调用格式的表达式:y/x++与表达式:y.operator/(operator++(x,0))含义相同,由此可看出()。A、“/”和“++”都是作为成员函数重载的B、“/”和“++”都是作为非成员函数重载的C、“/”是作为成员函数重载的,“++”是作为非成员函数重载的D、“/”是作为非成员函数重载的,“++”都是作为成员函数重载的标准答案:C知识点解析:本题考核运算符的重载。假定已经作为某个类的成员函数重载了二元运算符+,且c1、c2都是该类的对象,则c1.operator+(c2)与c1+c2含义相同。如果+作为该类的非成员函数重载,则operator+(c1,c2)与c1+c2含义相同。所以通过题目给出的两个表达式可看出“/”是作为成员函数重载的,“++”是作为非成员函数重载的。25、有如下函数模板定义:template<typenameT1,inta2,inta3>T1sum(T1a1){return(a1+a2+a3);}则以下调用中正确的是A、sum<int,4,3>(5);B、sum<4,3>(5);C、sum<int,int,int>(5);D、sum(5);标准答案:A知识点解析:本题考核函数模板的使用。C++中对函数模板的调用有时候只使用了函数实参,而没有使用模板实参,模板实参都被省略了,但模板实参的省略并不是必然的,而是有条件。模板实参不能省略的情况有:从模板函数实参表获得的信息有矛盾;需要获得特定类型的返回值,而不管参数的类型如何;虚拟类型参数没有出现在模板函数的形参中;函数模板含有常规形参。题中定义的函数模板中含有常规形参,常规形参的信息无法从模板函数的实参表中获得,因此在调用时必须显式地给出对应于常规参数的模板实参。注意,sum的第一个模板实参的信息可以从模板函数的实参表中获得,但由于它位于不可省略实参的前面,因此不能省略,所以只有A选项的调用格式是正确的。26、有如下程序:#include<iostream>usingnamespacestd;intmain(){cout.fill(’*’);cout.width(5);cout<<scientific<<314.15926535<<end1;return0;}程序运行后,输出的结果是A、3.141593e+002B、3.1416e+002C、**3.14e+002D、314.16标准答案:A知识点解析:本题考核格式控制数据的输入输出.函数setfill(charc)用于设置填充字符,在输出数据时,如果数据宽度小于设置的宽度,则空闲位置要用填充字符填满,设置的填充符一直有效,直到再次设置填充字符为止,如题中调用函数setfill(’*’)将填充字符设置为’*’,后又调用函数setfill(’#’)将填充字符设置为’#’。函数setw(intn)用于设置输入输出宽度,当实际数据的宽度大于设置的宽度时,仍按实际的宽度输出,如题中数据314.15926535的宽度大于5,所以将会按实际输出。关键字scientific将浮点数按指数格式(科学表示法)输出。27、假定MyClass为一个类,那么下列的函数说明中,()为该类的析构函数。A、void~MyClass();B、~MyClass(intn);C、MyClass();D、~MyClass();标准答案:D知识点解析:本题考核类的析构函数。在C++中,析构函数名为符号“~”加类名,析构函数没有参数和返回值。根据以上知识可知,MyClass类的正确析构函数的说明为~MyClass()。28、有以下程序:#include<iostream>usingnamespacestd;classsample{private:intn;public:sample(){}sample(intm){n=m;}sampleadd(samples1,samples2){this->n-s1.n+s2.n;return(*this);voiddisp(){cout<<"n="<<n<<end1;}};intmain(}{samples1(10),s2(5),s3;s3.add(s1,s2);s3.disp();return0;}程序运行后,输出的结果是A、n=10B、n=5C、n=20D、n=15标准答案:D知识点解析:本题考核this指针的应用。上述程序中,sample类的add成员函数中使用了this指针,this指针指向当前对象自身,该成员函数中的语句:this->n=s1.n+s2.n;,用于修改当前对象的数据成员n的值,语句:return(*this);用于返回当前对象自身,即对当前对象进行了修改。对于main()函数调用add成员函数语句“s3.add(s1,s2);”。此时,this指针指向的是对象s3,执行该语句前,s3的数据成员n未赋值,执行完该语句后,就修改了s3的私有成员n的值,使其为15。29、有以下程序:#include<iostream>usingnamespacestd;classsample{private:intx;staticinty;public:sample(inta);staticvoidprint(samples);};sample::sample(inta){x=a;y+=x;}voidsample::print(samples){cout<<"x="<<s.x<<",y="<<y<<end1;}intsampte::y=0;intmain(){samples1(10);samples2(20);sample::print(s2);return0;}程序运行后的输出结果是A、x=10,y=20B、x=20,y=30C、x=30,y=20D、x=30,y=30标准答案:B知识点解析:本题考核静态数据成员和静态成员函数的应用。类sample中定义两个私有成员x和y,其中y为静态数据成员。并定义函数print()为静态成员函数。在主函数中,定义对象s1(10)时,通过构造函数使对象s1的私有成员x=10,静态数据成员y=10。定义s2(20)时,通过构造函数使对象s2的私有成员x=20,静态数据成员y=10+20=30。程序最后调用静态成员函数print输出对象s2的私有成员x的值20,对象s1、s2共享的静态数据成员y的值30。30、若有以下程序:#include<iostream>usingnamespacestd;classA{private:intx;public:intz;voidsetx(inti){x=i;}intgetx(){returnx;}}:classB:publicA{private:intm;public:intp;voidsetvalue(inta,intb,intc){setx(a);z=b;m=c;}voiddisplay{){cout<<getx()<<","<<z<<","<<m<<end1;}};intmain(){Bobj;obj.setvalue(2,3,4);obj.display();return0;}程序运行以后的输出结果是A、产生语法错误B、2,3,4C、2,2,2D、4,3,2标准答案:B知识点解析:本题考核继承与派生。当类的继承方式为公有继承时,基类的公有成员和保护成员分别作为派生类的公有成员和保护成员,派生类的其他成员可以直接访问它们。其他外部使用者只能通过派生类的对象访问继承来的公有成员。在本题中,数据成员z和函数setx都是基类A的公有成员,它们经过公有继承以后,在派生类B中还是公有成员,而派生类B中的函数setvalue和display都是公有成员,可以通过对象对它们进行访问。所以程序中对各成员的访问是正确的。本程序的功能是输出已设置的各成员的值。31、为完成下面的程序,应在划线处填入的语句是#include<iostream>usingnamespacestd;classBase{private:intx;public:Base(inti){x=i;}~Base(){}};classDerived:publicBase{public:______//完成类Derive构造函数的定义};intmain(){Derivedobj;return0;}A、Derived(inti):Base(i){}B、Derived(){}C、VoidDerived(inti):Base(i){}D、Denved(inti){Base(i);}标准答案:A知识点解析:本题考核派生类中的构造函数。程序中,类Derived是基类Base的公有派生。在类Derived的构造函数应该包括调用基类构造函数使基类的数据成员得以初始化。32、若有以下程序:#include<iostream>usingnamespacestd;classA{private:inta;public:voidseta(intx){a=x;}voidshowa(){cout<<a<<",";}};classB{private:intb;public:voidsetb(intx){b=x;}voidshowb(){cout<<b<<",";}};classC:publicA,privateB{private:intc;public:voidsetc(intx,incy,intz){c=z;seta(x);setb(y);}voidshowc(){showa();showb();cout<<c<<end1;}};intmain(){Cc;c.setc(1,2,3);c.showc();return0;}程序执行后的输出结果是A、1,2,3B、1,1,1C、2,2,2D、3,3,3标准答案:A知识点解析:本题考核派生类的应用。本题中类A和类B都是基类。而类C从类A公有派生,从类B处私有派生.所以类C中的函数成员可以访问类A和类B中的公有成员。在类C的函数成员setc中,调用基类A的函数成员seta对A的数据成员a赋值,还调用了基类B的函数成员setb对类B的数据成员b赋值,然后对类C自己的数据成员c赋值。在类C的函数成员showc中,调用基类
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人民的名义签股权协议书范文
- 无负债无纠纷协议书范文模板
- 养生茶厂合作协议书范文范本
- 员工工作守则和行为准则
- 项目可能遇到的风险和应对措施
- 3.专升本考试-《旅游学概论》各章节问题及重难点
- 《数学故事》读后感
- 2023-2024学年云南省怒江市重点中学高考全国统考预测密卷(1)数学试题试卷
- 2023-2024学年云南省红河州高三下学期3月开学数学试题试卷
- 新媒体实习报告15篇
- 论我国农村集体土地所有制度的完善-
- SPC八大控制图自动生成表
- 不等式基本性质
- 初中体育课——立定跳远教案
- 国家电网公司用电信息采集系统运行维护管理办法
- 人民大学大众汽车案例-4组
- 惠州市金山湖公园修建性详细规划
- 食品生产清洗消毒作业指导书
- 旅行社行政岗位职责
- 防火门新标准GB12955-2008(3)
- 全人健康的概念PPT课件
评论
0/150
提交评论