在学习中遇到的第一难点

---恢复内容开始---

            要说我在一周中遇到的困扰还是很多的,每一次都花费大量时间来解决这些问题,其中时间花费最多的就得数分解质因数了。

            第一次接触这种代码比较多,而且流程控制也多的题,我照着视频讲解照搬下来的代码也出错,而且花了三四个小时一直没找到错在哪儿,当时脑袋感觉是越来越乱,决定暂放一边,回家慢慢研究,结果直到晚上十二点也没搞定。第二天到学校又重新写了一次,还是有错误,但是我知道了是那部分出了错,很快的就解决了。

           这是提示用户输入的部分,这段代码要实现的是如果用户输入的数字不是合数或者不大于1,就提示用户输入不正确,重新输入。这段代码使用了while循环来实现,其中还有判断这个数是不是质数的if判断语句,当时对判断是不是质数的算法没搞清楚,加上代码比较复杂,弄了好久才理解这段代码。 

下面这段代码才是真正让我困扰的,花费了巨量的时间。这里面while循环里面有for循环,for循环里有if判断,当时为了推算它的运行步骤,没少去翻笔记来加深理解每一次运行的规则。而且当时写的时候很混乱,每一个作用域都有点看不懂,理解不了。特别是要让每个质因数输出到控制台,还得在中间加入乘号。直到这个代码编写完成,我都不知道我改了多少次。

         再推一下这段代码:        首先定义一个factors集合来保存得到的最小质因数;这个int类型的变量n就是用户输入的合数;为了方便理解,可以自己给 n 赋一个值 18;while循环的条件为 n 不等于 1,所以while循环运行,for循环中,变量 i 是每次运行都会自动加 1 的,最小的质数就是2,所以 i f第一次判断结果一定是真,然后将 i 的值添加到factors集合中,然后给 n 赋值为 n/i=9 ,然后break结束循环;由于变量 n 是在while循环外定义的,所以 n 的值就变为了 9 ,然后进行第二次for循环;这次 if 判断的条件n%i==0(9%2==0)不成立,然后运行  i++,i 的值自增1变为3,;这次判断条件成立了,n 的值就变为了9/3=3,然后将 i 的值 3添加到集合中,然后结束for循环,开始下一次while循环,while循环的条件 n 不等于 1 还是成立,for循环开始,直到 i =3时,if判断结果为真,再将 i 的值3 添加到集合中,n 的值就变为了3/3=1,break结束for循环,这次white循环的条件为假了,不成立了,所以也就不再运行了,也就得到了18,的全部最小质因数。最后使用for循环依次输出集合factors中的

值,整个程序就结束了。

原文地址:https://www.cnblogs.com/zmdweb/p/7402251.html