当我刚刚在C中学习while循环时,我编写了这段时髦的代码:
#include <stdio.h>
int main(void)
{
int dd,dr,q,r;
printf("Enter bigger no: ");
scanf("%d",&dd);
printf("Enter smaller no: ");
scanf("%d",&dr);
while(dr>0)
{
r=dd%dr;
dd=dr;
dr=r;
}
printf("HCF=%d",dr);
printf("%d\t%d\t%d\t",dd,q,r);
return(0);
}
输入更大/更小的号码。是为了简化事情。这个程序工作正常。现在,只要我删除返回语句printf("%d\t%d\t%d\t",dd,q,r);
之上的行,hcf就会变为0.是什么导致了这种奇怪的行为?
答案 0 :(得分:3)
您的while循环检查dr > 0
退出您的while循环dr
必须为0.我认为您的HCF最后会在dd
而非dr
while循环。您正在使用的算法称为Euclid算法,因此您可以通过查看算法来检查它。
答案 1 :(得分:3)
打印为HCF(GCD)的内容始终为0,
因为它是dr
并且循环一直运行直到dr
为0.
“问题”是您在dd
之后打印dr
,而在它们之间没有任何空格等,
所以它看起来像一个数字。如果删除第二个printf,则只剩下dr
的0
在输出之间插入\n
,并切换变量以打印正确的内容。