《全国计算机二级C考题真题.docx》由会员分享,可在线阅读,更多相关《全国计算机二级C考题真题.docx(99页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2006年9月考试真题(第24次)1 .从工程管理角度,软件设计般分为两步完成,它们是A、概要设计与详细设计 B、过程控制C、软件结构设计与数据设计D、程序设计与数据设计从工程管理角度看,软件设计分为两步完成:概要设计与详细设计。概要设计(又称结构设计)将软件需求转化为软件体 系结构、确定系统级接口、全局数据结构或数据库模式;详细设计确立每个模块的实现算法和局部数据结构,用适当方法表示算 法和数据结构的细节. 故本题答案为A。2 .数据席技术的根本目标是解决数据的.。A、存储问题B、共享问题 C、安全问题 D、保护问题由于数据的集成性使得数据可为多个应用所共享,特别是在网络发达的今天,数据库与
2、网络的结合扩大了数据关系的应用 范围。数据的共享本身又可极大地减少数据冗余性,不仅减少了不必要的存储空间,更为重要的是可以避免数据的不一致性。因 此,数据库设计的根本目标是耍解决数据共享问题。故本题答案为B。3 .在数据库系统中,用户所见数据模式为.A、概念模式 B、外模式 C、内模式 D,物理模式数据库管理系统的三级模式结构由外模式、模式和内模式组成。外模式又称为子模式,或用户模式,是指数据库用户所看 到的数据结构,是用户看到的数据视图。模式又称为逻辑模式,是数据库中对全体数据的逻辑结构和特性的描述,是所有用户所 见到的数据视图的总和.外模式是模式的一部分。内模式又称为存储模式或物理模式,是
3、指数据在数据库系统内的存储介质上的 表示,即对数据的物理结构和存取方式的描述。 故本题答案为B。4 .在长度为64的有序线性表中进行顺序查找,最坏情况下需要比较的次数为.A、 63 B、 64 C、 6 D、 7在进行顺序查找过程中,如果线性表中的第1个元素就是被查找元素,则只需做次比较就查找成功,查找效率最高;但 如果被查找的元素是线性表中的最后一个元素,或者被查找的元素根本就不在线性表中,则为了查找这个元素需要与线性表中所 有的元素进行比较,这是顺序查找的最坏情况。所以对长度为n的线性衣进行顺序查找,在最坏情况下需要比较n次。故本题答案为B。5 .对下列二叉树进行中序遍历的结果是.A、 A
4、CBDFEG B、 ACBDFGE C、 ABDCGEF D、 FCADBEG二叉树的中序遍历指在访问根结点、遍历左子树与遍历右子树这三者中,首先遍历左子树,然后访问根结点,最后遍历右子树;并且遍历左、右子树时,仍然先遍历左子树,然后访问根结点,最后遍历右子树。故本题答案为A。6 .下列选项中不属于软件生命周期开发阶段任务的是.A、软件测试 B、概要设计C、软件维护 D、详细设计软件生命周期分为软件定义、软件开发及软件维护。其中软件开发阶段的任务中软件设计阶段可分解成概要设计阶段和详 细设计阶段;软件维护不属于软件开发阶段。故本题答案为C.7 .下列叙述中正确的是.A、一个算法的空间复杂度大,
5、则其时间复杂度也必定大B、一个算法的空间复杂度大,则其时间复杂度必定小C、一个算法的时间复杂度大,则其空间且杂度必定小 D、上述三种说法都不时算法的复杂度主要包括时间复杂度和空间复杂度:算法在运行过程中需辅助存储空间的大小称为算法的空间复杂度:算法 的时间复杂度是指执行算法所需要的计算工作量,即算法执行过程中所需要的基本运算次数,为了能够比较客观地反映出一个算 法的效率,在度量一个算法的工作量时,不仅应该与所使用的计算机、程序设计语言以及程序编制者无关,而且还应该与算法实 现过程中的许多细节无关。为此,可以用算法在执行过程中所需基本运算的执行次数来度量算法的工作量。 故本题答案为D。8 .下列
6、选项中不符合良好程序设计风格的是.A、源程序要文档化 B、数据说明的次序要规范化C、避免滥用goto语句 D,模块设计要保证高耦合、高内聚良好的程序设计风格可以使程序结构清晰合理,使程序代码便于维护,因此,程序设计风格对保证程序的质量很重要。主 要应注意和考虑下述一些因素:1、源程序耍文档化;2、数据说明的次序要规范化;3、语句的结构应该简单直接,不应该为提高 效率而把语句复杂化,避免滥用got。语句。模块设计要保证低耦合、高内聚.故本题答案为D。9 .设有如下三个关系表从图中可以看出,关系T是关系R和关系S的简单扩充,而扩充的符号为X,所以答案为FRXS。 故本题答案为C。10 .数据库设计
7、的四个阶段是:需求分析、概念设计、逻辑设计和 。A、编码设计 B、测试阶段 C、运行阶段 D、物理设计数据库设计分为以下6个设计阶段:需求分析阶段、概念设计阶段、逻辑设计阶段、物理设计阶段、实施阶段及数据库运行和 维护阶段。故本题答案为D。11 .下列运算符不能重载为友元函数的是.A, = () - B、 + - + C, = 以及所有的 类型转换运算符只能作为成员函数重或,不能重载为友元函数。故本题答案为A。12 .语句ofstream f (SALARY. DAT, ios_base: :app);的功能是建立流对象f,并试图打开文件SALARY. DAT与f关联,而且.A、若文件存在,将
8、其置为空文件;若文件不存在,打开失败B、若文件存在,将文件指针定位于文件尾:若文件不存在,建立一个新文件C、若文件存在,将文件指针定位于文件首;若文件不存在,打开失败D、若文件存在,打开失败;若文件不存在,建立一个新文件本题考查的是文件流的输出。ofstream f (SALARY. DAT*, ios base:app);是以ios_base:app方式打开文件,若文件存在,将文件指针定位于文件尾;若文件不存在,建立个新文件。故本题答 案为B。13 .有如下程序#includeusing namespace std;class A public: virtual void funclO co
9、utMAl;void func20 coutMA2M;;class B:public A public:void funclO coutHBr,;void func2() coutB2;);int mainO A*p=new B;p-funcl0 ;p-func2(); return 0;运行此程序,屏幕上将显示输出 OA、 B1B2 B、 A1A2 C、 B1A2 D、 A1B2 本题考查的是派生类。派生类B由基类A公有继承而来。调用p-funcl();后,执行派生类B的函数void funclO;调用p-func2();后,执行基类的函 数void func2(),因为虚拟函数是根据对象的
10、实际类型调用,非虚拟函数是根据指针类型调用。故通过指针p调用func2时将直接 调用基类中的void func2()o故本题答案为C。14. if语句的语法格式可描述为:格式1: if(条件)语句)或格式2: if(条件)语句lelse语句2关于上面的语法格式,下列表述中错误的是 OA、条件部分可以是一个if语句,例如if (if (a=0) ) B、语句部分可以是一个if语句,例如if()if(,)C、如果在条件前加上逻辑非运算符!并交换语句1和语句2的位置,语句功能不变D、语句)部分可以是一个循环语句,例如if()while()本题考杳的是if语句。if为关键字,条件通常是一个表达式:if
11、子句和else子句可以是任何类型的语句,当然也可以是ifelse语句本身和while 语句。ifelse语句的基本执行过程是:首先计算条件)的值,如果此值不为0 (真”),则执行语句D,然后忽略语句2,而去 执行if语句之后的下一条语句;如果此值为0 (假则执行语句2,然后忽略语句1,然后继续执行if语句之后的下一条语 句。故本题答案为A。15.下列语句中,错误的是 oA、 const int buffer=256; B、 const double *point;C、 int const buffer=256;D、 double *const point;本题考查的是符号常量定义。const
12、int buff er=256; 声明常量 buff erconst double *point; 声明常量指针*point, *point不可变,但point的值可以改变int const buff er=256; 声明常量 buff erdouble *const point;声明的point是常量,*point可变,但point的值不可以改变,point不是外部的,必须在声明初始化常量对象。可改为:double aa = 123. 45;double *const point = &aa;故本题答案为D。16 .关于运算符重载,下列表述中正确的是 oA、C+已有的任何运算符都可以重载B,
13、运算符函数的返回类型不能声明为基本数据类型C、在类型转换符函数的定义中不需要声明返回类型D、可以通过运算符重载来创建C+中原来没有的运算符 本题考查的是运算符重载。运算符重载是针时C+中原有的运算符进行的,不可能通过而载创造出新的运算符,故选项D错误。除了.、.*、-*、:、?:这5个运算符外,其它运算符都可以重载,故选项A错误。运算符函数的返回类型可以声明为基本数据类型,故选项B错误。在重载 类型转换符时,由于运算符本身已经表示出返回值类型,因此不需要返回值类型的声明。故本题答案为C。17 .关于在调用模板函数时模板实参的使用,下列叙述正确的是.A、对于虚拟类型参数所对应的模板实参,如果能从
14、模板函数的实参中获得相同的信息,则都可以省略B、对于虚拟类型参数所对应的模板实参,如果他们是参数表中的最后的若干参数,则都可以省略C、时于虚拟类型参数所对应的模板实参,若能够省略则必须省略D、对于常规参数所对应的模板实参,任何情况下都不能省略本题考查的是函数模板中模板实参的省略。对了虚拟类型参数所对应的模板实参,如果从模板函数的实参表中获得的信息已经能够判定其中部分或全部虚拟类型参数, 而且它们又正好是参数表中最后的若干参数,则模板实参表中的那几个参数可以省略。反之,对于某个模板实参,如果从模板函 数的实参表中无法获得相同的信息,就不能省略:或者虽然能够获得同样的信息,但在它后面还有不能省略的
15、实参,则其自身还 是不能省略,故选项A和B错误。对于虚拟类型参数所对应的模板实参,若能够省略可以省略,也可以不省略,故选项C错误。常规 参数的信息无法从模板函数的实参表中获得,因此在调用时必须显式的说明。故本题答案为D。18 .若有下面的函数调用:fun(a+b, 3, max (n-1, b)则fun的实参个数是. A、3 B、4 C、5 D、6 本题考查的是函数的调用。在C+中,形参列表是由逗号分开的,分别说明函数的各个参数。在fun()函数中它包括3个形参,a+b, 3和max(nT,b);当 调用一个函数时,实参与形参一对一地匹配,所以实参个数也是3个。 故木题答案为A。19 .下列有
16、关内联函数的叙述中,正确的是.A、内联函数在调用时发生控制转移B、内联函数必须通过关键字inline来定义C、内联函数是通过编译器来实现的D、内联函数函数体的最后一条语句必须是retuim语句 本题考查的是内联函数。在C+中使用inline关键字来定义内联函数。inline关键字放在函数定义中函数类型之前。不过编译器会将在类的说明部分定 义的任何函数都认定为内联函数,即使它们没有inline说明。个内联函数可以有,也可以没有retun语句。内联函数在程序执 行时并不产生实际函数调用,而是在函数调用处将函数代码展开执行。内联函数是通过编译器来实现的。故本题答案为C。20 .在公有继承的情况下,允
17、许派生类直接访问的基类成员包括A、公有成员 B、公有成员和保护成员C、公有成员、保护成员和私有成员D、保护成员本题考查的是派生类。派生类中的成员不能访问基类中的私有成员,可以访问基类中的公有成员和保护成员。此时派生类对基类中各成员的访问能 力与继承方式无关,但继承方式将影响基类成员在派生类中的访问控制属性。故本题答案为B。21 .有如下程序:#include using namespace std;class Objstatic int i;public:Obj() i+;Obj()i一;static int getVal()return i;);int Obj:i=0;void f () (
18、Obj ob2;coutob2. getVal ();)int main() Obj obi;f ();0bj*ob3=new Obj; coutob3-getVal ();delete ob3;coutgetVal();后,将i的值输出,输出值为2:调用delete ob3后将执行Obj的析构函数Obj (),执行后,i的值将减1, Obj:getVal()为类的一个静态成员函数,其作用是返回私有静态成员变量i的值1。故本题答案为D。22 .下列有关继承和派生的叙述中,正确的是.A、如果一个派生类私有继承其基类,则该派生类中的成员不能访问基类的保护成员B、派生类的成员函数可以访问基类的所有成
19、员C、基类对象可以赋值给派生类对象D、如果派生类没有实现基类的一个纯虚函数,则该派生类是个抽象类 本题考查的是拷贝构造函数。拷贝构造函数通常在以卜.3种情况卜.会被调用:(1)用类的一个已知的对象去初始化该类的另一个正在创建的对象。(2)采用传值调用方式时,对象作为函数实参传递给函数形参。(3)对象作为函数返回值。故本题答案为B。23 .下列情况中,不会调用拷贝构造函数的是.A、用一个对象去初始化同一类的另一个新对象时B、将类的一个对象赋值给该类的另个对象时C、函数的形参是类的对象,调用函数进行形参和实参结合时D、函数的返回值是类的对象,函数执行返回调用时 本题考查的是拷贝构造函数。拷贝构造函
20、数通常在以下3种情况下会被调用:(1)用类的个已知的对象去初始化该类的另个正在创建的对象。(2)采用传值调用方式时,对象作为函数实参传递给函数形参.(3)对象作为函数返回值。故本题答案为B。24 .有如下程序#include#inc1udeusing namespace std;int main() coutsetprecision(3)fixedsetfi 11 (*)setw(8);cout12. 34534. 567;return 0;) 若程序的输出是:*12. 345*34. 567则程序中下划线处遗漏的操作符是。A、setprecision B、fixed C、setfillC *
21、) D、setw(8) 本题考查的是输入输出宽度的控制和输出精度的控制。setw(int n);设置输入输出的宽度。setprecision(int n);设置浮点数的精度(有效位数或小数位数).setfill (char c);设置填充字符.由程序可以看出,本题设置小数的输出宽度为8,小数位数为3。输出数据时,如果数据宽度小于8,则空闲的位置用*填充。 故本题答案为D。25 .有如下的运算符重载函数定义:double operator +(int i, int k) return double(i+k);)但定义有错误,对这个错误最准确的描述是一 .A、+只能作为成员函数重载,而这里的+是作
22、为非成员函数重载的B、两个int型参数的和也应该是int型,而这里将+的返回类型声明为doubleC、没有将运算符重投函数声明为某个类的友元D、C+已经提供了求两个int型数据之和的运算符+,不能再定义同样的运算符本题考查的是运算符的重载。在C+中可以对用户自定义类的运算符进行重载,但不能诸如int, char, double等内置类型运算符进行重载。故本题答案为D。26 .有如下程序#include using namespace std;class Base protected:Base O fcout*A;)Base (char c) coutc;);class Derived:publ
23、ic Basepublic:Derived (char c)coutc;int main() Derived dl(B); return 0; 执行这个程序屏幕上将显示输出 o A、B B、BA C、AB D、BB本题考查的是派生的构造函数和基类的构造函数的调用顺序。建立派生类对象时,构造函数的执行顺序如下:(1)执行基类的构造函数。(2)执行成员对象的构造函数。(3)执行派生类的构造函数。派生类Derived由基类Base公有派生而来。在派生类构造函数声明时系统会自动调用基类的缺省构造函数。调用Derived 后,执行类Derived的构造函数的Derived(char c)定义,系统会自动
24、调用基类的缺省构造函数Base。,输出字母A:再执 行派生类的构造函数Derived(char c),输出字母B。故本题答案为C。27 .关于关键字class和typename,下列表述中正确的是。A、程序中的typename都可以替换为classB、程序中的class都可以替换为typenameC、在模板形参表中只能用typename来声明参数的类型D、在模板形参表中只能用class或typename来声明参数的类型 本题考查的是模板形参。模板形参分为两种类型:虚拟类型参数和常规参数。虚拟类型参数须用typename或class定义。常规参数用具体的类型修饰符 (如int、double、ch
25、ar*等)定义,故选项C和D错误。在定义模板时,关键字typename与cl ass可以互相交换,但在定义类时,只 能使用class。typename仅仅用于定义模板,故程序中所有的typename都可以替换成class,但对于用于类定义的class不能使用 typename来替换。故本题答案为A。28 .在一个派生类对象结束其生命周期时 oA、先调用派生类的析构函数后调用基类的析构函数B、先调用基类的析构函数后调用派生类的析构函数C、如果基类没有定义析构函数,则只调用派生类的析构函数D、如果派生类没有定义析构函数,则只调用基类的析构函数本题考查的是派生类析构函数的执行顺序。当主函数结束时,派
26、生类析构函数的执行顺序是:先执行派生类的析构函数,再执行成员对象的析构函数,最后执行基类的 析构函数。 故本题答案为A。29 .有如下类定义:class MyBase int k;public:MyBase(int n=0) :k(n) int value0constreturn k; ;class MyDerived:MyBaseint j; public:MyDerived(int i):j (i) )int getK0const(return k;int getj()constreturn j;;编译时发现有一处语法错误,对这个错误最准确的描述是。A、函数getK试图访问基类的私有成员变
27、量kB、在类MyDerived的定义中,基类名MyBase前缺少关键字public、protected或privateC、类MyDerived缺少一个无参的构造函数D、类MyDerived的构造函数没有对基类数据成员k进行初始化 本题考查的是派生类访问权限。在一个派生类中,其成员由两部分构成:一部分是从基类继承得到的,另一部分是自己定义的新成员,所有这些成员仍然分 为公有、私有和保护三种访问属性。其中,从基类继承下来的全部成员构成派生类的基类部分,这部分的私有成员是派生类不能 直接访问的,公有成员和保护成员则是派生类可以直接访问的。故本题答案为A。30 .有如下程序#inc1ude #inc1
28、udeusing namespace std;class MyClass public:MyClassO coutA;)MyClass (char c) coutc;MyClassO coutrB; );int main() MyClass p 1, *p2;p2=new MyClass(X); delete p2; return 0;执行这个程序屏幕上将显示输出。A、ABX B、ABXB C、AXB D、AXBB 本题考查的是析构函数和构造函数。在定义对象pl时由系统自动调用构造函数MyClassO,输出字母A;用new创建单个对象MyClass(X)时,要根据参数调用相应 的构造函数MyC
29、lass(char c),输出字母X;在执行delete时,系统会自动调用析构函数MyClass(),输出字母B,当对象的生存周 期即将结束时系统会自动调用析构函数、MyClassO,输出字母B。故本题答案为D。31.以下关键字不能用来声明类的访问权限的是 oA、 public B、 static C、 protected D、 private 本题考查的是类的定义。类定义的一般格式如下: class类名) public:成员函数或数据成员的说明公有成员,外部接口protected:数据成员或成员函数的说明保护成员private:数据成员或成员函数的说明私有成员;关键字public、priva
30、te和protected称为访问权限修饰符,他们限制了类成员的访问控制范围。 故本题答案为B。32 .有如下程序#includeusing namespace std;int i=l;class Funpublic:static int i;int value()return i_l;int value()constreturn i+1;);int Fun:i=2;int main() int i=3;Fun funl;const Fun fun2;return 0;)若程序的输出结果是:123则程序中下划线处遗漏的语句是 oA、coutfunl. value() Fun: ifun2. va
31、lue ();B、coutFun: ifunl. value()fun2. value();C、coutfunl. value () fun2. value() Fun: i;D、coutfun2. value () Fun: ifunl. value ();本题主要考查了常对象的一些概念。由于i是类Fun的静态成员,该成员被类的所有实例共享。对于类中的静态成员函数,可以通过“类名:函数名”的方法来调用, 并且该函数只能访问类中的静态成员。在C+中,对于常对象的成员函数调用,将自动调用其常成员函数。在本题中执行funl. valueO ,将调用原型为int value。;”的函数,i的值返回1
32、;执行fun2. value。;,将调用原型为int value。const的函数,i的值返回3;执行Fun:i时,调用类的静态成员i, i的值返回2。故本题答案为A。33 .有如下说明int a10=l, 2,3,4, 5,6,7,8,9,10), *p=a;则数值为9的表达式是。A、*p+9 B、* (p+8) C、*p+=9 D、p+8本题考查的是指针与数组。数组的下标是从。到数组的长度减1。*(p+i)是取数组的第i+1个元素,即下标为i的元素。因此*(p+8)取数组的第9个元素,即 元素9。故本题答案为B。34 .下列符号中,正确的C+标识符是。A、 enum B、 2b C、 fo
33、o-9 D、 _32本题考查的是标识符。标识符是一个以字母或卜一划线开头的,由字母、数字、下划线组成的字符串。标识符不能与任意一个关键字同名。故本题答案为D。35 .下列关于输入流类成员函数getlineO的描述中,错误的是.A、该函数是用来读取键盘输入的字符串的B、该函数读取的字符串长度是受限制的C,该函数读取字符串时,遇到终止符便停止D、该函数读取字符串时,可以包含空格本题考查的是文件流的输入输出。函数getline(char_type* s, streamsize n, char_type delim)的作用是从当前位置开始提取字符存入s所指向的具有n各字节 的字符空间。字符的提取与存储
34、在遇到下列情况时停止:(1)已提取并存储了nT个字符;(2)到流尾,无字符可提取:(3)卜一个要提取的字符等于结束标志delim。故本题答案为B。36 .按先进后出”原则组织数据的数据结构是。标准答案为:栈考生答案为:栈栈和队列都是一种特殊的操作受限的线性表,只允许在端点处进行插入和删除.二者的区别是:栈只允许在表的一端进行插 入或删除操作,是一种“先进后出的线性表;而队列只允许在表的一端进行插入操作,在另一端进行删除操作,是一种“先进先出” 的线性表.37 .下列软件系统结构图的宽度为。标准答案为:3或三 考生答案为:3软件系统结构图的宽度:整体控制跨度(最大模块数的层)的表示。38 .的任
35、务是诊断和改正程序中的错误。标准答案为:程序调试或调试 考生答案为:软件测试程序调试的任务是诊断和改正程序中的错误。它与软件测试不同,软件测试是尽可能多地发现软件中的错误。先要发现软 件的错误,然后借助于一定的调试工具去找出软件错误的具体位置。软件测试贯穿整个软件生命期,调试主要在开发阶段。39 . 一个关系表的行称为 o标准答案为:元组或记录考生答案为:元组设计数据库的目的实质上是设计出满足实际应用需求的实际关系模型;关系中的行称为元组,对应存储文件中的记录,关 系中的列称为属性,对应存储文件中的字段。40 .数据结构分为线性结构和非线性结构,带徒的队列属于。标准答案为:线性结构考生答案为:
36、线性结构与栈类似,队列也是线性表,也可以采用链式存储结构。41 .创建对象数组时,对数组的每一个元素都将调用一次构造函数,如果没有显式给出数组元素的初值,则调用缺省构造函数。下列程序涉及到对象数组的创建和单个对象的创建,其输出结果是.#includeusing namespace std;class Foopublic:Foo(int x) cout* A* ;FooO );int main ()(Foo f3, g(3);return 0;)标准答案为:A考生答案为:AAAA本题考查的是类的对象数组和成员对象。从程序可以看出f3是类Foo的一个对象数组,因为f3没有显式的给定初值,所以系统自
37、动调用缺省构造函数Foo();在定 义类Foo的对象g(3)时,执行相应的构造函数Foo(int x),输出字母A。42 .插入排序算法的主要思想是:每次从未排序序列中取出的一个数据,插入到己排序序列中的正确位置。InsertSort类的成员 函数sort。实现了插入排序算法。请将画线处缺失的部分补充完整。class InsertSort public:InsertSort(int*a0, int nO) :a(a0), n(n0) 参数aO是某数组首地址,n是数组元素个数void sort 0此函数假设已排序序列初始化状态只包含a0,未排序序列初始为alanT for(int i=l;iO;
38、-j) if(t=aj-l)break;aj=aj-l;aj=t;protected:int*a,n; 指针a用于存放数组首地址,n用于存放数组元素个数);标准答案为:j二I 考生答案为:j=i-l本题考查的是插入排序。在Sort函数中,实现函数的插入排序算法,若队列中已有i个数,则向其中插入第i+1个数时,依次与从下标为i-1到下标为0 的数比较,如果后面的数小于前面的数,则交换这两个数,否则说明该数已排好序,直接跳出内层循环,故此空应填Fi。43 .如果不使用多态机制,那么通过基类的指针虽然可以指向派生类对象,但是只能访问从某类继承的成员。下列程序没有使用 多态机制,其输出结果是 0#in
39、cludeusing namespace std;class Base publi c:void print () cout,B ;class Derived:public Basepublic:void print 0 coutprint ();pd-print ();delete pd;return 0;)标准答案为:BD 考生答案为:BD本题考杏的是派生类。派生类Derived由基类Base公有继承而来,是基类的子类型。调用pb-print ();后,执行基类的函数void print (),因为尽 管pb的函数print ()可以对类Base的公有派生类Derived的对象pd进行操作
40、,但是只能使用从基类Base中继承的成员;调用 pd-print ();后,执行派生类的函数void print 0 044 .若有定义语句:int *a,b;,则变量b的数据类型是。标准答案为:整型 或int 考生答案为:int本题考查的是变量的定义。int *a,b;把a定义为一个int类型的指针;把b定义为一个整型变量。45 .在声明派生类时,如果不显式地给出继承方式,缺省的类继承方式是私有继承private。已知有如下类定义: classe Baseprotected:void fun() );class Derived:Base;则Base类中的成员函数fun(),在Derived类
41、中的访问权限是一。(注意:要求填写private、protected或publ ic中的项)。标准答案为:private考生答案为:private46 .下列程序的输出结果是。#includeusing namespace std;class Aint a;public:A():a(9) virtual void print () const couta;);class B:public Achar b;public:BO b= Svoid print () const coutb;);void show(A&x) x. print (); int main () A dl,*p;B d2;p
42、=&d2;dl. print ();d2. print ();p-print ();show(dl);show(d2);return 0;)标准答案为:9SS9S考生答案为:9SS9S本题主要考查了缺省构造函数。在dl、d2定义时分别调用它们的构造函数。调用dl. print ();后,执行类A的virtual void print()函数;调用d2. print (); 后,执行派生类B的构造函数void print。;调用p-print ();后,执行执行派生类B的构造函数void print ():调用show(dl);后, 调用函数show(A&x),再调用类A的virtual voi
43、d print ()函数;调用show(d2);后,调用函数show(A&x),再调用派生类B的构造函 数void print () o47 .已知递归函数f的定义如下: int f(int n)(if(n=l) return 1; 递归结束情况else return n*f (n-2); 递归则函数调用语句f (5)的返回值是。标准答案为:15考生答案为:120本题k要考查了递归算法。函数每次将f(n)的值转换成相应的关系式n*f(n-2),直到f(l)时为止。所以f(5)=5*f(5-2) =5*3*f(l) =5*3*1=15。48 .已知数组a中的元素个数为n,下列语句的作用是将下标为i的元素移动到下标为iT的单元,其中l二in。例如,当n=4, a中 原有的数据为1, 2, 3, 4时,则移动后a中元素变为2, 3, 4, 4。请将语句补充完整: for (int i=0; in-l; i+) ai=a;标准答案为:i+1或1+1考生答案为:i+1本题考查循环的基本应用。解题思路为:循环条件是inT,循环的结果是把将下标为i的元素移动到下标为i-l的单元,即ai+l的值赋给ai,所以答 案是i+L49 .己知下列程序的输出结果是42,请将画线处缺失的部分补充完整。ttincludeusing namespace std;cla
限制150内