c++总复习试题.docx

上传人:b****6 文档编号:6166997 上传时间:2023-01-04 格式:DOCX 页数:82 大小:97.17KB
下载 相关 举报
c++总复习试题.docx_第1页
第1页 / 共82页
c++总复习试题.docx_第2页
第2页 / 共82页
c++总复习试题.docx_第3页
第3页 / 共82页
c++总复习试题.docx_第4页
第4页 / 共82页
c++总复习试题.docx_第5页
第5页 / 共82页
点击查看更多>>
下载资源
资源描述

c++总复习试题.docx

《c++总复习试题.docx》由会员分享,可在线阅读,更多相关《c++总复习试题.docx(82页珍藏版)》请在冰豆网上搜索。

c++总复习试题.docx

c++总复习试题

典型例题

解释程序功能并写出运行结果

1.#include

classs

intx,y;

public:

s(inta,intb){x=a;y=b;}

intgetx(){returnx;}

intgety(){returnx+y;}

};

voidmain()

int(s:

:

*fp)();

fp=s:

:

getx;

ss1(1,2);

intv=(s1.*fp)();

fp=s:

:

gety;

intt=(s1.*fp)();

cout<<"v="<

}

(答案:

v=2,t=7)

2.#include

voidmain()

{

inta[]={10,20,30,40},*pa=a;

int*&pb=pa;pb++;

cout<<*pa<

}

(答案:

20)

编程序例题

3.写一个程序,输入N个学生数据,包括学号、姓名、成绩,要求只输出成绩在60以下分数段的学生数据。

(答案:

#include

#include

#defineN3

classstud

{

intno;

charname[10];

intdeg;

public:

voidsetdata(intn,charna[],intd)

{

no=n;deg=d;

strcpy(name,na);

}

voiddisp()

{

if(deg<60)

printf("%-5d%-8s%3d\n",no,name,deg);

}};

voidmain()

{

studst[N];

inti,n,d;

charna[10];

for(i=0;i

printf("输入学号姓名成绩:

");

scanf("%d%s%d",&n,&na,&d);

st[i].setdata(n,na,d);

}

printf("输出数据\n");

printf("学号姓名成绩\n");

for(i=0;i

st[i].disp();

}

4.有一个向量类Vector,包括一个点的坐标位置x和y,设计两个友元函数,实现两个向量的加法和减法运算。

在主函数中实现向量(10,20)和(30,40)的加减运算。

(答案:

#include

classVector

{

intx,y;

public:

Vector(){}

Vector(inti,intj){x=i;y=j;}

voiddisp()

{

cout<<"("<

}

friendVectoradd(Vectorv1,Vectorv2)

{

Vectorv;

v.x=v1.x+v2.x;

v.y=v1.y+v2.y;

returnv;

}

friendVectorsub(Vectorv1,Vectorv2)

{

Vectorv;

v.x=v1.x-v2.x;

v.y=v1.y-v2.y;

returnv;

}};

voidmain()

{

Vectorv1(10,20),v2(30,40),v3;

v3=add(v1,v2);

cout<<"输出结果:

"<

cout<<"=";v3.disp();cout<

v3=sub(v1,v2);

cout<<"";v1.disp();cout<<"-";v2.disp();

cout<<"=";v3.disp();cout<

}

5.对+、-、×、/、++、--、>>、<<的重载。

6.对文件的操作。

复习题

1.下列语句中错误的是(D)

A.int*p=newint(10);  B.int*p=newint[10];  C. int*p=newint;  D.int*p=newint[40](0)

2.假设已经有定义char*constname=”chen”;下面的语句中正确的是(A)

A.name[3]=’q’;       B.name=”lin”;         C.name=newchar[5]  D.name=newchar(‘q’);

3.下面的类型声明中正确的是(D)

A.int&a[4]          B.int&*p;            C.int&&q;         D.intI,*p=&I;

4.在声明类时,下面的说法正确的是(C)

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

C.private、public、protected可以按任意顺序出现 D.没有用private、public、protected定义的数据成员是公有成员

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

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

6.在下面有关友元函数的描述中,正确的说法是(A)

A.友元函数是独立于当前类的外部函数         B.一个友元函数不能同时定义为两个类的有友元函数

C.友元函数必须在类的外部定义                D.在外部定义友元函数时,必须加关键字friend

7.使用派生类的主要作用是(A)

A.提高代码的可重用性 B.提高程序的运行效率  C.加强类的封装性   D.实现数据的隐藏

8.关于虚函数,正确的描述是(A)

A.构造函数不能是虚函数B.析构函数不能是虚函数C.虚函数可以是友元函数D.虚函数可以是静态成员函数

9.如果在基类中将成员函数show声明为不带返回值得纯虚函数,正确的写法是(C)

A.virtualshow()=0;    B.virtualvoidshow()   C.virtualvoidshow()=0; D.voidshow()=0virtual;

10.使用myFile.open(“sales.dat”,ios:

:

app)语句打开文件sales.dat后,则(A)

A.该文件只能用于输出 B.该文件只能用于输入 C.该文件既能用于输出,又能用于输入 D.若该文件存在,则清除该文件的内容

二、分析下列程序中的错误,并说明原因(前2题每题6分,第三题8分,共20分)

 

1.#include"iostream.h"

classstudent

{

 charname[10];

 intage;

 floataver;

 voidprintStu(){}

};

voidmain()

{

studentp1,p2,p3;

 p1.age=16;

//…

}

2.#include"iostream.h"

classstack

{

public:

 stack(intsz);

private:

 char*p;

 intsize;

};

stack:

:

stack(intsz)

{

 p=newchar[size=sz];

}

voidmain()

{

 stackstt;

 //...

}

 3.#include"iostream.h"

classCTest

{

public:

constinty2;

CTest(inti1,inti2):

y1(i1),y2(i2)

{

y1=10;

x=y1;

}

intreadme()const;

//...

private:

 intx;

 constinty1;

};

intCTest:

:

readme()const

{

 inti;

 i=x;

 x++;

 returnx;

}

voidmain()

{

 CTestc(2,8);

 inti=c.y2;

 i=c.y1;

}

 三、写出下列程序的运行结果(前2题每题6分,第三题8分,共20分)

 1.#include"iostream.h"

classtoy 

{

public:

 toy(intq,intp)

 {quan=q;price=p;}

 intget_quan()

 {returnquan;}

 intget_price()

 {returnprice;}

private:

 intquan,price;

};

intmain()

{

 toyop[2][2]={toy(10,20),toy(30,48),toy(50,68),toy(70,80)};

 inti;

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

 {

 cout<

 cout<

      cout<

 cout<

 }

 cout<<"\n";

 return0;

}

 

2.#include"iostream.h"

classStock

{

public:

 voidprint()

 {cout<<"Stockclass.\n";}

};

classDer1_Stock:

publicStock

{

public:

 voidprint()

 {cout<<"Deri1_Stockclass.\n";}

};

classDer2_Stock:

publicStock

{

public:

 voidprint()

 {cout<<"Deri2_Stockclass.\n";}

};

voidmain()

{

 Stocks1;

 Stock*ptr;

 Der1_Stockd1;

 Der2_Stockd2;

 ptr=&s1;

 ptr->print();

 ptr=&d1;

 ptr->print();

 ptr=&d2;

 ptr->print();

}

3.#include"iostream.h"

classA

{

public:

 A(inti):

xi(i){}

 A(){xi=0;}

 friendAoperator++(Aa);

 friendAoperator--(A&a);

 voidprint();

private:

 intxi;

};

Aoperator++(Aa)

{

 ++a.xi;

 returna;

}

Aoperator--(A&a)

{

  --a.xi;

 returna;

}

voidA:

:

print()

{cout<

voidmain()

{

 Ai(7);

 ++i;

 i.print();

 --i;

 i.print();

}

 二 1.答案:

p1.age=16;有错(3分),因为age是私有数据成员,不能直接访问(3分)

2.答案:

stackstt;有错,(3分)类中没有定义无参构造函数(3分)

 3.答案:

错误1:

y1=10;有错(2分),y1是常成员,不能修改(1分)

错误2:

x++;有错(2分),readme函数是常成员函数,不能修改对象的数据成员(1分)

错误3:

i=c.y1;有错(1分),y1是私有变量,不能直接存取(1分)

三 1.答案:

10,20;30,48;50,6870,80

2.答案:

Stockclass.

    Stockclass.

    Stockclass.

3.答案:

7

    6

B卷

一、选择题(每题2分,共20分,答案填写在题后的表格内)

1.假设已经有定义constchar*constname=”chen”;下面的语句中正确的是(D)

A.name[3]=’a’;      B.name=”lin”;       C.name=newchar[5]        D.cout<

2.假设已经有定义const char*name=”chen”;下面的语句中错误的是(A)

A.name[3]=’q’;      B.name=”lin”;       C.name=newchar[5]        D.name=newchar(‘q’);

3.在下面有关对构造函数的描述中,正确的是(B)

A.构造函数可以带有返回值 B.构造函数的名字与类名完全相同 C.构造函数必须带有参数 D.构造函数必须定义,不能缺省

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

 A.一个类可以定义多个析构函数B.析构函数名与类名完全相同C.析构函数不能指定返回类型 D.析构函数可以有一个或多个参数

5.在下面有关静态成员函数的描述中,正确的是(B)

A.在静态成员函数中可以使用this指针              B.在建立对象前,就可以为静态数据成员赋值

C.静态成员函数在类外定义时,要用static前缀       D.静态成员函数只能在类外定义

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

A.提高程序的运行效率 B.加强类的封装性   C.实现数据的隐藏性      D.增加成员函数的种类

7.假设已经定义好了一个类student,现在要定义类derived,它是从student私有派生的,定义类derived的正确写法是(C)

A.classderived:

:

studentprivate            B.classderived:

studentpublic

C.classderived:

privatestudent{//… }    D.classderived:

:

publicstudent{//… }

8.要实现动态联编,派生类中的虚函数(D)

A.返回的类型可以与虚函数的原型不同B.参数个数可以与虚函数的原型不同C.参数类型可以与虚函数的原型不同D.以上都不对

9.有关运算符重载正确的描述是(D)

A.C++语言允许在重载运算符时改变运算符的操作个数  B.C++语言允许在重载运算符时改变运算符的优先级

 C.C++语言允许在重载运算符时改变运算符的结合性   D.C++语言允许在重载运算符时改变运算符的原来的功能

10.假设定义了函数模板:

template

Tmax(Tx,Ty)

{return(x>y)?

x:

y;}

并定义了inti=6;charc=’a’;错误的调用语句是(D)

A.max(i,i)        B.max(c,c)          C.max((int)c,i)          D.max(i,c)

二、分析下列程序中的错误,并说明原因(前2题每题6分,第三题8分,共20分)

1.#include"iostream.h"

 classpoint

{public:

 intx,y;

 private:

 point(){x=1;y=2;}};

voidmain()

{pointcpoint;

cpoint.x=2;}

2.#include"iostream.h"

template

classStack

{public:

 Stack(intsz)

 {v=p=newT[size=sz];}

 ~Stack()

 {delete[]v;}

 voidpush(Tx)

 {*p++=x;}

 Tpop()

 {return*--p;}

 intlenth()const

 {return(p-v);}

 private:

 T*v,*p;

 intsize;};

voidmain()

{Stack obj(5);

 obj.push(10);}

3.#include"iostream.h"

classstudent

{intsno;

 intage;

voidprintStu();

voidsetSno(intd);};

voidprintStu()

{cout<<”\nStudentNo.is“<

voidsetSno(intd)

{sno=d;}

voidsetAge(inta)

{age=a;}

voidmain()

{studentlin;

lin.setSno(20021);

lin.setAge(20);

lin.printStu();}

三、写出下列程序的运行结果(前2题每题6分,第三题8分,共20分)

1.#include"iostream.h"

classb1

{public:

 b1(intii)

 {i=ii;}

 voiddisplay()

 {cout<

protected:

 inti;};

classb2

{public:

 b2(intjj)

 {j=jj;}

 voiddisplay()

 {cout<

protected:

 intj;};

classb3:

publicb1,publicb2

{public:

 b3(intii,intjj,intkk):

b1(ii),b2(jj)

 {k=kk;}

 voidsetall(intii,intjj,intkk)

 {i=ii;j=jj;k=kk;}

 voiddisplay()

 {cout<

 cout<

 cout<

private:

 intk;};

voidmain()

{b1o1(40);

 o1.display();

 b2o2(50);

 o2.display();

 b3o3(10,20,30);

 o3.display();

 o3.setall(50,60,70);

 o3.display();}

2.#include"iostream.h"

classStock

{public:

 virtualvoidprint()

 {cout<<"Stockclass.\n";}};

classDer1_Stock:

publicStock

{public:

 voidprint()

 {cout<<"Deri1_Stockclass.\n";}};

classDer2_Stock:

publicStock

{public:

 voidprint()

 {cout<<"Deri2_Stockclass.\n";}};

voidmain()

{Stocks1;

 Stock*ptr;

 Der1_Stockd1;

 Der2_Stockd2;

 ptr=&s1;

 ptr->print();

 ptr=&d1;

 ptr->print();

 ptr=&d2;

 ptr->print();}

3.#include

constintsize=10;

template     //声明一个类模板

classstack

{public:

   voidinit(){tos=0;}

   voidpush(Typech);  //参数取Type类型

   Typepop();          //返回类型取Type类型

 private:

    Typestck[size]; //数组的类型为类型参数Type,即可取任意类型                  

    inttos;};

template

voidstack:

:

push(Typeob)

{if(tos==size){cout<<"stackisfull";return;}

   stck[tos]=ob;tos++;}

template

Typestack:

:

pop()

 {if(tos==0)

   {cout<<"stackisempty";

       return0;}

   tos--;

   returnstck[tos];}

intmain()

{   //定义字符堆栈

 stacks1,s2;  //创建两个模板参数为char型的对象

                               

 inti;

 s1.init(); s2.init();

 s1.push('a');s2.push('x');

 s1.push('b');s2.push('y');

 s1.push('c');s2.push('z');

 for(i=0;i<3;i++)cout<<"pops1:

"<

 for(i=0;i<3;i++)cout<<"pops2:

"<

 return0;}

二、分析下列程序中的错误,并说明原因(前2题每题6分,第三题8分,共20分)

1.答案:

pointcpoint;是错误的(3分),因为构造函数是私有成员(3分)

2.答案:

Stack obj(5);有错(3分),因为Stack是类模板,应将模板实例化,才可定义对象(3分)

3.答案:

错误1:

printStu、setSno两个成员函数不是公有成员,不允许在类外访问(4分)

    错误2:

成员函数在类外定义,应加上类名“student:

”(2分)

    错

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1