帮我解释一下这个c程序为什么输出结果为m=1

来源:百度知道 编辑:UC知道 时间:2024/05/12 06:42:54
m=37;n=13;
while(m!=n)
{
while(m>n)
m=m-n;
while(n>m)
n-=m;
}
printf("m=%d\n",m);

#include<stdio.h>
void main()
{
int m,n;
scanf("%d,%d",&m,&n);
while(m!=n)
{
while(m>n)
m=m-n;
while(n>m)
n-=m;
}
printf("m=%d\n",m);
}
你让m=37,n=13,然后运行得到m=1
其实,一步一步地分析,你可以看到这样一种情况:
while(m!=n),由于m=37,n=13,这样,m!=n成立,继续向下执行,又因为m>n,所以执行第一个while,即while(m>n),m=m-n,执行完这一步之后,m被重新赋值为24,这个时候程序的循环体并没有中止,而是继续进行了,由于m=24>n=13,仍然符合m!=n的条件,所以程序进入循环体,又m>n,再次执行while(m>n),m=m-n这一部分,然后程序就一直这样进行,直到m的值小于n值,当第二次执行循环体时,m又被重新赋值为1,此时,循环体执行第二个while,即while(n>m),n-=m,于是n就被重新赋值了,但是重新赋值后的m和n,还是不相等的,所以循环一直进行,直到m和n的值相等,程序循环体结束,这才执行printf("m=%d\n",m);其实当m=n时,它们的值已经都为1了,你可以自己写一下,最终m的值是1了,如果
你想得到通过判断m,n的大小来做m-n或是n-m,那么这样写也行,加个break
#include<stdio.h>
void main()
{
int m,n;
scanf("%d,%d",&m,&n);
while(m!=n)
{
while(m&