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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
C语言中循环结构语句 for循环及while,do--while 的使用
只是主要关于C语言中循环结构语句 for循环及while,do--while 的使用 for(变量条件初始化;循环条件;变量的变化) { 循环中实现的功能; } 多个变量条件初始化,中间用‘,’号隔开,同理循环条件,变量的变化也是用‘,’号隔开;但是变量条件初始化和变量的变化可以不用再for中,只要有循环条件,依旧可以运行 具体实现如下:实现从1加到100。  int  ma
C语言中for循环,while循环与do-while 循环的比较
C语言的三种循环语句比较
【黑马程序员】C语言循环之while循环、for循环、do...while循环
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------          循环结构也就是反复执行一段指令,直到满足某个条件为止。相同的食物从不同的角度理解,九可以得到不同的结论。循环结构还可以理解为:在给定的条件成立时,反复地执行相应的程序,直到给定的条件不成立为止。        循环语句也可以分为两大类:一类是入口循环语句,一类是结束条
C++ do-while语句详解
基本格式 “do-while语句”也称为“直到循环”。语句格式为:     do  循环体语句 while(表达式); 其中: 表达式——是C++中任一合法表达式,包括逗号表达式;其值是逻辑型,即1或0。 循环体语句——可以是单一语句,也可以是复合语句。 执行流程 图2.6 do-while语句的执行流程 do-while语句的执行流程示意图如左图所示,描述如下: (1
【c语言】用do...while语句求1+2+3+...+100
// 用do...while语句求1+2+3+...+100. #include int main() { int i = 1; int sum = 0; do { sum = sum + i; i++; }while(i <= 100); printf("1+2+...+100 = %d\n",sum); return 0; }
do while 的continue之后会执行while中的条件
Cxxx *pCardData =NULL;do{ if( bIsSomeErr ) continue; //这里进入while条件,然后崩溃 pCardData = GetOnePtr(); if( pCardData) return ;}while ( pCardData->DoFun() );//崩溃 因为continue之后,会执行whil
关于利用scanf()函数做为do-while循环条件的分析
首先来看一段测试程序: /**************************** 程序名称:测试do-while循环 功能说明:让用户输入字符,来判断是否进行下次循环 *****************************/
C-011.while和do...while 循环语句
循环:用来处理一些重复执行的操作 写循环的具体步骤: 1、确定需要重复执行的操作 2、确定循环终止的条件: 1、在循环开始之前,需要做点事(定义一个循环控制变量并将其初始化) 2、确定循环约束条件 3、在每一次循环结束的时候或在循环中,要去改变循环控制变量的值,让它不断接近约束条件 while循环: while(条件表达式){               语句;  
C程序设计 例题5.2 用do...while语句求一到一百的和
#includeint main(){int i=1,sum=0;do{sum=sum+i;i++;}while(i<=100);printf("sum=%d\n",sum);return 0;}
C语言宏定义中使用do{}while(0);的理由
众所周知,C语言支持宏定义,并且功能强大。