求助纠错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); 这个意思?
[解决办法]
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;}
[解决办法]
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形式输出,以下代码,考虑了符号
#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;}