100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > c语言有理数分数求和 C++定义Rational(有理数)类以及结合友元函数实现分数计算的案例...

c语言有理数分数求和 C++定义Rational(有理数)类以及结合友元函数实现分数计算的案例...

时间:2021-08-05 03:48:10

相关推荐

c语言有理数分数求和 C++定义Rational(有理数)类以及结合友元函数实现分数计算的案例...

直接贴代码,我想注释已经够全面了

//备注:分数的定义全程可用一个包含两个元素的整型数组代替,为了方便理解和代码的通用,本代码采用分开定义的方法

#include

using namespace std;

class Rational{

private:

int fenzi;

int fenmu;

//若采用数组的形式 可以为 fenshu[2],其中fenshu[0]表示分子,fenshu[1]表示分母 下面的运算过程结果全程替换即可

public:

Rational(int pfenzi,int pfenmu);

//这边的&表示C++特有的引用,C语言并不具备此特性,下同

friend void JiSuan(Rational &num1,char ysf,Rational &num2,Rational &result);

friend void CheckAnswer(Rational &result);

friend void ShowAnswer(Rational &result);

/使用友元函数的时候用引用可以完整的将数据传输,

但是使用过程中也需要注意 传的是Rational类而不是平时练习使用的int

所以参数列表的Rational请勿写成int/

};

Rational::Rational(int pfenzi,int pfenmu){

fenzi=pfenzi;

fenmu=pfenmu;

}

//核心,分数计算友元函数

void JiSuan(Rational &num1,char ysf,Rational &num2,Rational &result){

switch(ysf){

case ‘+’:{

if(num2.fenmu==num1.fenmu){//如果两数分母相同 直接进行分子的运算符操作即可,下减同

result.fenmu=num2.fenmu;

result.fenzi=num1.fenzi+num2.fenzi;

}else{//分母不同,通分计算,下减同

result.fenmu=num2.fenmu num1.fenmu;

num2.fenzi= num1.fenmu;

num1.fenzi = num2.fenmu;

result.fenzi = num1.fenzi+num2.fenzi;

}

break;

}

case ‘-‘:{

if(num2.fenmu==num1.fenmu){

result.fenmu=num2.fenmu;

result.fenzi=num1.fenzi-num2.fenzi;

}else{

result.fenmu=num2.fenmunum1.fenmu;

num2.fenzi = num1.fenmu;

num1.fenzi= num2.fenmu;

result.fenzi = num1.fenzi-num2.fenzi;

}

break;

}

case ‘‘:{//分数的相乘不用我多说,直接分子分母相乘即可

result.fenmu=num1.fenmunum2.fenmu;

result.fenzi=num1.fenzinum2.fenzi;

break;

}

case ‘/‘:{

//分子与分母的调换相乘就是除法啦

result.fenmu=num1.fenmunum2.fenzi;

result.fenzi=num1.fenzi*num2.fenmu;

break;

}

}

}

//约分友元函数

void CheckAnswer(Rational &result){

int i,temp;//为保证负数的约分正常进行,我们定义一个临时变量来储存负数(分子)的相反数

if(result.fenzi<0){

temp = 0 - result.fenzi;

}else{

temp = result.fenzi;

}

for(i=2;i<=temp&&i<=result.fenmu;i++){//约分

if(result.fenzi%i==0&&result.fenmu%i==0){

result.fenzi /= i;

result.fenmu /= i;

CheckAnswer(result);//再执行 约分到最简

}

}

}

//结果输出友元函数

void ShowAnswer(Rational &result){

CheckAnswer(result);

//输出结果前对结果进行约分处理,然后执行以下判断并根据情况输出结果

if(result.fenmu==1){//分母为1的情况

cout<

}else if(result.fenzi==0){//分子为0的情况

cout<<0<

}else{//除开上述条件外的 正常显示分数

cout<

}

}

int main(){

int fenzi1,fenzi2,fenmu1,fenmu2;//两个参与运算的分数 分子分母的定义

//同理 这边定义分数的时候也可以用数组代替 fenshu1[2] fenshu2[2] 结构同 Rational 类

char ysf,temp;//运算符和储存‘/’的临时变量

cout<

while(1){

cin>>fenzi1>>temp>>fenmu1>>ysf>>fenzi2>>temp>>fenmu2;//不用我多说,数据的输入

Rational num1(fenzi1,fenmu1);//实例化类(对象)第一个参与运算的分数num1

Rational num2(fenzi2,fenmu2);//实例化类(对象)第二个参与运算的分数num2

Rational result(0,0);//实例化类(对象)储存结果的分数 result 初始化为分子分母都为 0

JiSuan(num1,ysf,num2,result); //使用友元函数对分数进行运算

if(getchar()=='q'||getchar()=='Q'){

return 0;

}else{

cout<<"计算结果:";

ShowAnswer(result);//使用友元函数对结果进行化简并输出结果

}

}

return 0;//结束

}

贴这个案例是想让新手能快速理解友元函数的作用,也算是自己对类的练习吧,菜鸟成长史的一个记录~

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。