* 问题描述: 设计分数类,开发一个窗口式程序,可以完成分数的四则运算
* (程序头部注释开始)
* 程序的版权和版本声明部分
* 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); //更新界面上对应的控件的值并实现显示
}
运行结果如图所示: