第十五周实验报告(任务二)【程序窗口设计之分数类】

/* (程序头部注释开始)

* 程序的版权和版本声明部分

* Copyright (c) 2011, 烟台大学计算机学院学生

* All rights reserved.

* 文件名称:窗口程序设计之分数类

* 作 者: 张培培

* 完成日期: 2012年 05月 30日

* 版 本 号:

* 对任务及求解方法的描述部分

* 输入描述:

* 问题描述:

* 程序输出:

* 程序头部的注释结束*/

//fenshu.h   
class CFraction    
{    
private:    
 double nume;  // 分子     
 double deno;  // 分母     
public:    
 //构造函数及运算符重载的函数声明     
CFraction(double m=0 ,double d=0):nume(m),deno(d){};    
void simplify();        
CFraction operator+(const CFraction &c);  //两个分数相加,结果要化简          
CFraction operator-(const CFraction &c);  //两个分数相减,结果要化简    
CFraction operator*(const CFraction &c);  //两个分数相乘,结果要化简          
CFraction operator/(const CFraction &c);  //两个分数相除,结果要化简          
double get_nume()  
 {  
    return nume;  
 }  
  double get_deno()  
 {  
    return deno;  
 }  
};  

//fenshu.cpp   
#include "stdafx.h"     
#include"fenshu.h"   
#include<Cmath>   
#include<iostream>   
//求最大公约数的函数        
int gcd(int x,int y)        
{      
 int r;      
 while(y!=0)      
 {      
  r=x%y;      
  x=y;      
  y=r;      
 }      
 return x;      
}      
  
// 分数化简          
void CFraction::simplify()  //化简(使分子分母没有公因子)        
{      
 double c=gcd(nume,deno);      
 nume=nume/c;      
 deno=deno/c;      
}       
    
  
    
// 分数相加          
CFraction CFraction::operator+(const CFraction &c)        
{        
 CFraction c1;        
 c1.nume=nume*c.deno+c.nume*deno;  //当分母不同时,进行分子分母分别相乘并相加求出分数相加后的分子        
 c1.deno=deno*c.deno;  //求出相加后的分母        
 c1.simplify();  //调用simplify进行分数化简        
 return c1;        
}        
    
// 分数相减          
CFraction CFraction:: operator-(const CFraction &c)        
{        
 CFraction c1;        
 c1.nume=nume*c.deno-c.nume*deno;  //当分母不同时,进行分子分母分别相乘并相减求出分数相减后的分子        
 c1.deno=deno*c.deno;  //求出相减后的分母        
 c1.simplify();  //调用simplify进行分数化简        
 return c1;        
}        
  
// 分数相乘  (分子分母分别相乘)        
CFraction CFraction:: operator*(const CFraction &c)        
{        
 CFraction c1;        
 c1.nume=nume*c.nume;        
 c1.deno=deno*c.deno;        
 c1.simplify();        
 return c1;        
}        
    
// 分数相除          
CFraction CFraction:: operator/(const CFraction &c)        
{        
 CFraction c1;        
 if (!c.nume) return *this;      
 c1.nume=nume*c.deno;        
 c1.deno=deno*c.nume;        
 c1.simplify();        
 return c1;        
}        

//fenshuDlg.cpp   
void CfenshuDlg::OnBnClickedButton1()  
{  
    // TODO: 在此添加控件通知处理程序代码   
   UpdateData();   //将把界面上各控件输入的值“捕获”到与之关联的变量中     
   CFraction t1(m_a,m_b),t2(m_c,m_d),c,d;  //定义分数类的对象     
     
   if(m_n=="+")  
   {  
   c=t1+t2;  
   m_e=c.get_nume();  
   m_f=c.get_deno();  
   }  
     
   else if(m_n=="-")  
   {  
     c=t1-t2;  
     m_e=c.get_nume();  
     m_f=c.get_deno();  
   }  
   else if(m_n=="*")  
   {  
       c=t1*t2;  
       m_e=c.get_nume();  
       m_f=c.get_deno();  
   }  
   else if(m_n=="/")  
   {  
       c=t1/t2;  
       m_e=c.get_nume();  
       m_f=c.get_deno();  
   }  
  
   UpdateData(FALSE);   //更新界面上对应的控件的值并实现显示   
  
}  

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值