求两个数m和n的最大公约数 帮我把每行代码都详细解释一下。。

#include<stdio.h>intmain(){intm,n;inttemp;scanf("%d%d",&m,&n);while(m%n!=0){temp=n;n=... # include<stdio.h>
int main()
{
int m,n;
int temp;
scanf("%d%d",&m,&n);
while(m%n!=0)
{
temp=n;
n=m%n;
m=temp;
}
printf("%d\n",n);
return 0;
展开
 我来答
等待幸福降臨
2014-08-14 · TA获得超过152个赞
知道小有建树答主
回答量:86
采纳率:0%
帮助的人:64.9万
展开全部
# include<stdio.h> //引入头文件(不解释)
int main() //main函数,程序入口(不解释)
{
int m,n; //定义整数 m,n
int temp; //定义中间变量(也叫临时变量) temp
scanf("%d%d",&m,&n); //读取 m,n的值(键盘输入)
while(m%n!=0) //进入while循环,循环条件为取余不为0(m除以n 余数不为0)
{
temp=n; //对中间变量temp赋值为n
n=m%n; //将m除以n的余数赋值给n
m=temp; //将中间变量赋值给m
}
printf("%d\n",n); //打印n
return 0; //返回0 因为main函数定义返回值为int型

只是注释的话没什么意义,这个题目重点在于理解两条:
第一.取余运算和while循环
第二.怎么样利用这两点算出公约数(算法)
其中第二条是重中之重,但看循环的话没法明白道理,可以用数字举例说明
首先看特例:比如 m=9 n=3 很显然 最后结果就是3 那么运行过程就是
从键盘读取了 9和3 然后进入while循环 条件是 m%n!=0 条件不成立所以没有进入循环由此可知 m能被n整出这样n就是最大公约
下面看常规例子 m=9 n=6 结果是3 看运行
读取 9和3之后 进入while循环 发现m%n!=0 条件成立 因为m%n=3
接下来的三行while内语句就是 temp=6; n=3; m=6;
根据这个结果再一次进入while循环 条件 m%n=0 所以跳出循环 n=3
你可以多尝试几个例子O(∩_∩)O~;
总结:比较初级的一个题目,不过过程不太好想,尤其是自己思考最大公约数问题
知识点1.temp变量的使用
2.%运算符的运用(打破常规的除法运算方式)
3.while循环条件(尤其是 条件运算表达式带有否定含义时的真假判别)
4.return 0 经常会忘记.
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式