补做- 第五次实验-项目五

来源:互联网 发布:mac应用程序删不掉 编辑:程序博客网 时间:2024/05/16 13:43

一、问题及代码

[cpp] view plain copy
  1. /* 
  2. * 文件名称:Exbz5-5.cpp 
  3. * 作    者:程家琦 
  4. * 完成日期:2017 年 5 月 8 日 
  5. * 版 本 号:v1.0 
  6. * 对任务及求解方法的描述部分: 
  7. * 输入描述:
  8. * 问题描述:C++中提供了多种基本的数据类型。实际上,这些远不能满足我们的需求,如分数。我们可以自定义类支持这些数据类型。 
  9.   本任务将设计一个简单的分数类,完成对分数的几个运算 
  10. * 程序输出:略 
  11. * 问题分析:略 
  12. * 算法设计:略 
  13. */  
  14. #include<iostream>    
  15. #include<Cmath>    
  16. using namespace std;  
  17. int gcd(int m, int n);  
  18. class CFraction  
  19. {  
  20. private:  
  21.     int nume;  // 分子    
  22.     int deno;  // 分母    
  23. public:  
  24.     CFraction(int nu = 0, int de = 1);  
  25.     void set(int nu = 0, int de = 1);  
  26.     void input();  
  27.     void simplify();  
  28.     void amplify(int n);  
  29.     void output(int style = 0);  
  30. };  
  31. CFraction::CFraction(int nu, int de)  
  32. {  
  33.     if (de != 0)  
  34.     {  
  35.         nume = nu;  
  36.         deno = de;  
  37.     }  
  38.     else  
  39.     {  
  40.         cerr << "初始化中发生错误,程序退出\n";  
  41.         system("pause");  
  42.         exit(0);  
  43.     }  
  44. }  
  45.   
  46. void CFraction::set(int nu, int de)  
  47. {  
  48.     if (de != 0)  
  49.     {  
  50.         nume = nu;  
  51.         deno = de;  
  52.     }  
  53. }  
  54. void CFraction::input()  
  55. {  
  56.     int nu, de;  
  57.     char c;  
  58.     while (1)  
  59.     {  
  60.         cout << "输入分数(m/n): ";  
  61.         cin >> nu >> c >> de;  
  62.         if (c != '/')  
  63.             cout << "输入格式错误!\n ";  
  64.         else if (de == 0)  
  65.             cout << "分母不能为零!\n ";  
  66.         else  
  67.             break;  
  68.     }  
  69.     nume = nu;  
  70.     deno = de;  
  71. }  
  72. void CFraction::simplify()  
  73. {  
  74.     int n = gcd(deno, nume);  
  75.     deno /= n;  
  76.     nume /= n;  
  77. }  
  78. int gcd(int m, int n)  
  79. {  
  80.     int r;  
  81.     if (m<n) { r = m; m = n; n = r; }  
  82.     while (r = m%n)  
  83.     {  
  84.         m = n;  
  85.         n = r;  
  86.     }  
  87.     return n;  
  88. }  
  89. void CFraction::amplify(int n)  
  90. {  
  91.     nume *= n;  
  92. }  
  93. void CFraction::output(int style)  
  94. {  
  95.     int n;  
  96.     switch (style)  
  97.     {  
  98.     case 0:  
  99.         cout << "原样:" << nume << '/' << deno << endl;break;  
  100.     case 1:  
  101.         n = gcd(deno, nume);  
  102.         cout << "化简形式: " << nume / n << '/' << deno / n << endl;break;  
  103.     case 2:  
  104.         cout << "带分数形式:" << nume / deno << '(' << nume%deno << '/' << deno << ')' << endl;break;  
  105.     case 3:  
  106.         cout << "近似值:" << nume / double(deno) << endl;break;  
  107.     default:  
  108.         cout << "默认原样:" << nume << '/' << deno << endl;  
  109.     }  
  110. }  
  111. int main()  
  112. {  
  113.     CFraction c1, c2(8, 6);  
  114.     cout << "关于c1: " << endl;  
  115.     c1.output(0);  
  116.     cout << "改变c1: " << endl;  
  117.     c1.set(2, 7);  
  118.     c1.output();  
  119.     cout << "输入c1: " << endl;  
  120.     c1.input();  
  121.     c1.output(0);  
  122.     cout << "关于c2: " << endl;  
  123.     c2.output(0);  
  124.     c2.output(1);  
  125.     c2.output(3);  
  126.     c2.output(3);  
  127.     c2.output();  
  128.     cout << "将c2化简: " << endl;  
  129.     c2.simplify();  
  130.     c2.output(0);  
  131.     cout << "将c2放大倍: " << endl;  
  132.     c2.amplify(5);  
  133.     c2.output(0);  
  134.     c2.output(1);  
  135.     system("pause");  
  136.     return 0;  
  137. }  

二、运行结果


0 0