二级c++笔试历年真题_第1页
二级c++笔试历年真题_第2页
二级c++笔试历年真题_第3页
二级c++笔试历年真题_第4页
二级c++笔试历年真题_第5页
已阅读5页,还剩85页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2006年9月考试真题(第24次)

i.从工程管理角度,软件设计一般分为两步完成,它们是____。

A、概要设计与详细设计B、过程控制C、软件结构设计与数据设计

D、程序设计与数据设计

从工程管理角度看,软件设计分为两步完成:概要设计与详细设计。概要设计(乂称结构设计)将

软件需求转化为软件体系结构、确定系统级接口、全局数据结构或数据库模式:详细设计确立每个模块的

实现算法和局部数据结构,用适当方法表示算法和数据结构的细节。故本题答案为A。

2.数据库技术的根本目标是解决数据的___。

A、存储问题B、共享问题C、安全问题D、保护问题

由于数据的集成性使得数据可为多个应用所共享,特别是在网络发达的今天,数据库与网络的结合

扩大了数据关系的应用范围。数据的共享本身乂可极大地减少数据冗余性,不仅减少了不必要的存储空间,

更为重要的是可以避免数据的不一致性。因此,数据库设计的根本目标是要解决数据共享问题。

故本题答案为B。

3.在数据库系统中,用户所见数据模式为o

A、概念模式B、外模式C、内模式D、物理模式

数据库管理系统的三级模式结构由外模式、模式和内模式组成。外模式又称为子模式,或用户模式,

是指数据库用户所看到的数据结构,是用户看到的数据视图。模式乂称为逻辑模式,是数据库中对全体数

据的逻辑结构和特性的描述,是所有用户所见到的数据视图的总和。外模式是模式的一部分。内模式又称

为存储模式或物理模式,是指数据在数据库系统内的存储介质上的表示,即对数据的物理结构和存取方式

的描述。故本题答案为B。

4.在长度为64的有序线性表中进行顺序查找,最坏情况下需要比较的次数为。

A、63B、64C、6D、7

在进行顺序查找过程中,如果线性表中的第1个元素就是被查找元素,则只需做•次比较就查找成

功,查找效率最高;但如果被查找的元素是线性表中的最后一个元素,或者被查找的元素根本就不在线性

表中,则为了查找这个元素需要与线性表中所有的元素进行比较,这是顺序查找的最坏情况。所以对长度

为n的线性表进行顺序查找,在最坏情况下需要比较n次。故本题答案为B。

5.对下列二叉树

进行中序遍历的结果是。

A、ACBDFEGB、ACBDFGEC、ABDCGEFD、FCADBEG

二叉树的中序遍历指在访问根结点、遍历左子树与遍历右子树这三者中,首先遍历左子树,然后访问根

结点,最后遍历右子树;并且遍历左、右子树时,仍然先遍历左子树,然后访问根结点,最后遍历右子树。

故本题答案为A。

6.下列选项中不属于软件生命周期开发阶段任务的是。

A、软件测试B、概要设计C、软件维护D、详细设计

软件生命周期分为软件定义、软件开发及软件维护。其中软件开发阶段的任务中软件设计阶段可分

解成概要设计阶段和详细设计阶段;软件维护不属于软件开发阶段。故本题答案为C。

7.下列叙述中正确的是.

A、一个算法的空间复杂度大,则其时间复杂度也必定大

B、一个算法的空间复杂度大,则其时间复杂度必定小

C、一个算法的时间复杂度大,则其空间复杂度必定小D、上述三种说法都不对

算法的复杂度主要包括时间复杂度和空间复杂度:算法在运行过程中需辅助存储空间的大小称为算

法的空间复杂度:算法的时间复杂度是指执行算法所需要的计算工作量,即算法执行过程中所需要的基本

运算次数,为了能够比较客观地反映出个算法的效率,在度量一个算法的工作量时,不仅应该与所使用

的计算机、程序设计语言以及程序编制者无关,而且还应该与算法实现过程中的许多细节无关。为此,可

以用算法在执行过程中所需基本运算的执行次数来度量算法的工作量。故本题答案为D。

8.下列选项中不符合良好程序设计风格的是。

A、源程序要文档化B、数据说明的次序要规范化C、避免滥用goto语句

D、模块设计要保证高耦合、高内聚

良好的程序设计风格可以使程序结构清晰合理,使程序代码便于维护,因此,程序设计风格对保证

程序的质量很重要。主要应注意和考虑下述一些因素:1、源程序要文档化;2、数据说明的次序要规范化:

3、语句的结构应该简单直接,不应该为提高效率而把语句复杂化,避免滥用got。语句。模块设计要保证低

耦合、高内聚。故本题答案为D。

9.设有如下三个关系表

从图中可以看出,关系T是关系R和关系S的简单犷充,而扩充的符号为X,所以答案为T=RXS。

故本题答案为C。

10.数据库设计的四个阶段是:需求分析、概念设计、逻辑设计和•

A、编码设计B、测试阶段C、运行阶段D、物理设计

数据库设计分为以下6个设计阶段:需求分析阶段、概念设计阶段、逻辑设计阶段、物理设计阶段、实

施阶段及数据库运行和维护阶段。故本题答案为D。

11.下列运算符不能重载为友元函数的是。

A、=()[]->B、+-++-C、><>=<=D、+=-=*=/=

本题考查的是运算符的重载。

在C++中,可以通过两种方式对运算符进行重载。一种是类成员函数的方式、一种是友元函数的方式。

=0□->以及所有的类型转换运算符只能作为成员函数重载,不能重载为友元函数。故本题答案

为A。

12.语句ofstreamf("SALARY.DAT",ios_base::app);的功能是建立流对象f,并试图打开文件SALARY.DAT

与f关联,而且_____。

A、若文件存在,将其置为空文件;若文件不存在,打开失败

B、若文件存在,将文件指针定位于文件尾;若文件不存在,建立一个新文件

C、若文件存在,将文件指针定位于文件首;若文件不存在,打开失败

D、若文件存在,打开失败;若文件不存在,建立一个新文件

本题考查的是文件流的输出。

ofstreamf("SALARY.DAT/Z,ios_base::app);

是以ios_base::app方式打开文件,若文件存在,将文件指针定位于文件尾;若文件不存在,建立个新文

件。故本题答案为B。

13.有如下程序

#include<iostream>usingnamespacestd;

classA(public:virtualvoidfund(){cout<<"Al";}voidfunc2()(cout«"A2";}

};

classB:publicA{public:voidfund(){cout<<"Bl";}voidfunc2(){cout<<"B2";}

};

intmain(){A*p=newB;p->funcl();p->func2();return0;}

运行此程序,屏幕上将显示输出»

A、B1B2B、A1A2C、B1A2D、A1B2

本题考查的是派生类。

派生类B由基类A公有继承而来。调用p->funcl();后,执行派生类B的函数voidfuncl();调用

p-〉func2();后,执行基类的函数voidfunc2(),因为虚拟函数是根据对象的实际类型调用,非虚拟函数是

根据指针类型调用。故通过指针P调用func2时将直接调用基类中的voidfunc2()。故本题答案为C。

14.if语句的语法格式可描述为:

格式1:if(〈条件〉)〈语句〉

或格式2:if(〈条件〉)〈语句l>else〈语句2>

关于上面的语法格式,下列表述中错误的是。

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.下列语句中,错误的是o

A、constintbuffer=256;B、constdouble*point;

C、intconstbuffer=256;D、double*constpoint;

本题考查的是符号常量定义。

constintbuffer=256;〃声明常量buffer

constdouble*point;〃声明常量指针*point,*point不可变,但point的值可以改变

intconstbuffer=256;〃声明常量buffer

double*constpoint;〃声明的point是常量,*point可变,但point的值不可以改变,point不是

外部的,必须在声明初始化常量对象。可改为:

doubleaa=123.45;

double*constpoint=&aa;

故本题答案为D。

16.关于运算符重载,下列表述中正确的是o

A、C++已有的任何运算符都可以重载B、运算符函数的返回类型不能声明为基本数据类型

C、在类型转换符函数的定义中不需要声明返回类型

D、可以通过运算符重载来创建C++中原来没有的运算符

本题考查的是运算符重载。

运算符重载是针对C++中原有的运算符进行的,不可能通过重载创造出新的运算符,故选项D错误。除

了.、.*、->*、::、?:这5个运算符外,其它运算符都可以重载,故选项A错误。运算符函数的返回类型可

以声明为基本数据类型,故选项B错误。在重载类型转换符时,由于运算符本身已经表示出返回值类型,因

此不需要返回值类型的声明。故本题答案为C。

17.关于在调用模板函数时模板实参的使用,下列叙述正确的是___。

A、对于虚拟类型参数所对应的模板实参,如果能从模板函数的实参中获得相同的信息,则

都可以省略

B、对于虚拟类型参数所对应的模板实参,如果他们是参数表中的最后的若干参数,则都可

以省略

C、对于虚拟类型参数所对应的模板实参,若能够省略则必须省略

D、对于常规参数所对应的模板实参,任何情况下都不能省略

本题考查的是函数模板中模板实参的省略.

对于虚拟类型参数所对应的模板实参,如果从模板函数的实参表中获得的信息已经能够判定其中部分

或全部虚拟类型参数,而且它们又正好是参数表中最后的若干参数,则模板实参表中的那儿个参数可以省

略。反之,对于某个模板实参,如果从模板函数的实参表中无法获得相同的信息,就不能省略:或者虽然

能够获得同样的信息,但在它后面还有不能省略的实参,则其自身还是不能省略,故选项A和B错误。对于

虚拟类型参数所对应的模板实参,若能够省略可以省略,也可以不省略,故选项C错误。常规参数的信息无

法从模板函数的实参表中获得,因此在调用时必须显式的说明。故本题答案为D。

18.若有下面的函数调用:

fun(a+b,3,max(n-1,b))

则fun的实参个数是。A、3B、4C、5D、6

本题考查的是函数的调用。

在C++中,〈形参列表〉是由逗号分开的,分别说明函数的各个参数。在fun()函数中它包括3个形参,a+b,

3和max(n-l,b):当调用•个函数时,实参与形参•对地匹配,所以实参个数也是3个。故本题答案为A。

19.下列有关内联函数的叙述中,正确的是_____。

A、内联函数在调用时发生控制转移B、内联函数必须通过关键字inline来定义

C、内联函数是通过编译器来实现的D、内联函数函数体的最后一条语句必须是return语句

本题考查的是内联函数。

在C++中使用inline关键字来定义内联函数。inline关键字放在函数定义中函数类型之前。不过编译器

会将在类的说明部分定义的任何函数都认定为内联函数,即使它们没有inline说明。•个内联函数可以有,

也可以没有return语句。内联函数在程序执行时并不产生实际函数调用,而是在函数调用处将函数代码展

开执行。内联函数是通过编译器来实现的。故本题答案为C。

20.在公有继承的情况下,允许派生类直接访问的基类成员包括____。

A、公有成员B、公有成员和保护成员C、公有成员、保护成员和私有成员D、保护成员

本题考查的是派生类。

派生类中的成员不能访问基类中的私有成员,可以访问基类中的公有成员和保护成员。此时派生类对

基类中各成员的访问能力与继承方式无关,但继承方式将影响某类成员在派生类中的访问控制属性。

故本题答案为B。

21.有如下程序:

#inc1ude<iostream>usingnamespacestd;

classObj{staticinti;

public:Obj(){i++;}~Obj(){i一;}

staticintgetVal(){returni;}

};

intObj::i=0;

voidf(){Objob2;cout«ob2.getVal();)

intmain(){Objobi;f();

0bj*ob3=newObj;cout«ob3->getVal();

deleteob3;cout«0bj::getVal();

return0;

)

程序的输出结果是oA、232B、231C、222D、221

本题主要考查了C++中类的静态成员。

由于i是类Obj的静态成员,该成员被类的所有实例共享。当定义obi时,系统自动调用构造函数Obj(),

i的值将加1;调用函数f()时,在定义ob2时系统会自动调用构造函数Obj(),i的值将再加1;调用

ob2.getVal();后,将i的值输出,输出值为2;当调用函数f()即将结束时,系统自动调用析构函数~Obj(),

i的值将减1;当定义ob3时,系统自动调用构造函数Obj(),i的值将加L调用cout«ob3getVal();后,

将i的值输出,输出值为2;调用deleteob3后将执行Obj的析构函数~Obj(),执行后,i的值将减1,

Obj::getVal0为类的一个静态成员函数,其作用是返回私有睁态成员变量i的值1。故本题答案为D。

22.下列有关继承和派生的叙述中,正确的是o

A、如果一个派生类私有继承其基类,则该派生类中的成员不能访问基类的保护成员

B、派生类的成员函数可以访问基类的所有成员C、基类对象可以赋值给派生类对象

D、如果派生类没有实现基类的一个纯虚函数,则该派生类是一个抽象类

本题考查的是拷贝构造函数。

拷贝构造函数通常在以下3种情况下会被调用:

(1)用类的个已知的对象去初始化该类的另•个正在创建的对象。

(2)采用传值调用方式时,对象作为函数实参传递给函数形参。

(3)对象作为函数返回值。故本题答案为B。

23.下列情况中,不会调用拷贝构造函数的是_____。

A、用一个对象去初始化同•类的另一个新对象时

B、将类的一个对象赋值给该类的另一个对象时

C、函数的形参是类的对象,调用函数进行形参和实参结合时

D、函数的返回值是类的对象,函数执行返回调用时

本题考查的是拷贝构造函数。

拷贝构造函数通常在以下3种情况下会被调用:

(1)用类的个已知的对象去初始化该类的另个正在创建的对象。

(2)采用传值调用方式时,对象作为函数实参传递给函数形参。

(3)对象作为函数返回值。

故本题答案为B。

24.有如下程序

#include<iostream>#include<iomanip>usingnamespacestd;

intmain(){cout«setprecision(3)<<fixed«setfi11('*')<<setw(8);

cout<<12.345««34.567;return0;

)

若程序的输出是:**12.345**34.567

则程序中下划线处遗漏的操作符是_____。

A、setprecisionB^fixedC、setfill('*')D、setw(8)

本题考查的是输入输出宽度的控制和输出精度的控制。

setw(intn);设置输入输出的宽度。

setprecision(intn);设置浮点数的精度(有效位数或小数位数)。

setfill(charc);设置填充字符。

由程序可以看出,本题设置小数的输出宽度为8,小数位数为3。输出数据时,如果数据宽度小于8,则

空闲的位置用*填充。故本题答案为D。

25.有如下的运算符重载函数定义:

doubleoperator+(inti,intk){returndouble(i+k);}

但定义有错误,对这个错误最准确的描述是。

A、+只能作为成员函数重载,而这里的+是作为非成员函数重载的

B、两个int型参数的和也应该是int型,而这里将+的返回类型声明为double

C、没有将运算符重载函数声明为某个类的友元

D、C++已经提供了求两个int型数据之和的运算符+,不能再定义同样的运算符

本题考查的是运算符的重载。

在C++中可以对用户自定义类的运算符进行重载,但不能诸如int,char,double等内置类型运算符进

行重载。故本题答案为D。

26.有如下程序

#include<iostream>usingnamespacestd;

classBase{protected:Base(){cout〈〈'A';}Base(charc){cout«c;}

};

classDerived:pub1icBase(

public:Derived(charc){cout«c;}

);

intmain(){Deriveddl('B');return0;}

执行这个程序屏幕上将显示输出_____oA、BB、BAC、ABD、BB

本题考查的是派生的构造函数和基类的构造函数的调用顺序。

建立派生类对象时,构造函数的执行顺序如下:

(1)执行基类的构造函数。

(2)执行成员对象的构造函数。

(3)执行派生类的构造函数。

派生类Derived由基类Base公有派生而来。在派生类构造函数声明时系统会自动调用基类的缺省构造函

数。调用Deriveddl('B');后,执行类Derived的构造函数的Derived(charc)定义,系统会自动调用基类的

缺省构造函数Base。,输出字母A;再执行派生类的构造函数Derived(charc),输出字母B。

故本题答案为C。

27.关于关键字class和typename,下列表述41正确的是。

A、程序中的typename都可以替换为classB、程序中的class都可以替换为typename

C、在模板形参表中只能用typename来声明参数的类型

D、在模板形参表中只能用class或typename来声明参数的类型

本题考查的是模板形参。

模板形参分为两种类型:虚拟类型参数和常规参数。虚拟类型参数须用typename或class定义。常规参

数用具体的类型修饰符(如int、double>char*等)定义,故选项(3和1)错误。在定义模板时,关键字typename

与class可以互相交换,但在定义类时,只能使用class。typename仅仅用于定义模板,故程序中所有的

typename都可以替换成class,但对于用于类定义的class不能使用typename来替换。故本题答案为A。

28.在个派生类对象结束其生命周期时o

A、先调用派生类的析构函数后调用基类的析构函数

B、先调用基类的析构函数后调用派生类的析构函数

C、如果基类没有定义析构函数,则只调用派生类的析构函数

D、如果派生类没有定义析构函数,则只调用基类的析构函数

本题考查的是派生类析构函数的执行顺序。

当主函数结束时,派生类析构函数的执行顺序是:先执行派生类的析构函数,再执行成员对象的析构

函数,最后执行基类的析构函数。故本题答案为A。

29.有如下类定义:

classMyBase{

intk;

public:

MyBase(intn=0):k(n){}

intvalue()const(returnk;}

);

classMyDerived:MyBase{

intj;

public:

MyDerived(inti):j(i){}

intgetK()const{returnk;}

intgetj()const{returnj;}

);

编译时发现有一处语法错误,对这个错误最准确的描述是O

A、函数getK试图访问基类的私有成员变量k

B、在类MyDerived的定义中,基类名MyBase前缺少关键字public、protected或private

C,类MyDerived缺少一个无参的构造函数

D、类MyDerived的构造函数没有对基类数据成员k进行初始化

本题考查的是派生类访问权限。

在一个派生类中,其成员由两部分构成:一部分是从基类继承得到的,另一部分是自己定义的新成员,

所有这些成员仍然分为公有、私有和保护二种访问属性。其中,从基类继承下来的全部成员构成派生类的

基类部分,这部分的私有成员是派生类不能直接访问的,公有成员和保护成员则是派生类可以直接访问的。

故本题答案为A。

30.有如下程序

#include<iostream>#inc1ude<iomanip>usingnamespacestd;

classMyClass{public:

MyClass(){cout<<*A,;}

MyClass(charc){cout«c;}

^MyClass0{cout«'B,;}

};

intmain(){MyClasspl,*p2;p2=newMyClass(X);deletep2;return0;}

执行这个程序屏幕上将显示输出oA、ABXB、ABXBC、AXBD、AXBB

本题考查的是析构函数和构造函数。

在定义对象pl时由系统自动调用构造函数MyClassO,输出字母A;用new创建单个对象MyClass(X)时,

要根据参数调用相应的构造函数MyClass(charc),输出字母X;在执行delete时,系统会自动调用析构函

数〜MyClassO,输出字母B,当对象的生存周期即将结束时系统会自动调用析构函数飞yClass(),输出字母

Bo故本题答案为D。

31.以下关键字不能用来声明类的访问权限的是______0

A、publicB、staticC、protectedD>private

本题考查的是类的定义。

类定义的•般格式如下:

class〈类名〉

public:

〈成员函数或数据成员的说明》〃公有成员,外部接口

protected:

《数据成员或成员函数的说明》〃保护成员

private:

《数据成员或成员函数的说明》〃私有成员

};

关键字public、private和protected称为访问权限修饰符,他们限制了类成员的访问控制范围。

故本题答案为B。

32.有如下程序

#include<iostream>

usingnamespacestd;

inti=l;

classFun{

public:

staticinti;

intvalue(){returni-1;}

intvalue()const{returni+1;)

);

intFun::i=2;

intmain(){

inti=3;

Funfunl;

constFunfun2;

return0;

)

若程序的输出结果是:

123

则程序中下划线处遗漏的语句是o

A、cout<<funl.value()<<Fun::i«fun2.value()

B、cout<<Fun::i<<funl.value()<<fun2.value()

C、cout<<funl.value()<<fun2.value()<<Fun::i

D>cout<<fun2.value()«Fun::i<<funl.value()

本题主要考查了常对象的一些概念。

由于i是类Fun的静态成员,该成员被类的所有实例共享。对于类中的静态成员函数,可以通过"类名::

函数名〃的方法来调用,并且该函数只能访问类中的静态成员。在C++中,对于常对象的成员函数调用,将

自动调用其常成员函数。在本题中执行funl.value。,将调用原型为"intvalue。;”的函数,i的值返回1;

执行fun2.value。;,将调用原型为"intvalue()const;"的函数,i的值返回3;执行Fun::i时,调用类的

静态成员i,i的值返回2。故本题答案为A。

33.有如下说明

inta[10]={l,2,3,4,5,6,7,8,9,10),*p=a;

则数值为9的表达式是。

A、*p+9B、*(p+8)C>*p+=9D、p+8

本题考查的是指针与数组。

数组的下标是从0到数组的长度减1。*(p+i)是取数组的第i+1个元素,即下标为i的元素。因此*(P+8)

取数组的第9个元素,即元素9。故本题答案为B。

34.下列符号中,正确的C++标识符是o

A、enumB、2bC、foo-9D、_32

本题考查的是标识符。

标识符是一个以字母或下划线开头的,由字母、数字、下划线组成的字符串。标识符不能与任意一个

关键字同名。故本题答案为D。

35.下列关于输入流类成员函数getlineO的描述中,错误的是。

A、该函数是用来读取键盘输入的字符串的B、该函数读取的字符串长度是受限制的

C、该函数读取字符串时,遇到终止符便停止D、该函数读取字符串时.,可以包含空格

本题考查的是文件流的输入输出。

函数getline(char_type*s,streamsizen,char_typedelim)的作用是从当前位置开始提取字符存入s

所指向的具有n各字节的字符空间。字符的提取与存储在遇到下列情况时停止:

(1)已提取并存储了n-1个字符;

(2)到流尾,无字符可提取;

(3)下一个要提取的字符等于结束标志delim。

故本题答案为B。

36.按"先进后出”原则组织数据的数据结构是。

标准答案为:栈考生答案为:栈

栈和队列都是一种特殊的操作受限的线性表,只允许在端点处进行插入和删除。二者的区别是:栈只

允许在表的•端进行插入或删除操作,是利“先进后出”的线性衣;而队列只允许在表的•端进行插入操

作,在另一端进行删除操作,是一种“先进先出”的线性表。

37.下列软件系统结构图

的宽度为。

标准答案为:3或三考生答案为:3

软件系统结构图的宽度:整体控制跨度(最大模块数的层)的表示。

38.的任务是诊断和改正程序中的错误。

标准答案为:程序调试或调试考生答案为:软件测试

程序调试的任务是诊断和改正程序中的错误。它与软件测试不同,软件测试是尽可能多地发现软件

中的错误。先要发现软件的错误,然后借助于一定的调试工具去找出软件错误的具体位置。软件测试贯穿

整个软件生命期,调试主要在开发阶段。

39.一个关系表的行称为o

标准答案为:元组或记录考生答案为:元组

设计数据库的目的实质上是设计出满足实际应用需求的实际关系模型;关系中的行称为元组,对应

存储文件中的记录,关系中的列称为属性,对应存储文件中的字段。

40.数据结构分为线性结构和非线性结构,带链的队列属于.

标准答案为:线性结构考生答案为:线性结构

与栈类似,队列也是线性表,也可以采用链式存储结构。

41.创建对象数组时,对数组的每一个元素都将调用一次构造函数,如果没有显式给出数组元素的初值,

则调用缺省构造函数。下列程序涉及到对象数组的创建和单个对象的创建,其输出结果是。

#include<iostream>

usingnamespacestd;

classFoo(

public:

Foo(intx){cout«*A*;}

Foo(){}

};

intmainO

(

Foof[3],g(3);

return0;

}

标准答案为:A考生答案为:AAAA

本题考查的是类的对象数组和成员对象。

从程序可以看出f[3]是类Foo的•个对象数组,因为f[3]没有显式的给定初值,所以系统自动调用缺省

构造函数Foo():在定义类Foo的对象g(3)时,执行相应的构造函数Foo(intx),输出字母A。

42.插入排序算法的主要思想是:每次从未排序序列中取出的一个数据,插入到一排序序列中的正确位置。

InsertSort类的成员函数sort。实现了插入排序算法。请将画线处缺失的部分补充完整。

classInsertSort{

public:

InsertSort(int*a0,intnO):a(a0),n(n0){}//参数aO是某数组首地址,n是数组元素个数

voidsort()

{〃此函数假设已排序序列初始化状态只包含a[0],未排序序列初始为…a[nT]

for(inti=l;i<n;++i){

intt=a[i];

intj;

for(;j>0;—j){

if(t>=a[j-l])break;

a[j]=a[j-l];}

protected:

int*a,n;〃指针a用于存放数组首地址,n用于存放数组元素个数

);

标准答案为:j=I考生答案为:j=iT

本题考查的是插入排序。

在Sort函数中,实现函数的插入排序算法,若队列中已有i个数,则向其中插入第i+1个数时,依次与

从下标为i-l到下标为。的数比较,如果后面的数小于前面的数,则交换这两个数,否则说明该数一排好序,

直接跳出内层循环,故此空应填产i。

43.如果不使用多态机制,那么通过基类的指针虽然可以指向派生类对象,但是只能访问从基类继承的成

员。下列程序没有使用多态机制,其输出结果是0

#include<iostream>

usingnamespacestd;

classBase{

public:

voidprint(){cout«,B1;}};

classDerived:publicBase(

public:

voidprint(){cout<<,D);}};

intmain()

(

Derived*pd=newDerived0;

Base*pb=pd;

pb->print();

pd->print();

deletepd;

return0;

)

标准答案为:BD考生答案为:BD

本题考查的是派生类。

派生类Derived由基类Base公有继承而来,是基类的子类型。调用pb->print();后,执行基类的函数

voidprint(),因为尽管pb的函数print()可以对类Base的公有派生类Derived的对象pd进行操作,但是只

能使用从基类Base中继承的成员;调用pd->print();后,执行派生类的函数voidprint。。

44.若有定义语句:int*a,b;,则变量b的数据类型是。

标准答案为:整型或int考生答案为:int

本题考查的是变量的定义。

int*a,b;把a定义为一个int类型的指针;把b定义为一个整型变量。

45.在声明派生类时,如果不显式地给出继承方式,缺省的类继承方式是私有继承private。己知有如下类

定义:

classeBase{

protected:

voidfun(){}

);

classDerived:Base{};

则Base类中的成员函数fun(),在Derived类中的访问权限是。(注意:要求填写private、protected

或public中的•项)。

标准答案为:private考生答案为:private

46.下列程序的输出结果是o

#include<iostream>

usingnamespacestd;

classA{

inta;

public:

A():a(9){}

virtualvoidprint()const{cout«a;};

);

classB:publicA{

charb;

public:

B(){b='S';}

voidprint()const{cout«b;}

);

voidshow(A&x)(x.print0;)

intmain()

{Adl,*p;

Bd2;

P=&d2;

dl.print();

d2.print0;

p->print();

show(dl);

show(d2);

return0;

}

标准答案为:9SS9S考生答案为:9SS9S

本题主要考查了缺省构造函数。

在dl、d2定义时分别调用它们的构造函数。调用dl.print。;后,执行类A的virtualvoidprint()

函数;调用d2.print。;后,执行派生类B的构造函数voidprint。;调用p-加函nt();后,执行执行派生类

B的构造函数voidprint。;调用show(dl);后,调用函数show(A&x),再调用类A的virtualvoidprint。

函数;调用show(d2);后,调用函数show(A&x),再调用派生类B的构造函数voidprint()。

47.已知递归函数f的定义如下:

intf(intn)

(

if(n<=l)return1;〃递归结束情况

elsereturnn*f(n-2);//递归}

则函数调用语句f(5)的返回值是o

标准答案为:15

考生答案为:120

本题主要考查了递归算法。

函数每次将f(n)的值转换成相应的关系式n*f(n-2),直到f(l)时为止。所以

f(5)=5*f(5-2)=5*3*f(1)=5*3*1=15。

48.已知数组a中的元素个数为n,下列语句的作用是将下标为i的元素移动到下标为iT的单元,其中

K=i<no例如,当n=4,a中原有的数据为1,2,3,4时,则移动后a中元素变为2,3,4,4。请将语句补充

完整:

for(int1=0;i<n-l;i++)a[i]=a[];

标准答案为:i+1或1+1考生答案为:i+1

本题考查循环的基本应用。

解题思路为:循环条件是i〈n-1,循环的结果是把将下标为i的元素移动到下标为i-1的单元,即

的值赋给a[i],所以答案是i+1。

49.己知下列程序的输出结果是42,请将画线处缺失的部分补充完整。

#include<iostream>

usingnamespacestd;

classFoo(

intvalue;

public:

Foo():value(0){)

voidsetValue(intvalue)

{=value;}〃给Foo的数据成员value赋值

voidprint(){cout<<value;}

};

intmain()

(

Foof;

f.setValue(42);

f.print();

return0;

}

标准答案为: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=(constMyClass&rhs)

(

if(this==&rhs)return*this;

value=rhs.value;

return*this;

)

标准答案为:MyClass&考生答案为:

本题考查的是运算符的重载。

一个类如果要重载运算符二,通常也就需要定义自己特有的拷贝构造函数。可以在类体中增加:(const

&operatorMyClass&rhs);然后在MyClass的类体外给出它的完整定义:

MyClass&MyClass::operator=(constMyClass&rhs)

因此在MyClass类的定义中缺少MyClass&语句。

2010年3月考试真题(第31次)

1.数据流程图(DFD图)是___。

A、软件概要设计的工具B、软件详细设计的工具

C、结构化方法的需求分析工具D、面向对象方法的需求分析工具

常见的需求分析方法有:结构化分析方法和面向对象的分析方法。结构化分析就是使用数据流图(DFD)、

数据字典(DD)、结构化英语、判定衣和判定树等工具,来建立一种新的、称为结构化规格说明的目标文

档。故本题答案为C。

2.软件(程序)调试的任务是___。

A、诊断和改正程序中的错误B、尽可能多地发现程序中的错误

C、发现并改正程序中的所有错误D、确定程序中错误的性质

程序调试的任务是诊断和改正程序中的错误。它与软件测试不同,软件测试是尽可能多地发现软件中的错

误。先要发现软件的错误,然后借助于•定的调试工具去执行找出软件错误的具体位置。软件测试贯穿整

个软件生命期,调试主要在开发阶段。故本题答案为A。

3.软件按功能可以分为:应用软件、系统软件和支撑软件(或工具软件)。下面属于系统软件的是。

A、编辑软件B、操作系统C、教务管理系统D、浏览器

软件按功能可以分为:应用软件、系统软件、支撑软件(或工具软件)。应用软件是为解决特定领域的应

用而开发的软件。例如,事务处理软件,工程与科学计算软件,实时处理软件,嵌入式软件,人工智能软

件等应用性质不同的各种软件。系统软件是计算机管理自身资源,提高计算机使用效率并为计算机用户提

供各种服务的软件。如操作系统,编译程序,汇编程序,网络软件,数据库管理系统等,所以选项B属于系

统软件。故本题答案为B。

4.软件生命周期可分为定义阶段,开发阶段和维护阶段。详细设计属于。

A、定义阶段B、开发阶段C、维护阶段D、上述三个阶段

软件生命周期可分为软件定义、软件开发及软件运行维护三个阶段。软件开发阶段包括概要设计、详细设

计、实现和测试四个活动阶段。故本题答案为B。

5.下列叙述中正确的是___。

A、对长度为n的有序链表进行查找,最坏情况F需要的比较次数为n

B、对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(n/2)

C、对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为Ooga11)

D、对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为Slogan)

对于长度为n的有序线性表,在最坏情况卜.,二分杳找只需要比较10g2n次,而顺序查找需要比较n次。二

分法查找只适用于顺序存储的有序表,如果采用链式存储结构,也只能用顺序查找,所以选项A是正确的。

故本题答案为A。

6.有两个关系R和‘『如下:

RT

ABCABC

a12c32

b22d32

c32

d32

则由关系R得到关系T的操作是。

A、选择B、投影C、交D、并

从关系中找出满足给定条件的元组的操作称为选择。选择是从行的角度进行的运算,即从水平方向抽取记

录。由图可知关系R通过运算得到关系T,关系T与关系R相比,属性的个数没有发生变化,记录的条数发生

了变化。因此所使用的运算应该是选择。故本题答案为A。

7.算法的时间复杂度是指___。

A、算法的执行时间B、算法所处理的数据量C、算法程序中的语句或指令条数

D、算法在执行过程中所需要的基本运算次数

所谓算法的时间复杂度,是指执行算法所需要的计算工作量。为了能够比较客观地反映出一个算法的效率,

在度量•个算法的工作量时,不仅应该与所使用的计算机、程序设计语言以及程序编制者无关,而且还应

该与算法实现过程中的许多细节无关。为此,可以用算法在执行过程中所需基本运算的执行次数来度量算

法的工作量。故本题答案为I)。

8.数据库设计中,用E-R图来描述信息结构但不涉及信息在计算机中的表示,它属于数据库设计的。

A、需求分析阶段B、逻辑设计阶段C、概念设计阶段D、物理设计阶段

E-R图是E-R模型的一种非常直观的图的形式表示,它描述信息结构但不涉及信息在计算机中的表示,它是

数据库概念设计阶段的工具。故本题答案为C。

9.在学生管理的关系数据库中,存取一个学生信息的数据单位是o

A、文件B、数据库C、字段D、记录

实体是概念世界中的基本单位,属性附属于实体,它本身并不构成独立单位。属性有属性域,每个实体可

取属性域内的值。•个实体的所有属性取值组成了个值集叫元组(或称记录)。在概念世界中,可以用

元组表示实体,也可用它区别不同的实体。所以在学生管理的关系数据库中,存取一个学生信息的数据单

位是元组(或记录)。故本题答案为D。

10.数据库管理系统中负责数据模式定义的语言是。

A、数据定义语言B、数据管理语言C、数据操纵语言D、数据控制语言

数据定义语言(DDL):该语言负责数据的模式定义与数据的物理存取构建。

数据操纵语言(DML):该语言负责数据的操纵,包括查询及增、删、改等操作。

数据控制语言(DCL):该语言负责数据完整性、安全性的定义与检查以及并发控制、故障恢复等功能。

故本题答案为A。

11.有如下两个类定义

classXX{

private:

doublexl;

protected:

doublex2;

public:

doublex3;

};

classYY:protectedXX{

private:

doubleyl;

protected:

doubley2;

public:

doubley3;

};

在类YY中保护成员变量的个数是o

A、1B、2C、3D、4

本题主要考查了类的继承与派生。

类的继承方式有三种:公有(public)继承、保护(protected)继承和私有(private)继承。当派

生类从基类保护继承时.,基类的公有成员和保护成员在派生类中都为保护成员。本题派生类YY从基类XX保

护继承,因此基类XX的公有成员x3和保护成员x2都成为派生类YY的保护成员,再加上派生类YY自身的保护

成员y2,因此类YY中有3个保护成员。故本题答案为C。

12.在C++中,cin是一个o

A、类B、对象C、模板D、函数

本题主要考查了I/O流。

在C++中,数据的输入与输出是通过I/O流来实现,cin和cout是预定义的流类对象。

故本题答案为B。

13.若x和y是程序中的两个整型变量,则下列if语句中正确的是。

A、if(x-0)y=l;elsey=2;if(x==0)theny=lelsey=2;

C、if(x==0)y=lelsey=2;D、ifx==0y=l;elsey=2;

本题主要考查了if语句。

if语句的语法形式为:

if(表达式)语句1

else语句2

在C++中,if语句中没有then,语句最后必须有一个分号,因此选项A正确,选项B和选项C错误;在选

项D中,表达式x==0应该用圆括号括起来,因此选项D错误。故本题答案为A。

14.将运算符〃+〃重载为非成员函数,下列原型声明中,错误的是o

A、MyClockoperator+(MyClock,long);B、MyClockoperator+(MyClock,MyClock);

C、MyClockoperator+(long,long);D、MyClockoperator+(long,MyClock);

本题主:要考查了运算符的重载。

运算符的重载是针对新类型数据的实际需要,对原有运算符进行适当的改造。一般来讲,重载的功能

应当与原有功能类似,不能改变原运算符的操作对象个数,同时至少要有•个操作对象是自定义类型。选

项A、选项B和选项D的两个参数中至少有一个参数是白定义类型,因此选项A、选项B和选项D正确。选项C

中两个参数都是基本数据类型,没有自定义类型,因此选项C错误。故本题答案是C。

15.要定义整型数组x,使之包括初值为0的三个元素,下列语句中错误的是。

A、intx[3]={0,0,0};B、intx[]={0};C、staticintx[3]={0};D、intx[]={0,0,0};

本题主要考查了一维数组的定义与初始化。

・维数组的定义形式为:

数据类型数组名[数组元素个数];

数组的初始化就是在声明数组时给部分或全部元素赋初值。选项A定义了有三个元素的整型数组x,并

初始化三个元素的值为0,因此选项A正确;当声明数组时没有给出数组元素个数,但是有初始化列表,数

组元素个数由列表中元素个数来确定,因此选项D

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论