2 throne jk throne_JK 于 2014.11.21 20:47 提问

关于do-while语句中while()判断条件--c语言初学者求助

求两个正整数的最大公约数与最小公倍数如下程序
#include
void main()
{
int m,n,a,b,i;
scanf("%d%d",&m,&n);
if(m>0&&n>0){
b=m*n;
if(m<n)
{a=m;
m=n;
n=a;
}
do{i=m%n;
m=n;
n=i;}while(n=0);
printf("最大公约数为:%d\n",m);
b=b/m;
printf("最小公倍数为:%d\n",b);
}

}

其中while判断条件若为while(n=0) 可输出正确值 若为while(n==0) 无法执行 =不是赋值么 ==才是等于
不是应该为while(n==0)么?

9个回答

u013762572
u013762572   2014.11.21 21:24
已采纳

while(n >0 )

你的while(n==0)的意思是:当n!=0时,循环就结束掉,,,,,所以肯定得不出答案的,
你的while(n = 0 ) 可以为赋值状态,可以当做true处理的。。。

throne_JK
throne_JK 谢了 知道哪里错了
大约 3 年之前 回复
hjkNet
hjkNet   Ds   Rxr 2014.11.21 21:05

你确定代码没有问题吗?

throne_JK
throne_JK 抱歉 刚做别的题目才发现问题
大约 3 年之前 回复
jiangzuzai
jiangzuzai   2014.11.21 21:39

do{i=m%n;
m=n;
n=i;}while(n=0);这里不管是用while(n=0)还是while(n==0)都是错的;
原因:当while里的条件为true时继续循环,为false时退出循环,这里应该用while(n!=0),当n非零的时候继续。
另外,头文件没写完,应该是#include "stdio.h"

throne_JK
throne_JK 嗯 谢了 刚写另一个用do while 的题才发现问题 文件头复制粘贴时弄掉了
大约 3 年之前 回复
llp1992
llp1992   2014.11.21 22:36

应该改为while(n>0),do{}while() 的意思是,先做do里面的内容,再while里面的条件,如果条件为true,就继续做do里面的内容知道while里面的条件不满足就结束。

gz1758072906
gz1758072906   2014.11.21 23:16

我在codeblock复制粘贴你的代码不能直接运行,需要把while的判断条件改为while(n!=0);
代码如下:只做了一些小改动(主函数的返回值改成了int型,while的判断条件改了,结果就正确了)
#include
int main()
{
int m,n,a,b,i;

scanf("%d %d",&m,&n);

if(m>0&&n>0)
{
b=m*n;
if(m<n)
{
a=m;
m=n;
n=a;
}
do{i=m%n;
m=n;
n=i;
printf("m=%d",m);
}while(n!=0);
printf("最大公约数为:%d\n",m);
b=b/m;
printf("最小公倍数为:%d\n",b);
}
}
逻辑判断确实是==,但是在上诉代码中,应该用的是!=

u010925162
u010925162   2014.11.22 01:03

#include "stdio.h"
void main()
{
int m,n,a,b,i;
scanf("%d%d",&m,&n);
if(m>0&&n>0){
b=m*n;
if(m {a=m;
m=n;
n=a;
}
do{i=m%n;
m=n;
n=i;}while(n>0);
printf("最大公约数为:%d\n",m);
b=b/m;
printf("最小公倍数为:%d\n",b);
}
}

91program
91program   Ds   Rxr 2014.11.22 10:06

= 是赋值
== 是判断
从逻辑上来说应该是 ==

my___dream
my___dream   2014.11.22 13:58

n = 0 是赋值表达式,结果永远为 TRUE

xianfajushi
xianfajushi   2014.11.24 22:47
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!