问题及代码:
/*
*copyright(c)2016,烟台大学计算机与控制工程学院
*All rights reserved.
*文件名称:test.cpp
*作者:崔青青
*完成日期:2016年4月1日
*问题描述:设计一个简单的分数类,完成对分数的几个运算。
*输入:
*程序输出:
*/
#include <iostream>
using namespace std;
class cfraction
{
private:
int nume;
int deno;
public:
cfraction(int nu,int de);
void set1(int nu,int de);
void input();
void simplify();
void amplify(int n);
void output(int style=0);
int gcd(int x,int y);
};
cfraction::cfraction(int nu=0,int de=1)
{
nume=nu;
deno=de;
}
void cfraction::input()
{
char ch;
while(1)
{
cout<<"请输入分数的正确形式:"<<endl;
cin>>nume>>ch>>deno;
if(ch!='/')
cout<<"格式错误,请重新输入"<<endl;
if(deno==0)
cout<<"输入有误,请重新输入:"<<endl;
else
break;
}
}
void cfraction::set1(int nu=0,int de=1)
{
nume=nu;
deno=de;
}
void cfraction::simplify()
{
int g;
g=gcd(nume,deno);
nume=nume/g;
deno=deno/g;
}
void cfraction::amplify(int n)
{
nume=nume*n;
}
void cfraction::output(int style)
{
if(style==0)
cout<<nume<<'/'<<deno<<endl;
else if(style==1)
{
simplify();
cout<<nume<<'/'<<deno<<endl;
}
else if(style==2)
{
if(nume%deno==0)
cout<<nume/deno<<endl;
else if(nume<deno)
cout<<nume<<'/'<<deno<<endl;
else if(nume>deno)
{
int a;
simplify();
a=nume/deno;
nume=nume-a*deno;
cout<<a<<'('<<nume<<'/'<<deno<<')'<<endl;
}
else
cout<<1;
}
else if(style==3)
{
float f;
f=(float)nume/deno;
cout<<f<<endl;
}
}
int cfraction::gcd(int x,int y)
{
if(x%y==0)
return y;
else
return gcd(y,x%y);
}
int main()
{
int style,a,b,n;
char ch1;
cout<<"请选择输出的格式:"<<endl;
cin>>style;
cfraction c(8,12);
c.output(style);
cout<<"请选择输出的格式:"<<endl;
cin>>style;
c.input();
c.simplify();
c.output(style);
cout<<"请选择输出的格式:"<<endl;
cin>>style;
cout<<"请输入放大的倍数:"<<endl;
cin>>n;
c.amplify(n);
c.output(style);
cout<<"请选择输出的格式:"<<endl;
cin>>style;
cout<<"请输入重置的数:"<<endl;
while(1)
{
cout<<"请输入分数的正确形式:"<<endl;
cin>>a>>ch1>>b;
if(ch1!='/')
cout<<"格式错误,请重新输入"<<endl;
if(b==0)
cout<<"输入有误,请重新输入:"<<endl;
else
break;
}
c.set1(a,b);
c.simplify();
c.output(style);
return 0;
}
运行结果:
知识点总结:
对类的掌握,对构造函数的掌握。
学习心得:
通过编写这个程序,巩固了基于对象编程的方法。