问答详情
源自:4-14 结束语句之break语句

哪位大神解释一下,n不是应该<=m么

n<m的话你就取不到m,n就不会等于m,如果这个数是素数,应该会return 0吧 但是程序能跑出素数,求解

提问者:慕粉9166412 2018-06-23 14:20

个回答

  • 屮无名卒屮
    2018-06-23 21:54:26
    已采纳

    不会取不到m的,我们可以一步步来看。

    1 在第一个for语句的第一个表达式中,便将2赋予了m;

    2 然后判断第二个表达式m<=50(此时m=2),值为1(即 结果为真);

    3 然后执行第一个for语句的循环体语句中的第一个语句:第二个for语句;

    4 在第二个for语句的第一个表达式中,将2赋予了n(此时m=2);

    5 然后判断第二个for语句的第二个表达式n<m(此时n=2,m=2),值为0(即 结果为假),不执行第二个for语句的循环体语句(即 第一个if语句),因此也不执行第二个for语句的第三个表达式(因为for语句的第三个表达式要在执行完循环体语句后才执行),此时m,n仍为2;

    6 然后执行第一个for语句的循环体语句中的第二个语句(即 第二个if语句);

    7 判断第二个if语句的表达式m==n(此时m,n均为2),值为1(即 结果为真),所以执行第二个if语句的语句(即 显示“2 ”);

    8 此时第一个for语句的循环体语句已经执行完第一次,开始执行第三个表达式m++,使m=3,接着又回到第二个表达式m<=50,值为1,又开始第二次循环.......

  • 慕哥1789210
    2018-07-25 10:34:54

    其实n<=m其中的"="相当于画蛇添足,如果是一个素数的话在n<m的时候,由于n++使得n=m直接不满足内循环中的n<m了,而没使用break;

    直接跳到到for(m==n)从而输出素数。如果n<=m相当于在前面的基础上多运算了一步然后break;到for(m==n),发现由于n++,n是大于m的还是没输出来。所以对于输出的素数来说n<=m,n<m都没关系

  • 慕慕6479396
    2018-07-22 23:09:28

    m为什么等不到4呢

  • qq_阳光明媚_12
    2018-07-15 20:12:57

    因为N++,所以在跳出循环后n可能会等于m。

  • kirito_yes
    2018-07-03 11:58:20

    #include <stdio.h>
    #include <math.h>
    int main(){    
        int m, n,flag;    
        for(m=2; m<=50;m++)    
        {		
            for(n=2; n<=sqrt(m); n++)        
            {            
                if(flag=(m%n==0)) break;		
            }		
            if(flag) continue;        
            printf("%d  ", m);	
         }	
         return 0;    
    }


  • kirito_yes
    2018-07-03 11:44:05

    何止不用取到m,取到m的平方根就够了,不过取到平方根代码要改