首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于C的循环控制解决思路

2012-03-04 
关于C的循环控制#include math.hmain()(intp,r,n,m,tprintf( 请输入两个整数:\ )scanf( %d,%d ,&n

关于C的循环控制
#include <math.h>
main()
(int   p,r,n,m,t;
printf( "请输入两个整数:\ ");
scanf( "%d,%d ",&n,&m);
if(n <m)
{t=n;n=m;m=t;}
p=n*m;
while(m!=0)
  {r=n%m;n=m;m=r;}
printf( "它们的最大公约数为:%d\n ",m);
printf( "它们的最大公倍数为:%d\n ",p/m);
}

[解决办法]
#include <math.h>
main()
(int p,r,n,m,t;
printf( "请输入两个整数:\ ");
scanf( "%d,%d ",&n,&m);
if(n <m)
{t=n;n=m;m=t;}
p=n*m;
while(m!=0)
{r=n%m;n=m;m=r;} //这好像有问题,只有m=0的时候循环才会跳出,这样下面的还有意义吗?
printf( "它们的最大公约数为:%d\n ",m);
printf( "它们的最大公倍数为:%d\n ",p/m);
}


应该改下:
#include <math.h>
#include <stdio.h>
void main()
{
int p,r,n,m,t;
printf( "请输入两个整数: ");
scanf( "%d,%d ",&n,&m);
if(n <m)
{
t=n;n=m;m=t;
}
p=n*m;
while(m!=0)
{
r=n%m;n=m;m=r;

}
//if(m==0)
//printf( "m=%d\n ",m);
//else
//{
if(n==0)
;
else
{
printf( "它们的最大公约数为:%d\n ",n);
printf( "它们的最大公倍数为:%d\n ",p/n);
}
}
[解决办法]
while(m!=0)
这里是m为0终止 后面又输出p/m


应该是p/n
[解决办法]
假如 n=6 m=8 那在while(m!=0)
{r=n%m;n=m;m=r;}
这步后,r=2;n=6;m=2
最后的最大公约数不是 6了
最大公倍数不是 (6*8)/6=8了 ,这是为什么

注意在
while(m!=0)
{r=n%m;n=m;m=r;}
这步后,r=2;n=6;m=2
此时m!=0,所以还要继续循环。
接着是 r=n%m=6%2=0,n=m=2,m=r=0.这时m=0循环才结束
最后的最大公约数是n=2;
最大公倍数不是 (6*8)/2=24

热点排行