C++ “后有多条指令?”&引用;操作人员

C++ “后有多条指令?”&引用;操作人员,c++,C++,我必须做一个分数struct,已经得到了nominator和nominator和is_correct()函数,它检查了两个必要条件。但是现在我必须做一个shorten()函数,它将使我的分数不可约 我做了一个gcd()函数(最大公约数),我需要在我的结构中放一个shorten()函数。看起来是这样的: struct fraction { int n,d; bool is_correct(){return d!=0?(abs(n)&l

我必须做一个分数
struct
,已经得到了
nominator
nominator
is_correct()
函数,它检查了两个必要条件。但是现在我必须做一个
shorten()
函数,它将使我的分数不可约

我做了一个
gcd()
函数(最大公约数),我需要在我的结构中放一个
shorten()
函数。看起来是这样的:

struct fraction {
                int n,d;
                bool is_correct(){return d!=0?(abs(n)<abs(d)?true:false):false;};
                void shorten(){gcd(n,d)!=1?(n=n/gcd(n,d);d=d/gcd(n,d)):;};
                }; 

int gcd(int x, int y)
{
    int z;
    while (y!=0){z=x%y;x=y;y=z;}
    return x;
} 
int g = gcd(n, d);
if (g != 1)
{
    n = n / g;
    d = d / g;
}
结构分数{
int n,d;

bool is_correct()

struct fraction {
                int n,d;
                bool is_correct(){return d!=0?(abs(n)<abs(d)?true:false):false;};
                void shorten(){gcd(n,d)!=1?(n=n/gcd(n,d);d=d/gcd(n,d)):;};
                }; 

int gcd(int x, int y)
{
    int z;
    while (y!=0){z=x%y;x=y;y=z;}
    return x;
} 
int g = gcd(n, d);
if (g != 1)
{
    n = n / g;
    d = d / g;
}

通过正确格式化代码,您可以发现错误:

void shorten(){gcd(n,d)!=1?(n=n/gcd(n,d);d=d/gcd(n,d)):;};

所以你可以这样写:

void shorten() { gcd(n, d) != 1 ? (n /= gcd(n, d)) : (d /= gcd(n, d)); }
甚至更好

void shorten()
{
    if (gcd(n, d) != 1)
        n /= gcd(n, d);
    else
        d /= gcd(n, d);
}

如果
/
或者…
的话,就把它写出来,而不是过多地使用?(虽然它会使代码变短,但也会使代码可读性变差)。你觉得这些代码容易阅读和理解吗?如果我必须
gcd()
负数?会不会有点混乱?你应该使用绝对值作为gcd函数的返回值。你可能仍然需要处理分子和分母都是负数的问题,但这是一个单独的问题。我认为应该检查分母是否等于零。除以1只会浪费时间。