首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

纠错C程序

2012-03-22 
求助纠错C程序int main(void){int num,denom,result_num,GCD,t printf(Enter a fraction:)scanf(%d/%

求助纠错C程序
int main(void)
{
int num,denom,result_num,GCD,t ;
printf("Enter a fraction:");
scanf("%d/%d",&num,&denom);
while(num!=0)
{
t=num%denom;
num=denom;
denom=t;
}  
GCD=num;
num=num/GCD;
denom=denom/GCD;

printf("In lowest terms:%d/%d\n",num/denom);
return 0;
}
这是一个化简分数的程序,请大家帮我看看这个程序有什么错啊,我运行时显示说该程序已停止工作,请问是怎么回事?

[解决办法]
while(num!=0)
--》
while(denom!=0)

你原来的程序之所以退出,就是因为denom=0后还在用作除数,比如12/4, t=num%denom=0,denom=t=0
[解决办法]
1)在while(num!= 0)这里,那么推出while时num = 0的, 然而GCD = num = 0,GCD不能作为除数。
2)在printf("In lowest terms:%d/%d\n",num/denom); %d/%d要求两个数,这行代码却只有一个数(
num/denom)
[解决办法]
虽然没有看懂你的程序到底想干嘛,但是有两处会出现逻辑错误:
错误一:
while(num!=0) //下面循环可能导致denom为0,所以语句 t=num%denom; 会执行不过,跳出。
错误二:
printf("In lowest terms:%d/%d\n",num/denom); //这里实在没有发现想表达什么。。


难道是:printf("In lowest terms:%d/%d\n",num,denom); 这个意思?


[解决办法]

探讨
while(num!=0)
--》
while(denom!=0)

你原来的程序之所以退出,就是因为denom=0后还在用作除数,比如12/4, t=num%denom=0,denom=t=0

[解决办法]
t=num%denom;
num=denom;
denom=t;

你改了NUM和denom的值
[解决办法]
int main(void)
{
int num,denom,GCD,t,num1,denom1 ;
printf("Enter a fraction:");
scanf("%d/%d",&num1,&denom1);
num=num1;
denoml=denom1;
t=num%denom;
while(t!=0)
{
num=denom;
denom=t;
t=num%denom;
}
GCD=num;
num1=num1/GCD;
denom1=denom1/GCD;

printf("In lowest terms:%d/%d\n",num1,denom1);
return 0;
}
[解决办法]
不知道你说的简化分数是不是约分的意思,我按这给你写了个,试试吧
C/C++ code
int main(void){    int num,denom,result_num,GCD,t ;    bool ch = true;    printf("Enter a fraction:");    cin >> num >> denom;    while(ch)    {        int min = num<denom?num:denom;        int i = 0;        for (i=min; i>1; i--)        {            if (num%i==0 && denom%i==0)            {                num = num/i;                denom = denom/i;                ch = true;                break;            }        }        ch = false;    }        printf("In lowest terms:%d/%d\n",num,denom);    return 0;}
[解决办法]
C/C++ code
int main(void){    int num,denom,result_num,GCD,t ;    int tmp_num, t_denom;     printf("Enter a fraction:");    scanf("%d/%d",&num,&denom);        /*while(num!=0) {        t=num%denom;         num=denom;//此处修改了num和denom的值.         denom=t;    }   */        //修正:    tmp_num = num;    tmp_denom = denom;         while(tmp_num != 0) {        t = tmp_num % tmp_denom;         tmp_num = tmp_denom;//此处修改了num和denom的值.         tmp_denom = t;    }           GCD=num;      num=num/GCD;    denom=denom/GCD;        printf("In lowest terms:%d/%d\n",num/denom);    return 0;}
[解决办法]
意思应该是如果可以是整数,就整数输出,否则x/y形式输出,以下代码,考虑了符号
C/C++ code
#include <stdio.h>int main(int argc, char *argv[]){    int num,denom,result_num,GCD,t ;    printf("Enter a fraction:");    scanf("%d/%d",&num,&denom);    if (0 == denom) /* 简单的输入判断 */    {        printf("Input error: denom must not be zero\n");        return 0;    }    int tmpNum = num, tmpDenom = denom;    while(tmpDenom != 0)    {        t = tmpNum % tmpDenom;        tmpNum = tmpDenom;        tmpDenom = t ;    }       GCD = tmpNum;    num /= GCD;    denom /= GCD;    if (num % denom == 0)    {        printf("In lowest terms:%d\n", num/denom);    }    else /* 考虑符号输出 */    {         printf("In lowest terms:%d/%d\n",num^denom > 0 ? -num : num, denom > 0 ? denom : -denom);    }        return 0;} 

热点排行
Bad Request.