您的位置:首页 > 编程语言 > PHP开发

第五周 2—1 分数类 对分数计算

2012-03-19 19:25 281 查看
 
/* (程序头部注释开始)

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

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

* All rights reserved.

* 文件名称:          分数类 对分数计算                   

* 作    者:                     张启立        

* 完成日期:        2012 年  3   月     19   日

* 版 本 号:          1.002

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

* 输入描述: 十进制数

* 问题描述: 。。。。。。

* 程序头部的注释结束

#include<iostream>

using namespace std;

class CFraction
{
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倍,如2/3放大5倍为10/3
void output(int style = 0);          //输出:以8/6为例,style为0时,输出8/6;//style为1时,输出4/3;
//style为2时,输出1(1/3),表示一又三分之一;
//不给出参数和非1、2,认为是方式0

private:
int nume;
int deno;
int gcd(int , int );
bool is_CF(int n, int d) ;
};

CFraction::CFraction(int nu, int de):nume(nu),deno(de){}

int main()
{
CFraction cf;

cf.Set(5, 6);

cf.input();

cout << "化简后的值是:" << endl;

cf.Simplify() ;

cf.output(0);

cout << "再扩大四倍后是:" << endl;

cf.amplify(4);

cf.output(0);

system("PAUSE");

return 0;
}

void CFraction::Set(int nu, int de)
{
nume = nu;

deno = de;
}

void CFraction::input()
{
char c;

cout << "输入分数:(格式:nu/de)" << endl;

while(1)
{
cin >> nume >> c >> deno;

if(c != '/')
{
cout << "格式不正确,请重新输入!" << endl;
}

else if(! is_CF(nume, deno))
{
cout << "数字非法,请重新输入!" << endl;
}

else
{
break;
}
}
}

bool CFraction::is_CF(int n, int d)
{
if(n < 0 || d <= 0)
{
return false;
}

return true;
}

void CFraction::Simplify()
{
nume = nume / gcd(nume, deno);

deno = deno / gcd(nume, deno);

}

int CFraction::gcd(int nu, int de)
{
int t, r, a, b;

a = nu;

b = de;

if (a < b)
{
t = a;
a = b;
b = t;
}

while (b != 0)
{
r = a % b;
a = b;
b = r;
}

return a;
}

void CFraction::amplify(int n)
{
nume *= n;
}

void CFraction::output(int style)
{
switch(style)
{
case(0):
cout << nume << "/" << deno << endl;

break;
case(1):
Simplify();

cout << nume << "/" << deno << endl;

break;
case(2):
Simplify();

if(nume > deno)
{
int add;

add = nume / deno;

if(nume % deno == 0)
{
cout << add << endl;
}

else
{
cout << add << "(" << nume % deno << "/" << deno << ")" << endl;
}
}

break;
default:
cout << nume << "/" << deno << endl;

break;
}
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  output input system 任务 c