全国计算机等级考试二级c题库7共17套

上传人:无*** 文档编号:101001868 上传时间:2022-06-04 格式:DOC 页数:18 大小:97KB
返回 下载 相关 举报
全国计算机等级考试二级c题库7共17套_第1页
第1页 / 共18页
全国计算机等级考试二级c题库7共17套_第2页
第2页 / 共18页
全国计算机等级考试二级c题库7共17套_第3页
第3页 / 共18页
点击查看更多>>
资源描述
. . 第七套1、 数据库管理系统是_。A、操作系统的一部分B、在操作系统支持下的系统软件C、一种编译系统D、一种操作系统数据库管理系统是数据库的机构,它是一种系统软件,负责数据库中的数据组织、数据操纵、数据维护、控制及保护和数据服务等。故本题答案为B。2、 对于循环队列,下列叙述中正确的是_。A、队头指针是固定不变的B、队头指针一定大于队尾指针C、队头指针一定小于队尾指针D、队头指针可以大于队尾指针,也可以小于队尾指针所谓循环队列,就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,供队列循环使用。在循环队列中,用队尾指针rear指向队列中的队尾元素,用排头指针front指向排头元素的前一个位置。循环队列主要有两种基本运算:入队运算与退队运算。每进行一次入队运算,队尾指针就进一。每进行一次退队运算,排头指针就进一。当rear或front的值等于队列的长度+1时,就将rear或front的值置为1。一般情况下,rear大于front,因为入队的元素肯定比出队的元素多。特殊的情况是rear到达数组的上限之后又从数组的低端开始,此时,rear是小于front的。故本题答案为D。3、 算法的空间复杂度是指_。A、算法在执行过程中所需要的计算机存储空间B、算法所处理的数据量C、算法程序中的语句或指令条数D、算法在执行过程中所需要的临时工作单元数一个算法的空间复杂度,一般是指执行这个算法所需要的内存空间。故本题答案为A。4、 下列数据结构中,能够按照先进后出原则存取数据的是_。A、循环队列B、栈C、队列D、二叉树在栈中,允许插入与删除的一端称为栈顶,而不允许插入与删除的另一端称为栈底。栈顶元素总是最后被插入的元素,从而也是最先能被删除的元素;栈底元素总是最先被插入的元素,从而也是最后才能被删除的元素。即栈是按照先进后出或后进先出的原则组织数据的。故本题答案为B。5、 在E-R图中,用来表示实体联系的图形是_。A、椭圆形B、矩形C、菱形D、三角形在E-R图中用矩形表示实体集,用椭圆形表示属性,用菱形表示联系。故本题答案为C。6、有三个关系R,S和T如下:其中关系T由关系R和S通过某种操作得到,该操作为_。A、选择B、投影C、交D、并并:设关系R和关系S具有相同的目n即两个关系都有n个属性,且相应的属性取自同一个域,则关系R与关系S的并由属于R或属于S的元组组成。本题中,关系T是关系R和关系S进行并运算得到的。故本题答案为D。7、 软件设计中划分模块的一个准则是_。A、低内聚低耦合B、高内聚低耦合C、低内聚高耦合D、高内聚高耦合耦合性与内聚性是模块独立性的两个定性标准。在程序结构中,各模块的内聚性越强,则耦合性越弱。一般较优秀的软件设计,应尽量做到高内聚,低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,有利于提高模块的独立性。故本题答案为B。8、 下列数据结构中,属于非线性结构的是_。A、循环队列B、带链队列C、二叉树D、带链栈如果一个非空的数据结构满足下列两个条件:1有且只有一个根结点;2每一个结点最多有一个前件,也最多有一个后件。则称该数据结构为线性结构。本题中循环队列、带链队列和带链栈都是线性结构,二叉树是非线性结构。故本题答案为C。9、 下列选项中不属于结构化程序设计原则的是_。A、可封装B、自顶向下C、模块化D、逐步求精结构化程序设计方法的主要原则可以概括为自顶向下,逐步求精,模块化,限制使用goto语句。故本题答案为A。10、软件详细设计产生的图如下:该图是_。A、N-S图B、PAD图C、程序流程图D、E-R图程序流程图是一种传统的、应用广泛的软件过程设计表示工具,通常也称为程序框图,箭头表示控制流,矩形表示加工步骤,菱形表示逻辑条件。故本题答案为C。11、有如下程序:#include#includeusing namespace std;int main int s=123,234; coutrightsetfillsetw; forint i=0;i coutsiendl; return 0;运行时的输出结果是_。A、123 234B、*123 234C、*123 *234D、*123 234*本题主要考查了输出格式控制。right设置在设定的宽度内右对齐输出默认对齐方式,用填充字符填充左边。setfill设置填充字符为*。setw指定输出宽度为6,在一个数据输出完后,宽度自动恢复为默认值0表示按数据实际宽度输入输出。因此第一行输出结果为*123,第2行输出结果为234。故本题答案为B。12、有如下程序:#include using namespace std;class C1public: C1 cout1;class C2:public C1public: C2cout2;int main C2 cb2; C1 *cb1; return 0;运行时的输出结果是_。A、121B、21C、211D、12本题主要考查了派生类析构函数的执行顺序。析构函数用来完成对象被删除前的一些清理工作,在对象的生存期即将结束的时候由系统自动调用。删除派生类对象时,析构函数的执行顺序如下:1执行派生类的析构函数;2执行派生类成员对象所在类的析构函数;3执行基类析构函数。在main函数中,第一条语句定义了派生类C2的对象cb2,第二条语句声明对象指针cb1,声明指针,只是得到了用于存储地址的指针变量,不会创建对象,故本程序只创建了一个对象cb2。当main函数结束时,派生类对象cb2被删除前,系统先执行派生类C2的析构函数,输出2,然后调用基类C1的析构函数,输出1。故本程序运行时的输出结果是21。故本题答案为B。13、在下列枚举符号中,用来表示相对于当前位置文件定位方式的是_。A、ios_base:curB、ios_base:begC、ios_base:outD、ios_base:end本题主要考查了文件流的定位。 C+流的定位方式也就是指针移动方式有三种: ios_base:beg:相对于文件首。 ios_base:cur:相对于当前位置负数表示当前位置之前。 ios_base:end:相对于文件尾。故本题答案为A。14、Sample是一个类,执行下面语句后,调用Sample类的构造函数的次数是_。Sample a2, *p=new Sample;A、0B、1C、2D、3本题主要考查了构造函数。构造函数在对象被创建的时候由系统自动调用。本题定义了一个含有2个元素的对象数组a和一个指向动态创建对象的指针p,因此共创建了3个对象。故Sample类的构造函数被调用3次。故本题答案为D。15、已知函数FA调用FB,若要把这两个函数定义在同一个文件中,则_。A、FA必须定义在FB之前B、FB必须定义在FA之前C、若FA定义在FB之后,则FA的原型必须出现在FB的定义之前D、若FB定义在FA之后,则FB的原型必须出现在FA的定义之前本题主要考查了函数原型。在C+中,函数在使用之前要预先声明原型。因此如果函数FB定义在函数FA之后,则必须在函数FA之前声明函数FB的原型,才可以在函数FA中调用函数FB。故本题答案为D。16、有如下程序段:int i=1;while i+; if break; if cout*;执行这个程序段输出字符*的个数是_。A、10B、3C、4D、5本题主要考查了while循环和if语句。在while循环中,变量i的值从1开始,按步长值1递增,当i的值等于10时退出while循环,当i的值为2的整数倍且i的值不等于10时,输出字符*,故执行这个程序段输出字符*的个数为4。故本题答案为C。17、有如下模板声明:template class A;下列声明中,与上述声明不等价的是_。A、template class A;B、template class A;C、template class A;D、template class A;本题主要考查了类模板的声明。在C+中,类模板声明的语法形式为: template class 类名;每个模板形参具有下面几种形式:1typename 2class 3类型修饰 在这三种形式中,前两种是等价的:在声明模板参数时,关键字typename与class可以互换。因此选项A、B、C和该题模板声明等价。故本题答案为D。18、有如下程序:#includeusing namespace std;class Apublic: A:r1 void print cout Er1-; void print const cout Cr1*r1-;private: int r1;int main A a1; const A a2; a1.print;a2.print;return 0;运行时的输出结果是_。A、运行时出错B、E2-C16-C、C4-C16-D、E2-E4-本题主要考查了常对象和常成员函数。使用const关键字修饰的对象称为常对象,使用const关键字说明的成员函数称为常成员函数,const关键字可以用于对重载函数的区分。本题在A类中说明了两个同名函数print,其中一个是常函数。在主函数main中说明了两个对象a1和a2,其中a2是常对象。如果将一个对象说明为常对象,则通过该常对象只能调用它的常成员函数,不能调用其他成员函数,因此通过对象a1调用的是没有用const修饰的函数print,输出E2-,而通过对象a2调用的是用const修饰的常函数print,输出C16-。故本题程序运行时的输出结果是E2-C16-。故题答案为B。19、下列关于虚基类的描述中,错误的是_。A、使用虚基类可以消除由多继承产生的二义性B、构造派生类对象时,虚基类的构造函数只被调用一次C、声明class B:virtual public A说明类B为虚基类D、建立派生类对象时,首先调用虚基类的构造函数本题主要考查了虚基类。当一个派生类从多个基类派生,而这些基类又有一个共同的基类,当对该基类中说明的成员进行访问时,可能出现二义性。虚基类就是为了解决这种二义性问题提出来的,因此选项A正确。使用虚基类解决二义性问题的关键是在派生类中只产生一个虚基类子对象,因此,在建立派生类的一个对象时,为保证虚基类子对象只被初始化一次,这个虚基类构造函数必须只被调用一次,因此选项B正确。虚基类的说明格式如下: class :virtual 选项C中声明class B:virtual public A说明类A为虚基类,因此选项C错误。建立派生类对象时,根据派生类构造函数的执行顺序,应首先调用基类构造函数,因此选项D正确。故本题答案为C。20、下列关于运算符重载的描述中,错误的是_。A、:运算符不能重载B、类型转换运算只能作为成员函数重载C、将运算符作为非成员函数重载时必须定义为友元D、重载运算符应完成下标访问操作本题主要考查了运算符重载。 C+语言规定,除了.、.*、-*、:、?:这五个运算符外,其他运算符都可以重载,因此选项A是正确;在C+中,运算符函数重载一般有两种形式:重载为类的成员函数和重载为类的非成员函数。非成员函数通常是友元。可以把一个运算符作为一个非成员、非友元函数重载。但是,这样的运算符函数访问类的私有和保护成员时,必须使用类的公有接口中提供的设置数据和读取数据的函数,调用这些函数时会降低性能。,因此选项C错误;=、-以及所有的类型转换运算符只能重载为成员函数,因此选项B正确;重载的应完成下标访问操作,使得向指定下标处的元素赋值或取值成为可能,因此选项D正确。故本题答案为C。21、计算斐波那契数列第n项的函数定义如下:int fib if return 1; else if return 2; else return fib+fib;若执行函数调用表达式fib,函数fib被调用的次数是_。A、1B、2C、3D、4本题主要考查了递归函数。如果一个函数在其函数体内直接或间接地调用了自己,该函数就称为递归函数。若执行函数调用表达式fib,则执行表达式fib+fib,即执行表达式fib+fib,故函数fib共被调用了3次:fib、fib和fib。故本题答案为C。22、下列关于模板形参的描述中,错误的是_。A、模板形参表必须在关键字template之后B、模板形参表必须用括弧括起来C、可以用class修饰模板形参D、可以用typename修饰模板形参本题主要考查了模板。在C+中,模板分为函数模板和类模板。声明一个函数模板的格式是: template 声明一个类模板的格式是: template 所有模版的定义都以关键字template开始,模板形参表必须在关键字template之后,因此选项A正确;必须用一对尖括号括起来,因此选项B错误。每个具有下面几种形式:1typename2class3类型修饰在这三种形式中,前两种是等价的:在声明模板参数时,关键字typename与class可以互换,因此选项C、D正确。故本题答案B。23、已知数组arr的定义如下:int arr5=1,2,3,4,5;下列语句中输出结果不是2的是_。A、cout*arr+1endl;B、cout*endl;C、coutarr1endl;D、cout*arrendl;本题主要考查了数组和指针。在C+中,数组的名字就是指向该数组第一个元素下标为0的指针,即该数组第一个元素的地址,也即数组的首地址。因此表达式*arr等价于arr0,故选项D的输出结果为1;选项A中,表达式*arr+1等价于表达式a0+1,输出结果为2。一般情况下,一个数组元素的下标访问ai等价于相应的指针访问*,因此选项B和选项C均输出元素arr1的值,即2。故本题答案为D。24、下列关于C+流的描述中,错误的是_。A、cout A表达式可输出字符AB、eof函数可以检测是否到达文件尾C、对磁盘文件进行流操作时,必须包含头文件fstreamD、以ios_base:out模式打开的文件不存在时,将自动建立一个新文件本题主要考查了C+流。 cout是C+流预定义的标准输出流对象。插入运算符是提取运算符,用于从一个输入流对象获取字节。故选项A的描述错误。故本题答案是A。25、下列关于运算符函数的描述中,错误的是_。A、运算符函数的名称总是以operator为前缀B、运算符函数的参数可以是对象C、运算符函数只能定义为类的成员函数D、在表达式中使用重载的运算符相当于调用运算符重载函数本题主要考查了运算符重载。运算符函数的函数名是由运算符前加关键字operator构成的,因此选项A正确;运算符的重载形式有两种,重载为类的成员函数和重载为类的友元函数,因此选项C错误;在表达式中使用重载的运算符相当于调用运算符重载函数,因此选项D正确;运算符函数的参数可以是对象,因此选项B正确。故本题答案为C。26、有如下程序:#includeusing namespace std;class AApublic: AAcout 1;class BB:public AA int k;public: BB:kcout2; BB:kcout 3;int main BB b,c;return 0;运行时的输出结果是_。A、1312B、132C、32D、1412本题主要考查了类的继承与派生。建立派生类对象时,构造函数的执行顺序如下:1执行基类的构造函数,调用顺序按照各个基类被继承时声明的顺序自左向右;2执行成员对象的构造函数,调用顺序按照各个成员对象在类中声明的顺序自上而下;3执行派生类的构造函数。在main函数中,第一条语句定义了两个派生类BB的对象:b和c,并初始化对象b。创建对象b时构造函数的执行顺序:执行基类AA的构造函数,输出1,然后执行派生类BB的带参数的构造函数,输出3;创建对象c时构造函数的执行顺序为:执行基类AA的构造函数,输出1,然后执行派生类BB的不带参数的构造函数,输出2。故程序运行时的输出结果是1312。故本题答案为A。27、有如下程序:#includeusing namespace std;class Name char name20;public: Name strcpy; cout?; Name strcpy; cout?; ;int main Name names3=Name,Name; return 0;运行此程序输出符号?的个数是_。A、0B、1C、2D、3本题主要考查了构造函数。构造函数在对象被创建的时候由系统自动调用。本题的构造函数有两种重载形式:有参数的和无参数的,无参数的构造函数也称为默认形式的构造函数。main函数中,第一条语句定义了一个含有3个元素的Name类对象数组names,即创建了三个Name类对象,建立前两个对象时,给出初始值,因此调用有参数的构造函数,输出2个?,建立第三个对象时调用无参数的构造函数,输出1个?,因此运行此程序输出符号?的个数是3。故本题答案为D。28、下列字符串中可以用作C+标识符的是_。A、2009varB、gotoC、test-2009D、_123本题主要考查了标识符。标识符的组成要符合一定的规则:标识符是一个以字母或下划线开头的,由字母、数字、下划线组成的字符串;标识符不能与任意一个关键字同名;标识符中的字母区分大小写;标识符不宜过长。选项A的第一个字符是数字,选项B是关键字,选项C中的字符-不合法。只有选项D可以用作C+标识符。故本题答案为D。29、下列枚举类型的定义中,包含枚举值3的是_。A、enum testRED,YELLOW,BLUE,BLACK;B、enum testRED,YELLOW=4,BLUE,BLACK;C、enum testRED=-1,YELLOW,BLUE,BLACK;D、enum testRED,YELLOW=6,BLUE,BLACK;本题主要考查了枚举常量。枚举常量是枚举类型中定义的值,即枚举值。枚举类型实际上是int类型的一个子集,其每一个枚举值代表一个整数;n个枚举值全部未赋常量值时,它们自左至右分别与整数0,1n-1对应;若第i个枚举值赋常量值为m,则其未赋常量值的后续枚举值分别与整数m+1,m+2对应,直到下一个赋了值的枚举值或结束。因此只有选项A包含枚举值3。故本题答案为A。30、有如下类定义:class XX int xdata;public: XX:xdata ;class YY:public XXint ydata;public: YY:XX,ydata ;YY类的对象包含的数据成员的个数是_。A、1B、2C、3D、4本题主要考查了类的继承与派生。派生类继承了基类的全部数据成员和除了构造、析构函数之外的全部成员函数。在一个派生类中,其成员由两部分构成:一部分是从基类继承得到的,另一部分是自己定义的新成员。因此派生类YY的数据成员有两个:一个是从基类XX继承得到的xdata,另一个是自己定义的新数据成员ydata。故本题答案为B。31、有如下程序:#includeusing namespace std;class Publication /出版物类 char name30;public: Publication strcpyname,name; const char * getName constreturn name; virtual const char * getTypeconstreturn 未知类型;class Book:public Publication /书类public: Book:Publication virtual const char * getTypeconstreturn 书;void showPublication coutp.getType:p.getNameendl;int main Book book; showPublication;return 0;运行时的输出结果是_。A、未知类型:未知名称B、未知类型:精彩人生C、书:未知名称D、书:精彩人生本题主要考查了虚函数与多态性。在C+中,一个基类指针或引用可以用于指向它的派生类对象,而且通过这样的指针或引用调用虚函数时,被调用的是该指针或引用实际所指向的对象类的那个重定义版本。在实函数的情况下,通过基类指针或引用所调用的只能是基类的那个函数版本,无法调用到派生类中的重定义函数。在main函数中,第一条语句定义了派生类Book的对象book,建立派生类对象时,构造函数的执行顺序:先执行基类的构造函数,初始化基类数据成员数组name为字符串精彩人生,然后执行派生类的构造函数。第二条语句以派生类对象book为实参调用函数showPublication,函数showPublication的形参为基类引用p,即基类引用p指向派生类对象book。基类Publication的成员函数getType被定义成虚函数,这个虚函数在派生类Book中被重定义。因此p.getType调用的是派生类的那个重定义版本,函数返回值为书。成员函数getName为实函数,p.getName调用的是基类的那个版本,函数返回值为基类的数据成员,即精彩人生。故程序运行时的输出结果是书:精彩人生。故本题答案为D。32、将运算符重载为类成员函数时,其参数表中没有参数,说明该运算符是_。A、不合法的运算符B、一元运算符C、无操作数的运算符D、二元运算符本题主要考查了运算符重载。运算符的重载形式有两种,重载为类的成员函数和重载为类的友元函数。运算符重载为成员函数时,因为此成员函数所属的对象可成为运算符的一个运算分量,所以形参个数一般为运算符的元数减1。因此将运算符重载为类的成员函数时,其参数表中没有参数,说明该运算符是一元运算符。故本题答案为B。33、有如下两个类定义:class AA;class BB AA v1,*v2;BB v3; int *v4;其中有一个成员变量的定义是错误的,这个变量是_。A、v1B、v2C、v3D、v4本题主要考查了类和对象。 C+规定,在提供一个完整的类声明之前,不能声明该类的对象。本题在完整声明类BB之前声明了类BB的对象v3,故成员变量v3的定义是错误的。故本题答案为C。34、有如下程序:#include using namespace std;class Toypublic: Toystrcpy; count+; Toycount-; char* GetName return name; static int getCount return count;private: char name10; static int count;int Toy:count=0; int mainToy t1,t2,t3;coutt1.getCountendl; return 0;运行时的输出结果是_。A、1B、2C、3D、运行时出错本题主要考查了静态数据成员。一个类的静态数据成员被这个类的所有对象所共享,但它不属于类的任何一个对象。它的作用域是类范围。本题中,Toy类定义了一个静态数据成员count,并被初始化为0。main函数的第一条语句定义了3个Toy类对象t1、t2和t3,因为每创建一个Toy类对象,系统自动调用一次Toy类的构造函数,count的值就增1,故第一条语句执行结束后,静态数据成员count的值为3,第二条语句调用静态成员函数getCount,在屏幕上输出count的值,最后执行return语句返回,整个程序执行结束。因此本题程序运行时的输出结果是3。故题答案为C。35、有如下类定义:class A char *a;public: A:a A /把aa所指字符串拷贝到a所指向的存储空间 a=_; strcpy; A delete a; 横线处应填写的表达式是_。A、new charstrlen+1B、charstrlen+1C、charstrlenD、new charsizeof-1本题主要考查了动态存储分配。动态存储分配功能在C+中是通过new和delete运算符来实现的。运算符new用于申请动态存储空间,它的操作数为某种数据类型且可以带有初值表达式或元素个数。new返回一个指向其操作数类型变量的指针。使用new对某种类型变量进行动态分配的语法格式为:=new;其中,表示要分配的变量类型;表示指向类型变量的指针如char*、int*、double*等。类A的带参数构造函数的功能是把aa所指字符串拷贝到指针a所指向的存储空间,根据待填空的下一条语句可以判断横线处表达式的功能应为申请分配用于存放拷贝aa所指字符串的存储空间,函数strlen的功能是获得字符串有效字符的个数,字符串应以字符0结束,而字符串结束符0也占用一个字符空间,故横线处的表达式为new charstrlen+1。故本题答案为A。36、软件开发过程主要分为需求分析、设计、编码与测试四个阶段,其中_阶段产生软件需求规格说明书。标准答案为:需求分析软件需求规格说明书是需求分析阶段产生的最后成果,是软件开发中的重要文档之一。37、程序流程图中的菱形框表示的是_。标准答案为:逻辑条件或逻辑判断程序流程图是一种传统的、应用广泛的软件过程设计表示工具,通常也称为程序框图,箭头表示控制流,矩形表示加工步骤,菱形表示逻辑条件。38、人员基本信息一般包括:XX号,XX,性别,年龄等。其中可以作为主关键字的是_。标准答案为:XX号主关键字能惟一标识每条记录。主关键字可以是一个字段,也可以是一组字段。本题中能惟一标识一条记录的是XX号。39、某二叉树有5个度为2的结点以及3个度为1的结点,则该二叉树中共有_个结点。标准答案为:14 或或十四二叉树的性质3:在任意一棵二叉树中,度为0的结点即叶子结点总是比度为2的结点多一个。本题中度为0的结点数为5+1=6,该二叉树中的总结点数为5+3+6=14。40、在数据库技术中,实体集之间的联系可以是一对一或一对多或多对多的,那么学生和可选课程的联系为_。标准答案为:多对多或 m:n 或 n:m 或 m:n 或 n:m41、有如下类定义:class Samplepublic: Sample; Sample;private: static int data;将静态数据成员data初始化为0的语句是_。标准答案为:int Sample:data=0;本题主要考查了静态数据成员。类Sample的数据成员data为静态数据成员,静态数据成员为类的所有对象所共享,但它不属于类的任何一个对象。静态数据成员初始化的一般格式如下: :=因此将静态数据成员data初始化为0的语句是int Sample:data=0;。42、如下程序定义了单词类Word,类中重载了运算符,用于比较单词的大小,返回相应的逻辑值。程序的输出结果为:After Sorting: Happy Welcome,请将程序补充完整。#include #include using namespace std;class Wordpublic: Word:str string getstrreturn str; _ const return str; friend ostream& operator outputw.str; return output;private: string str;int main Word w1,w2; coutAfter sorting: ; ifw1 coutw1 w2; else coutw2 w1;return 0;标准答案为:bool operator或 bool operator本题主要考查了运算符重载。C+把重载的运算符视为特殊的函数,称为运算符函数,函数名就是在运算符前加上保留字operator,因此运算符的函数名为operator 。由函数体语句return str;可知:运算符函数的返回值类型为bool,str为成员函数所属对象的数据成员,对象w为运算符函数的参数,故运算符被重载为成员函数。运算符重载为成员函数时,因为此成员函数所属的对象可成为运算符的一个运算分量,所以形参个数一般为运算符的元数减1,故横线处应填bool operator。43、利用表达式ai可以访问int型数组a中下标为i的元素。在执行了语句int *p=a;后,利用指针p也可访问该元素,相应的表达式是_。标准答案为:pi 或 *本题主要考查了指针与数组。在C+中,数组的名字就是指向该数组第一个元素下标为0的指针,即该数组第一个元素的地址,也即数组的首地址。一般情况下,一个数组元素的下标访问ai等价于相应的指针访问*,所以利用指针p访问ai的表达式为pi或*。44、类Sample的构造函数将形参data赋值给数据成员data。请将类定义补充完整。class Samplepublic: Sample;private: int data;Sample:Sample _标准答案为:this-data=data; 或 Sample:data=data;本题主要考查了变量的作用域和可见性。类Sample的私有数据成员data具有类作用域,其构造函数形参data具有块作用域,该类作用域包含块作用域,因为在两个或多个具有包含关系的作用域中声明了同名标识符,则外层标识符在内层不可见,所以在构造函数中直接使用data引用的是形参变量data,而不是Sample类的数据成员data。此时,有两个方法可以引用到Sample类的数据成员:一是通过this指针,在类的成员函数中,this指针是成员函数所属对象的指针,它指向类对象的地址,故本题可以填this-data=data;。二是通过作用域运算符:明确指出访问的是Sample类的成员,故还可以填Sample:data=data;。45、请将下列模板类Data补充完整。templateclass Data public: void put val=v;_ get /返回数据成员val的值,返回类型不加转换return val; private: T val;标准答案为:T本题主要考查了类模板。根据题意,横线处应填函数get的返回值类型。根据函数体语句return val;以及该语句的注释,函数get的返回值类型应为数据成员val的类型T。因此横线处应填T。46、下面是一个递归函数,其功能是使数组中的元素反序排列。请将函数补充完整。void reverse ifsize return; int k=a0; a0=asize-1;asize-1=k; reverse;标准答案为:size-2本题主要考查了递归函数。递归函数reverse有两个参数:第一个参数a是指向待反序数组的首元素地址的指针,第二个参数size是待反序数组的元素个数。reverse函数先把数组a的第一个元素和最后一个元素交换,然后以剩下待反序元素集合的首地址即a+1和待反序元素个数size-2作为实参调用自己,直到把所有元素反序。因此横线上应填size-2。47、有如下程序:#includeusing namespace std;class GrandChildpublic:GrandChild strcpy; const char * getNameconst return name; virtual char * getAddressconst=0;private: char name20;class GrandSon:public GrandChildpublic: GrandSon char *getAddress const return Shanghai;int main GrandChild *gs=new GrandSon; coutgetName住在getAddressendl; delete gs; return 0; 运行时的输出结果是 _。标准答案为:Unknown住在Shanghai本题主要考查了虚函数和多态性。基类GrandChild中声明了虚函数getAddress,这个虚函数在派生类GrandSon中被重定义,无论是否用virtual修饰,重定义的函数仍然是一个虚函数。在C+中,一个基类指针可以用于指向它的派生类对象,而且通过这样的指针调用虚函数时,被调用的是该指针实际所指向的对象类的那个重定义版本。在main函数中,第一条语句定义基类指针gs,gs指向动态创建的派生类对象,根据创建派生类对象时,构造函数执行顺序:先调用基类构造函数,使基类数据成员name指向字符串Unknown;然后执行派生类构造函数。函数getName是实函数,在实函数的情况下,通过基类指针gs所调用的只能是基类的那个函数版本,因此gs-getName的返回值为Unknown,gs-getAddress调用的是派生类的那个重定义版本,返回值为Shanghai,因此程序运行时的输出结果是Unknown住在Shanghai。48、有如下循环语句:for20;i-=2 couti,; 运行时循环体的执行次数是_次。标准答案为:15本题主要考查了for循环。循环初始值为50,步长值为-2,终止值为21。循环次数=int/步长+1=int/+1=15。49、图形类Shape中定义了纯虚函数CalArea,三角形类Triangle继承了类Shape,请将Triangle类中的CalArea函数补充完整。class Shapepublic: virtual int CalArea=0;class Triangle:public Shapepublic: Triangle:side,height _return side*height/2;private: int side;int height;标准答案为:int CalArea 或 virtual int CalArea本题主要考查了纯虚函数。纯虚函数是一个在基类中声明的虚函数,它在该基类中没有定义具体的操作内容,要求各派生类根据实际需要定义自己的版本。派生类的虚函数应与基类的虚函数有相同的名称、相同的参数个数及相同的对应参数类型,以及相同的返回值或满足类型兼容规则的指针、引用型的返回值。因此横线处应填int CalArea或virtual int CalArea。50、若表达式x+*+3中的变量均为double型,则表达式值的类型为_。标准答案为:double本题主要考查了混合运算时数据类型的转换。在算术运算和关系运算中如果参与运算的操作数类型不一致,编译系统会自动对数据进行转换,转换的原则是将低类型数据转换为高类型数据。本题表达式为int型与double型数据的混合算术运算,int为低类型,double为高类型,根据转换原则,表达式的值的类型为double。18 / 18
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 压缩资料 > 基础医学


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!