分数约简C程序

分数约简C程序,c,C,好了,伙计们,这是一个家庭作业,但是已经提交了,我收到了78:。我的教授还没有回复我的帮助邮件,所以我现在在这里 代码的第一部分应该将分数减少到它们的最低形式,它是有效的。。除非最大公分母大于10。这是对C类的介绍,我对C及其特性几乎没有经验。对GCD问题有任何帮助/指导/想法吗 #include <stdio.h> int main (void) { int num; int den; int x; int y; int i; int a; int n; int w; int j

好了,伙计们,这是一个家庭作业,但是已经提交了,我收到了78:。我的教授还没有回复我的帮助邮件,所以我现在在这里

代码的第一部分应该将分数减少到它们的最低形式,它是有效的。。除非最大公分母大于10。这是对C类的介绍,我对C及其特性几乎没有经验。对GCD问题有任何帮助/指导/想法吗

#include <stdio.h>

int main (void)
{
int num;
int den;
int x;
int y;
int i;
int a;
int n;
int w;
int j;

printf("\n *************Question 1 *************** \n");
printf("Please enter the numerator: ");
scanf("%d", &num);
printf("Please enter the denominator: ");
scanf("%d", &den);
printf("The fraction entered is: \n %d/%d \n", num, den );
if (num > den)
x=den;
else
    x=num;
for(i=x; i>=1; i--){
        if(num % i == 0 && den % i == 0){
                        printf("This fraction can be reduced! \n");
                num = num/i;
                den = den/i;
                    printf("The reduced fraction is %d/%d \n \n", num, den); break;}
        else
            printf("This fraction cannot be reduced any further \n");
                break;
}
printf("\n ***************Question 2****************** \n");
printf("Please enter a number and I will print the even squares up to your input   ");
scanf("%d", &n);
for ( w=1; w<=n; w++)
        if (w*w%2 == 0 && w*w <= n )
printf("%d \n", w*w);

printf("Question 5 test... please enter 10.3 then 5 then 6 ");
scanf("%d%f%d",&i,&x,&j);
printf("%d %f  %d \n",i,x,j);

return 0;
}
#包括
内部主(空)
{
int-num;
int den;
int x;
int-y;
int i;
INTA;
int n;
int w;
int j;
printf(“\n****************问题1*********************\n”);
printf(“请输入分子:”);
scanf(“%d”和&num);
printf(“请输入分母:”);
scanf(“%d”和“&den”);
printf(“输入的分数是:\n%d/%d\n”,num,den);
如果(num>den)
x=den;
其他的
x=num;
对于(i=x;i>=1;i--){
if(num%i==0&&den%i==0){
printf(“该分数可以减少!\n”);
num=num/i;
den=den/i;
printf(“减少的分数是%d/%d\n\n”,num,den);break;}
其他的
printf(“该分数不能再减少了”\n”);
打破
}
printf(“\n*******************问题2***************************\n”);
printf(“请输入一个数字,我将打印您输入的偶数方块”);
scanf(“%d”和“&n”);

对于(w=1;w你
在你的归约循环中无条件地中断
,因此你不会重复循环一次。你不应该在循环结束时中断
,这意味着“无论我们找到了gcd,还是找到了一个不起作用的除数,停止寻找。”

在你的归约循环中无条件地中断
,因此你不会循环超过一次。你不应该在循环结束时
中断
,这意味着“无论我们是找到了gcd,还是找到了一个不起作用的除数,停止寻找。”

在这个代码中:

        else
            printf("This fraction cannot be reduced any further \n");
                break;
您打算将
中断
printf
分组:

        else
        {
            printf("This fraction cannot be reduced any further \n");
                break;
        }
但是,任何一种方法都是不正确的。如前所述,循环的第一次迭代将执行
if
的then子句,该子句减少分数并退出循环,或者执行else子句,然后中断(无论
break
是否与
printf
分组)。您的目的是,如果第一次迭代没有减少分数,则循环将继续。为此,
else
printf
break
不应在循环中

相反,您应该允许循环继续执行迭代,直到它完成,这可能是因为then子句中的
break
以成功的缩减终止了它,或者是因为
for
语句中的控制表达式在
i
达到零时结束了循环

循环结束后,您可以测试
i
是否为零。这将告诉您循环是否因为执行了减少而结束(并且执行了
break
)或者因为循环耗尽了所有的迭代。在后一种情况下,如果您希望打印这样的消息,您可以打印分数不能减少的消息

一项重要的技能是通过检查循环如何执行来学习调试此类问题。您可以通过在调试器中单步执行程序或插入
printf
语句来报告循环每次迭代中发生的情况。这将揭示循环只执行一次迭代,而不考虑f输入


顺便说一句,有一种比测试潜在因子直到找到一个更好的算法来减少分数。它大约有2300年的历史,由欧几里得在《元素》一书(第七章),命题1和命题2中描述。

在这段代码中,似乎有可能:

        else
            printf("This fraction cannot be reduced any further \n");
                break;
for(i=x; i>1; i--)
{
    if(num % i == 0 && den % i == 0)
    {
        break;
    }
}
if ( i > 1 )
{
    printf("This fraction can be reduced! \n");
    num = num/i;
    den = den/i;
    printf("The reduced fraction is %d/%d \n \n", num, den);
}
else
    printf("This fraction cannot be reduced any further \n");
您打算将
中断
printf
分组:

        else
        {
            printf("This fraction cannot be reduced any further \n");
                break;
        }
但是,任何一种方法都是不正确的。如前所述,循环的第一次迭代将执行
if
的then子句,该子句减少分数并退出循环,或者执行else子句,然后中断(无论
break
是否与
printf
分组)。您的目的是,如果第一次迭代没有减少分数,则循环将继续。为此,
else
printf
break
不应在循环中

相反,您应该允许循环继续执行迭代,直到它完成,这可能是因为then子句中的
break
以成功的缩减终止了它,或者是因为
for
语句中的控制表达式在
i
达到零时结束了循环

循环结束后,您可以测试
i
是否为零。这将告诉您循环是否因为执行了减少而结束(并且执行了
break
)或者因为循环耗尽了所有的迭代。在后一种情况下,如果您希望打印这样的消息,您可以打印分数不能减少的消息

一项重要的技能是通过检查循环如何执行来学习调试此类问题。您可以通过在调试器中单步执行程序或插入
printf
语句来报告循环每次迭代中发生的情况。这将揭示循环只执行一次迭代,而不考虑f输入

顺便说一句,有一种比测试潜在因子直到找到一个更好的算法来减少分数。它大约有2300年的历史,欧几里德在《元素》一书(第七章,命题1和命题2)中对其进行了描述。

你得到了a+1)告诉我们这是家庭作业,b)你尝试了一些东西,但请在另一个座位上再吃一次,也许你输了
for(i=x; i>1; i--)
{
    if(num % i == 0 && den % i == 0)
    {
        break;
    }
}
if ( i > 1 )
{
    printf("This fraction can be reduced! \n");
    num = num/i;
    den = den/i;
    printf("The reduced fraction is %d/%d \n \n", num, den);
}
else
    printf("This fraction cannot be reduced any further \n");