问题及代码:
/* *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; }
运行结果:
知识点总结:
对类的掌握,对构造函数的掌握。
学习心得:
通过编写这个程序,巩固了基于对象编程的方法。