最新C++期末练习题带答案资料.docx
- 文档编号:25925724
- 上传时间:2023-06-16
- 格式:DOCX
- 页数:26
- 大小:52.63KB
最新C++期末练习题带答案资料.docx
《最新C++期末练习题带答案资料.docx》由会员分享,可在线阅读,更多相关《最新C++期末练习题带答案资料.docx(26页珍藏版)》请在冰豆网上搜索。
最新C++期末练习题带答案资料
(一)读程序题
1.类中包括其他类的对象成员,构造函数中要列出成员对象名带实参,生成该类对象时,要先调用成员对象的构造函数。
如果是成员对象的缺省构造函数可以不列,但生成该类对象时,仍要先调用成员对象的缺省构造函数。
1.如下程序运行时的输出结果是1135。
#include
classONE
{
intc;
public:
ONE():
c(0){cout<<1;}
ONE(intn):
c(n){cout<<3;}
};
classTWO:
publicONE{
ONEone1;
ONEone2;
public:
TWO(intm):
one2(m){cout<<5;}
};
voidmain()
{
TWOt
(2);
}
二.派生类构造函数中要列出基类名带实参,生成派生类对象时,要先调用基类的构造函数,再调用派生类的构造函数。
冲突规则与支配规则。
2.如下程序运行时的输出结果是。
#include
classA{
public:
intx;
A(){x=10;}
A(inti){x=i;}
voidShow(){cout<<"x="< }; classB{ public: inty; B(){y=30;} B(inti){y=i;} voidShow(){cout<<"y="< }; classC: publicA,publicB{ public: inty; C(inta,intb,intc): A(a),B(b+30){y=c;} voidShow(){cout<<"y="< }; voidmain(void){ Cc1(20,30,40); c1.y=10; c1.Show();c1.A: : Show();c1.B: : Show(); } 三.派生类中包含对象成员,构造函数中要列出基类名带实参,再列出成员对象名带实参,生成派生类对象时,要先调用基类的构造函数,再调用成员对象的构造函数,最后调用派生类的构造函数。 如果是调用基类或成员对象的缺省构造函数可以不列,但生成派生类对象时,仍要先调用基类的缺省构造函数,再调用成员对象的缺省构造函数。 构造函数与析构函数调用顺序相反。 3.如下程序运行时的输出结果是。 #include classA{ public: A(){cout<<"A()\n"; } ~A(){cout<<"~A()\n"; } }; classB{ public: B(){cout<<"B()\n";} ~B(){cout<<"~B()\n";} }; classC: publicB,publicA{ Aa; public: C(){cout<<"C()\n";} ~C(){cout<<"~C()\n";} }; voidmain(){ Cc1; } 4.如下程序运行时的输出结果是。 #include classA{ public: A(){ cout<<'A'< } }; classT{ Aa; public: T(){ cout<<'T'< } }; classX: publicA{ Tt; public: X(){ cout<<'X'< } }; voidmain() { Xob; } 三.虚基类 5.下列程序运行后的输出结果是。 #include classA{ public: A(){cout<<"A\n";} ~A(){cout<<"~A\n";} }; classB: virtualpublicA{ public: B(): A(){cout<<"B\n";} ~B(){cout<<"~B\n";} }; classC: publicvirtualA{ public: C(): A(){cout<<"C\n";} ~C(){cout<<"~C\n";} }; classD: publicC,publicB{ public: D(): B(),C(),A(){cout<<"D\n";} ~D(){cout<<"~D\n";} }; voidmain() {Dd1;} 6.下列程序的输出结果是。 #include classA{ public: A(){cout<<"A\n";} ~A(){cout<<"~A\n";} }; classB: publicA{ public: B(): A(){cout<<"B\n";} ~B(){cout<<"~B\n";} }; classC: publicA{ public: C(): A(){cout<<"C\n";} ~C(){cout<<"~C\n";} }; classD: publicC,publicB{ public: D(): B(),C(){cout<<"D\n";} ~D(){cout<<"~D\n";} }; voidmain() {Dd1;} 7.下列程序的输出结果是。 #include #include classB{ charstr[20]; public: B(char*s="default"){strcpy(str,s);cout< }; classIh1: publicvirtualB{ charstr1[20]; public: Ih1(char*s1,char*s2): B(s1){strcpy(str1,s2);cout< }; classIh2: publicvirtualB{ charstr2[20]; public: Ih2(char*s1,char*s2): B(s1){strcpy(str2,s2);cout< }; classIh3: publicIh1,publicIh2{ charstr3[20]; public: Ih3(char*s1,char*s2,char*s3,char*s4): Ih1(s1,s2),Ih2(s1,s3) {strcpy(str3,s4);cout< }; voidmain() { Ih3h3("abc","def","ghi","jkl"); } 四.运行时多态 8.下列程序的输出结果是。 #include classA{ public: virtualvoidf1(){cout<<"类A中的f1\n";} virtualvoidf2(){cout<<"类A中的f2\n";} voidf3(){cout<<"类A中的f3\n";} }; classB: publicA{ public: voidf1(){cout<<"类B中的f1\n";} voidf2(int){cout<<"类B中的f2\n";} voidf3(){cout<<"类B中的f3\n";} }; voidmain(){ Aa1,*p; Bb1; p=&b1; p->f1();p->f2();p->f3(); } 9.如下程序运行时的输出结果是。 #include classA{ public: virtualvoidf(){cout<<1;} voidg(){cout<<2;} }; classB: publicA{ public: virtualvoidf(){cout<<3;} voidg(){cout<<4;} }; voidshow(A&a){a.f();a.g();} voidprint(A*p){p->f();p->g();} voidmain(){ Bb; show(b); print(&b);} 10.如下程序运行时的输出结果是。 #include #include classP{ public: P(char*s){ name=newchar[strlen(s)+1]; strcpy(name,s); } virtualvoidprint(){ cout<<"Iam"< } ~P(){ delete[]name; } protected: char*name; }; classS: publicP{ public: S(char*s,doubleg): P(s){ gj=g; } voidprint(intk){ cout< } private: doublegj; }; classF: publicP{ public: F(char*s,intn): P(s){ pub=n; } voidprint(){ cout< } private: intpub; }; voidmain() { inta=25; P*p; Ppers("Zhang"); Sstud("Wang",3.6); Fprof("Li",4); p=&pers; p->print(); p=&stud; p->print(); p=&prof; p->print(); stud.print(a); } 11.如下程序运行时的输出结果是。 #include classA{ intx,n; intmul; public: A(inta,intb){ x=a; n=b; mul=10; } virtualintpower(void){ mul=1; for(inti=1;i<=n;i++) mul*=x; returnmul; } voidshow(void){ cout< } }; classB: publicA{ inty,m; intp; public: B(inti,intj,intk,inth): A(i,j){ y=k; m=h; p=10; } intpower(void){ p=1; for(inti=1;i<=m;i++) p*=y; returnp; } voidshow(void){ A: : show(); cout< } }; voidfun(A*f){ cout< } voidmain() { Aa(4,3),*p; Bb(2,4,3,3); p=&a; fun(p); p=&b; fun(p); b.show(); } 12.如下程序运行时的输出结果是。 #include classAnimal{ public: virtualchar*getType(){return“Animal”;} virtualchar*getVoice(){return“Voice”;} }; classDog: publicAnimal{ public: char*getType(){return“Dog”;} char*getVoice(){return“Woof”;} }; voidtype(Animal&a){cout< voidspeak(Animala){cout< voidmain(){ Dogd;type(d); cout<<”speak”; speak(d);cout< } 五.友元函数 13.#include classSample{ friendlongfun(Samples); public: Sample(longa) {x=a;} private: longx; }; longfun(Samples){ if(s.x<2)return1; returns.x*fun(Sample(s.x-1)); } voidmain() { intsum=0; for(inti=0;i<5;i++)sum+=fun(Sample(i)); cout< } 六.运算符重载 14.写出运算符重载函数调用形式。 classA{intm,n; public: A(intx=0,inty=0){m=x;n=y;} Aoperator++(){++m;++n;return*this;} Aoperator++(int){At=*this;++(*this);returnt;} friendAoperator--(A&t){--t.m;--t.n;returnt;} friendAoperator--(A&t,int){Atemp=t; --t.m;--t.n;returntemp;} voidmain(){Aa1(1,2),a2(3,4),a3,a4; a3=++a1;// a4=a2++;// a3=--a1;// a4=a2--;// 15.写出运算符重载函数调用形式。 classComplex{ intyuan,jiao,fen; public: Complex(inty=0,intj=0,intf=0){ yuan=y;jiao=j;fen=f;} operatorfloat(); }; Complex: : operatorfloat(){ floatamount; amount=(yuan*100.0+jiao*10.0+fen)/100; returnamount;} voidmain(){ Complexd1(10,20,30);floats1; s1=d1;//} 16.如下程序运行时的输出结果是。 定义一个数组类Array,通过成员函数重载“+=”运算符,通过友元函数重载“-=”运算符,实现数组的加等、减等运算。 具体要求如下: (1)私有数据成员 lfloat*pa;//表示一维数组 lintn;//数组的大小 (2)公有成员函数 lArray(float*p,intx): 构造函数,以形参初始化数据成员; lvoidoperator+=(Array&t): 实现数组对象的加等运算; lfriendvoidoperator-=(Array&t1,Array&t2): 实现数组对象的减等运算; lvoidprint(): 以每行5个元素的格式输出数组; l~Array(): 析构函数,释放动态内存。 (3)对所定义的类进行测试。 #include classArray{ float*pa; intn; public: Array(float*p,intx){ n=x; pa=newfloat[n]; for(inti=0;i } voidoperator+=(Array&t){for(inti=0;i friendvoidoperator-=(Array&t1,Array&t2){ for(inti=0;i } voidprint(){ for(inti=0;i cout< if((i+1)%5==0)cout<<'\n'; } } ~Array(){delete[]pa;} }; voidmain(){ floata[10]={1,2,3,4,5,6,7,8,9,10},b[10]={0,1,2,3,4,5,6,7,8,9}; Arraya1(a,10),a2(b,10); a1+=a2; a1.print(); a1-=a2; a1.print(); } 一、函数编程 1.求素数问题: 定义函数判断一个整数是否为素数,求300以内的素数,每行3个数形式输出。 2.最大公约数和最小公倍数问题: 求两分数之和并输出结果,要求: 将求最小公倍数和最大公约数设计成独立的函数。 (提醒: 分子、分母可分别用两个整型变量表示。 之和的分母就是两分数分母的最小公倍数;输出示例: cout<<3<<”/”<<7;就完成了分数3/7的输出显示。 ) 3.一维数组排序与元素移动综合题: (1)定义整型数组a[10],从键盘输入10个数为数组赋值,并分别定义两个独立函数,voidprint(intb[])实现将一维数组元素输出,voidsort(intb[],intn)实现将一维数组的元素按从小到大排序(用两种方法实现)。 最后在主函数中分别调用两个函数。 4.二维数组与元素移动: (1)定义一个二维数组intb[2][3],从键盘输入为二维数组赋值,将二维数组中按列循环前移或后移一位,并以矩阵形式输出二维数组元素。 (2)定义一个二维数组,inta[4][4],求其外围元素之和与对角线之和,并以矩阵形式输出二维数组元素。 (求和用两种方法实现) 5.字符串处理: 设计一个通用函数实现在字符串s1中从第m个字符开始插入字符串s2,在主程序中对该函数进行测试。 初始状态: s1: abcdefg s2: 1234 输入插入字符串的位置: 3 目标状态: s1: ab1234cdefg s2: 1234 6.拼数与合数问题: (1)在主函数中定义一个一维数组a[4]用来存放4个整型数3,12,0,1,并依次输出一维数组中的元素。 (2)依次取出数组中的元素,利用合数算法将这些元素合成一个数,要求合数的过程写成独立函数的形式,编写intfun(intb[],intn)函数,其中b为一维数组,n为b数组中包含的元素个数。 该函数用来实现合数过程,并在主函数中调用该函数,并在主函数中输出合成之后的数。 7.数字字符与整数转换算法: 将字符串#ab78c15fk23d*中整型数据提取出来,合成一个整型数781523并输出来。 再将781523整数的各个数位数字拆开存放到一维数组intb[10]中,并将一维数组中的元素转换为数字字符存放到字符数组s[100]中,并输出该数字字符串"325187". 8.字符数组: (1)定义一个字符数组chars[100]={"abc123"};定义两个函数分别实现将字符串逆序排序和按照字符的ASCII码从小到大排序,输出并操作后的字符串。 (2)定义两个字符数组: chars1[100]="apple",s2[100]={"tree"};将两个字符数组拼接成一个字符串(不用拼接函数),并输出拼接前和拼接后的两个字符串。 9.请从键盘输入一个正整数,求这个数是几位数,并求出该正整数的各个位上的数字之和。 如输入1234,该正整数是4位数,各个数位上的数字之和为10. 10、循环结构: 请从键盘输入一个正整数,求这个数是几位数,并求出该正整数的各个位上的数字之和。 如输入1234,该正整数是4位数,各个数位上的数字之和为10. 11、从键盘上输入一个整数n的值,按下式求出y的值,并输出n和y的值。 y=1! +2! +3! +┄+n! 12、求1-1/2+1/3-1/4+……+1/99-1/100的和。 13、求1+1/1! +1/2! +……+1/10! 的和 14、从键盘输入一个整数n,将该整数的每一位上的数字拆开,存放到一维数组inta[10]中,该过程用独立函数形式实现。 并将一维数组中的元素取出合成一个数,并输出合成的数和一维数组元素。 如n: 1234,存放到一维数组中的顺序为4321,合成一个数为4321。 二、类的编程: 用类解决实际问题的方法分三个步骤,如下: 1、定义类的框架 2、公有成员函数的实现 3、在主函数中测试类(用类定义对象,并用对象调用成员函数) (一)数据成员为一维数组时 问题描述如下: (1)定义一个类Array,它的数据成员和成员函数如下: 私有数据: intb[10],intm; 公有成员函数: Array(intt[]);//功能为一维数组b初始化 Voidfun();//求一维数组b的最大值为m voidsort();//功能为实现对一维数组从大到小排序 voidmove();//功能为将一维数组元素循环后移一位 voidprint();//功能为输出一维数组元素 (2)用类定义对象arr,并用对象arr调用成员函数,实现对一维数组元素排序和数组元素循环后移一位,并输出每次操作的结果。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 C+ 期末 练习题 答案 资料
![提示](https://static.bdocx.com/images/bang_tan.gif)