编写c语言程序,实现分数的约分

2024-11-16 06:52:56
推荐回答(5个)
回答(1):

以下一段程序是循环运行的,即, 得出结果后继续下一轮接受用户输入.
任何一个数为0 则退出.

程序运行过程:
接受用户输入两个数, 第一个是分子, 第二个是分母.
输出结果,并等待下一轮.
两个数中任意一个为0, 则程序立即退出.

#include
#include
main()
{
int iNum,iDeno,iMod,iMin;
iNum=iDeno=1;
while(iNum!=0 && iDeno!=0)
{
printf("Please input the numerator and the denominator:\n");
scanf("%i%i",&iNum,&iDeno);

if (iNum==0 || iDeno==0)
continue;
if (iNum iMin=iNum;
else
iMin=iDeno;

for (int i=2;i<=iMin;i++)
{
if (i>iNum || i>iDeno)
break;

if (iNum%i==0 && iDeno%i==0)
{
iNum/=i;
iDeno/=i;
i=1;
}
}

printf("\n%i\n----\n%i\n",iNum,iDeno);
getch();
}

}

回答(2):

如果分子是负数呢

回答(3):

perject - 见习魔法师 三级 给的就是啊,不过算法属于最基本的。支持 芙瑶凌 - 经理 四级 提到的辗转相除法,稍加改动如下(turboc2编译通过的噢,关于辗转相除法见参考资料):
(昨晚提交的程序有个问题啊,不好意思……汗颜……现在就改过来)
#include
#include
main()
{
int iNum,iDeno,iMax,iMin,iTmp;
iNum=iDeno=1;
while(iNum!=0 && iDeno!=0)
{
printf("Please input the numerator and the denominator:\n");
scanf("%i%i",&iNum,&iDeno);

if (iNum==0 || iDeno==0)
continue;
if (iNumiMin=iNum,iMax=iDeno;
else
iMin=iDeno,iMax=iNum;

for(;iMin!=0;){ /*传说中的辗转相除法*/
iTmp=iMin;
iMin=iMax%iMin;
iMax=iTmp;
}

printf("\n%i\n----\n%i\n",iNum/iMax,iDeno/iMax);
getch();
}

}

回答(4):

辗转相除法

回答(5):

???

不明白...