帮我解答一下,谢谢!

来源:4-14 结束语句之break语句

小玖so

2015-08-09 16:15

for的父循环中m=5的时候,自循环规定了n<m,那此时n最大只能是4,子循环执行完了,也没有满足m=n,为何结果还有5。另外我在子循环里面加上n<=m,结果也是一样的。哪个正确?

@Perona


写回答 关注

6回答

  • Perona
    2015-08-10 16:19:37
    已采纳

    首先了解一下素数的概念。素数是只能除以1和自身的数。

    这里2个for循环,外面的for循环是遍历0-50这几个数的,里面的for是看m除了自己还能不能被整除。

    外面的for从2开始算m是不是素数,n是除数,除数从2开始,如果m除以2余数为0,说明m能被2整除,则m不是素数,里面for循环break,继续算外面的for循环m+1。

    第一次循环:m=2,

            子循环:(因为这里n=2,n<m,不做循环),跳出,执行if(m == n) 输出2

    第二次循环:m=3,

             子循环:n=2,m%2=1

              重点是(n++)这个,n++是什么呢?是自增1。本次循环中先取到n的值是2,但是循环结束后,n是不           是就自增了1,执行if(m == n) 输出3

    第三次循环:m=4,

             子循环:n=2,m%2=0,不符合。

    第三次循环:m=5,

             子循环:n=2,m%2=1,跳出 

            这里就是你想要知道的答应,当n循环到4的时候,跳出循环,n自增了1,执行if(m == n) 输出5。

    ......(接下来的循环自行脑补)

    子循环为嘛要判n>m,因为素数是只能除以1和自身的数。那么除数和被除数相等是没有意义的。所以应该是n>m,而不是n>=m。

    你看下,还有什么不懂的说说呗。

    PS:你是第一个@我的人,我有种莫名的感动啊!太谢谢你,童鞋,你真可耐,么么哒~~~

    小玖so

    非常感谢!

    2015-08-11 10:24:16

    共 1 条回复 >

  • 海阔天空5993
    2016-05-23 17:23:33

    明白了,受教

  • 一er三
    2015-10-26 22:35:25

    666

  • WorldHENDA
    2015-09-02 16:33:45

    首先M=2 N=2 余数为0 跳出循环 然后 M++  M=3 N=2 余数为1不跳 N<M N++ N=3 余数为0则跳出循环 以此类推。这才是正解,按楼主的理解,9就不行了,9可以被3整除,不是素数。

    Perona

    你再看一遍吧。当m=9时,其实跟当m=4的原理是一样滴。就是这一行代码 if(m%n == 0 ) break; 而且循环刚开始是m=2,n=2,执行的是这行代码 if(m == n)

    2015-09-17 17:45:48

    共 1 条回复 >

  • 戎装笑
    2015-08-14 12:53:07

    话说一开始就被素数的概念给砸晕了。。。

    看了老半天觉得应该得用模运算,就是没敢下手,其实就是两行代码的事。。。

    除余运算,看来得重视了

    多谢楼主,提点啦

  • 伊兮尘昔
    2015-08-10 10:57:27

    判断这个,只判断第一个数字的,比如第一次循环的m=2 n=2那么这不就是相等情况了吗?你把整个运算顺序分析一下

C语言入门

C语言入门视频教程,带你进入编程世界的必修课-C语言

926020 学习 · 20793 问题

查看课程

相似问题