C期末考试复习题_第1页
C期末考试复习题_第2页
C期末考试复习题_第3页
C期末考试复习题_第4页
C期末考试复习题_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

C++期末考试复习题

一、选择题

1.在声明类时,下面的说法正确的是(c)。

A.可以在类的声明中给数据成员赋初值B.数据成员的数据类型可以是register

C.private、public、protected可以按任意顺序出现

D.没有用private>public>protected定义的数据成员是公有成员

2.在一个类的定义中,包含有(C)成员的定义。

A.数据B.函数C.数据和函数D.数据或函数

3.假定AA为一个类,inta()为该类的一个成员函数,若该成员函数在类定义体外定义,则

函数头为(A)。

A.intAA::a()B.intAA:a()C.AA::a()D.AA::inta()

4.假定AA为一个类,a为该类公有的数据成员,px为指向该类对象的一个指针,则访问

px所指对象中数据成员a的格式为(C)。

A.px(a)B.px[a]C.px->aD.px.a

5.下列关于运算符new的描述中,错误的是(D)。

A.它可以创建对象或变量B.它可以创建对象数组或一般类型数组

C.用它创建对象或对象数组时要调用相应的构造函数D.用它创建的对象可以不用

delete运算符释放

6.在下面有关析构函数特征的描述中,正确的是(A)。

A.一个类中可以定义多个析构函数B.析构函数名与类名完全相同

C.析构函数不能指定返回类型D.析构函数可以由一个或多个参数

7.构造函数是在(B)时被执行的。

A.程序编译B.创建对象C.创建类D.程序装入内存

8.友元的作用之一是(A)。

A.提高程序的运行效率B.加强类的封装性

C.实现数据的隐藏性D.增加成员函数的种类

9.设置虚基类的目的是(B)。

A.简化程序B.消除二义性C.提高运行效率D.减少目标代码

10.回值的纯虚函数,正确的写法是(B)。

A.virtualshow()=0;B.virtualvoidshow();

C.virtualvoidshow()=0;D.voidshow()=0virtual;

11.重载函数在调用时选择的依据中,(B)是错误的。

A.函数名字B.函数的返回类型C.参数个数D.参数的类型

12.已知:intfun(int&a),m=10;下列调用fum()函数的语句中,正确的是(C)。

A.fun(&m);B.fun(m*2);C.fun(m);D.fun(m++);

13.下列各种类中,不能定义对象的类是(B)。

A.派生类B.抽象类C.嵌套类D.虚基类

14.类中定义的成员默认为(A)访问属性。

A.publicB.privateC.protectedD.friend

15.静态成员函数对类的数据成员访问(B)。

A.是不允许的B.只允许是静态数据成员

C.只允许是非静态数据成员D.可允许是静态数据成员或非静态数据成员

16.在下列语句中,将函数intf_sum(inlx,inly)正确重载的是(A)。

A.floatf_sum(intx,inty)B.intf_sum(inta,intb)

C.intf_sum(intx)D.floatf_sum(inta,intb)

17.下列各语句是输出字符A的,其中错误语句是(B)。

A.cout«'A';B.cout.put('A');C.charch='A';cout«ch;D.cout«put('A');

18.当将一个类A或函数f()说明为另一个类B的友元后,类A或函数f()能够直接访问类B

的(D)。

A.只能是公有成员B.只能是保护成员

C.只能是除私有成员之外的任何成员D.具有任何权限的成员

19.C++语言程序中进行文件操作时应包含的头文件是(A)o

A.fstream.hB.math.hC.stdlib.hD.strstrea.h

20.在C++程序中使用的cin标识符是系统类库中定义的(A)类中的一个对象。

A.istreamB.ostreamC.iostreamD.fstream

21.已知:charn=「;在下列表示引用的方法中,()是正确的。

A.char&x=n;B.char&y='p';C.char&z;D.float&t=&n;

22.在(A)情况下适宜采用内联函数。

A.函数代码小,频繁调用B.函数代码多,频繁调用

C.函数体含有递归语句D.函数体含有循环语句

23.如果表达式a+b中的“+”是作为友元函数重载的运算符,若采用运算符函数调用格式,

则可表示为()。

A.a.operator+(b)B.b.operator+(a)C.operator+(a,b)D.operator(a+b)

24.执行完循环for(i=l;i<100;i++);后,i的值为(B)。

A.99B.100C.101D.102

25.假定一个类对象数组为A[n],当离开它定义的作用域时,系统自动调用该类析构函数的

次数为(C)。

A.OB.1C.nD.n-l

26.在C++程序中使用的cout标识符是系统类库中定义的(B)类中的一个对象。

A.istreamB.ostreamC.iostreamD.fstream

二、填空题

1.在下面一段类定义中,Derived类是由直接基类Base1和Base2所派生的,Derived

类包含有两个间接基类BaseBase,在初始化函数Init中,需要把xl和x2的值分别赋给属

于基类Basel的x成员和属于基类Base2的x成员。

classBaseBase{

protected:

intx;

public:

BaseBase(){x=1;}

);

classBasel:publicBaseBase{

public:

Basel(){}

);

classBase2:publicBaseBase{

public:

Base2(){}

);

classDerived:⑴miblicBasel,⑵publicBase2

(

public:

Derived(){)

voidInit(intxl,intx2){

⑶Basel::x=xl;

⑷Base2::x=x2:

)

(5)voidoutputQ{cout«Basel::x«''«Base2::x«endl;}

);

2.该类中MaxA()函数的实现如下,请在标号位置补充适当的内容。

int⑴inta[1

(

intx=a[O];

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

if(a[il>x)(2)aLi+i=i1;

⑶break:

)

classA{

char*a;

public:

—(1)__〃定义无参构造函数,使a的值为空

A(char*aa){

a=_(2)___;

strcpy(a,aa);〃用aa所指字符串初始化a所指向的动态存储空间

)

—⑶__〃定义析构函数,删除a所指向的动态存储空间

);

classPoint

(

private:

intx,y;

public:

Point(){x=y=0;}

Point(intxO,intyO){x=xO;y=yO;

intGetX(){returnx;}

intGetY(){returny;}

voidPrint(){cout«',Point(,'«x«',,n«y«,'),'«endl;}

1Pointoperator+(Point&pt,inidd);〃友元函数声明

2;〃友元函数声明

);

Pointoperator+(Point&pt,intdd)

〃加号操作符重载函数,实现Point类对象与整数加法

Pointtemp=pt;

3;

temp.y+=dd;

returntemp;

Pointoperator+(Point&ptl,Point&pt2)

〃加号操作符重载函数,实现两个Point类对象的加法

(

Pointtemp;

temp.x=ptl.x+pt2.x;

4:

return5:

3.下列程序的功能是,建立磁盘文件l.txt,从键盘输入一行字符串,以回车键结束,将其

中的字母字符存放在文件l.txt中,请填空完成该程序。

#include<fstream>

usingnamaspacestd;

intmain()

(

chara[80];

;〃定义输出流对象outfile

if(!outfilel)

{cerrvv”打开文件出错!”《endl;

exit(l);

)

;//从键盘读入一行字符

for(inti=0;c[i]!=0;i++)

if()

cout«endl;

return0;

四、根据程序试写出运行结果

1.

#include<iostream.h>

voidmain()

(

inti,j;

int*pl,*p2;

pl=&i;p2=&j;

i=3;j=6;

cout«"i="«i«nj="«j«endl;

cout«n*pl="«*p1«"*p2="<<*p2«endl;

*pl=5;*p2=8;

cout«ni=H«i«uj=n«j«endl;

cout«n*p1=|,«*p1«"*p2="v<*p2«endl;

■,G:\拜拜\Debug\拜拜.exe--□X

i=3j=6

*pl=3*p2=6

i=5j=8

*pl=5*p2=8

Pressanykeytocontinue,

搜狗拼音输入法全:

2.

#include<iostream.h>

#include<string.h>

classCD{

char*a;

intb;

public:

voidInit(char*aa,intbb)

(

a=newchar[strlen(aa)+l];

strcpy(a,aa);

b=bb;

)

char*Geta(){returna;}

intGetb(){returnb;}

voidOutput。{cout«a<<''<vbv<endl;}

);

voidmain()

(

CDdx,dy;

chara[20];

dx.Init("abcdef;30);

strcpy(a,dx.Geta());

strcat(a,Mxyz");

dy.Init(a,dx.Getb()+20);

dx.OutputQ;

dy.OutputO;

一・G:\拜拜\Debug\拜拜.exe--□X

abcdef30

abcdefxyz50

Pressanykeytocontinue

搜狗拼音输入法全:

3.

#include<iostream.h>

classA{

inta[10];intn;

public:

A(intaal],intnn):n(nn){

for(inti=0;i<n;i++)a[i]=aa[i];

)

intGet(inti){returna[i];}

intSumA(intn){

ints=0;

for(intj=0;j<n;j++)s+=a[jl;

returns;

)

);

voidmain(){

inta[]={2,5,8,10,15,20};

Ax(a,4);

Ay(a,6);

intd=l;

for(inti=0;i<4;i++)d*=x.Get(i);

intf=y.SumA(5);

cout«"d=n«d«endl;

cout«"f="«f«endl;

拜拜\Debug\拜拜.exJ-□X

d=800

f=40

Pressanykeytocontinue

搜狗拼音输入法全:

4.

#include<iostream.h>

classcircle{

protected:

intr;

public:

voidsetr(intx){r=x;}

virtualvoidshow()=0;

);

classarea:publiccircle{

public:

voidshow()

{cout<v”这个圆的面积是「<<3.14*r*rvvendl;}};

classperimeter:publiccircle{

public:

voidshow()

{cout«”这个圆的周长是:n«2*3.14*r«endl;}};

voidmain()

{circle*ptr;

areaobi;

perimeterob2;

obl.setr(lO);

ob2,setr(10);

ptr=&obl;ptr->show();

ptr=&ob2;ptr->show();

)

■,・G:\拜拜\Debug\拜拜.exe--□X

这个圆的面积是:314

这个圆的周长是:62.8

Pressanykeytocontinue

搜狗拼音输入法全:

5.

#include<iostream.h>

classA{

public:

A(){cout«“A”;}

);

classB{

public:

B(){cout«nBM;}

);

classC:publicA{

public:

C(){cout«"CH;}

private:

Bb;

);

intmain()

Cobj;

return0;

■・G:\拜拜\Debug\拜拜.exe'□X

ABCPressanykeytocontinue

搜狗拼音输入法全:

6.

#include<iostream.h>

classsmall_cat{

doubleweight;〃普通数据成员,表示一只小猫的重量

staticdoubletotal_weight;〃静态数据成员,用来累计小猫的重量

staticdoubletotal_number;〃静态数据成员,用来累计小猫的只数

public:

small_cat(doublew)〃构造函数

{weight=w;

total_weight+=w;〃累加小猫的重量

total_number++;}〃累加小猫的只数

voiddisplayO

{cout«”这只小猫的重量是“vvweightvv"千克\n”;}

staticvoidtotal_disp()

{cout«total_number«M只的小猫的总重量是

cout«total_weightvv“千克"<<endl;}

);

doublesmall_cat::total_weight=0;〃静态数据成员初始化

doublesman_cat::total_number=0;〃静态数据成员初始化

intmain()

{small_catw1(0.5),w2(0.6),w3(0.4);

wl.displayO;//调用普通成员函数,显示第1只小猫的重量

w2.display();//调用普通成员函数,显示第2只小猫的重量

w3.display();//调用普通成员函数,显示第3只小猫的重量

small_cat::total_disp();〃调用静态成员函数

return0;)//显示小猫的只数和总重量

■'G:\拜拜\Debug\拜拜exe・□X

达只小猫的重量是0.5千克

同只小猫的重量是0.6千克

隹只小猫的重量是0.4千克

:只的小猫的总重量是L5千克

Pressanykeytocontinue

五、编程题

1.编程求圆、圆内接正方形和圈外切正方形的面积和周长。要求使用抽象类。

解:

ttinclude<iostream.h>

constdoublePI=3.1415;

classShape

(

public:

Shape(doublei)

{r=i;}

virtualvoidArea()=0;

virtualvoidPerimeter()=0;

protected:

doubler;

);

classCircle:publicShape

{

public:

Circle(doublei):Shape(i)

()

voidArea()

{cout<<"圆的面积是*«PI*r*r«endl;}

voidPerimeter()

{cout<<“圆的周长是*«2*PI*r«endl;}

);

classIn_Square:publieShape

(

public:

In_Square(doublei):Shape(i)

()

voidArea()

{cout<<”圆内接正方形的面积是"<<2*r*r〈<endl;}

voidPerimeter()

{cout<<”圆内接正方形的周长是*«4*1.414*r«endl;}

);

classEx_Square:publicShape

(

public:

Ex_Square(doublei):Shape(i)

()

voidArea()

{cout<<“圆外切正方形的面积是z,«4*r*r«endl;}

voidPerimeter()

{cout<〈”圆外切正方形的周长是zr«8*r«endl;}

};

voidmain()

(

Shape*ps;

ps=newCircle(8);

ps->Area();

ps->Perimeter();

ps=newIn_Square(8);

ps->Area();

ps->Perimeter();

ps=newEx_Square(8);

ps->Area();

ps->Perimeter();

deleteps;

)

(附上运行结果:

S3-G:\拜弟Dgbug\拜拜exe--□X

圆的面积是201.056

圆的周长是50.264

圆内接正方形的面积是128

圆内接正方形的周长是45.248

圆外切正方形的面积是256

圆外切正方形的周长是64

Pressanykeytocontinue

)

2.己知复数类Complex的声明如下:

classComplex

{public:

Complex();〃无参构造函数

Complex(double);〃转换构造函数

Complex(double,double);〃有两个形参的构造函数

friendComplexoperator+(Complex&,Complex&);〃对”运算符进行重载

friendostream&operator<<(ostream&,Complex&);〃对"<<”运算符进行重载

friendistreamfeoperator>>(istreamft,Complex&);〃对“>>”运算符进行重载

private:

doublereal,imag;

);

要求:(1)写出该类的所有构造函数的类外定义代码。

(2)写出对运算符“+”、“<<"、“>>”进行重载的运算符重载函数的定义。

3.编写程序,计算出复数对象cl和c2相加结果,并将其结果输出。

4.从建立的数据文件fl.dat中读入10个整数放在数组中,找出并输出10个数中的最大者

和它在数组中的序号。

解:

♦♦include<fstream>

#include<iostream>

usingnamespacestd;

intmain()

(

inta[10],max,i,order;

fstreaminfile("fl・dat”,ios::in);

if(!infile)

(

cerr«/*openerror!zr«endl;exit(1);}

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

(

infile»a[i];

cout«a[i]«*

)

cout«endl;

max=a[0];

order=0;

for(i=l;i<10;i++)

if(a[i]>max)

{max=a[i];order=i;}

cout«z,max=z,«max«endl<<*order="*«order«endl;infile,close

温馨提示

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

评论

0/150

提交评论