C语言学习记录——辗转相除法

抛开程序一年多了,重新捡起来,开始用浙大老师的教程。
因为目前没有从事开发的工作了,所以整个学习的过程完全不急躁,可以说是相当得慢,一节课会反反复复地去看,去思考这个知识点到底是在讲什么。

第一节课通过一个辗转相除法的例子去说明计算机-程序-算法三者之间的关系。
这也更新了以前我的一个认知,以前一直认为上面三种角色中,算法是最难理解的,最具有逻辑性的;可是这位老师却说,算法才是最接近我们的,是普通人都可以懂的东西。
相反,程序是有一定编程基础的人可以懂的,计算机是只有机器才懂的。

根据老师的说法


C语言学习记录——辗转相除法_第1张图片
image.png
C语言学习记录——辗转相除法_第2张图片
image.png

第一节课中提到的程序我也自己通过线下去做了验证。题目中给出的两个数值的最大公约数是很容易通过心算计算出来的,但是转化成程序语言,觉得有点复杂了,毕竟口算马上能出的答案,计算机需要循环做4步才能算出来。

追踪的步骤根据断点调试的模式(我用的软件是Clion,个人觉得很好用)。
第一步:打断点,进行调试


C语言学习记录——辗转相除法_第3张图片
image.png

在这一步中可以看到u的初始值是32,v的初始值是26;显然满足条件v!=0,所以程序进入到循环里面。

第二步:进入循环进行第一次运算


C语言学习记录——辗转相除法_第4张图片
image.png

这里选用了单步调试,去查看每一步u、v、temp三个变量的变化情况。


C语言学习记录——辗转相除法_第5张图片
image.png

进行了第一次计算后,循环里的变量值temp通过u除以v求余的方法得出值为6.
通过图片可以看到当前三个变量值分别为u=32,v=26,temp=6;

第三步:求余后重新赋值,给u赋值


C语言学习记录——辗转相除法_第6张图片
image.png

通过第二步那张图我们可以当前v=26,所以这一步将v的值赋给u可以得出u=26。
此时三个变量的值分别为u=26,v=26,temp=6;

第四步:求余后重新赋值,给v赋值


C语言学习记录——辗转相除法_第7张图片
image.png

进入到下一步,将当前的temp值赋值给v,所以当前v=6;
此时u=26,v=6,temp=6;

第五步:再次循环
经过一轮新的赋值,循环条件v!=0依然满足,所以进入再次循环。根据循环进行后,此轮循环最终的结果是u=6,v=2,temp=2.


C语言学习记录——辗转相除法_第8张图片
image.png

第六步:再一次循环
仍然满足循环条件v!=0,所以进入再次循环。
这一轮循环后,再次赋值,此刻u=2,v=0,temp=0;


C语言学习记录——辗转相除法_第9张图片
image.png

C语言学习记录——辗转相除法_第10张图片
image.png

C语言学习记录——辗转相除法_第11张图片
image.png

不满足循环条件,跳出循环,打印得出u=2;即求出32和26的最大公约数是2.

上面我演示了一下程序是怎么按照辗转相除法计算出两个给定数的最大公约数值的,但是我想大家一定很好奇这么做是为什么,原理是什么,我找了一下比较完整的解释,大家可以点击自己作为扩展去进行了解辗转相除法的原理

你可能感兴趣的:(C语言学习记录——辗转相除法)