一、问题及代码
#include<iostream>
#include<Cmath>
using namespace std;
int gcd(int m, int 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();
void simplify();
void amplify(int n);
void output(int style = 0);
};
CFraction::CFraction(int nu, int de)
{
if (de != 0)
{
nume = nu;
deno = de;
}
else
{
cerr << "初始化中发生错误,程序退出\n";
system("pause");
exit(0);
}
}
void CFraction::set(int nu, int de)
{
if (de != 0)
{
nume = nu;
deno = de;
}
}
void CFraction::input()
{
int nu, de;
char c;
while (1)
{
cout << "输入分数(m/n): ";
cin >> nu >> c >> de;
if (c != '/')
cout << "输入格式错误!\n ";
else if (de == 0)
cout << "分母不能为零!\n ";
else
break;
}
nume = nu;
deno = de;
}
void CFraction::simplify()
{
int n = gcd(deno, nume);
deno /= n;
nume /= n;
}
int gcd(int m, int n)
{
int r;
if (m<n) { r = m; m = n; n = r; }
while (r = m%n)
{
m = n;
n = r;
}
return n;
}
void CFraction::amplify(int n)
{
nume *= n;
}
void CFraction::output(int style)
{
int n;
switch (style)
{
case 0:
cout << "原样:" << nume << '/' << deno << endl;break;
case 1:
n = gcd(deno, nume);
cout << "化简形式: " << nume / n << '/' << deno / n << endl;break;
case 2:
cout << "带分数形式:" << nume / deno << '(' << nume%deno << '/' << deno << ')' << endl;break;
case 3:
cout << "近似值:" << nume / double(deno) << endl;break;
default:
cout << "默认原样:" << nume << '/' << deno << endl;
}
}
int main()
{
CFraction c1, c2(8, 6);
cout << "关于c1: " << endl;
c1.output(0);
cout << "改变c1: " << endl;
c1.set(2, 7);
c1.output();
cout << "输入c1: " << endl;
c1.input();
c1.output(0);
cout << "关于c2: " << endl;
c2.output(0);
c2.output(1);
c2.output(3);
c2.output(3);
c2.output();
cout << "将c2化简: " << endl;
c2.simplify();
c2.output(0);
cout << "将c2放大倍: " << endl;
c2.amplify(5);
c2.output(0);
c2.output(1);
system("pause");
return 0;
}
二、运行结果
三、心得体会
四、知识点总结