西安交大C++程序设计第十章作业文档格式.docx
《西安交大C++程序设计第十章作业文档格式.docx》由会员分享,可在线阅读,更多相关《西安交大C++程序设计第十章作业文档格式.docx(26页珍藏版)》请在冰豆网上搜索。
wang!
intmain()
Base*ptr;
Baseb1;
FirstBf1;
SecondBs1;
cout<
指向基类Base:
\t"
ptr=&
b1;
ptr->
display();
\n指向派生类FirstBase:
f1;
\n指向派生类SecondB:
s1;
endl;
return0;
}
2.实验结果:
(二)第二题:
扩充例10-5,从中派生一个正方形类和圆柱体类,写一个测试程序,输出正方形的面积和圆柱体的体积。
验结果:
(三)第三题:
扩充实例编程中的日期类,为Date增加一个成员函数,可以判断日期是否为系统当前日期。
从键盘输入你的生日,如果今天是你的生日则显示:
“HarryBirthday!
”否则显示“还有**天是你的生日”或者“你的生日已经过去了**天,距离明年生日还有**天”。
<
Pleaseinputyourbirthday:
inta,b;
cin>
>
a>
b;
Datebirthday(a,b);
(birthday);
}
2.实验结果:
四、第四题:
完成上一章实验第5题红颜色的函数功能:
5、采用继承方式定义一个三层生日蛋糕类,不论基类还是派生类都至少包含5个函数:
构造函数、设置数据成员函数、求蛋糕体积、运算符>
重载函数、输出生日祝词与蛋糕形状函数。
并编写主函数测试各成员函数。
继承方式如下:
首先定义圆柱体形状蛋糕类,只有3个数据成员,半径、高、生日祝词。
然后派生出圆柱体_方柱体蛋糕类,即在圆柱体形状上增加方柱体形状。
假定方柱体的正方形面积小于圆柱体的圆形面积,注意方柱体的高与正方形的边长不一定相等。
再用圆柱体_方柱体蛋糕类派生出圆柱体_方柱体_菱形体蛋糕类,即在方柱体形状上增加菱形柱体形状。
假定菱形柱体的菱形面积小于方柱体的正方形面积。
提示:
①?
运算符>
重载指两个蛋糕对象的体积大小。
?
②基类和派生类数据成员不能定义为public。
③设置数据成员函数、求蛋糕体积、求蛋糕表面积函数、输出生日祝词与蛋糕形状函数均为同名重载函数,例如分别采用函数名为init()、volume()、area()、output()。
程序运行参考图如下:
(红颜色的功能下一章实验完成)
五、第五题:
(必做题)定义一个一元二次方程类,通过继承方式定义一元三次方程类,再继承定义一元四次方程类。
类中至少包含构造函数、求根函数、运算符+重载函数、运算符-重载函数、运算符==重载函数、输出方程的函数等6个函数,并编写主函数测试各成员函数。
①两个一元三次方程对应相加仍然是一个一元三次方程;
②求根方法采用迭代方法,迭代公式为:
Xn+1=Xn-F(Xn)/F’(Xn),结束迭代的条件|F(Xn+1)|<
10-7与|Xn+1-Xn|<
10-7同时成立;
③一元三次方程的一般形式如下:
F(X)=AX3+BX2+CX+D=0。
输出方程格式为:
A*X^3+B*X^2+C*X+D=0;
④两个一元三次方程对应相加和对应相减仍然是一元三次方程。
⑤假定类中的方程系数能求解出实根。
不考虑方程存在虚根和无根的情况。
求根函数应该有一个参数,该参数指明迭代初值。
例如方程2X3-4X2+3x-6=0在附近的根。
又例如方程X3+12X2+48X+64=0在附近的根。
例如方程X4-10X3+35X2-50x+24=0在附近的根。
又例如方程X4+12X3+54X2+108X+81=0在附近的根。
因此类中数据成员除了系数外,还应考虑迭代初值作为数据成员。
1.源程序代码:
cmath>
classEquation2
protected:
doubleA,B,C;
doubleX0;
Equation2(doublea=1,doubleb=1,doublec=1,doublex0=
Set(a,b,c,x0);
voidSet(doublea,doubleb,doublec,doublex0)
A=a;
B=b;
C=c;
X0=x0;
doubleroot()
doubleX=X0;
doubletemp;
do
{
temp=X;
X=X-((A*X*X+B*X+C)/(2*A*X+B));
}while(fabs(X)>
=10e-7||fabs(temp-X)>
=10e-7);
returnX;
Equation2operator+(Equation2eq2)
A=A+;
B=B+;
C=C+;
return*this;
Equation2operator-(Equation2eq2)
A=;
B=;
C=;
Equation2operator==(Equation2eq2)
if(A/==B/&
&
B/==C/
cout<
YES!
else
NO!
voidPrint()
A<
X^2+"
B<
X+"
C<
=0"
classEquation3:
publicEquation2
doubleD;
Equation3(doublea=1,doubleb=1,doublec=1,doubled=1,doublex0=
Set(a,b,c,d,x0);
voidSet(doublea,doubleb,doublec,doubled,doublex0)
Equation2:
:
Set(a,b,c,x0);
D=d;
X=X-((A*X*X*X+B*X*X+C*X+D)/(3*A*X*X+2*B*X+C));
Equation3operator+(Equation3eq3)
D=D+;
Equation3operator-(Equation3eq3)
D=;
Equation3operator==(Equation3eq3)
B/==C/&
C/==D/
X^3+"
D<
classEquation4:
publicEquation3
doubleE;
Equation4(doublea=1,doubleb=1,doublec=1,doubled=1,doublee=1,doublex0=
Set(a,b,c,d,e,x0);
voidSet(doublea,doubleb,doublec,doubled,doublee,doublex0)
Equation3:
Set(a,b,c,d,x0);
E=e;
X=X-((A*X*X*X*X+B*X*X*X+C*X*X+D*X+E)/(4*A*X*X*X+3*B*X*X+2*C*X+D));
Equation4operator+(Equation4eq4)
E=E+;
Equation4operator-(Equation4eq4)
E=;
Equation4operator==(Equation4eq4)
C/==D/&
D/==E/
X^4+"
E<
Equation2equation2(2,3,4,,equation21;
Equation3equation3(2,3,4,5,,equation31;
Equation4equation4(2,3,4,5,6,,equation41;
方程为:
\n"
();
测试根:
\n二次:
();
\n三次:
\n四次:
测试加法:
equation2+equation21;
equation3+equation31;
equation4+equation41;
\n测试减法:
equation2-equation21;
equation3-equation31;
equation4-equation41;
六、第六题:
给自定义虚数类增加运算符*、/、++、--、==重载,注意++和--分前置和后置两种情况,编写主函数加以测试。
3.问题分析:
(七)第七题:
完善上一章定义大整数类的题目,成员函数包括加、减以及判大小,注意用运算符重载,编写主函数加以测试。
cstring>
#include<
algorithm>
classczs
intnum[100];
intlen;
charsign;
czs()
for(inti=0;
i<
100;
i++)
num[i]=0;
len=0;
sign='
'
voidset(char*str)
if(str[0]=='
-'
)
str++;
sign='
elseif(str[0]=='
+'
len=strlen(str);
for(inti=100-len;
num[i]=str[i+len-100]-'
0'
voidprint()
sign;
inti=100-len;
while(num[i]==0)
i++;
if(i>
=100)
0"
for(;
num[i];
czsoperator+(czs&
a)
if(sign==
intb=max(len,;
for(inti=99;
i>
100-b;
i--)
{
num[i]=num[i]+[i];
num[i-1]=num[i-1]+num[i]/10;
num[i]=num[i]%10;
}
num[100-b]=num[100-b]+[100-b];
}
else
if(len>
for(inti=99;
=len;
{
num[i]=num[i][i];
if(num[i]<
0)
{
num[i]=num[i]+10;
num[i-1]--;
}
}
elseif(len<
sign=;
num[i]=[i]-num[i];
[i-1]--;
else
intb=0;
for(inti=100-len;
if(num[i]!
=[i])
if(num[i]<
[i])
b=1;
break;
if(b)
sign=;
for(inti=99;
num[i]=[i]-num[i];
else
num[i]=num[i][i];
}}
czsoperator-(czsa)
if(sign!
=
if(sign='
sign='
if(sign='
sign='
else
sign=;
czsoperator>
(czs&
czs:
operator-(a);
if(sign=='
inti=100-len;
while(num[i]==0&
100)
i++;
if(i==100)
cout<
="
voidmain()
chara[100],c[100],b[100];
czsd,e,f;
请输入三个数:
b>
c;
(a);
(b);
(c);
前两个数的和为:
d+e;
前两个数的和减去第三个数为:
d-f;
减去后所得的数"
d>
f;
第三个数"