画出字符串str函数=‘Iamastudent’的一种顺序存储结构和一种链式存储结构。

全国计算机二级C++考题真题及答案_学霸学习网
全国计算机二级C++考题真题及答案
2006年9月考试真题(第24次) 1. 从工程管理角度,软件设计一般分为两步完成,它们是______。 A、概要设计与详细设计 D、程序设计与数据设计 从工程管理角度看,软件设计分为两步完成:概要设计与详细设计。概要设 计(又称结构设计)将软件需求转化为软件体系结构、确定系统级接口、全局数据 结构或数据库模式;详细设计确立每个模块的实现算法和局部数据结构,用适当方 法表示算法和数据结构的细节。 故本题答案为A。 B、过程控制 C、软件结构设计与数据设计2. 数据库技术的根本目标是解决数据的______。 A、存储问题 B、共享问题 C、安全问题 D、保护问题由于数据的集成性使得数据可为多个应用所共享,特别是在网络发达的今 天,数据库与网络的结合扩大了数据关系的应用范围。数据的共享本身又可极大地 减少数据冗余性,不仅减少了不必要的存储空间,更为重要的是可以避免数据的不 一致性。因此,数据库设计的根本目标是要解决数据共享问题。 故本题答案为B。 3. 在数据库系统中,用户所见数据模式为______。 A、概念模式 B、外模式 C、内模式 D、物理模式数据库管理系统的三级模式结构由外模式、模式和内模式组成。外模式又称 为子模式,或用户模式,是指数据库用户所看到的数据结构,是用户看到的数据视 图。模式又称为逻辑模式,是数据库中对全体数据的逻辑结构和特性的描述,是所 有用户所见到的数据视图的总和。外模式是模式的一部分。内模式又称为存储模式 或物理模式,是指数据在数据库系统内的存储介质上的表示,即对数据的物理结构1 和存取方式的描述。故本题答案为B。4. 在长度为64的有序线性表中进行顺序查找,最坏情况下需要比较的次数为 ______。 A、63 B、64 C、6 D、7在进行顺序查找过程中,如果线性表中的第1个元素就是被查找元素,则只 需做一次比较就查找成功,查找效率最高;但如果被查找的元素是线性表中的最后 一个元素,或者被查找的元素根本就不在线性表中,则为了查找这个元素需要与线 性表中所有的元素进行比较,这是顺序查找的最坏情况。所以对长度为n的线性表 进行顺序查找,在最坏情况下需要比较n次。 5. 对下列二叉树 故本题答案为B。进行中序遍历的结果是______。 A、ACBDFEG B、ACBDFGE C、ABDCGEF D、FCADBEG二叉树的中序遍历指在访问根结点、遍历左子树与遍历右子树这三者中,首先遍 历左子树,然后访问根结点,最后遍历右子树;并且遍历左、右子树时,仍然先遍 历左子树,然后访问根结点,最后遍历右子树。 故本题答案为A。 6. 下列选项中不属于软件生命周期开发阶段任务的是______。2 A、软件测试B、概要设计C、软件维护D、详细设计软件生命周期分为软件定义、软件开发及软件维护。其中软件开发阶段的任 务中软件设计阶段可分解成概要设计阶段和详细设计阶段;软件维护不属于软件开 发阶段。 故本题答案为C。7. 下列叙述中正确的是______。 A、一个算法的空间复杂度大,则其时间复杂度也必定大 B、一个算法的空间复杂度大,则其时间复杂度必定小 C、一个算法的时间复杂度大,则其空间复杂度必定小 D、上述三种说法都不对算法的复杂度主要包括时间复杂度和空间复杂度:算法在运行过程中需辅助 存储空间的大小称为算法的空间复杂度;算法的时间复杂度是指执行算法所需要的 计算工作量,即算法执行过程中所需要的基本运算次数,为了能够比较客观地反映 出一个算法的效率,在度量一个算法的工作量时,不仅应该与所使用的计算机、程 序设计语言以及程序编制者无关,而且还应该与算法实现过程中的许多细节无关。 为此,可以用算法在执行过程中所需基本运算的执行次数来度量算法的工作量。 故本题答案为D。 8. 下列选项中不符合良好程序设计风格的是______。 A、源程序要文档化 B、数据说明的次序要规范化C、避免滥用goto语句 D、模块设计要保证高耦合、高内聚 良好的程序设计风格可以使程序结构清晰合理, 使程序代码便于维护, 因此, 程序设计风格对保证程序的质量很重要。主要应注意和考虑下述一些因素:1、源 程序要文档化;2、数据说明的次序要规范化;3、语句的结构应该简单直接,不应 该为提高效率而把语句复杂化,避免滥用goto语句。模块设计要保证低耦合、高内3 聚。故本题答案为D。9. 设有如下三个关系表 RA m nB 1 C 3SA m n B 1 1 C 3 3T下列操作中正确的是______。A、T=R∩SB、R∪SC、D、T=RMS从图中可以看出,关系T是关系R和关系S的简单扩充,而扩充的符号为× ,所以答案 为 。 故本题答案为C。 10. 数据库设计的四个阶段是:需求分析、概念设计、逻辑设计和______。 A、编码设计 B、测试阶段 C、运行阶段 D、物理设计数据库设计分为以下6个设计阶段:需求分析阶段、概念设计阶段、逻辑设计 阶段、物理设计阶段、实施阶段及数据库运行和维护阶段。 D。 11. 下列运算符不能重载为友元函数的是______。 A、= () [] -& B、+ - ++ -C、& & &= &= D、+= -= *= /= 故本题答案为本题考查的是运算符的重载。 在C++中,可以通过两种方式对运算符进行重载。一种是类成员函数的方式、 一种是友元函数的方式。= () [] -&以及所有的类型转换运算符只能作为成员函数 重载,不能重载为友元函数。 故本题答案为A。12. 语句ofstream f(&SALARY.DAT&,ios_base::app);的功能是建立流对象f,并试 图打开文件SALARY.DAT与f关联,而且______。 A、若文件存在,将其置为空文件;若文件不存在,打开失败4 B、若文件存在,将文件指针定位于文件尾;若文件不存在,建立一个新文件 C、若文件存在,将文件指针定位于文件首;若文件不存在,打开失败 D、若文件存在,打开失败;若文件不存在,建立一个新文件 本题考查的是文件流的输出。 ofstream f(&SALARY.DAT&,ios_base::app); 是以ios_base::app方式打开文件,若文件存在,将文件指针定位于文件尾;若文 件不存在,建立一个新文件。 13. 有如下程序 #include&iostream& class A{ public: virtual void func1(){cout&&&Al&;} void 故本题答案为B。func2(){cout&&&A2&;} }; class B:public A{ func2(){cout&&&B2&;} }; int main(){ return 0;} 运行此程序,屏幕上将显示输出______。 A、B1B2 B、A1A2 C、B1A2 D、A1B2 A*p=new B; p-&func1(); p-&func2(); public: void func1(){cout&&&B1&;} void本题考查的是派生类。 派生类B由基类A公有继承而来。调用p-&func1();后,执行派生类B的函数void func1();调用p-&func2();后,执行基类的函数void func2(),因为虚拟函数是根5 据对象的实际类型调用,非虚拟函数是根据指针类型调用。故通过指针p调用func2 时将直接调用基类中的void func2()。 14. if语句的语法格式可描述为: 格式1:if(&条件&)&语句& 或 格式2:if(&条件&)&语句1&else&语句2& 故本题答案为C。关于上面的语法格式,下列表述中错误的是______。 A、&条件&部分可以是一个if语句,例如if(if(a==0) …) … B、&语句&部分可以是一个if语句,例如if(…) if(…) … C、如果在&条件&前加上逻辑非运算符!并交换&语句1&和&语句2&的位置,语句功能 不变 D、&语句&部分可以是一个循环语句,例如if(…)while(…) … 本题考查的是if语句。 if为关键字,&条件&通常是一个表达式;if子句和else子句可以是任何类型的 语句,当然也可以是if…else语句本身和while语句。 if…else语句的基本执行过程是:首先计算&条件&的值,如果此值不为0(&真 &) ,则执行&语句1&,然后忽略&语句2&,而去执行if语句之后的下一条语句;如果 此值为0(&假&) ,则执行&语句2&,然后忽略&语句1&,然后继续执行if语句之后的 下一条语句。 故本题答案为A。15. 下列语句中,错误的是______。 A、const int buffer=256; B、const double *C、int const buffer=256;D、double *6 本题考查的是符号常量定义。 const int buffer=256; const double * 值可以改变 int const buffer=256; double * //声明常量buffer //声明的point是常量,*point可变,但point的值 //声明常量buffer //声明常量指针*point,*point不可变,但point的不可以改变,point不是外部的,必须在声明初始化常量对象。可改为: double aa = 123.45; double *const point = & 故本题答案为D。 16. 关于运算符重载,下列表述中正确的是______。 A、C++已有的任何运算符都可以重载 数据类型 C、在类型转换符函数的定义中不需要声明返回类型 D、可以通过运算符重载来创建C++中原来没有的运算符 本题考查的是运算符重载。 运算符重载是针对C++中原有的运算符进行的,不可能通过重载创造出新的运 算符,故选项D错误。除了.、.*、-&*、::、?:这5个运算符外,其它运算符都可以 重载,故选项A错误。运算符函数的返回类型可以声明为基本数据类型,故选项B错 误。在重载类型转换符时,由于运算符本身已经表示出返回值类型,因此不需要返 回值类型的声明。 故本题答案为C。 B、运算符函数的返回类型不能声明为基本17. 关于在调用模板函数时模板实参的使用,下列叙述正确的是______。7 A、对于虚拟类型参数所对应的模板实参,如果能从模板函数的实参中获得相同的 信息,则都可以省略 B、对于虚拟类型参数所对应的模板实参,如果他们是参数表中的最后的若干参数, 则都可以省略 C、对于虚拟类型参数所对应的模板实参,若能够省略则必须省略 D、对于常规参数所对应的模板实参,任何情况下都不能省略 本题考查的是函数模板中模板实参的省略。 对于虚拟类型参数所对应的模板实参,如果从模板函数的实参表中获得的信息 已经能够判定其中部分或全部虚拟类型参数,而且它们又正好是参数表中最后的若 干参数,则模板实参表中的那几个参数可以省略。反之,对于某个模板实参,如果 从模板函数的实参表中无法获得相同的信息,就不能省略;或者虽然能够获得同样 的信息,但在它后面还有不能省略的实参,则其自身还是不能省略,故选项A和B错 误。对于虚拟类型参数所对应的模板实参,若能够省略可以省略,也可以不省略, 故选项C错误。常规参数的信息无法从模板函数的实参表中获得,因此在调用时必 须显式的说明。 故本题答案为D。18. 若有下面的函数调用: fun(a+b,3,max(n-1,b)) 则fun的实参个数是______。 本题考查的是函数的调用。 在C++中,&形参列表&是由逗号分开的,分别说明函数的各个参数。在fun()函 数中它包括3个形参,a+b,3和max(n-1,b);当调用一个函数时,实参与形参一对 一地匹配,所以实参个数也是3个。 故本题答案为A。8A、3B、4C、5D、6 19. 下列有关内联函数的叙述中,正确的是______。 A、内联函数在调用时发生控制转移 C、内联函数是通过编译器来实现的 return语句 本题考查的是内联函数。 在C++中使用inline关键字来定义内联函数。inline关键字放在函数定义中函 数类型之前。不过编译器会将在类的说明部分定义的任何函数都认定为内联函数, 即使它们没有inline说明。一个内联函数可以有,也可以没有return语句。内联函 数在程序执行时并不产生实际函数调用,而是在函数调用处将函数代码展开执行。 内联函数是通过编译器来实现的。 故本题答案为C。 B、内联函数必须通过关键字inline来定义 D、内联函数函数体的最后一条语句必须是20. 在公有继承的情况下,允许派生类直接访问的基类成员包括______。 A、公有成员 保护成员 本题考查的是派生类。 派生类中的成员不能访问基类中的私有成员,可以访问基类中的公有成员和保 护成员。此时派生类对基类中各成员的访问能力与继承方式无关,但继承方式将影 响基类成员在派生类中的访问控制属性。 故本题答案为B。 21. 有如下程序: #include&iostream& class Obj{ public: B、公有成员和保护成员 C、公有成员、保护成员和私有成员 D、 Obj(){i++;} ~Obj(){i--;}9 static int getVal(){} }; int Obj::i=0; void f(){Obj ob2;cout&&ob2.getVal();} int main(){ O f();Obj*ob3=new Ocout&&ob3-&getVal(); delete ob3;cout&&Obj::getVal(); return 0; } 程序的输出结果是______。 A、232 B、231 C、222 D、221本题主要考查了C++中类的静态成员。 由于i是类Obj的静态成员,该成员被类的所有实例共享。当定义ob1时,系统 自动调用构造函数Obj(),i的值将加1;调用函数f()时,在定义ob2时系统会自动 调用构造函数Obj(),i的值将再加1;调用ob2.getVal();后,将i的值输出,输出 值为2;当调用函数f()即将结束时,系统自动调用析构函数~Obj(),i的值将减1; 当定义ob3时,系统自动调用构造函数Obj(),i的值将加1,调用 cout&&ob3-&getVal();后,将i的值输出,输出值为2;调用delete ob3后将执行Obj 的析构函数~Obj(),执行后,i的值将减1,Obj::getVal()为类的一个静态成员函 数,其作用是返回私有静态成员变量i的值1。 故本题答案为D。22. 下列有关继承和派生的叙述中,正确的是______。 A、如果一个派生类私有继承其基类,则该派生类中的成员不能访问基类的保护成 员10 B、派生类的成员函数可以访问基类的所有成员 对象C、基类对象可以赋值给派生类D、如果派生类没有实现基类的一个纯虚函数,则该派生类是一个抽象类 本题考查的是拷贝构造函数。 拷贝构造函数通常在以下3种情况下会被调用: (1)用类的一个已知的对象去初始化该类的另一个正在创建的对象。 (2)采用传值调用方式时,对象作为函数实参传递给函数形参。 (3)对象作为函数返回值。 故本题答案为B。23. 下列情况中,不会调用拷贝构造函数的是______。 A、用一个对象去初始化同一类的另一个新对象时 B、将类的一个对象赋值给该类的另一个对象时 C、函数的形参是类的对象,调用函数进行形参和实参结合时 D、函数的返回值是类的对象,函数执行返回调用时 本题考查的是拷贝构造函数。 拷贝构造函数通常在以下3种情况下会被调用: (1)用类的一个已知的对象去初始化该类的另一个正在创建的对象。 (2)采用传值调用方式时,对象作为函数实参传递给函数形参。 (3)对象作为函数返回值。 故本题答案为B。 24. 有如下程序 #include&iostream& int main(){ #include&iomanip&cout&&setprecision(3)&&fixed&&setfill('*')&&setw(8);11 cout&&12.345&&______&&34.567; } 若程序的输出是: **12.345**34.567return 0;则程序中下划线处遗漏的操作符是______。 A、setprecision B、fixed C、setfill('*') D、setw(8)本题考查的是输入输出宽度的控制和输出精度的控制。 setw(int n);设置输入输出的宽度。 setprecision(int n);设置浮点数的精度(有效位数或小数位数) 。 setfill(char c);设置填充字符。 由程序可以看出,本题设置小数的输出宽度为8,小数位数为3。输出数据时, 如果数据宽度小于8,则空闲的位置用*填充。 25. 有如下的运算符重载函数定义: double operator +(int i,int k){return double(i+k);} 但定义有错误,对这个错误最准确的描述是______。 A、+只能作为成员函数重载,而这里的+是作为非成员函数重载的 B、两个int型参数的和也应该是int型,而这里将+的返回类型声明为double C、没有将运算符重载函数声明为某个类的友元 D、C++已经提供了求两个int型数据之和的运算符+,不能再定义同样的运算符 本题考查的是运算符的重载。 在C++中可以对用户自定义类的运算符进行重载, 但不能诸如int, char, double 等内置类型运算符进行重载。 26. 有如下程序12故本题答案为D。故本题答案为D。 #include&iostream& class Base{ c){cout&&c;} }; Base(){cout&&'A';} Base(charprotected:class Derived:public Base{ public: }; int main(){ Derived d1('B'); return 0; A、B } B、BA C、AB D、BB Derived(char c){cout&&c;}执行这个程序屏幕上将显示输出______。本题考查的是派生的构造函数和基类的构造函数的调用顺序。 建立派生类对象时,构造函数的执行顺序如下: (1)执行基类的构造函数。 (2)执行成员对象的构造函数。 (3)执行派生类的构造函数。 派生类Derived由基类Base公有派生而来。在派生类构造函数声明时系统会自 动调用基类的缺省构造函数。调用Derived d1('B');后,执行类Derived的构造函数 的Derived(char c)定义, 系统会自动调用基类的缺省构造函数Base(), 输出字母A; 再执行派生类的构造函数Derived(char c),输出字母B。 故本题答案为C。 27. 关于关键字 class 和 typename,下列表述中正确的是______。 A、程序中的typename都可以替换为class typename13B、程序中的class都可以替换为 C、在模板形参表中只能用typename来声明参数的类型 D、在模板形参表中只能用class或typename来声明参数的类型 本题考查的是模板形参。 模板形参分为两种类型:虚拟类型参数和常规参数。虚拟类型参数须用 typename或class定义。常规参数用具体的类型修饰符(如int、double、char*等) 定义,故选项C和D错误。在定义模板时,关键字typename与class可以互相交换, 但在定义类时,只能使用class。typename仅仅用于定义模板,故程序中所有的 typename都可以替换成class,但对于用于类定义的class不能使用typename来替 换。 故本题答案为A。28. 在一个派生类对象结束其生命周期时______。 A、先调用派生类的析构函数后调用基类的析构函数 B、先调用基类的析构函数后调用派生类的析构函数 C、如果基类没有定义析构函数,则只调用派生类的析构函数 D、如果派生类没有定义析构函数,则只调用基类的析构函数 本题考查的是派生类析构函数的执行顺序。 当主函数结束时,派生类析构函数的执行顺序是:先执行派生类的析构函数, 再执行成员对象的析构函数,最后执行基类的析构函数。 29. 有如下类定义: class MyBase{ public: MyBase(int n=0):k(n){}14故本题答案为A。 int value()const{} }; class MyDerived:MyBase{ public: MyDerived(int i):j(i){} int getK()const{} int getj()const{} }; 编译时发现有一处语法错误,对这个错误最准确的描述是______。 A、函数getK试图访问基类的私有成员变量k B、在类MyDerived的定义中,基类名MyBase前缺少关键字public、protected或 private C、类MyDerived缺少一个无参的构造函数 D、类MyDerived的构造函数没有对基类数据成员k进行初始化 本题考查的是派生类访问权限。 在一个派生类中,其成员由两部分构成:一部分是从基类继承得到的,另一部 分是自己定义的新成员,所有这些成员仍然分为公有、私有和保护三种访问属性。 其中,从基类继承下来的全部成员构成派生类的基类部分,这部分的私有成员是派 生类不能直接访问的,公有成员和保护成员则是派生类可以直接访问的。 故本题答案为A。 30. 有如下程序15 #include&iostream& class MyClass{#include&iomanip&public:MyClass(){cout&&'A';} MyClass(char c){cout&&c;} ~MyClass(){cout&&'B';} }; int main(){ return 0;} 执行这个程序屏幕上将显示输出______。A、ABX 本题考查的是析构函数和构造函数。 在定义对象p1时由系统自动调用构造函数MyClass(),输出字母A;用new创建 单个对象MyClass('X')时,要根据参数调用相应的构造函数MyClass(char c),输出 字母X;在执行delete时,系统会自动调用析构函数~MyClass(),输出字母B,当对 象的生存周期即将结束时系统会自动调用析构函数~MyClass(),输出字母B。 故本题答案为D。 31. 以下关键字不能用来声明类的访问权限的是______。 A、public B、static C、protected D、private B、ABXB C、AXB D、AXBB MyClass pl,*p2; p2=new MyClass('X'); delete p2;本题考查的是类的定义。 类定义的一般格式如下: class&类名& { public:16 &成员函数或数据成员的说明& protected: &数据成员或成员函数的说明& private: &数据成员或成员函数的说明& };//公有成员,外部接口//保护成员//私有成员关键字public、private和protected称为访问权限修饰符,他们限制了类成员 的访问控制范围。 故本题答案为B。 32. 有如下程序 #include&iostream& int i=1; class Fun{ public: int value(){return i-1;} int value()const{return i+1;} }; int Fun::i=2; int main(){ int i=3;17 Fun fun1; const Fun fun2; ______ return 0; } 若程序的输出结果是: 123 则程序中下划线处遗漏的语句是______。 A、cout&&fun1.value()&&Fun::i&&fun2.value(); B、cout&&Fun::i&&fun1.value()&&fun2.value(); C、cout&&fun1.value()&&fun2.value()&&Fun::i; D、cout&&fun2.value()&&Fun::i&&fun1.value(); 本题主要考查了常对象的一些概念。 由于i是类Fun的静态成员,该成员被类的所有实例共享。对于类中的静态成员 函数,可以通过&类名::函数名&的方法来调用,并且该函数只能访问类中的静态成 员。在C++中,对于常对象的成员函数调用,将自动调用其常成员函数。在本题中 执行fun1.value(),将调用原型为&int value();&的函数,i的值返回1;执行 fun2.value();,将调用原型为&int value()&的函数,i的值返回3;执行 Fun::i时,调用类的静态成员i,i的值返回2。 33. 有如下说明 int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; 则数值为9的表达式是______。18故本题答案为A。 A、*p+9B、*(p+8)C、*p+=9D、p+8本题考查的是指针与数组。 数组的下标是从0到数组的长度减1。*(p+i)是取数组的第i+1个元素,即下标 为i的元素。因此*(p+8)取数组的第9个元素,即元素9。 34. 下列符号中,正确的C++标识符是______。 A、enum B、2b C、foo-9 D、_32 故本题答案为B。本题考查的是标识符。 标识符是一个以字母或下划线开头的,由字母、数字、下划线组成的字符串。 标识符不能与任意一个关键字同名。 故本题答案为D。35. 下列关于输入流类成员函数getline()的描述中,错误的是______。 A、该函数是用来读取键盘输入的字符串的 制的 C、该函数读取字符串时,遇到终止符便停止 含空格 本题考查的是文件流的输入输出。 函数getline(char_type* s,streamsize n,char_type delim)的作用是从当前 位置开始提取字符存入s所指向的具有n各字节的字符空间。字符的提取与存储在遇 到下列情况时停止: (1)已提取并存储了n-1个字符; (2)到流尾,无字符可提取; (3)下一个要提取的字符等于结束标志delim。 故本题答案为B。19B、该函数读取的字符串长度是受限D、该函数读取字符串时,可以包 36. 按&先进后出&原则组织数据的数据结构是______。 标准答案为:栈 考生答案为:栈栈和队列都是一种特殊的操作受限的线性表,只允许在端点处进行插入和删 除。二者的区别是:栈只允许在表的一端进行插入或删除操作,是一种“先进后出” 的线性表;而队列只允许在表的一端进行插入操作,在另一端进行删除操作,是一 种“先进先出”的线性表。 37. 下列软件系统结构图的宽度为______。 标准答案为:3 或 三 考生答案为:3软件系统结构图的宽度:整体控制跨度(最大模块数的层)的表示。 38. ______的任务是诊断和改正程序中的错误。 标准答案为:程序调试 或 调试 考生答案为:软件测试程序调试的任务是诊断和改正程序中的错误。它与软件测试不同,软件测 试是尽可能多地发现软件中的错误。先要发现软件的错误,然后借助于一定的调试 工具去找出软件错误的具体位置。软件测试贯穿整个软件生命期,调试主要在开发 阶段。 39. 一个关系表的行称为______。 标准答案为:元组 或 记录 考生答案为:元组设计数据库的目的实质上是设计出满足实际应用需求的实际关系模型;关系20 中的行称为元组,对应存储文件中的记录,关系中的列称为属性,对应存储文件中 的字段。 40. 数据结构分为线性结构和非线性结构,带链的队列属于______。 标准答案为:线性结构 考生答案为:线性结构与栈类似,队列也是线性表,也可以采用链式存储结构。 41. 创建对象数组时,对数组的每一个元素都将调用一次构造函数,如果没有显式 给出数组元素的初值,则调用缺省构造函数。下列程序涉及到对象数组的创建和单 个对象的创建,其输出结果是______。 #include&iostream& class Foo{ public: Foo(int x){cout&&'A';} Foo(){} }; int main() { Foo f[3],g(3); return 0; } 标准答案为:A 考生答案为:AAAA本题考查的是类的对象数组和成员对象。21 从程序可以看出f[3]是类Foo的一个对象数组,因为f[3]没有显式的给定初值, 所以系统自动调用缺省构造函数Foo();在定义类Foo的对象g(3)时,执行相应的构 造函数Foo(int x),输出字母A。 42. 插入排序算法的主要思想是:每次从未排序序列中取出的一个数据,插入到已 排序序列中的正确位置。InsertSort类的成员函数sort()实现了插入排序算法。请 将画线处缺失的部分补充完整。 class InsertSort{ public: InsertSort(int*a0,int n0):a(a0),n(n0){} //参数a0是某数组首地址,n是 数组元素个数 void sort() {//此函数假设已排序序列初始化状态只包含a[0],未排序序列初始为a[1] … a[n-1] for(int i=1;i&n;++i){ int t=a[i]; for(______;j&0;--j){ if(t&=a[j-1]) a[j]=a[j-1];} a[j]=t;}} protected: int*a,n; //指针a用于存放数组首地址,n用于存放数组元素个数22 };标准答案为:j=I考生答案为:j=i-1本题考查的是插入排序。 在Sort函数中,实现函数的插入排序算法,若队列中已有i个数,则向其中插 入第i+1个数时,依次与从下标为i-1到下标为0的数比较,如果后面的数小于前面 的数,则交换这两个数,否则说明该数已排好序,直接跳出内层循环,故此空应填 j=i。 43. 如果不使用多态机制,那么通过基类的指针虽然可以指向派生类对象,但是只 能访问从基类继承的成员。下列程序没有使用多态机制,其输出结果是______。 #include&iostream& class Base{ public: void print(){cout&&'B';}}; class Derived:public Base{ public: void print(){cout&&'D';}}; int main() { Derived*pd=new Derived(); Base*pb=23 pb-&print(); pd-&print(); return 0; } 标准答案为:BD 考生答案为:BD本题考查的是派生类。 派生类Derived由基类Base公有继承而来, 是基类的子类型。 调用pb-&print(); 后,执行基类的函数void print(),因为尽管pb的函数print()可以对类Base的公 有派生类Derived的对象pd进行操作,但是只能使用从基类Base中继承的成员;调 用pd-&print();后,执行派生类的函数void print()。44. 若有定义语句:int *a,b;,则变量b的数据类型是______。 标准答案为:整型 或 int 本题考查的是变量的定义。 int *a,b;把a定义为一个int类型的指针;把b定义为一个整型变量。 45. 在声明派生类时,如果不显式地给出继承方式,缺省的类继承方式是私有继承 private。已知有如下类定义: classe Base{ protected: void fun(){} };24考生答案为:int class Derived:Base{}; 则Base类中的成员函数fun(),在Derived类中的访问权限是______。(注意:要求 填写private、protected或public中的一项)。 标准答案为:private 考生答案为:private46. 下列程序的输出结果是______。 #include&iostream& class A{ public: A():a(9){} virtual void print() const{cout&&a;}; }; class B:public A{ public: B(){b='S';} void print() const{cout&&b;} }; void show(A&x){x.print();} int main() { A d1,*p;25 B d2; p=&d2; d1.print(); d2.print(); p-&print(); show(d1); show(d2); return 0; } 标准答案为:9SS9S 考生答案为:9SS9S本题主要考查了缺省构造函数。 在d1、d2定义时分别调用它们的构造函数。调用d1.print();后,执行类A的 virtual void print()函数;调用d2.print();后,执行派生类B的构造函数void print();调用p-&print();后,执行执行派生类B的构造函数void print();调用 show(d1);后,调用函数show(A&x),再调用类A的virtual void print()函数;调 用show(d2);后,调用函数show(A&x),再调用派生类B的构造函数void print()。 47. 已知递归函数f的定义如下: int f(int n) { if(n&=1) return 1; //递归结束情况else return n*f(n-2); //递归} 则函数调用语句f(5)的返回值是______。26 标准答案为:15考生答案为:120 本题主要考查了递归算法。 函数每次将f(n)的值转换成相应的关系式n*f(n-2),直到f(1)时为止。所以 f(5)=5*f(5-2)=5*3*f(1)=5*3*1=15。 48. 已知数组a中的元素个数为n, 下列语句的作用是将下标为i的元素移动到下标为 i-1的单元,其中1&=i&n。例如,当n=4,a中原有的数据为1,2,3,4时,则移动 后a中元素变为2,3,4,4。请将语句补充完整: for(int i=0;i&n-1;i++) a[i]=a[______]; 标准答案为:i+1 或 1+I 本题考查循环的基本应用。 解题思路为:循环条件是i&n-1,循环的结果是把将下标为i的元素移动到下标 为i-1的单元,即a[i+1]的值赋给a[i],所以答案是i+1。 49. 己知下列程序的输出结果是42,请将画线处缺失的部分补充完整。 #include&iostream& class Foo{ public: Foo():value(0){} void setValue(int value)27考生答案为:i+1 {______=}//给Foo的数据成员value赋值void print(){cout&&} }; int main() { F f.setValue(42); f.print(); return 0; } 标准答案为:this-&value 或 Foo::value 或 (*this).value 本题考查的是this指针。 this指针,它是成员函数的所属对象的指针,它指向类对象的地址。本题要 输出42,也就是要把f.setValue(42);中的42赋值给Foo的数据成员value,因此横 线处缺少的是给Foo的数据成员value赋值的语句,所以答案为this-&value或 Foo::value。 50.在MyClass类的定义中,对赋值运算符=进行重载。请将画线处缺失的部分补充 完整。 ______ MyClass::operator=(const MyClass& rhs) { if(this==&rhs) return * value=rhs.28考生答案为: return * } 标准答案为:MyClass& 本题考查的是运算符的重载。 一个类如果要重载运算符=,通常也就需要定义自己特有的拷贝构造函数。可 以在类体中增加:(const & operator MyClass& rhs);然后在MyClass的类体外给 出它的完整定义: MyClass & MyClass::operator=(const MyClass& rhs) {......} 因此在MyClass类的定义中缺少MyClass&语句。 考生答案为:2010年3月考试真题(第31次) 1. 数据流程图(DFD图)是______。 A、软件概要设计的工具 B、软件详细设计的工具 D、面向对象方法的需求分析工具C、结构化方法的需求分析工具常见的需求分析方法有:结构化分析方法和面向对象的分析方法。结构化分析就是 使用数据流图(DFD)、数据字典(DD)、结构化英语、判定表和判定树等工具, 来建立一种新的、称为结构化规格说明的目标文档。 2. 软件(程序)调试的任务是______。29故本题答案为C。 A、诊断和改正程序中的错误 C、发现并改正程序中的所有错误B、尽可能多地发现程序中的错误 D、确定程序中错误的性质程序调试的任务是诊断和改正程序中的错误。它与软件测试不同,软件测试是尽可 能多地发现软件中的错误。先要发现软件的错误,然后借助于一定的调试工具去执 行找出软件错误的具体位置。 软件测试贯穿整个软件生命期, 调试主要在开发阶段。 故本题答案为A。 3. 软件按功能可以分为:应用软件、系统软件和支撑软件(或工具软件)。下面 属于系统软件的是______。 A、编辑软件 B、操作系统 C、教务管理系统 D、浏览器软件按功能可以分为:应用软件、系统软件、支撑软件(或工具软件)。应用软件 是为解决特定领域的应用而开发的软件。例如,事务处理软件,工程与科学计算软 件,实时处理软件,嵌入式软件,人工智能软件等应用性质不同的各种软件。系统 软件是计算机管理自身资源,提高计算机使用效率并为计算机用户提供各种服务的 软件。如操作系统,编译程序,汇编程序,网络软件,数据库管理系统等,所以选 项B属于系统软件。 故本题答案为B。4. 软件生命周期可分为定义阶段,开发阶段和维护阶段。详细设计属于______。 A、定义阶段 B、开发阶段 C、维护阶段 D、上述三个阶段软件生命周期可分为软件定义、软件开发及软件运行维护三个阶段。软件开发阶段 包括概要设计、详细设计、实现和测试四个活动阶段。 5. 下列叙述中正确的是______。 A、对长度为n的有序链表进行查找,最坏情况下需要的比较次数为n B、对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(n/2)30故本题答案为B。 C、对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为 D、对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为 对于长度为n的有序线性表,在最坏情况下,二分查找只需要比较 次,而顺序查找需要比较n次。二分法查找只适用于顺序存储的有序表,如果采用链式存储结构, 也只能用顺序查找,所以选项A是正确的。 故本题答案为A。 6. 有两个关系R和T如下:则由关系R得到关系T的操作是______。 A、选择 B、投影 C、交 D、并从关系中找出满足给定条件的元组的操作称为选择。选择是从行的角度进行的运 算,即从水平方向抽取记录。由图可知关系R通过运算得到关系T,关系T与关系R相 比,属性的个数没有发生变化,记录的条数发生了变化。因此所使用的运算应该是 选择。 故本题答案为A。7. 算法的时间复杂度是指______。 A、算法的执行时间 数 D、算法在执行过程中所需要的基本运算次数 所谓算法的时间复杂度,是指执行算法所需要的计算工作量。为了能够比较客观地31B、算法所处理的数据量C、算法程序中的语句或指令条 反映出一个算法的效率, 在度量一个算法的工作量时, 不仅应该与所使用的计算机、 程序设计语言以及程序编制者无关,而且还应该与算法实现过程中的许多细节无 关。 为此, 可以用算法在执行过程中所需基本运算的执行次数来度量算法的工作量。 故本题答案为D。 8. 数据库设计中,用E-R图来描述信息结构但不涉及信息在计算机中的表示,它属 于数据库设计的______。 A、需求分析阶段 B、逻辑设计阶段 C、概念设计阶段 D、物理设计阶段E-R图是E-R模型的一种非常直观的图的形式表示,它描述信息结构但不涉及信息在 计算机中的表示,它是数据库概念设计阶段的工具。 故本题答案为C。9. 在学生管理的关系数据库中,存取一个学生信息的数据单位是______。 A、文件 B、数据库 C、字段 D、记录实体是概念世界中的基本单位,属性附属于实体,它本身并不构成独立单位。属性 有属性域,每个实体可取属性域内的值。一个实体的所有属性取值组成了一个值集 叫元组(或称记录)。在概念世界中,可以用元组表示实体,也可用它区别不同的 实体。所以在学生管理的关系数据库中,存取一个学生信息的数据单位是元组(或 记录)。 故本题答案为D。10. 数据库管理系统中负责数据模式定义的语言是______。 A、数据定义语言 B、数据管理语言 C、数据操纵语言 D、数据控制语言数据定义语言(DDL):该语言负责数据的模式定义与数据的物理存取构建。 数据操纵语言(DML):该语言负责数据的操纵,包括查询及增、删、改等操 作。 数据控制语言(DCL):该语言负责数据完整性、安全性的定义与检查以及并32 发控制、故障恢复等功能。 故本题答案为A。 11. 有如下两个类定义 class XX{ private: double x1; protected: double x2; public: double x3; }; class YY:protected XX{ private: double y1; protected: double y2; public: double y3; }; 在类YY中保护成员变量的个数是______。 A、1 B、2 C、3 D、4本题主要考查了类的继承与派生。33 类的继承方式有三种:公有(public)继承、保护(protected)继承和私有 (private)继承。当派生类从基类保护继承时,基类的公有成员和保护成员在派 生类中都为保护成员。本题派生类YY从基类XX保护继承,因此基类XX的公有成员x3 和保护成员x2都成为派生类YY的保护成员,再加上派生类YY自身的保护成员y2,因 此类YY中有3个保护成员。 故本题答案为C。12. 在C++中,cin是一个______。 A、类 B、对象 C、模板 D、函数本题主要考查了I/O流。 在C++中,数据的输入与输出是通过I/O流来实现,cin和cout是预定义的流类 对象。 故本题答案为B。 13. 若x和y是程序中的两个整型变量,则下列if语句中正确的是______。 A、if(x==0) y=1;else y=2; C、if(x==0) y=1 else y=2; 本题主要考查了if语句。 if语句的语法形式为: if(表达式) 语句1 else 语句2 在C++中,if语句中没有then,语句最后必须有一个分号,因此选项A正确,选 项B和选项C错误;在选项D中,表达式x==0应该用圆括号括起来,因此选项D错误。 故本题答案为A。 14. 将运算符&+&重载为非成员函数,下列原型声明中,错误的是______。34B、if(x==0) then y=1 else y=2; D、if x==0 y=1; else y=2; A、MyClock operator + (MyClock,long); (MyClock,MyClock); C、 MyClock operator + (long,long); 本题主要考查了运算符的重载。B、MyClock operator +D、 MyClock operator + (long,MyClock);运算符的重载是针对新类型数据的实际需要,对原有运算符进行适当的改造。 一般来讲,重载的功能应当与原有功能类似,不能改变原运算符的操作对象个数, 同时至少要有一个操作对象是自定义类型。选项A、选项B和选项D的两个参数中至 少有一个参数是自定义类型,因此选项A、选项B和选项D正确。选项C中两个参数都 是基本数据类型,没有自定义类型,因此选项C错误。 故本题答案是C。15. 要定义整型数组x, 使之包括初值为0的三个元素, 下列语句中错误的是______。 A、int x[3]={0,0,0}; B、int x[]={0}; C、static int x[3]={0}; D、int x[]={0,0,0}; 本题主要考查了一维数组的定义与初始化。 一维数组的定义形式为: 数据类型 数组名[数组元素个数]; 数组的初始化就是在声明数组时给部分或全部元素赋初值。选项A定义了有三 个元素的整型数组x,并初始化三个元素的值为0,因此选项A正确;当声明数组时 没有给出数组元素个数,但是有初始化列表,数组元素个数由列表中元素个数来确 定,因此选项D正确;选项B没有给出数组元素个数,并且在初始化列表中只给一个 元素值,因此选项B定义了只有一个元素的整型数组,故选项B错误;对于数值类型 数组, 如果给定的数值不够, 则没有指定数值的元素将初始化为0, 因此选项C正确。 故本题答案为B。35 16. 下列控制格式输入输出的操作符中,能够设置浮点数精度的是______。 A、setprecision B、setw C、setfill D、showpoint本题主要考查了输出流的格式控制。 setprecision(int n)用于控制输出流显示浮点数的精度,整数n代表显示的浮 点数数字的个数。因此选项A正确。 setw(int n)用于预设输入输出宽度。 setfill(char c)用于预设填充字符。 showpoint用于给浮点数显示小数点和尾部的0。 因此选项B、选项C和选项D不正确。 故本题答案为A。17. 若MyTemp是一个只有一个虚拟类型参数的类模板,且有如下语句序列 MyTemp&double& p2; MyTemp&long& p3[2]; 编译系统在处理上面的语句序列时,所生成的模板MyTemp的实例的个数是______。 A、1 B、2 C、3 D、0本题主要考核类模板。 类模板声明的语法形式为: template&模板参数表& class 类名 {类成员声明} 使用类模板来建立对象时,应按如下形式声明: 类名&模板实参表& 对象名1,…,对象名n; 在定义对象的过程中,编译系统会自动地根据需要生成相应的类定义,这种依36 据类模板生成类定义的过程称为类模板的实例化。类模板实例化所生成的每一个类 定义就是相应类模板的一个实例,因此类模板的实例个数由类型参数的种类决定。 本题使用类模板MyTemp定义对象时指定了两种类型参数:double和long,因此所生 成的实例个数是2。 18. 下列代码段声明了3个类 class Person{}; class Student:public Person{}; class Undergraduate:Student{}; 下列关于这些类之间关系的描述中,错误的是______。 A、类Person是类Undergraduate的基类 承 C、类Student是类Person的派生类 类 本题主要考查了类的继承与派生。 在C++中,定义派生类的一般语法形式为: class 派生类名:继承方式 基类名1,继承方式 基类名2,…,继承方式 基类名 n { 派生类成员声明; }; 类的继承方式有三种:公有(public)继承、保护(protected)继承和私有 (private) 继承。 如果不显式地给出继承方式, 缺省的类继承方式是私有 (private)37故本题答案为B。B、类Undergraduate从类Student公有继D、类Undergraduate是类Person的派生 继承。在声明派生类Undergraduate时缺省继承方式,因此类Undergraduate从类 Student私有继承,故选项B错误。 故本题答案为B。19. 将前缀运算符&--&重载为非成员函数,下列原型中,能正确用于类中说明的是 ______。 A、Decr& operator --(int); B、Decr operator --(Decr&,int); D、friend Decr operator --(Decr&,int);C、friend Decr& operator --(Decr&); 本题主要考查了运算符的重载。运算符--既可以是前缀运算符(前减1),又可以是后缀运算符(后减1)。为 了区分这两种情况,重载这两个运算符时必须在格式上有所区别:重载后缀--时必 须多一个虚拟参数:int。如果将前缀--和后缀--作为非成员函数重载,那个唯一 的操作数必须作为第一参数提供。又因为要修改第一操作数,对应的参数必须声明 为引用。 前缀--作为非成员函数重载的一般形式为: friend Decr& operator --(Decr&); 后缀--作为非成员函数重载的一般形式为: friend Decr operator --(Decr&,int); 当运算符重载为类的成员函数时,函数的参数个数比原来的参数个数少一个。 前缀--作为成员函数重载的一般形式为: Decr& operator --(); 后缀--作为成员函数重载的一般形式为: Decr operator --(int); 因此选项C正确,选项D是后缀--作为非成员函数重载的形式。38 故本题答案为C。 20. 有如下程序: #include &iostream& class Base{ public: Base(int x=0):valB(x){ cout&&valB; } ~Base(){ cout&&valB; } private: int valB; }; class Derived:public Base{ public: Derived(int x=0,int y=0):Base(x),valD(y){cout&&valD;} ~Derived(){cout&&valD;} private: int valD; }; int main(){ Derived objl2(2,3); return 0; }39 运行时的输出结果是______。 A、2332 B、2323 C、3232 D、3223本题主要考查了派生类的构造函数与析构函数。 构造函数在对象被创建的时候由系统自动调用,建立派生类对象时,构造函数 的执行顺序如下:(1)执行基类的构造函数,调用顺序按照各个基类被继承时声 明的顺序(自左向右);(2)执行成员对象的构造函数,调用顺序按照各个成员 对象在类中声明的顺序(自上而下);(3)执行派生类的构造函数。 析构函数用来完成对象被删除前的一些清理工作,在对象的生存期即将结束的 时刻被系统自动调用。派生类的析构函数在执行过程中也要对基类和成员对象进行 操作,但它的执行过程与构造函数严格相反,即:(1)对派生类新增普通成员进 行清理。(2)调用成员对象析构函数,对派生类新增的成员对象进行清理。(3) 调用基类析构函数,对基类进行清理。 main()函数中,第一条语句Derived objl2(2,3);创建派生类对象obj12时,先 以第一个实参2初始化基类Base成员valB,执行基类Base的构造函数,输出valB的 值2;然后以第二个实参值3初始化派生类Derived成员valD,执行派生类Derived的 构造函数,输出valD的值3;在对象obj12的生存期即将结束时,先调用派生类 Derived的析构函数,输出valD的值3,然后调用基类析构函数,输出valB的值2。 因此本程序运行时的输出结果是2332。 21. 有如下程序 #include &iostream& class A{40故本题答案为A。 public: A(int i=0):r1(i) { }void print(){cout&&'E'&&r1&&'-';} void print() const{cout&&'C'&&r1*r1&&'-';} void print(int x){cout&&'P'&&r1*r1*r1&&'-';} private: int r1; }; int main(){ A a1; const A a2(4); a1.print(2); a2.print(); return 0; } 运行时的输出结果是______。 A、P8-E4 B、P8-C16C、P0-E4D、P0-C16-本题主要考查了函数的重载、常对象和常成员函数。 使用const关键字修饰的对象称为常对象,使用const关键字说明的成员函数称 为常成员函数,通过常对象只能调用它的常成员函数,而不能调用其他成员函数。 两个以上的函数,具有相同的函数名,但是形参的个数或类型不同,编译器根据实 参和形参的类型及个数的最佳匹配, 自动确定调用哪一个函数, 这就是函数的重载。41 const关键字可以用于对重载函数的区分。 在main()函数中, 第一条语句定义类A的对象a1, 系统自动调用类A的构造函数, 以默认形参值0初始化对象a1的数据成员r1;第二条语句定义常对象a2,系统自动 调用类A的构造函数,以实参值4初始化对象a2的数据成员r1;第三条语句通过对象 a1调用带一个整型形参的没用const修饰的print()函数,表达式 r1*r1*r1=0*0*0=0,因此输出P0-,第四条语句常对象a2调用的是用const修饰的常 成员函数print(),表达式r1*r1的值为:4*4=16,因此输出C16-。故程序运行时的 输出结果是P0-C16故本题答案为D。22. 若MyClass是一个类名,且有如下语句序列 MyClass c1,*c2; MyClass *c3=new MyC MyClass &c4=c1; 上面的语句序列所定义的类对象的个数是______。 A、1 B、2 C、3 D、4本题主要考查了对象的定义。 第1条语句定义了MyClass类的对象c1和MyClass类的对象指针变量c2。因为定 义对象指针只是得到了用于存储对象地址的指针变量,不会创建对象,因此第1条 语句只定义了一个类对象c1;第2条语句定义了对象指针变量c3。并初始化c3指向 用new运算符动态创建的对象,因此第2条语句用new运算符动态定义了一个对象; 第3条语句声明了对象引用c4,并将其初始化为对象c1的一个别名。因为创建对象 引用只是为已有对象创建别名,不会创建对象,因此第3条语句没有创建类对象。 因此这3条语句所定义的类对象的个数是2。42 故本题答案为B。 23. 下列关于类模板的描述中,错误的是______。 A、类模板的成员函数都是模板函数 C、类模板描述了一组类 本题主要考查了类模板。 使用类模板可以为类声明一种模式,使得类中的某些数据成员、某些成员函数 的参数、某些成员函数的返回值能取任意类型。因此选项C正确;类模板声明的语 法形式为: template&模板参数表& class 类名 {类成员声明} 其中&模板参数表&由用逗号分隔的若干类型标识符或常量表达式构成,因此选 项D错误;可以为类模板中的类型参数和非类型参数提供默认值,如果某个类模板 参数有默认值,该列表中的所有后续参数也都必须指定默认值。因此选项B正确。 类模板的成员函数都是模板函数,因此选项A正确。 24. 有如下程序 #include &iostream& class Test{ public: Test() {} Test(const Test& t) {cout&&1; }43B、可以为类模板参数设置默认值D、类模板中只允许有一个类型参数故本题答案为D。 }; Test fun(Test &u) {Test t=u; int main(){Test x,y; } }x=fun(y);return 0;运行这个程序的输出结果是______。 A、无输出 B、1 C、11 D、111本题主要考查了拷贝构造函数。 拷贝构造函数是一种特殊的构造函数,具有一般构造函数的所有特性,其形参 是本类的对象的引用。作用是使用一个已知的对象初始化一个正在创建的同类对 象。拷贝构造函数在以下三种情况下都会被调用: 1)当用类的一个对象初始化该类的另一个对象时; 2)如果函数的形参是类的对象,调用函数时,进行形参和实参结合时; 3)如果函数的返回值是类的对象,函数执行完成返回调用者时。 函数fun的形参为类Test的对象的引用,main()函数中,第二条语句x=fun(y); 调用函数fun()。使引用u为实参y的别名,然后执行函数fun()的第一条语句Test t=u;,即用Test类的对象u去初始化该类的另一个对象t,系统将自动调用拷贝构造 函数,输出1,然后执行函数fun()的第二条语句,函数fun()的返回值为 Test类的对象t,函数执行完成返回调用者时,系统将第二次自动调用拷贝构造函 数,输出1,程序执行结束。故运行这个程序的输出结果是11。 答案为C。 25. 要定义一个引用变量p,使用引用类MyClass的一个对象,正确的定义语句是 ______。 A、MyClass p=MyC B、MyClass p=new MyC44故本题 C、MyClass &p=new MyC 本题主要考查了引用的声明。D、MyClass a, &p=a;引用的声明形式:类型标识符 &引用名=目标变量名; 说明: (1)&在此不是求地址运算,而是起标识作用。 (2)类型标识符是指目标变量的类型。 (3)声明引用时,必须同时对其进行初始化。 (5)声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量 名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不 给引用分配存储单元。 选项A和选项B在变量p的左边没有标识&,不符合引用声明形式,因此选项A和 选项B错误;选项C中,赋值号右边不是已存在的变量名,不符合引用声明的语法形 式,因此选项C错误;选项D先声名对象a,然后声明引用为已声明变量名a的别名, 符合引用声明形式,因此选项D正确。 故本题答案为D。26. 下列关于函数的描述中,错误的是______。 A、函数可以没有返回值 员 D、函数不能被定义为模板 本题主要考查了函数。 函数定义的语法形式: 类型标识符 函数名(形式参数列表) {45B、函数可以没有参数C、函数可以是一个类的成 语句序列 } 无返回值的函数其类型标识符为void。故选项A正确;函数可以没有参数,当 函数定义时没有形参,则函数调用时,&实参表&亦为空,故选项B正确;函数可以 是类的成员,故选项C正确;模板是C++支持参数化多态性的工具,函数模板实现了 类型参数化,将函数处理的数据类型作为参数,提高了代码的可重用性,故选项D 错误。 故本题答案为D。27. 下列程序段中包含4个函数,其中具有隐含this指针的是______。 int fun1(); class Test{ public: int fun2(); friend int fun3(); static int fun4(); }; A、fun1 B、fun2 C、fun3 D、fun4本题主要考查了this指针。 this指针是一个隐含于每一个非静态成员函数中的特殊指针。它是一个指向正 在被该成员函数操作的对象,也就是要操作该成员函数的对象。因此类Test的非静 态成员函数fun2中具有隐含this指针,故选项B正确。函数fun1和函数fun3均不是 成员函数,因此不具有隐含this指针,故选项A和选项C不正确;静态成员不属于类 的任何一个对象,而是属于整个类,因此静态成员没有this指针,故静态成员函数46 fun4中没有this指针,故选项D错误。 28. 下面是类Shape的定义: class Shape{ public: virtual void Draw()=0; }; 下列关于Shape类的描述中,正确的是______。 A、类Shape是虚基类 B、类Shape是抽象类故本题答案为B。C、类Shape中的Draw函数声明有误 象s 本题主要考查了纯虚函数和抽象类。 声明纯虚函数的语法形式为:D、语句&S&能够建立Shape的一个对virtual 函数类型 函数名(参数表)=0; 所以函数Draw()是纯虚函数。带有纯虚函数的类是抽象类,所以类Shape是抽 象类,因此选项B正确;抽象类不能实例化,即不能定义一个抽象类的对象,因此 选项D错误。 故本题答案是B。29. 关于函数中的&返回类型&,下列表述中错误的是______。 A、&返回类型&中有可能包含关键字int 识符 C、&返回类型&中有可能包含字符* 本题主要考查了函数的返回类型。 函数的定义形式为:47B、&返回类型&中有可能包含自定义标D、&返回类型&中有可能包含[] 返回类型 函数名(形参列表){函数体} 返回类型又称函数类型,表示一个函数所计算(或运行)的结果值的类型。因 为函数的结果值可以为整型,因此返回类型可能包含关键字int,选项A正确;函数 的返回类型可以为类,因此返回类型可能包含自定义标识符,选项B正确;函数的 返回类型可以为指针,因此返回类型可能包含字符*,选项C正确;但返回类型不能 为数组,因此返回类型中不可能包含[],因此选项D错误。 故本题答案为D。 30. 打开文件时可单独或组合使用下列文件打开模式 ①ios_base::app ③ios_base::in ②ios_base::binary ④ios_base::out若要以二进制读方式打开一个文件,需使用的文件打开模式为______。 A、①③ B、①④ C、②③ D、②④本题主要考查了I/O流。 打开一个与输出流关联的文件时,通常要指定文件模式。ios_base::app模式 的功能:以写方式打开文件,若文件不存在则创建文件,若文件已存在则向文件尾 添加数据;ios_base::binary模式:以二进制模式打开文件(缺省为文本模式); ios_base::in模式:以读方式打开文件;ios base::out模式:以写方式打开文件, 若文件不存在则创建,若文件已存在则清空原内容(ofstream默认的打开方式)。 因此若要以二进制读方式打开一个文件,需使用的文件打开模式为: ios_base::binary|ios base::in。 故本题答案为C。 31. 下列关于继承方式的描述中,错误的是______。48 A、如果不显式地指定继承方式,缺省的继承方式是私有(private) B、采用公有继承方式时,基类中的公有成员在派生类中仍然是公有成员 C、采用保护继承方式时,基类中的保护成员在派生类中仍然是保护成员 D、采用私有继承方式时,基类中的私有成员在派生类中仍然是私有成员 本题主要考查了类的继承与派生。 类的继承方式有三种:公有(public)继承、保护(protected)继承和私有 (private) 继承。 如果不显式地给出继承方式, 缺省的类继承方式是私有 (private) 继承。因此选项A正确;当派生类从基类公有继承时,基类的公有成员和保护成员 的访问属性在派生类中不变,仍作为派生类的公有成员和保护成员,因此选项B正 确;当派生类从基类保护继承时,基类的公有成员和保护成员在派生类中都为保护 成员,因此选项C正确;当派生类从基类私有继承时,基类的公有成员和保护成员 在派生类中都改变为私有成员;无论哪种继承方式,派生类中的成员都不能访问基 类中的私有成员,因此选项D错误。 故本题答案为D。 32. 下列关于运算符重载的描述中,错误的是______。 A、可以通过运算符重载在C++中创建新的运算符 函数 C、运算符函数重载为类的成员函数时,第一操作数是该类对象 D、重载类型转换运算符时不需要声明返回类型 本题主要考查了运算符重载。 &运算符重载&是针对C++中原有运算符进行的,不可能通过重载创造出新的运 算符,因此选项A错误;在C++中,运算符的重载方式有两种:(1)重载为成员函49B、赋值运算符只能重载为成员 数;(2)重载为友元函数。&=&、&[]&、&()&、&-&&以及所有的类型转换运算符只 能重载为成员函数,因此选项B正确;运算符重载为成员函数时,第一操作数就是 对象本身,并不显式地出现在参数表中,因此选项C正确;重载类型转换运算符的 格式为:operator 类型名(),其中&类型名&就代表了返回类型,因此重载类型转 换运算符时不需要声明返回类型,因此选项D正确。 故本题答案为A。 33.有以下程序: #include &iostream& class B{ public: B(int xx):x(xx) { ++ x+=10; }virtual void show() const { cout&&count&&'_'&&x&& } protected: private: }; class D:public B{ public: D(int xx,int yy):B(xx),y(yy) { ++ y+=100;}50 virtual void show() const { private: }; int B::count=0; int main() { B *ptr=new D(10,20); ptr-&show(); return 0; } 运行时的输出结果是______。 A、1_120 B、2_120 C、1_20 D、2_20 cout&&count&&'_'&&y&& }本题主要考查了派生类的构造函数、静态成员函数以及虚函数。 建立派生类对象时,构造函数的执行顺序如下:(1)执行基类的构造函数, 调用顺序按照各个基类被继承时声明的顺序(自左向右);(2)执行成员对象的 构造函数,调用顺序按照各个成员对象在类中声明的顺序(自上而下);(3)执 行派生类的构造函数。 用static关键字声明的数据成员为静态数据成员,静态成员在每个类只有一个 拷贝,由该类的所有对象共同维护和使用。 在成员函数声明的前面加上virtual修饰, 即把该函数声明为虚函数。 在C++中,51 一个基类指针(或引用)可以用于指向它的派生类对象,而且通过这样的指针(或 引用)调用虚函数时,被调用的是该指针(或引用)实际所指向的对象类的那个重 定义版本。 本题中,函数show在基类B和派生类D中都声明为虚函数。在基类B中把保护成 员定义为静态成员count,派生类D以公有继承方式从基类B继承了保护成员count。 它被基类B和派生类D的所有对象所共享,但它不属于类的任何一个对象。在main() 函数中,第一条语句通过new运算符创建派生类D的对象,并把对象的首地址赋给基 类指针ptr,即基类指针ptr指向派生类对象。在创建派生类对象时,先执行基类B 的构造函数,count的值为1,然后执行派生类D的构造函数,count的值为2,y的值 为120;main()函数的第二条语句通过基类指针ptr调用虚函数show(),被调用的是 该指针实际所指向的派生类对象类的重定义版本,即输出2_120。 故本题答案为B。 34. 下列叙述中,错误的是______。 A、false是一个逻辑型常量 C、365是一个int常量 本题主要考查了常量。 在C++中,逻辑型常量有两个:false(假)和true(真),因此选项A正确; 字符型常量是单引号括起来的一个字符,字符串常量是双引号括起来的字符序列, 因此&b&是字符串,不是字符,故选项B错误;整型常量默认为int型,因此选项C正 确;实型常量默认为double型,因此选项D正确。 故本题答案为B 35. 在下列字符中,不允许作为C++标识符的是______。52B、&b&是一个字符型常量D、3.1415926是一个double常量 A、bB、BC、_D、2本题主要考查了C++中的标识符命名规则。 标识符的组成要符合一定的规则: (1)标识符是一个以字母或下划线开头的,由字母、数字、下划线组成的字 符串; (2)标识符不能与任意一个关键字同名; (3)标识符中的字母区分大小写; (4)标识符不宜过长。 在选项D中,标识符的第一个字符是数字,因此不是合法的标识符,不允许作 为C++标识符。 故本题答案为D。 36. 软件是______、数据和文档的集合。 标准答案为:程序 考生答案为:函数计算机软件是计算机系统中与硬件相互依存的另一部分,是包括程序、数据及相关 文档的完整集合。 37. 有一个学生选课的关系,其中学生的关系模式为:学生(学号,姓名,班级, 年龄),课程的关系模式为:课程(课号,课程名,学时),其中两个关系模式的 键分别是学号和课号,则关系模式选课可定义为:选课(学号,______,成绩)。 标准答案为:课号 考生答案为:课号码也称为关键字,是表中若干属性的属性组,其值惟一标识表中的一个元组。在关 系模式选课中能惟一标识一个元组的是学号,课号。 38. 设某循环队列的容量为50, 如果头指针front=45 (指向队头元素的前一位置) ,53 尾指针rear=10(指向队尾元素),则该循环队列中共有______个元素。 标准答案为:15 或 十五 或 15 考生答案为:35在循环队列中,用队尾指针rear指向队列中的队尾元素,用排头指针front指向排 头元素的前一个位置, 因此, 从排头指针front指向的后一个位置直至队尾指针rear 指向的位置之间所有的元素均为队列中的元素。本题中队列的容量为50,头指针为 45,那么从头指针到50之间有46、47、48、49、50,共5个元素,尾指针为10,那 么从1到10之间有10个元素,所以共有15个元素。 39. 设二叉树如下:对该二叉树进行后序遍历的结果为______。 标准答案为:EDBGHFCA 或 E、D、B、G、H、F、C、A 或 E,D,B,G,H,F,C,A 或 E,D,B,G,H,F,C,A考生答案为:EDGHFCA 后序遍历是指在访问根结点、 遍历左子树与遍历右子树这三者中, 首先遍历左子树, 然后遍历右子树,最后访问根结点,并且,在遍历左、右子树时,仍然先遍历左子 树,然后遍历右子树,最后访问根结点。 40. 一个队列的初始状态为空。现将元素A,B,C,D,E,F,5,4,3,2,1依次入队,然后54 再依次退队,则元素退队的顺序为______。 标准答案为:A,B,C,D,E,F,5,4,3,2,1 或 A,B,C,D,E,F,5,4,3,2,1 或 A、 B、C、D、E、F、5、4、3、2、1 或 ABCDEF54321 或 A,B,C,D,E,F,5,4,3,2,1 或 A, C, E, 5, B, D, F, 4,3,2,1 或 A,B,C,D,E,F,5,4, 2, 或 A,B,C,D,E,F,5, 3, 1 4,3,2,1 考生答案为:A,B,C,D,E,F,5,4,3,2,1 队列是指允许在一端进行插入、而在另一端进行删除的线性表。允许插入的一端称 为队尾,允许删除的一端称为队头。在队列这种数据结构中,最先插入的元素将最 先能够被删除,反之,最后插入的元素将最后才能被删除。因此,队列又称为&先 进先出&或&后进后出&的线性表。 41. 若x和y是两个整型变量,在执行了语句序列 x=5;y=6;y+=x--; 后,x+y的值为______。 标准答案为:15 或 15 本题主要考查了后置减1运算符。 后置减1运算符是先使用变量,然后变量再自减。因此语句y+=x--;的功能相当 于y=y+x;x=x-1;两条语句,因此执行语句序列x=5;y=6;y+=x--;后x的值为4,y的值 为11,故x+y的值为15。 42. 有如下的函数定义: int Xfun(int x){ int y=x; {int x=10; y+=x;}55考生答案为:15 return x+y; } 通过表达式Xfun(5)调用该函数,则得到的返回值为______。 标准答案为:20 或 20 考生答案为:20本题主要考查了标识符的作用域与可见性。 作用域是一个标识符在程序正文中有效的区域。程序运行到某一点,能够引用 到的标识符,就是该处可见的标识符,如果在两个或多个具有包含关系的作用域中 声明了同名标识符,则外层标识符在内层不可见。函数调用表达式Xfun(5)把实参5 传递给函数Xfun的形式参数x,形参x的作用域为整个函数体。Xfun函数体的第一条 语句定义变量y并初始化y的值为5,第二个复合语句中的第一条语句定义同名变量 x,并初始化x的值为10,在复合语句中外层变量x不可见,因此执行复合语句的第 二条语句y+=x;后y的值为15,内层变量x的作用域结束。然后执行语句return x+y; 得到函数的返回值5+15=20。 43. 下面的函数定义是某函数模板能够生成的函数实例 int square(int n){ return n*n;} double square(double n){ return n*n; } 由此可知,该函数模板的定义是______。 标准答案为:template&typename T& T square(T n){return n*n;} 或 template&class T& T square(T n){return n*n;} 考生答案为:template &typename T&T square(T n){return n*n;} 本题主要考查了函数模板。 函数模板是一系列相关函数的模型或样板,这些函数的源代码形式相同,只是56 所针对的数据类型不同。对于函数模板,数据类型本身成了它的参数,因而是一种 参数化类型的函数。声明一个函数模板的格式是: template&模板形参表声明& 函数声明 其中的模板形参表声明是由一个或多个模板形参组成(如果是多个,需要用逗 号隔开)。每个模板形参具有下面几种形式: (1)typename 参数名(2)class 参数名(3)类型修饰 参数名 这里的参数名可以是任意的标识符。在这三种形式中,前两种是等价的:在声 明模板参数时,关键字typename与class可以互换。 因此该题函数模板定义是template&typename T& T square(T n){return n*n;} 或template&class T& T square(T n){return n*n;}。44. 在执行语句序列 int i=0;do i++;while(i*i&10); 时,do后面的循环体语句i++被执行的次数为______。 标准答案为:4 或 4 或 四 本题主要考查了do-while循环语句。 第一次执行循环体后i的值为1,i*i&10成立,继续执行循环体,第二次执行循 环体后i的值为2,i*i&10成立,继续执行循环体,第三次执行循环体后i的值为3, i*i&10成立,继续执行循环体,第四次执行循环体后i的值为4,i*i&10不成立,结 束循环。故循环语句被执行次数为4。 考生答案为:457 45. 假设Xcs是一个类,该类中一个成员函数的原型为&Xcs* abc();&,则在类外定 义时对应的函数头为______ 。 标准答案为:Xcs* Xcs::abc() 本题主要考查了成员函数的类外定义。 在类外定义成员函数的语法形式为: 返回值类型 类名::成员函数名(参数表) { 函数体 } 因此在类Xcs之外定义原型为&Xcs* abc();&的成员函数对应的函数头为Xcs* Xcs::abc()。 46. 请将下面的程序补充完整,使得程序输出&飘是张娜的书&。 #include &iostream& class Book{ public: Book(char *str){ strcpy(title,str); } ______ void PrintInfo(){ cout&&title&&} protected: char title[50]; }; class MyBook:public Book{58考生答案为:Xcs* Xcs::abc() public: MyBook(char *s1,char *s2=&张娜&): ______{ strcpy(owner,s2); } virtual void PrintInfo(){ cout&&title&&&是&&&owner&&&的书&&& } private: char owner[10]; }; int main(){ Book *ptr=new MyBook(&飘&); ptr-&PrintInfo(); return 0; } 标准答案为:virtual 与 Book(s1) 本题主要考查了构造函数、虚函数。 在成员函数声明的前面加上virtual修饰,即把该函数声明为虚函数。在派生 类中可以重新定义从基类继承下来的虚函数,从而提供该函数的适用于派生类的专 门版本。本题在派生类MyBook中重定义了虚函数PrintInfo,因此第1个空应填 virtual。 派生类的构造函数必须要以合适的初值作为参数,隐含调用基类和新增成员对 象的构造函数,用以初始化它们各自的数据成员,然后再对新增的其他数据成员进 行初始化。派生类构造函数的一般格式如下: &派生类名&::&派生类名&(&总参数表&):&基类名1&(参数表1),……59考生答案为:virtual 与 Book(str) &基类名n&(&参数表n&), &成员对象名1&(&参数表n+1&),……, &成员对象名m&(&参数表n+m&){&派生类构造函数体&} 因此第二个空应填Book(s1),调用基类的构造函数以初始化其数据成员。 47. 有如下的函数定义: int Xfun(int *a,int n){ int x=*a; for(int* pa=a+1;pa&a+n;pa++) if(*pa&x) x=* } 若在执行了语句 int x[5]={23,46,78,55,16}; 后,通过表达式Xfun(x,5)调用该函数,则得到的返回值为______。 标准答案为:78 或 78 考生答案为:本题主要考查了数组、指针和求最大值算法。 函数Xfun的功能是求首地址为a的n个数据的最大数,并把所求的最大数作为函 数的返回值。函数调用表达式Xfun(x,5)把数组x的首地址传递给函数Xfun的第一个 形式参数指针变量a,常数5传递给函数Xfun的第二个形式参数n,因此函数调用表 达式Xfun(x,5)的返回值是数组x的5个元素的最大数78。 48. 请将下面的类Date的定义补充完整,使得由语句 Date FirstD60 定义的对象FirstDay的值为日。 class Date{ public: Date(______):year(y),month(m),day(d){ } private: int year,month, //依次表示年、月、日 }; 标准答案为: y=2010,int m=1,int d=1 int d 本题主要考查了构造函数。 构造函数的作用是在对象被创建时利用特定的值构造对象,将对象初始化为一 种特定的状态,无参数的构造函数称为默认形式的构造函数,如果类中定义构造函 数,编译系统将不会再为其生成默认构造函数。构造函数在对象被创建的时候由系 统自动调用。类Date中定义了一个构造函数,由类Date的构造函数的初始化列表可 知构造函数的形参应是三个整型变量y,m和d,编译系统将不会为类Date建立无参 数的默认构造函数。建立类Date的对象FirstDay时没有给出初始值,若要正确调用 有形参的构造函数,使对象FirstDay的值为日,则构造函数应是带默认 形参值,且默认形参值为。故该题应填int y=2010,int m=1,int d=1。 考生答案为: y,intm,int int49. 在有理数类Rational中重载插入运算符&&,以便按a/q形式输出。请将&&运算 符函数的定义补充完整。 class Rational{61 public: Rational(int aa,int qq):a(aa),q(qq){} friend ______ operator&&(ostream& out,Rational& x) { return (out&&x.a&&'/'&&x.q); } private: int a,q; }; 标准答案为:ostream& 考生答案为:ostream&本题主要考查了插入运算符的重载。 插入运算符只能重载为非类成员函数,一般重载为友元函数。声明重载插入运 算符为友元函数的函数原型为: friend ostream& operator&&(ostream& ,类名); 因此该题应填ostream&。2009年9月考试真题(第30次)1.下列数据结构中,属于非线性结构的是______。62 A、循环队列B、带链队列C、二叉树D、带链栈2. 对于循环队列,下列叙述中正确的是______。 A、队头指针是固定不变的 C、队头指针一定小于队尾指针 尾指针 3. 数据库管理系统是______。 A、操作系统的一部分 一种操作系统 4. 下列选项中不属于结构化程序设计原则的是______。 A、可封装 B、自顶向下 C、模块化 D、逐步求精 B、在操作系统支持下的系统软件 C、一种编译系统 D、 B、队头指针一定大于队尾指针 D、队头指针可以大于队尾指针,也可以小于队5. 有三个关系R,S和T如下:其中关系T由关系R和S通过某种操作得到,该操作为______。 A、选择 B、投影 C、交 D、并6. 在E-R图中,用来表示实体联系的图形是______。 A、椭圆形 B、矩形 C、菱形 D、三角形7. 算法的空间复杂度是指______。 A、算法在执行过程中所需要的计算机存储空间 C、算法程序中的语句或指令条数 元数63B、算法所处理的数据量D、算法在执行过程中所需要的临时工作单 8. 软件详细设计产生的图如下:该图是______。 A、N-S图 B、PAD图 C、程序流程图 D、E-R图9. 软件设计中划分模块的一个准则是______。 A、低内聚低耦合 B、高内聚低耦合 C、低内聚高耦合 D、高内聚高耦合10. 下列数据结构中,能够按照&先进后出&原则存取数据的是______。 A、循环队列 11. 有如下程序: #include&iostream& class A{ public: A(int i):r1(i) { } void print() {cout&& 'E'&&r1&&'-';} void print() const {cout&& 'C'&&r1*r1&&'-';} private:64B、栈C、队列D、二叉树 int r1; }; int main(){ A a1(2); const A a2(4); a1.print();a2.print(); return 0; } 运行时的输出结果是______。 A、运行时出错 12. 有如下类定义: class XX{ public: XX(int n=0):xdata(n){ } }; class YY:public XX{ public: YY(int m=0,int n=0):XX(m),ydata(n){ } }; YY类的对象包含的数据成员的个数是______。 A、1 B、2 C、3 D、465B、E2-C16-C、C4-C16-D、E2-E4- 13. 有如下程序段: int i=1; while(1){ i++; if(i==10) if(i%2==0) cout&&'*'; } 执行这个程序段输出字符*的个数是______。 A、10 B、3 C、4 D、514. 有如下程序: #include &iostream& class C1{ public: ~C1() {cout&&1;} }; class C2:public C1{ public: ~C2(){cout&&2;} }; int main(){ C2 cb2;66 C1 *cb1; return 0; } 运行时的输出结果是______。 A、121 B、21 C、211 D、1215. 有如下程序: #include &iostream& class Toy{ public: Toy(char* _n){strcpy(name,_n); count++;} ~Toy(){count--;} char* GetName() {} static int getCount() {} private: char name[10]; }; int Toy::count=0; int main(){ Toy t1(&Snoopy&),t2(&Mickey&),t3(&Barbie&); cout&&t1.getCount()&&67 return 0; } 运行时的输出结果是______。 A、1 B、2 C、3 D、运行时出错16. 已知函数FA调用FB,若要把这两个函数定义在同一个文件中,则______。 A、FA必须定义在FB之前 B、FB必须定义在FA之前 C、若FA定义在FB之后,则FA的 原型必须出现在FB的定义之前 D、若FB定义在FA之后,则FB的原型必须出现在FA的定义之前 17. 在下列枚举符号中,用来表示&相对于当前位置&文件定位方式的是______。 A、ios_base::cur ios_base::end 18. 将运算符重载为类成员函数时,其参数表中没有参数,说明该运算符是______。 A、不合法的运算符 19. 有如下程序: #include&iostream& class AA{ public: AA(){cout&& '1';} }; class BB:public AA{68B、ios_base::begC、ios_base::outD、B、一元运算符C、无操作数的运算符D、二元运算符 public: BB():k(0){cout&&'2';} BB(int n):k(n){cout&& '3';} }; int main(){ BB b(4),c; return 0; } 运行时的输出结果是______。 A、1312 B、132 C、32 D、141220. 下列关于C++流的描述中,错误的是______。 A、cout&& 'A'表达式可输出字符A B、eof()函数可以检测是否到达文件尾C、对磁盘文件进行流操作时,必须包含头文件fstream D、以ios_base::out模式打开的文件不存在时,将自动建立一个新文件 21. 下列关于虚基类的描述中,错误的是______。 A、使用虚基类可以消除由多继承产生的二义性 的构造函数只被调用一次 C、声明&class B:virtual public A&说明类B为虚基类 D、建立派生类对象时,首 先调用虚基类的构造函数 22. 下列关于运算符函数的描述中,错误的是______。 A、运算符函数的名称总是以operator为前缀 C、运算符函数只能定义为类的成员函数 B、运算符函数的参数可以是对象 B、构造派生类对象时,虚基类D、在表达式中使用重载的运算符相当于69 调用运算符重载函数 23. 有如下程序: #include&iostream& #include&iomanip& int main(){ int s[]={123,234}; cout&&right&&setfill('*')&&setw(6); for(int i=0;i&2;i++) {cout&&s[i]&&} return 0; } 运行时的输出结果是______。 A、123 234 B、***123 234 C、***123 ***234 D、***123 234*** 24. 有如下模板声明: template&typename T1,typename T2& class A;70 下列声明中,与上述声明不等价的是______。 A、template&class T1,class T2& class A; T2& class A; C、template&typename T1,class T2& class A; class A; 25. 已知数组arr的定义如下: int arr[5]={1,2,3,4,5}; 下列语句中输出结果不是2的是______。 A、cout&&*arr+1&& C、cout&&arr[1]&& 26. 有如下程序: #include&iostream& class Publication{ char name[30]; public: Publication(char *name= &未知名称&){ strcpy(this-&name,name); } const char * getName() const{} virtual const char * getType()const{return &未知类型&;} };71B、template&class T1,typenameD、template&typename T1,T2&B、cout&&*(arr+1)&& D、cout&&*arr&&//出版物类 class Book:public Publication{ public://书类Book(char *name):Publication(name){} virtual const char * getType()const{return &书&;} }; void showPublication(Publication &p){ cout&&p.getType()&&&:&&&p.getName()&& } int main(){ Book book(&精彩人生&); showPublication(book); return 0; } 运行时的输出结果是______。 A、未知类型:未知名称 精彩人生 27. 下列字符串中可以用作C++标识符的是______。 A、2009var B、goto C、test-2009 D、_123 B、未知类型:精彩人生 C、书:未知名称 D、书:28. 计算斐波那契数列第n项的函数定义如下: int fib(int n){ if(n==0) else if(n==1) return 1; return 2;72 else }return fib(n-1)+fib(n-2);若执行函数调用表达式fib(2),函数fib被调用的次数是______。 A、1 B、2 C、3 D、429. 下列枚举类型的定义中,包含枚举值3的是______。 A、enum test{RED,YELLOW,BLUE,BLACK}; test{RED,YELLOW=4,BLUE,BLACK}; C、enum test{RED=-1,YELLOW,BLUE,BLACK}; test{RED,YELLOW=6,BLUE,BLACK}; 30. 下列关于运算符重载的描述中,错误的是______。 A、::运算符不能重载 B、类型转换运算只能作为成员函数重载 D、重载[]运算符应完成&下 D、enum B、enumC、将运算符作为非成员函数重载时必须定义为友元 标访问&操作 31. 有如下程序: #include&iostream& class Name{ char name[20]; public: Name(){ strcpy(name,&&); } cout&&'?';73 Name(char *fname){ strcpy(name,fname); cout&&'?'; } }; int main(){ Name names[3]={Name(&张三&),Name(&李四&)}; return 0; } 运行此程序输出符号?的个数是______。 A、0 B、1 C、2 D、332. 下列关于模板形参的描述中,错误的是______。 A、模板形参表必须在关键字template之后 来 C、可以用class修饰模板形参 33. 有如下类定义: class A{ char *a; public: A():a(0) {} A(char *aa) { a=______; strcpy(a,aa);74B、模板形参表必须用括弧( )括起D、可以用typename修饰模板形参//把aa所指字符串拷贝到a所指向的存储空间 } ~A() {delete []a;} }; 横线处应填写的表达式是______。 A、new char[strlen(aa)+1] D、new char[sizeof(aa)-1] 34. 有如下两个类定义: class AA{}; class BB{ AA v1,*v2; BB v3; int *v4; }; 其中有一个成员变量的定义是错误的,这个变量是______。 A、v1 B、v2 C、v3 D、v4 B、char[strlen(aa)+1] C、char[strlen(aa)]35. Sample是一个类,执行下面语句后,调用Sample类的构造函数的次数是______。 Sample a[2], *p=new S A、0 B、1 C、2 D、336. 某二叉树有5个度为2的结点以及3个度为1的结点,则该二叉树中共有______个 结点。 37. 软件开发过程主要分为需求分析、设计、编码与测试四个阶段,其中______阶 段产生&软件需求规格说明书&。75 38. 程序流程图中的菱形框表示的是______。 39. 人员基本信息一般包括:身份证号,姓名,性别,年龄等。其中可以作为主关 键字的是______。 40. 在数据库技术中,实体集之间的联系可以是一对一或一对多或多对多的,那么& 学生&和&可选课程&的联系为______。 41. 下面是一个递归函数,其功能是使数组中的元素反序排列。请将函数补充完整。 void reverse(int *a,int size){ if(size&2) int k=a[0]; a[0]=a[size-1]; a[size-1]=k; reverse(a+1,______); } 42. 利用表达式a[i]可以访问int型数组a中下标为i的元素。在执行了语句int *p=a; 后,利用指针p也可访问该元素,相应的表达式是______。 43. 类Sample的构造函数将形参data赋值给数据成员data。请将类定义补充完整。 class Sample{ public: Sample(int data=0); private: };76 Sample::Sample(int data){ ______ } 44. 若表达式(x+(y-z)*(m/n))+3中的变量均为double型,则表达式值的类型为 ______。 45. 如下程序定义了&单词&类Word,类中重载了&运算符,用于比较&单词&的大小, 返回相应的逻辑值。程序的输出结果为:After Sorting: Happy Welcome,请将程 序补充完整。 #include &iostream& #include &string& class Word{ public: Word(string s):str(s){} string getstr(){} ______ const {return (str&w.str);} friend ostream& operator&&(ostream& output,const Word &w) {output&&w.} private: }; int main(){77 Word w1(&Happy&),w2(&Welcome&); cout&&&After sorting: &; if(w1&w2) cout&&w1&&' '&&w2; else cout&&w2&&' '&&w1; return 0; } 46. &图形&类Shape中定义了纯虚函数CalArea(),&三角形&类Triangle继承了类 Shape,请将Triangle类中的CalArea函数补充完整。 class Shape{ public: virtual int CalArea()=0; }; class Triangle:public Shape{ public: Triangle(int s,int h):side(s),height(h){} ______{return side*height/2;} private: }; 47. 有如下类定义: class Sample{78 public: Sample(); ~Sample(); private: }; 将静态数据成员data初始化为0的语句是______。 48. 请将下列模板类Data补充完整。 template&typename T& class Data{ public: void put(T v) {val=v;} ______ get() //返回数据成员val的值,返回类型不加转换{} private: T }; 49. 有如下循环语句: for(int i=50;i&20;i-=2) cout&&i&&','; 运行时循环体的执行次数是______次。 50. 有如下程序: #include&iostream&79
class GrandChild{ public: GrandChild() {strcpy(name,&Unknown&);} const char * getName()const {} virtual char * getAddress()const=0; private: char name[20]; }; class GrandSon:public GrandChild{ public: GrandSon(char *name) {} char *getAddress() const {return &Shanghai&;} }; int main(){ GrandChild *gs=new GrandSon(&Feifei&); cout&&gs-&getName()&&&住在&&&gs-&getAddress()&& return 0; } 运行时的输出结果是 ______。80 2009年3月考试真题(第29次) 1. 耦合性和内聚性是对模块独立性度量的两个标准。下列叙述中正确的是______。 A、提高耦合性降低内聚性有利于提高模块的独立性B、降低耦合性提高内聚性有利 于提高模块的独立性 C、耦合性是指一个模块内部各个元素间彼此结合的紧密程度D、内聚性是指模块间 互相连接的紧密程度 2.. 数据库应用系统中的核心问题是______。 A、数据库设计 B、数据库系统设计 C、数据库维护 D、数据库管理员培训3. 下列叙述中正确的是______。 A、栈是&先进先出&的线性表 C、循环队列是非线性结构 用链式存储结构 4. 有两个关系R,S如下: R S B、队列是&先进后出&的线性表 D、有序线性表既可以采用顺序存储结构,也可以采81 由关系R通过运算得到关系S,则所使用的运算为______。 A、选择 B、投影 C、插入 D、连接5. 将E-R图转换为关系模式时,实体和联系都可以表示为______。 A、属性 B、键 C、关系 D、域6. 支持子程序调用的数据结构是______。 A、栈 B、树 C、队列 D、二叉树7. 下列排序方法中,最坏情况下比较次数最少的是______。 A、冒泡排序 B、简单选择排序 C、直接插入排序 D、堆排序8. 下面叙述中错误的是______。 A、软件测试的目的是发现错误并改正错误 程序调试的必要步骤 C、程序调试通常也称为Debug 意性 9. 某二叉树有5个度为2的结点,则该二叉树中的叶子结点数是______。 A、10 B、8 C、6 D、4 D、软件测试应严格执行测试计划,排除测试的随 B、对被调试的程序进行&错误定位&是10. 件按功能可以分为:应用软件、系统软件和支撑软件(或工具软件)。下面属 于应用软件的是______。 A、编译程序 B、操作系统 C、教务管理系统 D、汇编程序11. 有如下类定义和变量定义82 classA{public: A() {data=0;} ~A() {} int GetData() const {} void SetData(int n) {data=n;} private: }; const A A 下列函数调用中错误的是______。 A、 a.GetData(); B、 a.SetData(10); C、 b.GetData(); D、 b.SetData(10);12. 运算符重载时不需要保持的性质是______。 A、操作数个数 B、操作数类型 C、优先级 D、结合性13. 已知有数组定义 char a[3][4]; 下列表达式中错误的是______。 A、a[2]=&WIN& a[0][1]=a[0][1] 14. 在定义一个类模板时,模板形参表是用一对括号括起来的,所采用的括号是 ______。83B、strcpy(a[2],&WIN&)C、a[2][3]='W'D、 A、( )B、[ ]C、& &D、{ }15. 要建立文件流并打开当前目录下的文件file.dat用于输入,下列语句中错误的 是______。 A、ifstream fin=ifstream.open(&file.dat&); ifstream(&file.dat&); C、

我要回帖

更多关于 字符串 dt str 的文章

 

随机推荐