第十五周任务二(窗口式程序开发之——分数类)

* 问题描述: 设计分数类,开发一个窗口式程序,可以完成分数的四则运算

* (程序头部注释开始)      

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

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

* All rights reserved.    

 * 文件名称:                                   

* 作    者:          冯珍珍                       

  

* 完成日期:     2012    年     5 月    26   日  

  

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

* 输入描述:     

* 程序输出:     

* 程序头部的注释结束    

  */    


以下为主要程序部分头文件;

//fen.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;
 }
};
//fen.cpp
#include "stdafx.h"  
#include"fen.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);   //更新界面上对应的控件的值并实现显示

}

运行结果如图所示:


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值