一、问题及代码
- /*
- * 文件名称:Exbz5-5.cpp
- * 作 者:程家琦
- * 完成日期:2017 年 5 月 8 日
- * 版 本 号:v1.0
- * 对任务及求解方法的描述部分:
- * 输入描述:
- * 问题描述:C++中提供了多种基本的数据类型。实际上,这些远不能满足我们的需求,如分数。我们可以自定义类支持这些数据类型。
- 本任务将设计一个简单的分数类,完成对分数的几个运算
- * 程序输出:略
- * 问题分析:略
- * 算法设计:略
- */
- #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;
- }
二、运行结果