C语言中遇到的程序问题

该程序的输出结果是
m=37;n=13;
while(m!=n)
{
while(m>n)
m=m-n;
while(n>m)
n-=m;
}
printf("m=%d\n",m);

A m=13 B m=11 C m=1 D m=2
答案是C,请帮我解答一下,过程详细一点哦。。

1. m=37;n=13;m>n执行m=m-n;===》m=24,还是m>n,继续m=m-n;===》m=11

2. n=13,m=11,n>m,执行n-=m;===》n=2

3. m=11,n=2,m>n执行m=m-n;===》m=9,继续m=m-n,分别===》7,5,3,1

4.m=1,n=2,n>m,执行n-=m;===》n=1

所以,m==n了,while(m!=n)循环结束,输出printf("m=%d\n",m);,结果为m=1
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-03-30
最后输出的时候m和n都相同。
因为奇偶的缘故,最后输出的时候,肯定是在一的时候
m n
第一次循环:24 13
13 11
11 2
9 2
7 2
5 2
3 2
2 1
1 1
第2个回答  2012-03-30
第1轮:m=37-13=24,n=13
第2轮:m=24-13=11,n=13
第3轮:m=11,n=13-11=2
第4轮:m=11-2=9,n=2
第5轮:m=9-2=7,n=2
第6轮:m=7-2=5,n=2
第7轮:m=5-2=3,n=2
第8轮:m=3-2=1,n=2
第9轮:m=1,n=2-1=1
此时m==n,跳出循环
第3个回答  2012-03-30
这个 主要是 不要选A 因为程序中改变了 m的数值

循环 第一次 m=37-2*13=11;
n=13-11=2;
第二次 m=11-2*5=1
n=2-1=1
此时 m=n 跳出循环 m=1
第4个回答  2012-03-30
循环执行,判断两数是否相等,然后大减小,得到差值,替换大数..

执行完确实等于1啊...
第5个回答  2012-03-30
while(m!=n) 此条件满足,执行大括号语句, while(m>n)满足 执行 m=m-n; 此时m=37-13=24
接着 while(n>m) 不满足,故不执行n-=m;
接着又回到while(m!=n) 由于 m=24 满足条件 所以继续执行,大括号语句。 while(m>n)满足,执行: m=m-n; 此时m=24-13=11 接着while(n>m) 满足 执行其后语句。n-=m 此时n=2
接着回到while(m!=n) 执行 大括号内,m=m-n m=9
接着回到while(m!=n), 执行 大括号内,m=m-n m=7
以此往下直到m=1; while(n>m) n-=m;n=1;
输出m=1