二级C++笔试373-真题(含答案与解析)-交互_第1页
二级C++笔试373-真题(含答案与解析)-交互_第2页
二级C++笔试373-真题(含答案与解析)-交互_第3页
二级C++笔试373-真题(含答案与解析)-交互_第4页
二级C++笔试373-真题(含答案与解析)-交互_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

二级C++笔试373(总分94,做题时间90分钟)一、选择题1.

有如下程序:

#include<iostream.h>

usingnamespacestd;

class

Base

{

protected:

inti:

public:

intj;

};

class

Derived:publicBase

{

intm:

public:

int

n;

}

intmain()

{

Derivedd:

d.i=0;

//[1]

d.J=0;

//[2]

d.m=0;

//[3]

d.n=0:

//[4]

return0;

}

其中主函数中有两个赋值语句有错,这两个错误的赋值语句是A

[1]和[2]B

[1]和[3]C

[2]和[3]D

[2]和[4]

分值:2答案:B[解析]本题考核类和派生类的访问权限。类Derived共有继承Base,那么d对基类Base成员变量的访问权限不变,由于数据成员i为保护的,不能通过对象访问。派生类Derived中变量m为私有的,同样不能通过对象访问,所以错误的赋值语句为[1]和[3]。2.

函数定义为Fun(int&i),变量定义n=100,则下面调用正确的是A

Fun(20)B

Fun(20+;C

Fun(;D

Fun(&;

分值:2答案:C[解析]本题考核函数的调用。当函数的参数是引用类型时,参数不能是常量、表达式和变量地址,只能是变量本身。3.

C++流中重载的运算符>>是一个A

用于输出操作的非成员函数B

用于输入操作的非成员函数C

用于输出操作的成员函数D

用于输入操作的成员函数

分值:2答案:B[解析]本题考核运算符重载。C++中重载输入流运算符>>和输出流运算符<<只能作为非类成员函数重载,且必须使用如下原形:

istream&operator>>(istream&,<类名>&);

ostream&operator<<(ostream&,<类名>);4.

已知类Myst有一个只需要一个double型参数的构造函数,且将运算符“-”重载为友元函数。要使语句序列

Mystx{3.2),y(5.5),z(0.0);

z=8.9-y;

y=x-6.3;

能够正常运行,运算符函数operator-应该在类中声明为,A

friendMystoperator-(Myst&,Myst&);B

friendMystoperator-(Myst,Mys;C

friendMystoperator-(Myst,Myst&);D

friendMystoperator-(Myst&,Mys;

分值:2答案:B[解析]本题考核运算符的重载。题中将运算符“-”重载为友元函数,其声明格式如B选项所描述的。5.

有以下程序

#include<iostream>

usingnamespace

std;

classComplex

{

public:

Complex(double

r=0,double

i=0:re(r)

,im(i){}

double

real()

const{return

re;}

double

imag()

const{

return

im;}

Complex

operator

+

(Complex

c}

const

{return

Complex(re+c.re,im+c.im);}

privane:

doublere,im;

};

intmain

{

Complex

a=Complex(1,1)+Complex(5);

cout<<a.real()<<'+'<<a.imag()<<'i'<<endl

return0;

}

程序执行后的输出结果是A

6+6iB

6+1iC

1+6iD

1+1i

分值:2答案:B[解析]本题考核类与对象、运算符重载。运算符“+”在类Complex中作为成员函数重载,实现两个对象的数据成员的相加。所以main函数中语句“Complex

a

=Complex(1,1)+Complex(5);”的作用相当于“Complexa(1+5,1);”即对象a的数据成员re的值为6,imag的值为1,所以输出为6+1i。6.

下列关于栈的叙述正确的是A

在栈中只能插入数据B

在栈中只能删除数据C

栈是先进先出的线性表D

栈是先进后出的线性表

分值:2答案:D[解析]栈是一种特殊的线性表,其插入与删除运算都只在线性表的一端进行。在这种线性表的结构中,一端封闭;不允许插入与删除元素;另一端开口,允许插入与删除元素。

在栈中不仅能插入数据,也能删除数据,选项A与B都错。栈是后进先出的线性表,而不是先进先出的线性表,选项C的说法错误,选项D正确。7.

要定义一个具有5个元素的一维数组vect,并使其各元素的初值依次是30,50,-88,0和0,则下列定义语句中错误的是A

intvect[]={30,50,-88};B

intvect[]={30,50,-88,0,0};C

intveer[5]={30,50,-88};D

intvect[5]={30,50,-88,0,0};

分值:2答案:A[解析]本题考核一维数组在定义时的初始化。当数组声明时没有给出数组的大小,但是有初始化列表时,数组的大小就由列表中元素的个数来确定,

由此可知A)选项中数组vect只有3个元素,与题目要求不符。8.

有以下程序:

#include<iostream>

usingnamespace

std;

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(1)0,s2(5),s3;

s3.add(s1,s2);

s3.disp();

return

0;

}

程序运行后,输出的结果是A

n=10B

n=5C

n=20D

n=15

分值:2答案:D[解析]本题考核this指针的使用。类成员函数add中通过this指针实现私有数据成员n的赋值。9.

设有a、b、c、d、m、n均为血型变量,且a=5、b=6、c=7、d=8、m=2、n=2,则逻辑表达式(m=a>B)&&(n=c>D)运算后,n的值为A

0B

1C

2D

3

分值:2答案:C[解析]在&&运算中,如果第1个表达式的值为假时,第2个表达式将不再计算。在表达式中第1个表达式m=a>b的值为0,也就是假,所以第2个表达式的将不再计算。所以n的值没有变。10.

下面不属于软件设计原则的是A

抽象B

模块化C

自底向上D

信息隐蔽

分值:2答案:C[解析]软件设计遵循软件王程的基本目标和原则,建立了适用于在软件设计中应该遵循的基本原理和与软件设计有关的概念。它们是:抽象、模块化、信息隐蔽、模块独立性。没有自底向上,所以,本题的正确答案是C。11.

下列关于类和对象的叙述中,错误的是A

一个类只能有一个对象B

对象是类的具体实例C

类是对某一类对象的抽象D

类和对象的关系是一种数据类型与变量的关系

分值:2答案:A[解析]本题考核类和对象的概念.类是用户定义的一种类型,程序员可以使用这个类型来说明多个变量,即对象。12.

在C++中用来实现运行时多态性的是A

重载函数B

析构函数C

构造函数D

虚函数

分值:2答案:D[解析]本题考核虚函数。在C++语言中,多态性可分为两类:编译时的多态性和运行时的多态性。编译时的多态性是通过函数重载和模板体现。其实现机制称为静态联编(也译为静态绑定),即在编译阶段决定执行哪个同名的被调用函数;运行时的多态性是通过体现的,其实现机制称为动态联编(也译为动态绑定),印在编译阶段不能决定执行哪个同名的被调用函数,只在执行阶段才能依据要处理的对象类型来决定执行哪个类的成员函数。用来实现运行时多态性的是虚函数。13.

在深度为5的满二叉树中,叶子结点的个数为A

31B

32C

16D

15

分值:2答案:C[解析]二叉树的一个性质是,在二叉树的第k层上,最多有2k-1(k≥1)个结点.对于满二叉树,每一层上的结点数都达到最大值,即在满二叉树的第k层上有2k-1个结点。所以,在深度为5的满二叉树中,所有叶子结点在第5层上,即其结点数为2k-1=25-1=16。14.

下列程序的输出结果是

#include<iostream>

using

namespace

std;

intmain()

{

char

a[]

=

"Hello,World":

char*ptr=

a;

while(*ptr)

{

if(*ptr>='a'&&*ptr

<='z'

cout<<char{*ptr+'A'-'a');

elsecout<<*ptr;

ptr++;

}

return0;

}A

HELLWORLDB

Hello,WorldC

hELLO,wORLDD

hello,world

分值:2答案:A[解析]本题考核while语句和if语句,while语句中if语句的作用是将小写字母变成大写字母输出、所以main函数的字符串通过while语句全部输出为大写字母。15.

有以下类定义

class

Point{

public:

Point{intx=0,int

y=0){_x=x;_y=y;}

voidMoveintxoff,intyoff)

{_x+=xoff;_y+=yoff;}

voidPrint()

const

{cout<<'('<<_x<<','<<_y<<')'<<end1;}

private:

int_x,_y;

};

下列语句中会发生编译错误的是A

Pointpt;pPrint();B

constPointpt;pPrint();C

Pointpt;pMove(1,2);D

constPointpt;pMove(1,2)

分值:2答案:D[解析]本题考核常对象、常数据成员与常成员函数。如果将二个对象说明为常对象,则通过该常对象只能调用它的常成员函数,不能调用其他的成员函数,D选项中对象pt为常对象,而成员函数Move()不是常成员函数,所以这样调用会发生编译错误。16.

若执行语句:cout<<setfill('*')<<setw(10)<<123<<"OK"<<end1后将输出A

*******123OKB

123********OKC

*******123********OKD

123*******OK********

分值:2答案:A[解析]本题考核格式控制数据的输入输出。函数setfill(charc)用于设置填充字符,在输出数据时,如果数据宽度小于设置的宽度,则空闲位置要用填充字符填满。函数setw(intn)用于设置输入输出宽度,宽度设置的效果只对一次输入或输出有效,在完成一次数据的输出或输入后,宽度设置自动恢复为0,例如题中语句以宽度10输出数据“123”后,字符串“OK”的输出宽度就自动恢复为0了。而且输出的初始状态为右对齐,所以最终的输出为*******123OK。17.

下列模式中,能够给出数据库物理存储结构与物理存取方法的是A

内模式B

外模式C

概念模式D

逻辑模式

分值:2答案:A[解析]能够给出数据库物理存储结构与物理存取方法的是内模式。外模式是用户的数据视图,也就是用户所见到的数据模式。概念模式是数据库系统中全局数据逻辑结构的描述,是全体用户公共数据视图。没有逻辑模式这一说法。正确答案为A。18.

C++语言中while循环和do-while循环的主要区别是A

do-while的循环体至少无条件执行一次B

while的循环控制条件比do-while的循环控制条件严格C

do-while允许从外部转到循环体内D

do-while的循环体不能是复合语句

分值:2答案:A[解析]本题考核C++语言中while循环和do-while循环之间的区别。do-while语句与while语句不同的是,do-while循环中的<语句>至少会执行一次,而while语句中当条件在第一次循环就不满足时,语句一次也不会执行。19.

数据库设计的根本目标是要解决A

数据共享问题B

数据安全问题C

大量数据存储问题D

简化数据维护

分值:2答案:A[解析]本题考核数据库技术的根本目标,很简单,记忆性题目。数据库技术的根本目标就是要解决数据的共享问题,选项A正确。20.

下列对于软件测试的描述中正确的是A

软件测试的目的是证明程序是否正确B

软件测试的目的是使程序运行结果正确C

软件测试的目的是尽可能多地发现程序中的错误D

软件测试的目的是使程序符合结构化原则

分值:2答案:C[解析]软件测试的目标是在精心控制的环境下执行程序,以发现程序中的错误,给出程序可靠性的鉴定。测试不是为了证明程序是正确的,而是在设想程序有错误的前提下进行的,其目的是设法暴露程序中的错误和缺陷。可见选项c的说法正确。21.

算法的空间复杂度是指A

算法程序的长度B

算法程序中的指令条数C

算法程序所占的存储空间D

算法执行过程中所需要的存储空间

分值:2答案:D[解析]算法的空间复杂度指执行这个算法所需要的内存空间。一个算法所占用的存储空间包括算法程序所占的空间、输入的初始数据所占的存储空间以及算法执行过程中所需要的额外空间。正确答案为D。22.

下面描述中,符合结构化程序设计风格的是A

使用顺序、选择和重复(循环)三种基本控制结构表示程序的控制逻辑B

模块只有一个入口,可以有多个出口C

注重提高程序的执行效率D

不使用goto语句

分值:2答案:A[解析]应该选择只有一个入口和一个出口的模块,故B选项错误;首先要保证程序正确,然后才要求提高效率,故c选项错误;严格控制使用goto语句,必要时可以使用,故D选项错误。23.

下列关于new运算符的描述中错误的是A

使用运算符new创建对象数组时必须定义初始值B

使用运算符new创建对象时,会调用类的构造函数C

运算符new可以用来动态创建对象和对象数组D

使用new运算符创建的对象可以使用运算符delete删除

分值:2答案:A[解析]本题考核运算符Dew。先来7解运算符new:运算符new返回指定类型的一个指针,如果分配失败(如没有足够的内存空间),则返回0。它与delete运算符一起使用,以达到直接进行动态内存分配和释放的目的。对于A选项,使用运算符Flew创建对柬数组时只能指定分配内存的大小,不能为该数组指定初始值,其初始值为缺省值,因此类中必须定义缺省构造函数。所以A选项的描述是错误的。B、C和D选项的描述都是正确的。24.

下列叙述中正确的是A

数据库系统是一个独立的系统,不需要操作系统的支持B

数据库设计是指设计数据库管理系统C

数据库技术的根本目标是要解决数据共享的问题D

数据库系统中,数据的物理结构必须与逻辑结构一致

分值:2答案:C[解析]A选项,数据库系统需要操作系统的支持,必不可少,故其叙述不正确。B选项错误,数据库设计是指设计一个能满足用户要求,性能良好的数据库。D选项也不对,数据库应该具有物理独立性和逻辑独立性,改变其一而不影响另一个。正确答案为C。25.

有以下程序

#include<iostream>

inti=0;

voidfun()

{

{

staticinti=1;

std::cout<<i++<<',';

}

std::cout<<i<<',';

}

intmain()

{

fun();fun();

return0;

}

程序执行后的输出结果是A

1,2,1,2,B

1,2,2,3,C

2,0,3,0,D

1,0,2,0,

分值:2答案:D[解析]本题考核变量的作用域、生存周期和存储类别(自动、静态、存储器、外部)。题中即定义全局变量i,又在函数fun内部定义了局部静态变量i,

当进入函数fun里面的大括号时,局部静态变量i有效,所以输出1,然后局部静态变量i加1,出了里面的大括号后,全局变量i有效,所以输出0。同理,第二次调用fun后,输出2和0。26.

有如下函数模板定义:

template<typenameT1,typenameT2typenameT3>

T2plus(T1t1,T3t3){returnt1+t3;}

则以下调用中正确是A

plus(3,5;B

plus<>(3,5;C

plus<int>(3,5;D

plus<int,double>(3,5;

分值:2答案:D[解析]本题考核函数模板的使用。C++中对函数模板的调用有时候只使用了函数实参,而没有使用模板实参,模板实参都被省略了,但模板实参的省略并不是必然的,而是有条件。模板实参不能省略的情况有:从模板函数实参表获得的信息有矛盾;需要获得特定类型的返回值,而不管参数的类型如何;虚拟类型参数没有出现在模板函数的形参中;函数模板含有常规形参。题中定义的函数模板中虚拟类型参数T2没有出现在模板函数的形参列表中,所以在调用时不能省略,D选项的调用省略了T3,这是允许的。27.

下列对派生类的描述中,错误的是A

一个派生类可以作为另一个派生类的基类B

派生类至少有一个基类C

派生类的成员除了它自己的成员外,还包含了它的基类的成员D

派生类中继承的基类成员的访问权限到派生类中保持不变

分值:2答案:D[解析]本题考核继承与派生。基类与派生类的关系为:基类是对派生类的抽象,派生类是对基类的具体化。基类抽取了它的派生类的公共特征,而派生类通过增加信息将抽象的基类变为某种有用的类型,派生类是基类定义的延续。派生类是基类的组合。公有派生类的对象可以作为基类的对象处理。由此可知A、B和C选项都是正确的。而在继承中,采用不同的继承方式,将限制派生类对基类成员的访问。所以D选项是错误的。28.

有以下程序

#include<iostream>

using

namespace

std;

staticintdays[]={31,28.31,30,31,30,31,31,30,31,30,31};

class

date

{

private:

intmonth,

day,

year:

public:

date(intm,intd,int

y

{

month

=

m;

day=d;

year=y;

}

date{}

{}

voiddisp{)

{

cout<<year<<"-"<<month<<"-"<<day<<end1;

}

date

operator+(int

day)

{

datedt=*this:

day+=dt.day;

while

{day>

days[dt.month-1])

{

day-=tays[dt.month-1];

if

(++dt.month==13

{

dt.month=1;

dt.yeare++;

}

}

dr.day=day;

returndt;

}

};

intmain()

{

dated1(6,20,2004),

d2;

d2.=d1+20;

d2.disp();

return

0;

}

执行后的输出结果是A

2004-7-10B

2004-6-20C

2004-7-20D

程序编译时出错

分值:2答案:A[解析]本题考核运算符的重载。本题通过将“+”运算符重载为类date的成员函数实现简单的对象加法。29.

有如下函数模板定义:

template<classT>

Tfunc(Tx,Ty){returnx*x*y*y;)

在下列对func的调用中,错误的是A

func(3,5);B

func(3.0,5.5);C

func(3,5.5);D

func<int>(3,5.5);

分值:2答案:C[解析]本题考核函数模板的使用。引用模板函数和引用一般的函数在语法形式上没有任何区别。所有的类型替换都是编译器在幕后悄悄进行的,但是要注意的是说明一个函数模板后,当编译系统发现有一个对应的函数调用时,将根据实参中的类型来确认是否匹配函数模板中对应的形参。例如,本题中的C)选项,编译系统从第一个参数“3”获得的信息是“T对应于int”,而从第二个参数“5.5”处获得的信息是“T对应于double”,二者相互矛盾,在编译时会产生错误。对于D)选项中紧跟在函数名后的<int>就是模板实参表,通过它通知编译系统在调用过程中,double型的参数“5.5”将被自动换成int型。30.

关于面向对象的程序设计方法,下列说法正确的是A

“封装性”指的是将不同类型的相关数据组合在一起,作为一个整体进行处理B

“多态性”指的是对象的状态会根据运行时要求自动变化C

基类的私有成员在派生类的对象中不可访问,也不占内存空间D

在面向对象的程序设计中,结构化程序设计方法仍有着重要作用

分值:2答案:D[解析]本题考核C++程序的基本框架。“封装性”指将数据和算法捆绑成一个整体,而不是将不同类型的相关数据组合在一起C++中的多态性是指一个面向对象的系统常常要求一组具有相同基本语义的方法能在同一接口下为不同的对象服务。基类的私有成员在派生类的对象中不可访问,但是也占据内存空间。C++同时支持结构化和面向对象两种程序设计的基本框架,所以在面向对象的程序设计中,结构化程序设计方法仍有着重要作用。31.

在进行任何C++流的操作后,都可以用C++流的有关成员函数检测流的状态;其中只能用于检测输入流状态的操作函数名称是A

failB

eofC

badD

good

分值:2答案:B[解析]本题考核C++流的文件操作。C++中可以用文件流对象的下列成员函数来判别文件流的当前状态。函数is_open():判定流对象是否与一个打开的文件相联系,若是,返回true,否则返回false;函数good():刚进行的操作成功时返回true,否则返回false。函数fail():与good()相反,刚进行的操作失败时返回true,否则返回false.函数bad():如果进行7非法操作返回true,否则返回false.函数eof():进行输入操作时,若到达文件尾返回true,否则返回false。其中,eof函数只能用于输入流操作。32.

派生类的构造函数的成员初始化列表中,不能包含A

基类的构造函数B

派生类中子对象的初始化C

基类的子对象初始化D

派生类中一般数据成员的初始化

分值:2答案:C[解析]本题考核构造函数。在C++中,构造函数不能被继承,因此,派生类的构造函数必须通过调用基类的构造函数来初始化基类子对象。所以,在定义派生类的构造函数时,除了对自己的数据成员进行初始化外,还必须负责调用基类构造函数使基类的数据成员得以初始化。如果派生类中还有子对象,还应包含对子对象初始化的构造函数.但是它不负责基类中子对象的初始化。33.

执行语句序列

intn:

cin>>n:

switch(n)

{

case1:

case2:cout<<'1';

case3:

case4:cout<<'2':

break;

default:cout<<'3':

}时,若键盘输入1,则屏幕显示A

1B

2C

3D

12

分值:2答案:D[解析]本题考核C++语句中的switch语句.switch语句也称为开关语句,用于有多重选择的场合,测试某一个变量具有多个值时所执行的动作。switch语句中每个case语句只是一个入口标号,并不能确定执行的终点,因此,每个case分支的最后应该加break语句,用来结束这个switch结构,否则,会从入口点开始,一直执行到switch结构的结束点。若键盘输入1,n的值被赋为1,进入第一个分支,没有break跳出,然后进入第二个分支,执行“coot<<'1';”输出1,然后进入第3、4个分支,执行“cout<<'2';”,然后执行break,跳出switch语句.所以最后输出为12。34.

定义如下枚举类型:enum{Monday,Tuesday,Wednesday,Thrusday,Friday=2};则下列语句正确的是A

表达式Wednesday==Friday的值是trueB

Dayday;day=3;C

Dayday;day=Monday+3;D

Dayday;day=Tuesday+10;

分值:2答案:A[解析]本题考查枚举类型的定义和使用。枚举类型定义了一些整型符号常量的集合,使用枚举类型时应该注意以下几点:枚举类型的第一个常量默认值是0;枚举类型常量的值允许彼此相同;虽然枚举类型常量是整数类型,但是不允许使用整数直接赋值给枚举类型变量,也不允许与整数进行运算,只可以与整数进行比较。根据以上知识我们可以得出B、C、D选项都不正确。35.

下面概念中,不属于面向对象方法的是A

对象B

继承C

类D

过程调用

分值:2答案:D[解析]A,B,C属于面向对象方法,D属于面向过程方法,故答案为D。二、填空题1.

数据管理技术发展过程经过人工管理、文件系统和数据库系统三个阶段,其中数据独立性最高的阶段是______。

分值:2答案:数据库系统或数据库系统阶段或数据库或数据库阶段或数据库管理技术阶段[解析]在数据库系统管理阶段,数据是结构化的,是面向系统的,数据的冗余度小,从而节省了数据的存储空间,也减少了对数据的存取时间,提高了访问效率,避免了数据的不一致性,同时提高了数据的可扩充性和数据应用的灵活性;数据具有独立性,通过系统提供的映像功能,使数据具有两方面的独立性:一是物理独立性,二是逻辑独立性:保证了数据的完整性、安全性和并发性。综上所述,数据独立性最高的阶段是数据库系统管理阶段。2.

在面向对象方法中,允许作用于某个对象上的操作称为______。

分值:2答案:方法[解析]在面向对象方法中,方法是指允许作用于某个对象上的各种操作。允许作用于某个对象上的操作称为方法。3.

若按功能划分,软件测试的方法通常分为白盒测试方法和______测试方法。

分值:2答案:黑盒或黑箱[解析]软件测试的方法分为白箱测试方法和黑箱测试方法。白箱测试是根据对程序内部逻辑结构的分析来选取测试用例,白箱测试用例的设计准则有:语句覆盖、分支覆盖、条件覆盖和组合条件覆盖;黑箱测试方法完全不考虑程序的内部结构和内部特征,而只是根据程序功能导出测试用例。常用的黑箱测试有等价分类法、边值分析法、因果图法和错误推测法。4.

在数据库的概念结构设计中,常用的描述工具是______。

分值:2答案:E-R图[解析]E-R图是设计概念模型的有力工具。5.

数据结构分为逻辑结构和存储结构,循环队列属于______结构。

分值:2答案:存储或物理或存储结构或物理结构[解析]数据的逻辑结构在计算机存储空间中的存放形式称为数据的存储结构(也称数据的物理结构)。所谓循环队列,就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,供队列循环使用。可知,循环队列应当是物理结构。6.

下列函数的功能是判断字符串str是否对称,对称则返回true,否则返回false。请在横线处填上适当内容,实现该函数。

bool

fun(char

*str)

{

inti=0,j=0;

while(str[j])______;

for(j--;i<j&&str[i]==str[j];i++,j--);

returni______j;

}

分值:2答案:j++;i>=j[解析]本题考核while循环语句和for循环语句。题中函数的功能是判断字符串str是否对称,while循环语句的作用是将j移到字符串str的末尾那么当字符str[j]不等于'\0'时,j应该加1。当str对称时,for循环结束的条件应该是i>=j,所以最后的空格处应填入i>=j。7.

若有如下程序段:

#include<iostream>

usingnamespacestd;

intmain()

{

char

*p="abcdefgh",*r;

long

*q;

q=(long*)p;q++;

r=(char

*)q;

cout<<r<<end1;

return0;

}

该程序的输出结果是______。

分值:2答案:efgh[解析]本题定义了一个字符型指针变量p,并通过赋初值让它指向了一个字符串,还定义了另一个字符型指针变量r和一个长整型指针变量q。首先通过语句“a=(long*)p;”,把p的地址值强制转换为长整型地址值并赋值给小然后执行“q++”,地址值增加了4,执行语句“r=(char*)q;”,把长整型指针变量q的值再强制转换成字符型地址值并赋给r,r的值应为字符串中字符“e”的地址。最后输出r指向的字符串。8.

在下面程序的横线处填上适当的内容,使程序执行后的输出结果为1/2005。

#include

<iostream.h>

usingnamespacestd:

classDate

public:

Date

(intm=1,int

y=0):month(m.year(y}{}

void

Print(){cout<<month<<"/"<<year<<end1;}

______operator+(constDate&

d1,const

Date&d2;

private:

intmonthyear;

};

______operaror+(constDate&d1,constDate&

d2)

int

year,month;

year=d1.year+d2.year;

month=d1.month+d2.month;

year+=(month-1)/12;

month=(month-1)%12+l;

return

Date{month,year}:

}

voidmain()

{

Dated1(3,2004),d2,d3(10);

d2=d3+d1;

d2.Print();

}

分值:2答案:friendDate;

Date[解析]本题考核类与对象、运算符的重载。题中运算“+”重载函数中的参数表中有两个参数,所以是作为友元函数重载(因为“+”是一个二元运算符,作为成员函数重载时参数表中只有一个参数,对应于第二个参数,而第一个操作数就是对象本身,仅以this指针的形式隐藏在参数表中),实现的功能是将参数对象中的成员变量month、year的进行对应相加,实现年月的相加-题中运算符重载函数的返回值的类型是类Date,所以第一个空格处填入"friendDate"。第二个空格处完善运算符重载函数的定义,缺少的是函数返回值的类型“Date”9.

在下面程序的横线处填上适当的内容,使程序执行后的输出结果为ABCD。

#include<iostream.h>

using

namespacestd;

classA

{

public:

A()

{cout<<'A';

};

classB:______

{

public:

B()

{cout<<'B';}

};

classC:______

{

public:

C(}

cout<<'C';}

};

classD:publicB,

publicC

{

pu

温馨提示

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

评论

0/150

提交评论