c++实验报告.docx

上传人:b****5 文档编号:7361737 上传时间:2023-05-11 格式:DOCX 页数:13 大小:16.40KB
下载 相关 举报
c++实验报告.docx_第1页
第1页 / 共13页
c++实验报告.docx_第2页
第2页 / 共13页
c++实验报告.docx_第3页
第3页 / 共13页
c++实验报告.docx_第4页
第4页 / 共13页
c++实验报告.docx_第5页
第5页 / 共13页
c++实验报告.docx_第6页
第6页 / 共13页
c++实验报告.docx_第7页
第7页 / 共13页
c++实验报告.docx_第8页
第8页 / 共13页
c++实验报告.docx_第9页
第9页 / 共13页
c++实验报告.docx_第10页
第10页 / 共13页
c++实验报告.docx_第11页
第11页 / 共13页
c++实验报告.docx_第12页
第12页 / 共13页
c++实验报告.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

c++实验报告.docx

《c++实验报告.docx》由会员分享,可在线阅读,更多相关《c++实验报告.docx(13页珍藏版)》请在冰点文库上搜索。

c++实验报告.docx

c++实验报告

实验七项目名称:

多态

实验目的:

C++中运算符重载的基本操作

操作题一:

1.完成对分数的+,-,*,/进行重载为类的友元函数,提示如下:

a)请将已有程序1.cpp补充完整;

b)仔细阅读程序中注释语句。

思考题:

分析voidoptim()成员函数的功能?

2.请在实验报告中记下在VC6.0中调试程序过程中的系统错误,以及解决办法。

ps:

完成实验报告七,将思考题答案写在实验报告中!

 

题目

#include

#include

#include

usingnamespacestd;

 

classfraction

{

public:

fraction(intx=0,inty=1);

voidprint();//以“/”的分数形式输出

//定义重载运算符的友元函数

 

private:

intnumerator,denominator;//numerator为分子,denominator为分母

voidoptim();//详细分析该函数功能

};

voidfraction:

:

optim()//请解释出现的if-else对照的实际情况及do-while循环的作用

{

intgcd,min,max;

if(denominator==0)

{

cout<<"Azerodenominatorisinvalid"<

exit

(1);

}

gcd=(abs(numerator)>abs(denominator)?

abs(denominator):

abs(numerator));

if(gcd==0)return;//注意:

return语句的特殊用法

if(abs(numerator)>abs(denominator))

{

max=numerator;

min=denominator;

}

else

{

min=numerator;

max=denominator;

}

do

{

gcd=max%min;

max=min;

min=gcd;

}while(gcd!

=0);

numerator/=max;

denominator/=max;

if(denominator<0)

{

numerator=-numerator;

denominator=-denominator;

}

}

fraction:

:

fraction(intx,inty)

{//将构造函数补充完整

 

}

voidfraction:

:

print()

{//将该函数补充完整

 

}

//四个运算符重载函数具体实现

 

intmain()//1.记下调试过程中出现的系统错误及解决办法;2.调试通过后将运行结果记在实验报告八中

{

cout<<"输入测试数据:

"<

fractionr1(2,8),r2(23,45),r3,r4(-63,789),r5(3),r6(56,-894),r7(0,3),r8(-12,-48);

cout<<"原始数据:

r1(2,8)"<

cout<<"处理后数据r1=";

r1.print();

cout<<"原始数据:

r2(23,45)"<

cout<<"处理后数据r2=";

r2.print();

cout<<"原始数据:

r3"<

cout<<"处理后数据r3=";

r3.print();

cout<<"原始数据:

r4(-63,789)"<

cout<<"处理后数据r4=";

r4.print();

cout<<"原始数据:

r5(3)"<

cout<<"处理后数据r5=";

r5.print();

cout<<"原始数据:

r6(56,-894)"<

cout<<"处理后数据r6=";

r6.print();

cout<<"原始数据:

r7(0,3)"<

cout<<"处理后数据r7=";

r7.print();

cout<<"原始数据:

r8(-12,-48)"<

cout<<"处理后数据r8=";

r8.print();

cout<<"下一组运算结果:

"<

r3=r1+r2;

cout<<"r1+r2=";

r3.print();

r3=r1-r2;

cout<<"r1-r2=";

r3.print();

r3=r1*r2;

cout<<"r1*r2=";

r3.print();

r3=r1/r2;

cout<<"r1/r2=";

r3.print();

return0;

}

 

答案

#include

#include

#include

//usingnamespacestd;

 

classfraction

{

public:

fraction(intx=0,inty=1);

voidprint();//以“/”的分数形式输出

//定义重载运算符的友元函数

friendfractionoperator+(fractionf1,fractionf2);

friendfractionoperator-(fractionf1,fractionf2);

 

friendfractionoperator*(fractionf1,fractionf2);

friendfractionoperator/(fractionf1,fractionf2);

private:

intnumerator,denominator;//numerator为分子,denominator为分母

voidoptim();//详细分析该函数功能

};

 

voidfraction:

:

optim()//请解释出现的if-else对照的实际情况及do-while循环的作用

{

intgcd,min,max;

if(denominator==0)

{

cout<<"Azerodenominatorisinvalid"<

exit

(1);

}

gcd=(abs(numerator)>abs(denominator)?

abs(denominator):

abs(numerator));

if(gcd==0)return;//注意:

return语句的特殊用法

if(abs(numerator)>abs(denominator))

{

max=numerator;

min=denominator;

}

else

{

min=numerator;

max=denominator;

}

do

{

gcd=max%min;

max=min;//最大公约数

min=gcd;

}while(gcd!

=0);//最大公倍数numerator*denominator/max;

 

numerator/=max;//numerator=numerator/max;

denominator/=max;//denominator=denominator/max;

//变成最简分数

if(denominator<0)

{

numerator=-numerator;

denominator=-denominator;

}

}

 

fraction:

:

fraction(intx,inty)

{//将构造函数补充完整

numerator=x;

denominator=y;

}

voidfraction:

:

print()

{//将该函数补充完整

optim();

cout<

}

//四个运算符重载函数具体实现

fractionoperator+(fractionf1,fractionf2)

{

fractionf;

f.numerator=f1.numerator*f2.denominator+f1.denominator*f2.numerator;

f.denominator=f1.denominator*f2.denominator;

returnf;

}

fractionoperator-(fractionf1,fractionf2)

{

fractionf;

f.numerator=f1.numerator*f2.denominator-f1.denominator*f2.numerator;

f.denominator=f1.denominator*f2.denominator;

returnf;

}

 

fractionoperator*(fractionf1,fractionf2)

{

fractionf3;

f3.numerator=f1.numerator*f2.numerator;

f3.denominator=f1.denominator*f2.denominator;

returnf3;

}

fractionoperator/(fractionf1,fractionf2)

{

fractionf4;

f4.numerator=f1.numerator*f2.denominator;

f4.denominator=f1.denominator*f2.numerator;

returnf4;

}

 

intmain()//1.记下调试过程中出现的系统错误及解决办法;2.调试通过后将运行结果记在实验报告八中

{

cout<<"输入测试数据:

"<

fractionr1(2,8),r2(23,45),r3,r4(-63,789),r5(3),r6(56,-894),r7(0,3),r8(-12,-48);

cout<<"原始数据:

r1(2,8)"<

cout<<"处理后数据r1=";

r1.print();

cout<<"原始数据:

r2(23,45)"<

cout<<"处理后数据r2=";

r2.print();

cout<<"原始数据:

r3"<

cout<<"处理后数据r3=";

r3.print();

cout<<"原始数据:

r4(-63,789)"<

cout<<"处理后数据r4=";

r4.print();

cout<<"原始数据:

r5(3)"<

cout<<"处理后数据r5=";

r5.print();

cout<<"原始数据:

r6(56,-894)"<

cout<<"处理后数据r6=";

r6.print();

cout<<"原始数据:

r7(0,3)"<

cout<<"处理后数据r7=";

r7.print();

cout<<"原始数据:

r8(-12,-48)"<

cout<<"处理后数据r8=";

r8.print();

cout<<"下一组运算结果:

"<

r3=r1+r2;

cout<<"r1+r2=";

r3.print();

r3=r1-r2;

cout<<"r1-r2=";

r3.print();

r3=r1*r2;

cout<<"r1*r2=";

r3.print();

r3=r1/r2;

cout<<"r1/r2=";

r3.print();

return0;

}

 

 

思考

#include

#include

#include

usingnamespacestd;

 

classfraction

{

public:

fraction(intx=0,inty=1);

voidprint();//以“/”的分数形式输出

private:

intnumerator,denominator;//numerator为分子,denominator为分母

voidoptim();//详细分析该函数功能

};

voidfraction:

:

optim()//请解释出现的if-else对照的实际情况及do-while循环的作用

{

intgcd,min,max;

if(denominator==0)

{

cout<<"Azerodenominatorisinvalid"<

exit

(1);

}

gcd=(abs(numerator)>abs(denominator)?

abs(denominator):

abs(numerator));

if(gcd==0)return;//注意:

return语句的特殊用法

if(abs(numerator)>abs(denominator))

{

max=numerator;

min=denominator;//ifelse语句是找出分子,分母较大

}

else

{

min=numerator;

max=denominator;

}

do//dowhile语句是辗转相减法。

{

gcd=max%min;

max=min;

min=gcd;

}while(gcd!

=0);

numerator/=max;

denominator/=max;//这二步,分子分母同时除以最大公约数max;

if(denominator<0)

{

numerator=-numerator;//感觉这个根本没有什么用,分子,分母同时变号,值也不变,我去掉了,也没有出现错误。

denominator=-denominator;

}

}

 

fraction:

:

fraction(intx,inty)

{//将构造函数补充完整

numerator=x;

denominator=y;

}

voidfraction:

:

print()

{//将该函数补充完整

optim();

cout<

}

 

intmain()

{

cout<<"输入测试数据:

"<

fractionr1(2,8),r2(23,45),r3,r4(-9,6),r5(100,-50),r6(-50,-100);

cout<<"原始数据:

r1(2,8)"<

cout<<"处理后数据r1=";

r1.print();

cout<<"原始数据:

r2(23,45)"<

cout<<"处理后数据r2=";

r2.print();

cout<<"原始数据:

r3"<

cout<<"处理后数据r3=";

r3.print();

cout<<"原始数据:

r4(-9,6)"<

cout<<"处理后数据r4=";

r4.print();

cout<<"原始数据:

r5(100,-50)"<

cout<<"处理后数据r5=";

r5.print();

cout<<"原始数据:

r5(-50,-100)"<

cout<<"处理后数据r5=";

r6.print();

return0;

}

 

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

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2