c++总复习试题.docx
- 文档编号:6166997
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:82
- 大小:97.17KB
c++总复习试题.docx
《c++总复习试题.docx》由会员分享,可在线阅读,更多相关《c++总复习试题.docx(82页珍藏版)》请在冰豆网上搜索。
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() { //定义字符堆栈 stack 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分) 错
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+ 复习 试题
![提示](https://static.bdocx.com/images/bang_tan.gif)