自学考试C++程序设计真题汇总(08年-11年)

更新时间:2024-04-08 01:21:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

全国2011年1月自学考试C++程序设计试题答案

课程代码:04737

一、单项选择题(本大题共20小题,每小题1分,共20分) 1.对C++语言和C语言的兼容性,描述正确的是( A ) A.C++兼容C

B.C++部分兼容C C.C++不兼容C D.C兼容C++

2.在C++中使用流进行输入输出,其中用于屏幕输出的对象是( C )

A.cerr B.cin C.cout D.cfile (cerr:标准错误输出(非缓冲方式);cin:标准输入;clog 标准错误输出(缓冲方式))

3.对使用关键字new所开辟的动态存储空间,释放时必须使用( C ) A.free B.create C.delete D.realse

4.如没有使用private关键字定义类的数据成员,则默认为( A ) A.private

B.public C.protected D.friend

5.使用值传递方式将实参传给形参,下列说法正确的是( A ) A.形参是实参的备份 B.实参是形参的备份 C.形参和实参是同一对象 D.形参和实参无联系

6.在函数调用时,如某一默认参数要指明一个特定值,则有( A ) A.其之前所有参数都必须赋值 B.其之后所有参数都必须赋值 C.其前、后所有参数都必须赋值

D.其前、后所有参数都不必赋值

7.设存在函数int max(int,int)返回两参数中较大值,若求22,59,70三者中最大值,下列表达式不正确的是( C )

A.int m = max(22,max(59,70)); B.int m = max(max(22,59),70); C.int m = max(22,59,70); D.int m = max(59,max(22,70)); 8.下列哪个类型函数不适合声明为内联函数( A ) A.函数体语句较多

B.函数体语句较少

C.函数执行时间较短 D.函数执行时间过长

9.int Func(int,int);不可与下列哪个函数构成重载( B ) A.int Func(int,int,int); B.double Func(int,int); C.double Func(double,double);

D.double Func(int,double);

说明:不能以形参名来区分函数;不能以函数返回值来区分函数。必须是形参的个数或者类型不同才能构成函数重载。

10.对类中声明的变量,下列描述中正确的是( C ) A.属于全局变量 B.只属于该类

C.属于该类,某些情况下也可被该类不同实例所共享 D.任何情况下都可被该类所有实例共享 11.类的私有成员可在何处访问( D ) A.通过子类的对象访问

B.本类及子类的成员函数中

C.通过该类对象访问 D.本类的成员函数中

12.如果没有为一个类定义任何构造函数的情况下,下列描述正确的是( A )

1

A.编译器总是自动创建一个不带参数的构造函数 B.这个类没有构造函数 C.这个类不需要构造函数 D.该类不能通过编译

13.一个类可包含析构函数的个数是( B ) A.0个 B.1个

C.至少一个 D.0个或多个

14.this指针存在的目的是( B ) A.保证基类公有成员在子类中可以被访问

B.保证每个对象拥有自己的数据成员,但共享处理这些数据成员的代码 C.保证基类保护成员在子类中可以被访问 D.保证基类私有成员在子类中可以被访问 15.下列关于类的权限的描述错误的是( A ) A.类本身的成员函数只能访问自身的私有成员 B.类的对象只能访问该类的公有成员

C.普通函数不能直接访问类的公有成员,必须通过对象访问 D.一个类可以将另一个类的对象作为成员

16.在编译指令中,宏定义使用哪个指令( B ) A.#include B.#define C.#if D.#else

17.设类A将其它类对象作为成员,则建立A类对象时,下列描述正确的是( B ) A.A类构造函数先执行

B.成员构造函数先执行

C.两者并行执行 D.不能确定

类的组合,描述的是一个类内嵌其他类的对象作为成员的情况,它们之间的关系是一种包含与被包含的关系。

在声明一个组合类的对象时,不仅它自身的构造函数将被调用,而且还将调用其内嵌对象的构造函数。这时构造函数的调用顺序是:

(1)按照内嵌对象在组合类的声明中出现的次序,依次调用内嵌对象的构造函数; (2)执行本类构造函数的函数体

析构函数的调用执行顺序与构造函数刚好相反。 18.下列描述错误的是( A )

A.在创建对象前,静态成员不存在 B.静态成员是类的成员

C.静态成员不能是虚函数 D.静态成员函数不能直接访问非静态成员

说明:静态成员函数可以直接访问该类的静态数据和函数成员,而访问非静态成员,必须通过参数传递方式得到对象名,然后通过对象名来访问。 19.对于友元描述正确的是( B )

A.友元是本类的成员函数 B.友元不是本类的成员函数 C.友元不是函数 D.友元不能访问本类私有成员

20.在哪种派生方式中,派生类可以访问基类中的protected成员( B ) A.public和private

B.public和protected

C.protected和private D.仅protected

2

二、填空题(本大题共20小题,每小题1分,共20分) 请在每小题的空格中填上正确答案。错填、不填均无分。

21.设要把一个文件输出流对象myFile与文件“f:\myText.txt相关联,所用的C++语句是:myFile.open(“f:\\\\myText.txt”);。

22.C++中ostream类的直接基类是ios 类。

23.运算符[ ]只能用 成 员 运算符来重载,不能用友元运算符来重载。 24.定义虚函数所用的关键字是virtual。

25.vector类中用于返回向量中第1个对象的方法是front( )。

26.在C++中,利用向量类模板定义一个具有20个char的向量E,其元素均被置为字符‘t’,实现此操作的语句是vectorE(20,?t?)。

27.类的继承是指子类继承基类的数据成员和成员函数。

28.不同对象可以调用相同名称的函数,但可导致完全不同的行为的现象称为多态性或(类的多态性)。 29.#include指令指示编译器将一个源文件嵌入到带该指令的源文件之中。 30.设类A有成员函数 void Fun(void);

若要定义一个指向类成员函数的指针变量pafn来指向Fun,该指针变量的声明语句是:void(A::*pafn)(void);。

31.设在程序中使用如下语句申请了一个对象数组: Point * ptr = new Point[2];

则在需要释放ptr指向的动态数组对象时,所使用的语句是delete[ ]ptr;。 32.在保护派生中,基类权限为Private的成员在派生类中 不可访问。 33.类A有如下成员函数

int A::fun(double x){return (int) x/2;} int A::fun(int x){return x*2;}

设a为类A的对象,在主函数中有int s=a.fun(6.0)+a.fun(2),则执行该语句后,s的值为 7 。 34.对象传送的消息一般由3部分组成:接收对象名、调用操作名和必要的参数。 35.将指向对象的指针作为函数参数,形参是对象指针,实参是对象的地址值。

36.在使用string类的find成员函数来检索主串中是否含有指定的子串时,若在主串中不含指定的子串,find函数的返回值是 -1 。

37.在C++中,声明布尔类型变量所用的关键字是 bool 。 38.执行下列代码 int a=29,b=100;

cout <

cout <<″Hex:″<< hex << 255; 程序的输出结果为 Hex:ff 。

40.C++语言中可以实现输出一个换行符并刷新流功能的操控符是_ endl _。

3

三、改错题(本大题共5小题,每小题2分,共10分)

下面的类定义中有一处错误,请用下横线标出错误所在行并给出修改意见。 41.#include void main( ) { int x=5,y=6; const int * p=&x; *p=y;

cout<<*p<

} *p=y; 指针p所指向的为一常量,不能进行左值操作 42.#include class f{

private:int x,y; public:f1( ){x=0;y=0;} print( ){cout<

void main( ){ f a; a.f1(1,1); a.print( );

} a.f1(1,1); f1( )调用时实参与形参数量不一致 43.#include class f{

private:int x=0,y=0;

public:void f1(int a,int b){x=a;y=b;} void get( ){cout<

} private:int x=0,y=0; 数据成员声明时不允许直接赋值 44.#include class point{private:float x; public:void f(float a){x=a;} void f( ){x=0;}

friend float max(point& a,point& b); };

float max(point& a,point& b) {return(a.x>b.x)? a.x:b.x;}

4

void main( ){ point a,b; a.f(2.2);b.f(3.3); cout<

} cout< template class f{

private:T x,y;

public:void f1(T a,T b){x=a;y=b;} T max( ){retum(x>y)?x:y;} };

void main( ){ f a;

a.f1(1.5,3.8); ’

cout<

} cout<

point::point(int a,int b) { m=a; _ n _=b; }

point::point(_point&t _) { m=t.m; n=t.n; }

47.下面是一个输入半径,输出其面积和周长的C++程序,在下划线处填上正确的语句。

5

#include using namespace std; const double pi=3.14159; void main( ) { double r; cout<<″r=″; cin>>r ;

double l=2.0*pi*r; double s=pi*r*r;

cout<<″\n The long is:″<

48.在下划线处填上缺少的部分。 #include #include using namespace std; class complex { public: int real; int imag;

complex(int r=0,int i=0) { real=r; imag=i; } };

complex operator+( complex&a,complex& b) {

int r=a.real+b.real; int i=a.imag+b.imag; return complex(r,i); }

void main( ) {

complex x(1,2),y(3,4),z; z=x+y;

cout<

6

49.程序的输出结果如下: 1,9 50,30

请根据输出数据在下面程序中的下划线处填写正确的语句。 源程序如下: #include using namespace std; class base { private: int m; public: base( ){ }; base(int a):m(a){} int get( ){return m;} void set(int a){m=a;} }; void main() {

base*ptr=new base[2]; ptr- >set(30); ptr= ptr+1;; ptr- >set(50); base a[2]={1,9};

cout

cout<< ptr->get( )<

50.在下面横线处填上求两个浮点数之差的cha函数的原型声明、调用方法。 #include using namespace std; void main( ) {

float a,b;

float cha(float,float);//函数cha的原型声明 a=12.5; b=6.5;

float c= cha(a,b); //调用函数cha

7

cout<

float cha(float x,float y) { float w; w=x-y; return w; }

五、程序分析题(本大题共4小题,每小题5分,共20分) 51.给出下面程序的输出结果。 #include template class Sample { T n; public: Sample(T i){n=i;}

int operator==(Sample &); };

template

int Sample::operator==(Sample&s) { if(n==s.n) return 1; else return 0; } void main( ) {

Samplesl(2),s2(3); .

cout<<″s1与s2的数据成员″<<(sl==s2 ?″相等″:″不相等″)<s3(2.5),s4(2.5);

cout<<″s3与s4的数据成员″<<(s3==s4 ? ″相等″:″不相等″)<

S3与S4数据成员相等 52.给出下面程序的输出结果。

#include using namespace std; template T max(T ml,T m2)

8

{return(m1>m2)?ml:m2:} void main( ) {

cout<

cout< using namespace std; class A { public: int x; A( ) { } A(int a){x=a;}

int get(int a){return x+a;} }; void main( ) { A a(8); int(A::*p)(int); p=A::get;

cout<<(a.*p)(5)<

cout<<(pi- >*P)(7)<

9

54.给出下面程序的输出结果。 include #include using namespace std; class Book { char*title; char*author; int numsold; public: Book( ){ }

Book(const char*strl,const char*str2,const int num) { int len=strlen(strl); title=new char[len+1]; strcpy(title,str1); len=strlen(str2); author=new char[len+1]; strcpy(author,str2); numsold=num; }

void setbook(const char*str1,const char*str2,const int num) { int len=strlen(str1); title=new char[len+1]; strcpy(title,str1); len=strlen(str2); author=new char[len+1]; strcpy(author,str2); 书名:数据结构 numsold=num; 作者:严蔚敏 }

~Book( ) { 月销售量:200 书名:C++程序设计 delete title; delete author; 作业:李春葆 }

月销售量:210 void print(ostream&output) { output<<″书名:″< void main( ) {

Book obj1(″数据结构″,″严蔚敏″,200),obj2; obj1.print(cout);

10

obj2.setbook(″C++语言程序设计″,″李春葆″,210); obj2.print(cout); }

六、程序设计题(本大题共1小题,共10分)

55.在三角形类TRI实现两个函数,功能是输入三个顶点坐标判断是否构成三角形 #include #include class point{

private:float x,y;

public:point(float a,float b){x=a;y=b;} point( ){x=0;y=0;} , void set(float a,float b){x=a;y=b;} float getx( ){return x;} float gety( ){return y;} }; class tri{ point x,y,z; float s1,s2,s3;

public;...settri(....);//用于输入三个顶点坐标 ....test(....);//用于判断是否构成三角形

}; 请写出两个函数的过程(如果需要形式参数,请给出形参类型和数量,以及返回值类型)

判断三条边能构成三角形的条件:任意两边之和大于第三边或任意两边之差小于第3边。 void tri::settri(float x1,float y1,float x2,float y2,float x3,float y3) {x.set(x1,y1); y.set(x2,y2); z.set(x3,y3); }

void tri::test(){ s1=sqrt((x.getx()-y.getx())*(x.getx()-y.getx())+(x.gety()-y.gety())*(x.gety()-y.gety())); s2=sqrt((x.getx()-z.getx())*(x.getx()-z.getx())+(x.gety()-z.gety())*(x.gety()-z.gety())); s3=sqrt((y.getx()-z.getx())*(y.getx()-z.getx())+(y.gety()-z.gety())*(y.gety()-z.gety()));

11

全国2010年10月高等教育自学考试 C++程序设计试题

课程代码:04737

一、单项选择题(本大题共20小题,每小题1分,共20分)

在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、

多选或未选均无分。

1.C++中注释“∥”的有效范围是( A ) A.从“∥”开始到行尾 B.从“∥”开始到下一个“∥” C.“∥”及其后一个字符 D.从“∥”开始到程序尾

2.假定MyClass为一个类,则该类的复制构造函数的声明语句为( ) A.MyClass&(MyClass x); B.MyClass(MyClass x); C.MyClass(MyClass &x); D.MyClass(MyClass *x); 3.下列选项不是C++关键字的是( ) A.typedef B.void C.bool D.inc 4.用于标识十进制常量的前缀或后缀是( ) A.无前后缀 B.后缀L或l C.前缀0 D.前缀0x

5.设int x=56;int r=x;若cout <<&x;显示0012FF7A,则cout <<&r;输出值为( ) A.56 B.00l2FF7A C.0012FF7B D.未知

6.使用下列哪个流格式控制符可设置转换基数为八进制( ) A.dec B.oct C.hex D.endl 7.C++中是否允许在类结构中定义函数( ) A.不允许 B.允许 C.仅允许定义构造函数 D.只不允许定义构造函数 8.设函数void subone(int &)将形参减1,如有整型变量int k=10,则执行subone(k);后,k的值为( A.9 B.10 C.11 D.未知

9.对函数int max(int a,int b=0,int c=0,int d=0,int e=0);下列调用方式正确的是( A.int m=max(10,11,12,13,14); B.int m=max(10,,12,13,14); C.int m=max(10,1l,,13,14); D.int m=max(10,11,12,,14); 10.类MyClass的定义如下: class MyClass { public:

MyClass(){}

MyClass(int i){value=new int(i);} int * value; };

若要对value赋值,则下面语句正确的是( ) A.MyClass my;my.value=10; B.MyClass my;*my.value=10;

) 12

)C.MyClass my;my.*value=10; D.MyClass my(10); 11.包含哪种语句的函数不能声明为内联函数( ) A.变量定义 B.if??else C.位操作 D.switch 12.声明函数模板的关键字是( ) A.inline B.template C.const D.short

13.对于类中的成员,使用public修饰,表明该成员的访问权限是( ) A.公有的 B.私有的 C.保护的 D.不可见的

14.一个类中是否可以允许一个无参数构造函数和一个全部都是默认参数的构造函数共 存( )A.不允许 B.允许 C.无法确定 D.视构造函数的函数,可确定 15.析构函数的参数个数为( ) A.0个 B.1个 C.至少1个 D.多于1个 16.非静态成员函数都会有一个隐含指针,它是( ) A.self指针 B.this指针 C.current指针 D.one指针 17.下列访问公有静态成员的方式,错误的是( ) A.类名::静态成员名 B.对象名.静态成员名 C.对象指针->静态成员名 D.对象指针.静态成员名 18.声明友元使用下列哪个关键字( ) A.class B.const C.friend D.virtual 19.派生类继承了基类的( ) A.所有成员 B.部分成员 C.数据成员 D.成员函数

20.基类private成员,通过public派生,其在派生类中为( ) A.private B.protected C.public D.不可访问 二、填空题(本大题共20小题,每小题1分,共20分)

请在每小题的空格中填上正确答案。错填、不填均无分。 21.执行下列代码

double pi=3.141592;

cout<

22.要使用STL库提供的对数组进行升幂排序算法,在源程序中需要包含的头文件是_________。 23.C++语言中动态回收内存的关键字是_________。 24.执行下列代码 int b=100;

cout<<”Oct:”<

程序的输出结果是_________。

25.C++语言中用于定义一个类的关键字是_________。

26.为了使用C++语言标准程序库提供的string类,在程序中必须使用的文件包含命令是_________。27.在程序中执行int*a=new int之后,若a为空指针,则表明_________。

13

28.C++函数中传递对象地址值是使用_________作为参数。

29.将指向对象的指针作为函数参数,形参是对象指针,实参是对象的_________。 30.C++函数有库函数(标准函数)和_________两类。 31.C++中通过_________对类的对象进行初始化。

32.UML中实例连接反映对象之间的静态关系,消息连接描述对象之间的_________关系。

33.若将一个对象说明为常对象,则通过该对象只能调用它的_________成员函数,不能调用其它成员函

数。

34.静态成员函数是_________的成员,不是对象的成员。

35.私有继承时,在派生类中基类的protected权限变为_________。

36.若使用一个表达式的含义能解释为访问多个基类中的成员,则这种对基类成员的访 问就是不确定

的,称这种访问具有_________。

37.如果在类模板的定义中有一个静态数据成员,则在程序运行中会产生_________静态变量。38.vector类中用于获取向量可以容纳最多对象的个数的方法是_________。 39.C++用于运算符重载的关键字是_________。

40.含有___________的类称为抽象类,它只能作为基类来使用。 三、改错题(本大题共5小题,每小题4分,共20分)

下面的每题中有一处错误,请用下横线标出错误所在行并给出修改意见 41. #include < iostream, h > class testl {

private : int x;

public: testl ( ) { x = 2 ; } void set(int a){x =a;}

void get( ) { cout << x << endl; } };

class test2{

private: int x;

public : test2 ( ) { x = 3 ; } void set( int a) { x = a; }

void get( ) { cout << x << endl; } };

class test: public testl, public test2 { private : int x;

public:void set( int a) { x=a; }

void gettest( ) {cout << x << endl; } };

void main( ) {

test a; a. get( ); }

42. #include < iostream, h > class test {

private : int x, y;

public : void testl ( int a, int b) { x = a ; y = b;} int max( ); };

int test:max( ) {if(x>y) return x;else return y;} void main( ){

14

test a;

a. testl ( 1,3);

cout << a. max ( ) << endl; }

43. #include < iostream, h > void main() { int x =5;

const int * const p = &x; * p =88;

cout << * p << endl; }

44. #include < iostream, h > class point {

private : float x, y ;

public : f( float a, float b) { x = a ; y = b ; } f( ) {x=O;y=O;}

void getx( ) { cout < < x < < endl; } void gety ( ) { cout < < y < < endl ; } }

class pointl }

private : float x, y ;

public : f( float a, float b) { x = a; y = b ; } f( ){x=l;y=l;}

void getx( ) {cout <

main( ) I point a; a.f();

a. getx( ) ;a. gety ( ); }

45. #include < iostream, h > void main( ) {

string strl (\ cout << strl << endl; }

四、完成程序题(本大题共5小题,每题4分,共20分)

46.在下面程序的下划线处填上正确的数据类型,保证程序具有如下输出结果: 0 17

17,17,17

源程序如下:

#include < iostream > using namespace std;

15

class base {

public :

______________num; base ( ) { } };

int base::hum = 0; void main( ) {

cout << base::num << endl;

_________________* p=&base : :num; *p=17;

cout << base::num << end1; base a,b;

cout << * p<<\47.在下面横线处填上正确的内容,完成类的定义。

class Base {

int x;

static const int b; public:

Base( int, int); const int &a; };

______________b =15;

Base::Base(int i,int j): ___________{ }

48.完成下面程序中的show函数的定义,使其运行结果如下: In base In derived 程序清单如下: #include

using namespace std; class base {

pubhc :

virtual void print( ) {

cout << \ } };

class derived: public base {

public :

void print( ) { cout << \ };

16

void show(base * pb,void (base:: * pf) ( ) ) {

_________ }

void main( ) {

base b; derived d ;

show ( &b, base::print); show ( &d, base::print); }

49.在下面程序的下划线处填上正确的语句。 #include < iostream > using namespace std; template < class T > T f( T&a, T&b, int n) {

for (int i=0;i

void main( ) {

In ta[5] ={1,2,3,4,5};

int b[5] = { 100,200,3,4,51 , * p; for(int i =0;i <2;i ++)

p=_________//调用函数f

for( ;p

cout <<_________<< endl ; }

50.下列程序将x,y,z按从小到大的顺序排列并将结果返回给实参,在横线处填入正确的内容。 template < class T > void order(_________) {

_________;

if(x >y) {a =x;x =y;y =a;} if(y >z) {a =y;y =z;z =a;} if(x >y) {a =x;x =y;y =a;} }

五、程序分析题(本大题共2小题,每小题5分,共10分) 51.给出下面程序的输出结果 #include < iostream > using namespace std; template < class T > T F(T x) {

17

return x > 5; }

void main( ) {

int a = 15;

cout << F(a) << \ double b = - 5.8976; cout << F(b) << \ cout << F(5) <<\ }

52.给出下面程序的输出结果 #include < iostream > using namespace std; class A {

private: int X, Y;

public : A ( int myx, int myy) { X = myx; Y = myy ;}

void show ( ) { cout << \ };

class B : public A {

private : int H, W;

public: B ( int myx, int myy, int myh, int myw) : A ( myx, myy) [ H = myh ; W = myw;} void show ( ) { cout << \ };

void main( ) {

B d(1,2,3,4) ; d. show ( ) ; }

六、程序设计题(本大题共1小题,共10分)

53.定义队列类模板queue(先进先出),队列的大小由使用者确定。要求该类模板对外提供如下二种

基本操作:(1)insert(入队列)(2)front(出队列),用数组来实现 #include < iostream > using namespace std;

template < class T, int size > class queue { T x [ size ] ;

int current, front, rear; public :

queue ( ) { current = 0 ; front = 0 ; rear = 0 ;} . . . .insert(. . . .); . . . .front(. . . .); };

请写出两个函数的过程(如果需要形式参数,请给出形参类型和数量,以及返回值类型)

18

C++程序设计试题 课程代码:04737

一、单项选择题(本大题共20小题,每小题1分,共20分)

在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。

1.对C++中主函数描述正确的是( )

A.名称为main,可为多个 B.名称不限,可为多个 C.名称为main,必须有且只能有一个 D.名称不限,必须有且只能有一个 2.调用声明为int result(int a,int b)的函数时,正确的方法是( ) A.result(1,2) B.result(1) C.result(0.1,0.3) D.result(1,2,3) 3.用于包含C++标准库iostream的预处理指令是( ) A.#define B.#include C.#define ‘iostream’ D.#include‘iostream’ 4.无类型标识符是指( ) A.void B.bool C.short D.long 5.从本质上看,引用是被引用变量的( ) A.拷贝 B.别名 C.复制 D.克隆 6.下面关于数组的初始化正确的是( ) A.char str[ ]={'a','b','c'}; B.char str[2]={'a','b','c'};

C.char str[1][2]={{'a','b'},{'e','d'}}; D.char str[ ][ ]={'a','b','c'};

7.C++类中定义的成员默认访问属性为( ) A.public B.private C.protected D.friend 8.决定C++语言中函数的返回值类型的是( ) A.return语句中的表达式类型

B.调用该函数时系统随机产生的类型 C.调用该函数时的主调用函数类型 D.在定义该函数时所指定的数据类型

9.函数int & min(int &,int &)返回参数中较小者,设有两整型变量int a=10;int b=15;在执行语句min(a,b)--;之后,a,b值分别为( ) A.9,14 B.9,15 C.10,14 D.10,15 10.声明函数为内联函数时所使用的关键字为( ) A.const B.inline C.short D.signed

11.函数int sum(int a=l,int b=1,int c=3)可与下列哪个函数同时声明( ) A.double sum(int); B.char sum(int,int); C.int sum(double); D.int sum(int,int,int);

12.函数模板template void Func(T,T)可具有下列哪种实例化形式( )

19

A.void Func(float,int) B.void Func(char,char) C.void Func(int,double) D.void Func(bool,float) 13.下列访问成员的方式哪个是正确的( ) A.对象名.对象成员名 B.对象指针名.对象成员名 C.对象名→对象成员名 D.类名→对象成员名 14.对类A,复制构造函数的原型是( ) A.A::A(const A&); B.A::A(const A *); C.A::A(const A); D.A::A( );

15.对class point,如使用point * ptr=new point[2];创建对象数组,则删除此数组使用的语句是( ) A.delete ptr[2]; B.delete[ ] ptr; C.delete ptr[ ]; D.delete[2] ptr; 16.下列哪个编译指令不属于条件编译指令( ) A.#if B.#else C.#endif D.#error

17.类A中存在静态数据成员x,设a和b是类A的两个对象,在执行a.x=10之后,b.x 的值为( ) A.未初始化 B.等于a.x C.等于0 D.随机

18.使用string.h库操纵字符串时,将两个字符串连接成一个字符串的函数是( ) A.strlen() B.strcap() C.strcat() D.strcmp()

19.基类中的public成员,通过public派生,其在派生类中的访问权限为( ) A.不可访问 B.private C.protected D.public

20.不同对象调用同名函数,但导致完全不同行为的现象称为( ) A.抽象 B.封装 C.继承 D.多态性

二、填空题(本大题共20小题,每小题1分,共20分)

请在每小题的空格中填上正确答案。错填、不填均无分。

21.在C++语言的面向对象设计框架中,_______是程序的基本组成单元。

22.执行代码double pi=3.1415192; cout < < setprecision (3) < < pi;程序的输出结果是_______。 23.C++语言提供的的基本控制结构可以分为3种类型:顺序结构、_______和循环结构。 24.要使用STL库提供的对数组进行降幂排序算法,在源程序中需要包含的头文件是______。 25.在C++标准库中,用_______类来表示复数。

26.将对象作为函数参数,是将实参对象的_______传递给形参对象,这种传递是单向的。 27.C++函数的返回类型可以是除数组与_______以外的任何类型。 28.能提供封装的C++关键字是_______。

29.在C++的类声明中,用public关键字声明的类成员的访问权限是_______。 30.开发一个C++语言程序的步骤通常包括编辑、_______、连接、运行和调试。 31.C++类中的_______函数在对象的生存期结束时被自动调用。 32.友元函数可以存取类的_______、公有成员和保护成员。

33.若类的成员函数用关键字static进行修饰,这样的成员函数称为_______。 34.在C++中,创建派生类对象时,总是先从_______的初始化开始的。 35.类的继承是指派生类继承基类的数据成员和_______。

36.在C++中,利用向量类模板定义一个具有20个double的向量,其元素均被置为0.5,实现此操作的语

20

句是_______。

37.vector类中用于返回向量中的最后一个对象的方法是_________。

38.虚函数类似于重载函数,但与重载函数的实现策略不同,对虚函数声明时应使用_______关键字。 39.在C++中,虽然友元提供了类之间数据进行访问的一种方式,但它破坏了面向对象程序设计的_______特性。

40.执行下列代码

cout < < showpoint < < 123.0;程序的输出结果是_______。

三、改错题(本大题共5小题,每小题4分,共20分)

下面的每个程序都有一处错误,请用下横线标出错误所在行并给出修改意见。 41.#include using namespace std; int main ( ){

int num; max=10; num =1

while (num < max) num + + ; cout <<″Num = ″<< num; return 0; }

42.#include using namespace std; class A {

void show ( ) { cout<<″Hello!″; } };

int main ( ) { A a;a. show ( ); return 0; }

43.#include using namespace std; int main ( ) { const int num = 20; int scores[num];

for (int i=1;i<=num;i + +){ scores[i]=i; }

return 0; }

44.#include using namespace std; class CMax { private:

int xx; int yy; public:

CMax(int x,int y)

21

{ xx = x;yy = y ; }

void setValue(int x,int y) { xx = x;yy = y;} int max( ){

return xx > yy? xx:yy; } };

void main( ){ CMax m( );

m.setValue(20,30);

cout <<″Max=″<

45.#include using namespace std; class A{ public:

char name[255]; private:

char * getName( ) { return name; } };

class B:public A{ public:

B(char * n){

strcpy ( name,n); } };

void main( ){ B b(″Hello!″);

cout <<″Name:″<

四、完成程序题(本大题共5小题,每小题4分,共20分)46.将下面程序补充完整,使程序输出结果为:

Begin Welcome Show End

程序如下:

#include using namespace std; class A{ public:

__________{

cout <<″Begin″<

22

void show( ){

cout<<″Show″<

___________{

cout<<″End″<

A object; int main( ){

cout <<″Welcome″<

47.请将下面程序补充完整,使程序可以正常打印9×9乘法口诀。

#include using namespace std; class A { private:

int a;int b; public:

__________

{ a = x;b = y; } void set(int x,int y) { a = x;b = y; } void display( ){

cout<

int main( ){ A a(1,1);

for(int i=1;i<=9;i++){ for(int j=1;____;j++){

a.set(j,i); a.display( ); cout<<″″; }

cout<

return 0; }

48.将下面程序补充完整,使程序可以输入学生信息并计算平均成绩。#include #include using namespace std; class Student{ private:

23

char name[255]; int score[10]; public:

Student(char n[ ],int s[ ]){ ___________;

for(int i=0;i<10;i++){ score[i]=s[i]; } }

void Show( ){ int sum=0;

for(int i=0;i<10;i++){

_______________; }

cout<<″名字:″< < name<<″,平均成绩:″<

void main( ){ char name[255]; int score[10];

cout<<″姓名:″;cin>>name; for(int i=0;i<10;i++){

cout<<″成绩″<>score[i]; }

Student s(name,score); s.Show( ); }

49.将下面程序补充完整,使程序可以正常运行,并释放内存。

#include _______ class A { private: T * data; int length; public:

A (int len){ length=len;

data=new T[len]; }

~A( ){ _________ }

T& operator[](int i){ return data[i]; }

24

};

int main( ){ A obj(2); obj[0]=1; obj[1]=2;

cout<

50.将下面程序补充完整,使程序运行结果为:

C1ass A Class B 程序如下:

#include #include class A{ public:

virtual void GetA( ) = 0; };

class B:public A{ private:

char str[32]; public:

void GetA( ){

cout<<″Class A″<

const char * GetB( ) {_____ }

B(char * s){ strcpy(str,s); } };

void main( ){

A * a;

B b(″Class B″); a=_________; a-> GetA( );

cout<

五、程序分析题(本大题共2小题,每小题5分,共10分)51. #include

using namespace std; int main( ){

25

int i,j;

for(i=l;i<=4;i+=1) for(j=2;j<=4;j+=j){ if(i+j<5)

cout<<″ + ″; else

cout<<″ * ″; }

return 0;

}

52. #include

using namespace std; class A { int a; public:

A(int aa=0){a=aa;}

~A( ){cout <<″Destructor A!″<

class B:public A{ int b; public:

B(int aa = 0,int bb = 0):A(aa){b = bb;}

~B( ){cout <<″Destructor B!″<< b << endl;} };

void main( ){

B x(5),y(6,7); }

六、程序设计题(本大题10分)

53.下面Shape类是一个表示形状的抽象类,Area ( )为求图形面积的函数。请从Shape类派生梯形类(Trapezoid)、圆形类(Circle),三角形类(Triangle),并给出具体的求面积函数。其中,所有派生类计算面积需要用到的参数由构造函数给出,梯形面积计算需要上底、下底和高,三角形面积需要底和高,圆形面积需要半径。 形状的抽象类声明如下: class Shape { public:

virtual double Area( ) = 0; };

26

全国2009年1月自学考试C++程序设计试题

课程代码:04737

一、单项选择题(本大题共20小题,每小题1分,共20分)

在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。

1.C++源程序文件扩展名为( A ) A..cpp B..h C..1ib D..obj

2.在C++中使用流进行输入输出,其中专用于从键盘进行输入的流是( B ) A.cerr B.cin C.cout D.cfile

3.包含自定义头文件file.h的预处理指令是( D ) A.#define B.#include file.h C.#define file.h 4.用于标识十六进制前缀或后缀是( D ) A.无

B.后缀L或e C.前缀零

D.前缀0x

D.#include\

5.设存在整型变量int x,则下列句与其它三项含义不同的是( A ) A.int* p=&x; B.int& p=x; C.int & p=x;

D.int &p=x;

6.在定义类成员时,为产生封装性,则需使用哪个关键字( D ) A.public B.publish C.protected

D.private

7.设函数void swap(int&,int&)将交换两形参的值,如两整型变量int a=10;int b=15; 则执行swap(a,b)后,a、b值分别为( C ) A.10,10

B.10,15 C.15,10 D.15,15

8.函数默认参数在函数原型中说明,默认参数必须放在参数序列的( C ) A.前部 B.中部 C.后部

D.两端

9.设存在函数int min(int,int)返回两参数中较小值,若求15,26,47三者中最小值,下列表达式中错误的是( B )

A.int m=min(min(15,26),min(15,47)); B.int m=min(15,26,47); C.int m=min(15,min(47,26)); D.int m =min(min(47,26),16);

10.下列函数不能和函数void print(char)构成重载的是( C )

27

A.int print(int); B.void print(char,char); C.int print(char);

D.void print(int,int);

11.在下列成对的表达式中,运算结果类型相同的一对是( D ) A.7/2和7.0/2.0 C.7.0/2和7/2

B.7/2.0和7/2

D.7.0/2.0和7.0/2

l2.内联函数的特点是( A )

A.减少代码量,加快访问速度 B.减少代码量,减缓访问速度 C.增加代码量,减缓访问速度 D.增加代码量,加快访问速度 13.类的私有成员可在何处被访问( A )

A.本类的成员函数中 B.本类及子类的成员函数中 C.通过对象名在任何位置 D.不可访问

14.类的构造函数在以下什么情况下会被自动调用( B ) A.定义成员函数时 C.定义数据成员时

B.定义对象时 D.定义友元函数时

15.下列关于析构函数描述正确的是( D ) A.可以重载 B.函数体中必须有delete语句

C.返回类型必须是void类型 D.不能指定返回类型

16.设有函数T Sum(T x,T y){return x+y;},其中T为模板类型,则下列语句中对该函数错误的使用是( D )

A.Sum(1,2); B.Sum(3.0,2.2); C.Sum(?A?,?C?); D.Sum(\,\; 17.下列哪个编译指令属于条件编译指令( C ) A.#include B.#define C.#else

D.#pragma

18.关于类的静态成员函数描述错误的是( A ) A.在创建对象前不存在

B.不能说明为虚函数

C.不能直接访问非静态函数 D.不是对象的成员 l9.如果类A被声明成类B的友元,则( D ) A.类A的成员即类B的成员 B.类B的成员即类A的成员

C.类A的成员函数不得访问类B的成员 D.类B不一定是类A的友元

20.派生类的对象可以访问以下那种情况继承的基类成员( D )

28

A.私有继承的私有成员 C.私有继承的保护成员

B.公有继承的私有成员 D.公有继承的公有成员

二、填空题(本大题共20小题,每小题1分,共20分) 请在每小题的空格中填上正确答案。错填、不填均无分。

21.若使用标准输出流把整型变量a的值输出到屏幕上,实现此操作的C++语句是__cout<

23.执行下列代码 int b=100;

cout<<\:\; 程序的输出结果是__Hex:64____。

24.静态联编所支持的多态性称为_编译时_____的多态性。 25.C++程序必须有且只有一个主函数,其函数名为__main____。

26.写出声明一个复数对象的语句,并使该对象被初始化为2.2+1.3i,此声明语句是__complex c(2.2,1.3);____。 27.若有函数定义为:

int add(int ml=0,int m2=2,int m3=4) {return ml+m2+m3;}

在主函数中有int s=add(1)+add(0,1)+add(0,1,2); 则执行此语句后s的值为__15____。

28.C++中使用___inline___关键字说明函数为内联函数。

29.在源程序中有宏定义:#define PI 3.14,则若不想使该宏定义影响到程序的其它地方,可以使用_#undef PI_____删除该宏定义。(注:配套教材上没有)

30.类和其它数据类型不同的是,组成这种类型的不仅可以有数据,还可以有对数据进行操作的__函数_____。

31.有下列代码int a=0;double b=0;cin>>a>>b;当用键盘输入1.25时,b=__0.25____。 32.对于类Point而言,其析构函数的定义原型为_~Point();_____。

33.对象成员构造函数的调用顺序取决于这些对象在类中说明的顺序,与它们在成员初始化列表中给出的顺序__无关____。

34.类的简单成员函数是指声明中不含_const_____、volatile、static关键字的函数。 35.与操作对象的数据类型相互独立的算法称为__范型算法____。

29

36.从一个或多个以前定义的类产生新类的过程称为_派生_____。 37.在vector类中向向量尾部插入一个对象的方法是__push_back()____。 38.C++中用于动态创建对象,并返回该对象的指针的关键字是__new____。 39.C++的流类库预定义的与标准输出设备相联接的流是__cout ____。 40.执行下列代码

cout<

三、改错题(本大题共5小题,每小题2分,共10分)

下面的类定义中有一处错误,请用下横线标出错误所在行并给出修改意见。 41.#include class f{

private:float x,y;

public:f(float a,float b){x=a;y=b;}

float max(){return(xy)?x:y;} } ; main( ){ f a(1.5,3.8);

cout<

42.#include class test{ private:int x;

public:test(int a){x=a;} void set(int a){x=a;} void get(){cout<

a.set(5); a.get(); }

30

43.#include class point{

private:float x,y;

public:f1(float a,float b){x=a;y=b;} point(){x=0;y=0;} void getx(){cout<

void print(point a){cout<

a.f1(3.0,5.0); print(a); }

44.#include class f{

private:int x,y;

public:fl(int a,int b){x=a;y=b;} void print(){cout<

a.f1(1.5,1.8);//error:实际参数类型与f1函数的形参类型不一致,应修改为一致。 a.print(); }

45.#include main(){ int x=6;

const int*p=x;//error:应改为const int*p=&x; cout<<*p<

31

四、完成程序题(本大题共5小题,每小题4分,共20分)

46.完成下面程序,使其输出l0,并在退出运行时正确释放分配给指针的存储空间。 #include using namespace std; void main() {

int *a,*p; a=new int(10); p= __a____; cout<<*p<

___delete p;(或delete a;)_______ }

47. #include using namespace std; class base {

private:int x;

public:base(int a){x=a;} int get(){return x;}

void showbase() {cout<<\

};

class Derived:public base {private:int y;

public:Derived(int a,int b):base(a){y=b;}

void showderived() {cout<<\}; void main() {

base b(3); Derived d(6,7);

32

b.showbase(); d.showderived(); b=d; b.showbase();

Derived b1(d);(或Derived b1(6,7); 或base b1(6);或 base b1(d);) b1.showbase(); base* pb=&b1; pb->showbase(); d.showderived(); b.showbase();

}

输出结果如下: x=3 x=6,y=7 x=6 x=6 x=6 x=6,y=7 x=6

48.下面程序的运行结果如下: B::display() C::display()

在下划线处填上缺少的部分。源程序如下: #include using namespace std; class B { public:

virtual void display( ) {cout << \::display( ) \};

class C:public B

33

{ public: virtual void (或void)display(){cout<<\::display()\

};

void fun(B*p) {

p->display(); }

void main() {

B b,*pb; C c; pb=&b; fun(pb); pb=&c; fun(pb); }

49.下面程序的运行结果如下: This is line1 This is line2 This is line3

在下划线处填上缺少的部分。源程序如下: #include #include using namespace std; void main() {

fstream fin, fout;

fout.open(\ if(!fout.is_open())

return;

34

for(int i=0;i<3;i=i+1)

fout<<\

fout.close();

fin.open(\ if(! fin.is_open())

return;

char str[100];

while(!fin.eof()(或等价答案)) { fin.getline(str,100);

cout<

}

fin.close(); }

50.在下划线处填上缺少的部分。源程序如下: #include using namespace std; template________ T fun(T x) {

__T___y; y=x*x-T(5); return y; }

void main() {

float a=2; cout<

五、程序分析题(本大题共4小题,每小题5分,共20分) 51.请写出myTextl.txt文本文件中的内容

35

#include #include using namespace std; #include void main() {

ofstream myFile1;

myFile1.open(\

cout<<\ ,2008,May 25):\string Date(\string Year=Date.substr(0,4); int k=Date.find(\int i=Date.find(\

string Month=Date.substr(k+1,i-k-1); string Day=Date.substr(i+1,2);

string NewDate=Day+\myFile1<<\:\myFile1<<\:\myFile1.close(); }

original date:2008,January 1 Converted date:1 January 2008 52.给出下面程序的输出结果 #include using namespace std; class Simple { int x,y; public:

Simple(){x=y=0;}

Simple(int i,int j){x=i;y=j;}

36

void copy(Simple&s); void setxy(int i,int j){x=i;y=j;}

void print(){cout<<\};

void Simple::copy(Simple&s) {

x=s.x;y=s.y; }

void func(Simple s1,Simple&s2) {

s1.setxy(30,40); s2.setxy(70,80); }

void main() {

Simple obj1(1,2),obj2; obj2.copy(obj1); func(obj1,obj2); obj1.print(); obj2.print(); } x=1,y=2 x=70,y=80

53.给出下面程序的输出结果 #include\ int main() { int i=17; while(i>=10) if(--i%4==3)continue;

37

else

cout<<\ } i=16 i=14 i=12 i=10

54.给出下面程序的输出结果 #include using namespace std; void main() {

int num=300; int &ref=num; cout<

六、程序设计题(本大题共1小题,共10分)

55.定义堆栈类模板Stack(先进后出),栈的大小由使用者确定。要求该类模板对外提供 如下二种基本操作:

(1)push入栈(2)pop出栈,用数组来实现 #include using namespace std; template class Stack{ T x[size]; int current;

38

public:

Stack(){current=0;} ....push(....); ....pop(....); };

请写出两个函数的过程(如果需要形式参数,请给出形参类型和数量,以及返回值类型) 参考答案

#include using namespace std; template class Stack{

T x[size]; int current;

public: };

template

bool Stack::Push(T e){//插入新元素e为新的栈顶元素

if(current == size){//栈满 }

x[++current] = e; return true;

return false; Stack(){current=0;} bool Push(T e); bool Pop(T &e);

}//Push

template

bool Stack::Pop(T &e){//若栈不空,删除栈顶元素,并用e返回其值,并返回true,否则返回false

if( current == 0 ) return false; e=x[current--];

39

return true;

}//Pop

//测试程序,不是答案的一部分 void main(){ Stack s; s.Push(1); //s.Push(2); int e; if(s.Pop(e)) cout<

else

cout<<\栈空\ cout<<\再次出栈,试试看...\ if(s.Pop(e)) cout<

else cout<<\栈已空\

}

40

全国2008年10月自学考试C++程序设计试题

课程代码:04737

一、单项选择题(本大题共20小题,每小题1分,共20分) 1.对C++语言和C语言的兼容性,描述正确的是( A ) A.C++兼容C B.C++部分兼容C C.C++不兼容C D.C兼容C++

2.在C++中使用流进行输入输出,其中用于屏幕输出的对象是( C ) A.cerr B.cin C.cout D.cfile

(cerr:标准错误输出(非缓冲方式);cin:标准输入; clog 标准错误输出(缓冲方式))

3.对使用关键字new所开辟的动态存储空间,释放时必须使用( C ) A.free B.create C.delete D.realse

4.如没有使用private关键字定义类的数据成员,则默认为( A ) A.private

B.public C.protected D.friend

5.使用值传递方式将实参传给形参,下列说法正确的是( A ) A.形参是实参的备份 B.实参是形参的备份 C.形参和实参是同一对象 D.形参和实参无联系

6.在函数调用时,如某一默认参数要指明一个特定值,则有( A )

A.其之前所有参数都必须赋值B.其之后所有参数都必须赋值C.其前、后所有参数都必须赋值D.其前、后所有参数都不必赋值

7.设存在函数int max(int,int)返回两参数中较大值,若求22,59,70三者中最大值,下列表达式不

41

正确的是( C )

A.int m = max(22,max(59,70)); B.int m = max(max(22,59),70);C.int m = max(22,59,70); D.int m = max(59,max(22,70));

8.下列哪个类型函数不适合声明为内联函数( A ) A.函数体语句较多 B.函数体语句较少 C.函数执行时间较短 D.函数执行时间过长

9.int Func(int,int);不可与下列哪个函数构成重载( B ) A.int Func(int,int,int); B.double Func(int,int);

C.double Func(double,double); D.double Func(int,double); 说明:不能以形参名来区分函数;不能以 函数返回值来区分函数。必须是形参的个 数或者类型不同才能构成函数重载。

10.对类中声明的变量,下列描述中正确的是( C ) A.属于全局变量 B.只属于该类

C.属于该类,某些情况下也可被该类不同实例所共享 D.任何情况下都可被该类所有实例共享 11.类的私有成员可在何处访问( D ) A.通过子类的对象访问 B.本类及子类的成员函数中 C.通过该类对象访问 D.本类的成员函数中

12.如果没有为一个类定义任何构造函数的情况下,下列描述正确的是(

42

A A.编译器总是自动创建一个不带参数的构造函数 B.这个类没有构造函数 C.这个类不需要构造函数 D.该类不能通过编译

13.一个类可包含析构函数的个数是( B ) A.0个 B.1个 C.至少一个 D.0个或多个

14.this指针存在的目的是( B ) A.保证基类公有成员在子类中可以被访问

B.保证每个对象拥有自己的数据成员,但共享处理这些数据成员的代码 C.保证基类保护成员在子类中可以被访问 D.保证基类私有成员在子类中可以被访问 15.下列关于类的权限的描述错误的是( A ) A.类本身的成员函数只能访问自身的私有成员 B.类的对象只能访问该类的公有成员

C.普通函数不能直接访问类的公有成员,必须通过对象访问 D.一个类可以将另一个类的对象作为成员

16.在编译指令中,宏定义使用哪个指令( B ) A.#include B.#define C.#if D.#else

17.设类A将其它类对象作为成员,则建立A类对象时,下列描述正确的是( B ) A.A类构造函数先执行 B.成员构造函数先执行 C.两者并行执行 D.不能确定

类的组合,描述的是一个类内嵌其他类的对象作为成员的情况,它们之间的关系是一种包含与被包含的关系。

43

在声明一个组合类的对象时,不仅它自身的构造函数将被调用,而且还将调用其内嵌对象的构造函数。这时构造函数的调用顺序是:

(1)按照内嵌对象在组合类的声明中出现的次序,依次调用内嵌对象的构造函数; (2)执行本类构造函数的函数体

析构函数的调用执行顺序与构造函数刚好相反。 18.下列描述错误的是( A )

A.在创建对象前,静态成员不存在B.静态成员是类的成员 C.静态成员不能是虚函数

D.静态成员函数不能直接访问非静态成员

说明:静态成员函数可以直接访问该类的静态数据和函数成员,而访问非静态成员,必须通过参数传递方式得到对象名,然后通过对象名来访问。 19.对于友元描述正确的是( B ) A.友元是本类的成员函数 B.友元不是本类的成员函数 C.友元不是函数

D.友元不能访问本类私有成员

20.在哪种派生方式中,派生类可以访问基类中的protected成员( B ) A.public和private B.public和protected C.protected和private D.仅protected

二、填空题(本大题共20小题,每小题1分,共20分) 请在每小题的空格中填上正确答案。错填、不填均无分。

21.设要把一个文件输出流对象myFile与文件“f:\myText.txt相关联,所用的C++语句是:myFile.open(“f:\\\\myText.txt”);。 22.C++中ostream类的直接基类是ios 类。

23.运算符[ ]只能用 成 员 运算符来重载,不能用友元运算符来重载。 24.定义虚函数所用的关键字是virtual。

44

25.vector类中用于返回向量中第1个对象的方法是front( )。

26.在C++中,利用向量类模板定义一个具有20个char的向量E,其元素均被置为字符‘t’,实现此操作的语句是vectorE(20,‘t’)。

27.类的继承是指子类继承基类的数据成员和成员函数。

28.不同对象可以调用相同名称的函数,但可导致完全不同的行为的现象称为多态性或(类的多态性)。 29.#include指令指示编译器将一个源文件嵌入到带该指令的源文件之中。 30.设类A有成员函数 void Fun(void);

若要定义一个指向类成员函数的指针变量pafn来指向Fun,该指针变量的声明语句是:void(A::*pafn)(void);。

31.设在程序中使用如下语句申请了一个对象数组: Point * ptr = new Point[2];

则在需要释放ptr指向的动态数组对象时,所使用的语句是delete[ ]ptr;。 32.在保护派生中,基类权限为Private的成员在派生类中 不可访问。 33.类A有如下成员函数

int A::fun(double x){return (int) x/2;} int A::fun(int x){return x*2;}

设a为类A的对象,在主函数中有int s=a.fun(6.0)+a.fun(2),则执行该语句后,s的值为 7 。 34.对象传送的消息一般由3部分组成:接收对象名、调用操作名和必要的参数。 35.将指向对象的指针作为函数参数,形参是对象指针,实参是对象的地址值。

36.在使用string类的find成员函数来检索主串中是否含有指定的子串时,若在主串中不含指定的子串,find函数的返回值是 -1 。

37.在C++中,声明布尔类型变量所用的关键字是 bool 。 38.执行下列代码 int a=29,b=100;

cout <

45

cout <<″Hex:″<< hex << 255; 程序的输出结果为 Hex:ff 。

40.C++语言中可以实现输出一个换行符并刷新流功能的操控符是_ endl _ 三、改错题(本大题共5小题,每小题2分,共10分)

下面的类定义中有一处错误,请用下横线标出错误所在行并给出修改意见。 41.#include void main( ) { int x=5,y=6; const int * p=&x; *p=y;

cout<<*p<

*p=y; 指针p所指向的为一常量,不能进行左值操作 42.#include class f{

private:int x,y; public:f1( ){x=0;y=0;} print( ){cout<

void main( ){ f a; a.f1(1,1); a.print( ); }

a.f1(1,1); f1( )调用时实参与形参数量不一致 43.#include

46

class f{

private:int x=0,y=0;

public:void f1(int a,int b){x=a;y=b;} void get( ){cout<

void main( ){ f a; a.f1(1,3); a.get ( ); }

private:int x=0,y=0; 数据成员声明时不允许直接赋值 44.#include class point{private:float x; public:void f(float a){x=a;} void f( ){x=0;}

friend float max(point& a,point& b); };

float max(point& a,point& b) {return(a.x>b.x)? a.x:b.x;} void main( ){ point a,b; a.f(2.2);b.f(3.3); cout<

cout<

47

template class f{

private:T x,y;

public:void f1(T a,T b){x=a;y=b;} T max( ){retum(x>y)?x:y;} };

void main( ){ f a;

a.f1(1.5,3.8); ’

cout<

cout<

point(int,int); point(point&); };

point::point(int a,int b) { m=a; n =b;

48

}

point::point(point&t ) { m=t.m; n=t.n; }

47.下面是一个输入半径,输出其面积和周长的C++程序,在下划线处填上正确的语句。#include using namespace std; const double pi=3.14159; void main( ) {

double r; cout<<″r=″; cin>>r ;

double l=2.0*pi*r; double s=pi*r*r;

cout<<″\n The long is:″<

48.在下划线处填上缺少的部分。 #include #include using namespace std; class complex {

49

public: int real; int imag;

complex(int r=0,int i=0) { real=r; imag=i; } };

complex operator+( complex&a,complex& b) {

int r=a.real+b.real; int i=a.imag+b.imag; return complex(r,i); }

void main( ) {

complex x(1,2),y(3,4),z; z=x+y;

cout<

49.程序的输出结果如下: 1,9 50,30

请根据输出数据在下面程序中的下划线处填写正确的语句。源程序如下:

50

本文来源:https://www.bwwdw.com/article/ijrr.html

Top