我正在尝试用C代码编写 Euclidean算法。当我使用do while
或for
循环时,程序崩溃:
#include<stdio.h>
int gcd(int a,int b);
int main()
{
int x,r,y;
printf("Enter two values:\n");
scanf("%d%d",&x,&y);
if(x<y)r=x,x=y,y=r;
r=gcd(x,y);
printf("\n\n Result: %d",r);
return 0;
}
int gcd(int a,int b)
{
if(a==0||b==0)
{
if(a==0)return b;
if(b==0)return a;
}
else
{
for(;;a>0||b>0)//also try with do while loop but problem same
{
int x;
x=a%b;
a=b;
b=x;
}
}
}
您能否解释一下程序崩溃的原因?我将代码块与gcc
答案 0 :(得分:2)
此:
for(;;a>0||b>0)
是一个无限循环,那么结束条件是中间部分,应该是:
for (; a > 0 || b > 0;)
我怀疑这种条件的逻辑,不是&&
吗?
答案 1 :(得分:2)
代替
if(x<y)r=x,x=y,y=r;
,您需要执行以下操作:
if(x < y){
r = x;
x = y;
y = r;
}
此外,您需要将条件放在for
循环的第二条语句中。代替:
for(;;a>0||b>0)
{
...
}
您可以做while(a > 0 && b > 0)
。
根据您的熟悉程度,您可以使用以下递归:
int hcf(int a, int b)
{
if (b == 0)
return a;
else
return hcf(b, a%b);
}
还要注意,您的hcf
函数在else
块中没有return语句。因此,您将不得不使用条件返回:
if (a == 0) return b;
else return a;
hcf
函数的结尾
答案 2 :(得分:0)
此声明
for(;;a>0||b>0)
什么也没做,所以你会无休止的循环。
似乎发生的事情是b
变为零,然后您执行a % 0
这是非法的并导致崩溃。
请记住,是for循环中的第二条语句是终止循环的条件-不是第三条。所以也许你想要:
for( ; a>0||b>0; )