/*
*copyright (c) 2016,烟台大学计算机学院
*All rights reserved.
*文件名称:hellow.cpp
*作者:田甜
*完成日期:2016年4月7日
*版本号:v1.0
*问题描述:完成分数类的设计,并在main()函数中自行定义对象,调用各成员函数,完成基本的测试
*输入描述:分数的分子和分母
*程序输出:按要求处理后输出分数的各种形式
*/
问题及代码:
#include <iostream>
using namespace std;
int gcd(int m,int n);
class CFraction
{
private:
int nume;
int done;
public:
CFraction(int num=0,int don=1);//设置默认值
void set(int num=0,int don=1);//用于改变分子分母的值
void input();
void simplify();
void amplify(int n);
void output(int style=0);
};
CFraction::CFraction(int num,int don)
{
nume=num;
done=don;
}
void CFraction::output(int style)
{
int t=gcd(nume,done);
switch(style)
{
case 0:
cout<<"原样:"<<nume<<"/"<<done<<endl;
break;
case 1:
cout<<"化简形式: "<<nume/t<<"/"<<done/t<<endl;
break;
case 2:
cout<<"带分数形式:"<<nume/done<<"("<<nume%done<<'/'<<done/t<<")"<<endl;
break;
case 3:
cout<<"近似值:"<<nume/(double)done<<endl;
break;
default:
cout<<"默认值原样:"<<nume<<'/'<<done<<endl;
}
}
void CFraction::set(int num,int don)
{
cout<<"please input num and don:"<<endl;
while(1)
{
cin>>nume>>done;
if(done==0)
cout<<"输入值无效请重新输入"<<endl;//分母为0则输入无效
else
break;
}
}
void CFraction::input()
{
char c;
while(1)
{
cout<<"请以'num/don'格式输入分数:"<<endl;
cin>>nume>>c>>done;
if(c!='/')
cout<<"输入值无效请重新输入"<<endl;
else
break;
}
}
void CFraction::simplify()
{
int t=gcd(nume,done);
nume=nume/t;
done=done/t;
cout<<"原分数已被化简"<<endl;
}
int gcd(int m,int n)
{
int t;
if(m==0)
return n;
while(t=m%n)
{
m=n;
n=t;
}
return n;
}
void CFraction::amplify(int n)
{
nume=nume*n;
cout<<"原分数扩大"<<n<<"倍"<<endl;//扩大n倍
}
int main()
{
CFraction fra1;
fra1.set();
fra1.simplify();
fra1.output();//以下多次输出以检验switch语句功能
fra1.output(1);
fra1.output(3);
fra1.amplify(2);
fra1.output();
fra1.output(2);
fra1.output(5);
return 0;
}
运行结果:
心得:一个小细节:在输出小数形式时的强制类型转换,只需要转换一个为(double),另一个(int)和结果就会根据转换规则自动转换成(double)