#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 这行????
该怎么解决呢?
循环小问题。。。
答案:3 悬赏:0 手机版
解决时间 2021-04-22 13:09
- 提问者网友:焚苦与心
- 2021-04-22 06:49
最佳答案
- 五星知识达人网友:蓝房子
- 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
}
{
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语句显然应该放在循环体外。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯