永发信息网

循环小问题。。。

答案:3  悬赏:0  手机版
解决时间 2021-04-22 13:09
  • 提问者网友:焚苦与心
  • 2021-04-22 06:49
#include <stdio.h>

void GCD(int a,int b)
{
int i;
while(i!=0)
{
i=a%b;
a=b;
b=i;
printf("x&y 的公约数为%d\n",b);
}
}

int main(void)
{
int x,y;
scanf("%d %d",&x,&y);
if(x<y){
int z;
z=x;
x=y;
y=z;
}
GCD(x,y);
return 0;
}

输入2 3
最后结果:2 3
x&y 的公约数为1
x&y 的公约数为0

。。。。。。

为什么会有 x&y 的公约数为0 这行????
该怎么解决呢?
最佳答案
  • 五星知识达人网友:蓝房子
  • 2021-04-22 07:07
void GCD(int a,int b)
{
int i;
while(i!=0)
{
i=a%b;
a=b;
b=i;
}
printf("x&y 的公约数为%d\n",a); //将输出放到循环外部执行! 另外,输出为a.
//因为i=0时才结束循环,而结束前将i赋值给b了.而b原来的值赋值给了a. 所以输出的是a
}
全部回答
  • 1楼网友:话散在刀尖上
  • 2021-04-22 09:16

你的while(i!=0)有问题,你可以看一下,当i=0时,前一步有一句b=i;

先执行b=i这句,之后再判断i是否等于0,若i=0,说明在上一步已经将i的值赋给了b,b的值也为0了。所以有你所说的结果。你可以试一下:当输出语句放到while()语句外面时,b的值一直为0,所以有必要改一下你的算法:

我对你程序的修改:

#include <stdio.h>

void GCD(int a,int b) {

while(a!=b) { if(a>b)a=a-b; else b=b-a; } printf("x&y 的公约数为%d\n",b); }

int main(void) { int x,y; scanf("%d %d",&x,&y); GCD(x,y); return 0; }

执行结果:

  • 2楼网友:怙棘
  • 2021-04-22 07:53

这个GCD函数有问题。

1、变量i未经初始化就使用了,显然不稳定的。(当然,你调试的时候没有表现出来)

2、GCD应该在while循环后得到,printf语句显然应该放在循环体外。

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯