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