【问题标题】:reducing a fraction in c减少c中的分数
【发布时间】:2016-11-15 17:18:36
【问题描述】:
#include <stdio.h>
#include <stdlib.h>
int main(){
    system("color f0");
    int a,b,c,d,e,f,g,h,z;
    printf("First numerator:");
    scanf("%d",&a);
    printf("First denominator:");
    scanf("%d",&b);
    printf("Second numerator:");
    scanf("%d",&c);
    printf("Second denominator:");
    scanf("%d",&d);

    a=a*d;
    c=c*b;
    e=a+c;
    f=b*d;
    printf("Simple form:%d/%d\n",e,f);
    return 0;
}

这是我的代码,我想在不使用数学库的情况下将这个简单的分数减少到最低限度

【问题讨论】:

  • 请格式化代码。
  • 为什么不使用math.h?我们不会做作业。
  • @Blacksilver 无论如何 math.h 将如何帮助这里?
  • 我没有头绪,但你为什么不想用呢?
  • 这是我必须做的作业,但我不能这样做,所以我们不能使用数学库

标签: c reduction


【解决方案1】:

你的代码做了一些奇怪的事情:

首先,您要求用户提供 两个 提名者和 两个 分母。

所以你的台词

printf("Second numerator:");
scanf("%d",&c);
printf("Second denominator:");
scanf("%d",&d);

是多余的,你可以删除它们。

第二,你的行

a=a*d;
c=c*b;
e=a+c;
f=b*d;

可怕的 - 读者(和你)会迷失在你的单字母名字的数量。

那么为什么不给 nominator 的变量命名为 nominator,而为 分母 的变量命名为 denominator?等等?

所以用这个替换你的整个代码:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int numerator, denominator, smaller, i;

    system("color f0");

    printf("Numerator  : ");
    scanf("%d",&numerator);

    printf("Denominator: ");
    scanf("%d",&denominator);

    printf("\nOriginal fraction: %d/%d\n", numerator, denominator);

    // Method: We get the smaller number from numerator and denominator
    // and will try all numbers from it decreasing by 1 for common divisor

    smaller = numerator < denominator ? numerator : denominator;

    for (i = smaller; i > 1; --i)
        if (numerator % i == 0 && denominator % i ==0)
        {
            numerator   /= i;
            denominator /= i;
            break;
        }

    printf("Reduced fraction : %d/%d\n", numerator, denominator);
    return 0;
}

【讨论】:

  • 玛丽安你很粗鲁,但非常感谢你的帮助。 :D
【解决方案2】:

堆栈溢出!= /r/homeworkhelp

一种伪代码算法:

get a fraction in the form of a/b

while a/b is not in lowest terms:
    find a common divisor, k
    divide a by k  
    divide b by k
end while

检查某事是否是最低条件:

if A == B:
    [not lowest terms]
if A is a multiple of B:
    [not lowest terms]
if there is a common divisor: // this catches the first two.
    [not lowest terms]
else:
    [lowest terms]

我将把除数查找器留给你,否则它会容易。

【讨论】:

  • 相当确定这行得通。如果不行就骂我,我会解决的。
  • 我会尽快回复你们。希望一切顺利
  • r=e%f; if (r == 0) printf("简化形式:%d/%d",e/e,f/e);否则 e=f; f=r; r=e%f; printf("简化形式:%d/%d",e/r,f/r);返回0;这就是我所做的,但它没有正确减少
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-28
相关资源
最近更新 更多