按要求补充编程片段 只要符合标准 秒采纳

img

img

img


类与对象题不要用太高级句子(最好多些注释) 必须按照他的提示填写 最好附上运行结果 只要测试后没问题 秒通过!

#include <iostream>
#include <iomanip>
#include <string>
#include <stdio.h>
#include <string.h>
#include <math.h>

using namespace std;

class Fraction
{
public:
    Fraction(int numer, int denomin)
    {
        //求最大公约数,得到最简分数
        int factor = gcd(abs(numer), abs(denomin));
        numerator   = numer/factor;
        denominator = denomin/factor;
    }
    
    double FractionToDecimal()
    {
        return double(numerator)/double(denominator);
    }
    
    void DecimalToFraction(char deci[])
    {
        numerator   = 0;
        denominator = 1;
        for(int i=0; i<strlen(deci); i++)//每次将小数放大10倍直到得到一个整数
        {
            if(deci[i]=='-')//判断是否为负数
            {
                denominator = -1;
            }
            else if(deci[i]=='.')//找小数点的位置,计算放大倍数
            {
                denominator *= pow(10, strlen(deci)-1-i);  
            }
            else//得到放大后的最小整数
            {
                numerator = numerator*10+ (deci[i]-'0');
            }
        }
        //得到最简分数
        int factor  = gcd(abs(numerator), abs(denominator));
        numerator  /= factor;
        denominator/= factor;
    }
    
    //辗转相除,gcd(a,b) = gcd(b,a mod b),当a mod b为0时得到最大公约数b, a>0, b>0
    int gcd(int m, int n)
    {
        if(n==0)
        {
            return m;
        }
        return gcd(n, m%n);//递归实现
    }
    
    void show()
    {
        if(numerator*denominator<0)//判断numerator和denominator是否异号
            cout<<'-';
        cout<<abs(numerator)<<'/'<<abs(denominator); 
    }
    
private:
    int numerator;
    int denominator;
};

int main()
{
    int numer, denomin;
    char sdeci[50];

    cin >> numer >> denomin >> sdeci;
    Fraction fr(numer, denomin);
    
    cout << setiosflags(ios::fixed) << setprecision(2);
    fr.show();
    cout << " " << fr.FractionToDecimal() << " ";
    fr.DecimalToFraction(sdeci);
    fr.show();

    return 0;
}