您的位置:首页 > 编程语言 > C语言/C++

C++中提供了多种基本的数据类型。实际上,这些远不能满足我们的需求,如复数(第10章的例子大多是处理虚数的),再如分数。本任务将设计一个简单的分数类,完成对分数的几个运算。一则巩固基于对象编程的方法,

2012-03-17 17:28 1626 查看
#include <iostream>

using namespace std;

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),表示一又三分之一;
//不给出参数和非1、2,认为是方式0
};
int main ()
{
CFraction CF;
int style,x;
CF.input();
cout<<"请输入要放大的倍数:"<<endl;
cin>>x;
CF.amplify(x);
cout<<"选择输出形式(以8/6为例,style为0时,输出8/6;style为1时,输出4/3;style为2时,输出1(1/3),表示一又三分之一;不给出参数和非1、2,认为是方式0)"<<endl;
cin>>style;
CF.output(style);
CF.Set();
return 0;
}

CFraction::CFraction(int nu,int de)
{
nume=nu;
deno=de;
}
void CFraction::Set(int nu,int de)
{
nume=nu;
deno=de;
}
void CFraction:: input()
{
int x,y;
char ch1;
while(1)
{
cout<<"请输入分数(格式为 */*):"<<endl;
cin>>x>>ch1>>y;
if (ch1!='/')
cout<<"输入错误,请重新输入"<<endl;
else
break;
}
nume=x;
deno=y;
}
void CFraction::Simplify()
{
int m,n;
n=nume,m=deno;
for(int i=2;n>=i;i++)
{
if(n%i==0 && m%i==0)
{
n/=i;
m/=i;
i--;
}
}
cout<<n<<"/"<<m<<endl;
}

void CFraction::amplify(int x)
{
int m,n;
n=nume,m=deno;
for(int i=2;n>=i;i++)
{
if(n%i==0 && m%i==0)
{
n/=i;
m/=i;
i--;
}
}
n=n*x;
cout<<n<<"/"<<m<<endl;

}
void CFraction::output(int style)
{
int n,m,x;
n=nume,m=deno;
switch(style)
{
case 1:
{
for(int i=2;n>=i;i++)
{
if(n%i==0 && m%i==0)
{
n/=i;
m/=i;
i--;
}
}cout<<n<<"/"<<m<<endl;
};break;

case 2:
{
cout<<"约分后结果为:";
for(int i=2;n>=i;i++)
{
if(n%i==0 && m%i==0)
{
n/=i;
m/=i;
i--;
}
};
if(n<=m)
{
cout<<n<<"/"<<m<<endl;
}
else if (n%m==0)
{
x=n/m;
n=n%m;
cout<<x<<endl;
}
else
{
x=n/m;
n=n%m;
cout<<x<<'('<<n<<'/'<<m<<')'<<endl;
}
};break;
default:cout<<n<<"/"<<m<<endl;break;
}
}



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