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

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

#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;//结束

}

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

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

  1. java定义一个类计算圆的半径,C++编程:定义一个圆类要求属性为半径,操作为计算圆的周长和面积...,java编程:定义一个圆类,属性为半径,方法为对输入的半径计...

    导航:网站首页 > C++编程:定义一个圆类要求属性为半径,操作为计算圆的周长和面积...,java编程:定义一个圆类,属性为半径,方法为对输入的半径计 C++编程:定义一个圆类要求属性为半径, ...

  2. C语言试题二十一之定义n×n的二维数组编写函数 function(int a[][n])功能是:使数组左下半三角元素中的值全部置成0。

    1. 题目 定义了n×n的二维数组,并在主函数中自动赋值.请编写函数 function(int a[][n]),该函数的功能是:使数组左下半三角元素中的值全部置成0. 2 .温馨提示 C语言试题汇总里 ...

  3. 类的概念、成员函数的定义方式、类的访问控制和封装、类的大小、this指针

    文章目录 类的概念 struct class class和struct的区别是什么呢? 类中成员函数的两种定义方式 声明和定义都在类中 声明和定义分离 类的访问控制和封装 类的封装特性 类的大小 结构 ...

  4. c语言的友元函数的用法,C++友元函数和友元类概念解析

    一.友元函数 友元函数是一种特殊的函数,它需要在类体内进行说明,可以访问类的私有成员和保护成员,但又不是类的成员函数.友元函数的说明如下: friend 数据类型函数名(参数) 其中,friend是说 ...

  5. C++语言基础(15)-友元函数和友元类

    一个类中可以有 public.protected.private 三种属性的成员,通过对象可以访问 public 成员,只有本类中的函数可以访问本类的 private 成员.现在,我们来介绍一种例外情 ...

  6. c语言friend函数,C++ friend友元函数和友元类

    友元函数和友元类在实际开发中较少使用,想快速学习C++的读者可以跳过本节. 一个类中可以有 public.protected.private 三种属性的成员,通过对象可以访问 public 成员,只有 ...

  7. (有理数类 )创建一个名为Rational的类,进行分数运算。

    原题目是 (有理数类 )创建一个名为Rational的类,进行分数运算.编写一个程序测试这个类. 用整数变量表示类的private数据:numerator( 分子)和denominator(分母).提 ...

  8. 分数求和---c语言编程题

    1.题目的答案 分数求和: 计算1/1-1/2+1/3-1/4+1/5 -- + 1/99 - 1/100 的值,打印出结果 答案: #include<stdio.h>int main() ...

  9. 利用最小堆完成有理数的类定义以及有理数逻辑运算

    一.要求: 完成有理数的类定义以及有理数逻辑运算函数 class Rational{ friend bool operator<(const Rational& r1, const Ra ...

最新文章

  1. 支付宝分库分表中间件--zdal简介
  2. 使用Epoll 在 Linux 上开发高性能应用服务器
  3. java jvm目录,JVM(Java虚拟机)中过程工作目录讲解
  4. 【探索测试篇】探索无界,BUG无限,让程序猿头疼的测试技术
  5. 计算机网络 学习笔记-概论
  6. ZetCode PHP Symfony 教程
  7. Vue生命周期和钩子函数的一些理解
  8. ROS Image_transport使用
  9. CSS margin合并
  10. forEach(BiConsumer action)方法遍历Map集合
  11. XP同步时间服务器地址
  12. Web Polygraph 安装
  13. MFC中资源视图不能打开
  14. 举个栗子!Tableau 技巧(105):用 四象限图 对数据进行分类分析
  15. 电压跌落故障Matlab,基于MATLAB的电压跌落建模仿真分析探究.pdf
  16. js实现深拷贝与浅拷贝
  17. 基因家族分析②:linux下blast的安装和使用
  18. 32python腾讯位置大数据2.0版本成功输出北京位置数据(续接上2019年8月21日停止服务的内容)
  19. 【Excel函数】隔行取数并取最大值
  20. vCode组件的使用

热门文章

  1. EAN码校验位的计算方法
  2. c语言函数名大全dfun,C语言函数题库以及答案.docx
  3. Android Sensor感应器介绍(三)获取用户移动方向,指南针原理
  4. 游戏建模用到哪些软件?零基础如何学习游戏建模?
  5. 第2阶段19-vue自定义模板
  6. SBO 2005B数据表
  7. 安防视频监控无处不在 密织安全防控网必不可少
  8. [通信架构的演进]酣畅淋漓,听故事一样理清通信架构的变革
  9. 年会模板汇总:PPT、策划案、游戏节目、流程、邀请函、背景音乐、主题词
  10. linux centos7安装ftp步骤