Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在这个C代码中减少分数结果?_C_Math - Fatal编程技术网

如何在这个C代码中减少分数结果?

如何在这个C代码中减少分数结果?,c,math,C,Math,更新1: 在大家的帮助下,我得以: -我想指出的一点是,每个int都需要一个新的定义角色。看看下面,了解答案中的错误以及我想要的解决方案 如果可能的话,有人能帮我使这个脚本连续吗?我的意思是,在完成一个表达式并显示所有解决方案后,用户应该能够继续使用脚本,直到他们想退出为止。基本上,我如何循环整个过程,使它不会在一个用户输入后结束 #include<stdio.h> #include<math.h> #include<string.h> int gc

更新1: 在大家的帮助下,我得以: -我想指出的一点是,每个int都需要一个新的定义角色。看看下面,了解答案中的错误以及我想要的解决方案

如果可能的话,有人能帮我使这个脚本连续吗?我的意思是,在完成一个表达式并显示所有解决方案后,用户应该能够继续使用脚本,直到他们想退出为止。基本上,我如何循环整个过程,使它不会在一个用户输入后结束

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

 int gcd(int a, int b) {
    while(0!=b) { int r = a % b; a=b; b=r; }
    return a;
}
 int input(char* prompt) {
    int res;
    printf("%s: ", prompt);
    scanf("%d", &res);
    return res;
}
 main()
 {
    int add,sub,mul,dd;
    int add1,sub1,mul1,dd1;
    int a,b,c,d;
    a=input("Please enter the numerator for your first equation");
    b=input("Please enter the denominator for your first equation");
    c=input("Please enter the numerator for your second equation");
    d=input("Please enter the denominator for your second equation");
    add=(a*d+b*c);
    add1=(b*d);
    int fac = gcd(add, add1);
        add /=fac;
        add1 /=fac;
    printf("\The sum of your fractions is: %d/%d",add,add1);
    sub=(a*d-b*c);
    sub1=(b*d);
    int red = gcd(sub, sub1);
        sub /=red;
        sub1 /=red;
    printf("\nThe difference of your fractions is: %d/%d",sub,sub1);
    mul=(a*c);
    mul1=(b*d);
    int red1 = gcd(mul, mul1);
        mul /=red1;
        mul1 /=red1;
    printf("\nThe product of your fractions is: %d/%d",mul,mul1);
    dd=(a*d);
    dd1=(b*c);
    int red2 = gcd(dd, dd1);
        dd /=red2;
        dd1 /=red2;
    printf("\nThe quotient of your fractions is: %d/%d",dd,dd1);
 }
#包括
#包括
#包括
内部gcd(内部a、内部b){
而(0!=b){intr=a%b;a=b;b=r;}
返回a;
}
int输入(字符*提示){
国际关系;
printf(“%s:”,提示符);
扫描频率(“%d”、&res);
返回res;
}
main()
{
int add、sub、mul、dd;
int add1,sub1,mul1,dd1;
INTA、b、c、d;
a=输入(“请输入第一个方程式的分子”);
b=输入(“请输入第一个方程式的分母”);
c=输入(“请输入第二个方程式的分子”);
d=输入(“请输入第二个方程式的分母”);
加法=(a*d+b*c);
add1=(b*d);
int fac=gcd(添加,添加1);
加上/=fac;
add1/=fac;
printf(“\分数之和为:%d/%d”,add,add1);
sub=(a*d-b*c);
sub1=(b*d);
int red=gcd(sub,sub1);
sub/=红色;
sub1/=红色;
printf(“\n分数之差为:%d/%d”,sub,sub1);
mul=(a*c);
mul1=(b*d);
int red1=gcd(mul,mul1);
mul/=red1;
mul1/=red1;
printf(“\n分数的乘积为:%d/%d”,mul,mul1);
dd=(a*d);
dd1=(b*c);
int red2=gcd(dd,dd1);
dd/=red2;
dd1/=red2;
printf(“\n分数的商为:%d/%d”,dd,dd1);
}

您需要重新计算每个特定案例的gcd,然后除以:

    add=(a*d+b*c);
    add1=(b*d);
    int fac = gcd(add, add1);
    add /=fac;
    add1/=fac;
    printf("\The sum of your fractions is: %d/%d",add,add1);
    sub=(a*d-b*c);
    sub1=(b*d);
    fac = gcd(sub,sub1);
    sub /= fac;
    sub1 /= fac;

等等。

简化分数:

void simp(int *num, int *den)
{
    int i;

    int lim = (*num < *den) ? *num : *den;
    for (i = 2; i < lim; ++i)
        if (*num % i == 0 && *den % i == 0) {
            *num /= i;
            *den /= i;
        }
}
void simp(int*num,int*den)
{
int i;
int lim=(*num<*den)?*num:*den;
对于(i=2;i
您需要移动的可能副本
int fac=gcd(add,add1);加上/=fac;add1/=fac向下到
add1=(b*d)
以下。在C语言中,这样的语句不定义变量之间的关系;它们是立即执行的计算,因此,您只是使用未初始化的变量执行无意义的计算,这些变量对程序的其余部分没有影响。这对求和有效,其余的呢?我是否只是重复同样的过程,只是改变变量?作为减法的一个例子:“int fac=gcd(sub,sub1);sub/=fac;sub1/=fac;'@M.M这不起作用,将sub、sub1函数插入同一gcd()也不起作用。我得到的错误是“gcd()”@M.Minput中的函数太多。Minput是一个分子和分母,输出应该是简化为lcd的算术函数的解决方案。到目前为止,加法和分法都可以,但乘法和除法不行。我能算出这一部分,谢谢你的帮助。我的后续问题现在我的脚本工作了,我如何让它循环,以便在显示一组结果后,用户可以重新开始,直到他们键入“quit”作为第一个分子@StackPtr gcd功能已存在;不需要重新发明轮子