/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称: class CFraction
* 作 者: 刘程程
* 完成日期: 2012 年 03 月 20 日
* 版 本 号: 1.0
* 对任务及求解方法的描述部分
* 输入描述: 分数的分子和分母
* 问题描述: 化简
* 程序输出: 化简后的分数的分子和分母
* 程序头部的注释结束
*/
#include <iostream>
using namespace std;
int gcd(int x, int y);
class CFraction
{
private:
int nume; //分子
int deno;//分母
public:
CFraction(int nu = 0, int de = 1);//构造函数,初始化时用
void Set(int nu =0, int de = 1);//置值,改变值时用
void input();//按照“nu/de”的格式,如“5/2”的形式使用
void Simplify();//化简
void amplify(int n);//放大n倍
void output(int style = 0);
};
CFraction ::CFraction(int nu, int de)
{
if( de != 0)
{
nume = nu;
deno = de;
}
else
{
cout << "分母不能为0" <<endl;
system("pause");
exit(0);
}
}
void CFraction :: Set(int nu, int de)
{
if( de !=0 )
{
nume = nu;
deno = de;
}
}
void CFraction ::input()
{
char c;
int nu,de;
while(1)
{
cout << "输入分数(m/n):";
cin >> nu >>c >>de;
if(c != '/')
cout<<"格式不正确,请重新输入!"<<endl;
else if( de == 0)
cout << "分母不能为0"<<endl;
else
break;
}
nume = nu;
deno = de;
}
void CFraction :: Simplify()
{
int n = gcd(nume, deno);
nume = nume/n;
deno = deno/n;
}
int gcd(int x, int y)
{
int r;
while (y != 0)
{
r = x % y;
x = y;
y = r;
}
return x;
}
void CFraction::amplify( int n)
{
nume *= n;
}
void CFraction::output(int style)
{
int i,nu,de;
switch(style)
{
case 0:
cout << nume << '/' << deno << endl;
break;
case 1:
i = gcd(nume,deno);
cout << nume/i << '/' << deno/i << endl;
break;
case 2:
i = gcd(nume,deno);
nu = nume / i;
de = deno / i;
cout << (nume / deno) << "("<<(nume %deno)<<'/'<<deno<<")"<<endl;
break;
default:
cout << nume << '/'<< deno<< endl;
}
}
int main()
{
CFraction c1,c2(8,6);
cout<<"关于c1: "<<endl;
c1.output(0);
cout<<"改变c1: "<<endl;
c1.Set(2,7);
c1.output();
cout<<"输入c1: "<<endl;
c1.input();
c1.output(0);
cout<<"关于c2: "<<endl;
c2.output(0);
c2.output(1);
c2.output(2);
cout<<"将c2化简: "<<endl;
c2.Simplify();
c2.output(0);
cout<<"将c2放大倍: "<<endl;
c2.amplify(5);
c2.output(0);
c2.output(2);
system("pause");
return 0;
}
通过自己不停调错,对这个程序有了更加深刻的了解!以后还要继续努力!