您的位置:首页 > 其它

分数类

2016-04-13 21:34 330 查看
#include <iostream>

using namespace std;

int hanshu(int m, int n)

{

int r;

if (m==0)

{

return n;

}

while(r=m%n)

{

m=n;

n=r;

}

return n;

}

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倍,如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)形式,表示一又三分之一;

//style为3时,用小数形式输出,如1.3333;

//默认方式0

};

CFraction::CFraction(int nu,int de)

{

if (de!=0)

{

nume=nu;

deno=de;

}

else

{

cout<<"分母不能为0,输入错误"<<endl;

}

}

void CFraction::set(int nu,int de)

{

if (de!=0)

{

nume=nu;

deno=de;

}

else

cout<<"赋值失败,错误原因:分母为0"<<endl;

}

void CFraction::input()

{

int nu,de;

char f;

cin>>nu>>f>>de;

if (de==0)

cout<<"输入错误,错误原因:分母不能为0!"<<endl;

nume=nu;

deno=de;

}

void CFraction::simplify()

{

int n;

n=hanshu(deno, nume);

deno=deno/n;

nume=nume/n;

}

void CFraction::amplify(int n)

{

nume=nume*n;

deno=deno*n;

}

void CFraction::output(int style)

{

int n=hanshu(nume,deno);

switch(style)

{

case 0:

cout<<nume<<'/'<<deno<<endl;break;

case 1:

cout<<nume/n<<'/'<<deno/n<<endl;break;

case 2:

cout<<nume/deno<<'('<<(nume/n)%(deno/n)<<'/'<<deno/n<<')'<<endl;break;

case 3:

cout<<nume/double(deno)<<endl;break;

default:

cout<<nume<<'/'<<deno<<endl;break;

}

}

int main()

{

CFraction c1(4,2),c2;

c1.output(0);

c1.output(1);

c1.output(2);

c1.output(3);

c1.set(12,4);

c1.output(0);

c1.output(1);

c1.output(2);

c1.output(3);

c2.input();

c2.output(0);

c2.output(1);

c2.output(2);

c2.output(3);

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