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

这个代码有啥问题吗,为什么我想输出合数却输出了一串等差数列


#include<stdio.h>

int main()

{

int a,b;

for(a=2;a<=50;a++)

{

for(b=2;b<a;b++)

{

if (a%b==0);

break;

}

if(a!=b);

    printf("%d ",a);

}

return 0;

}


提问者:慕侠3131896 2020-04-21 15:32

个回答

  • 努力学习的小白0622
    2020-06-16 22:19:09

    如果你要输出合数,循环判断条件:只要能被 比该数小的非1整数整除,即可。

    代码如下:

    #include<stdio.h>

    int main()

    {

        int a, b;

        for (a=2; a<=50; a++){

            for(b=2;b<a;b++){

                if(a%b==0){

                    printf("%d  ", a);

                    break;

                }

            }

        }


    }

    特别提醒:break 只能跳出for循环中的当次循环。

    你写的这个函数,翻译一下大概为:首先判断 a是否能被小于a 但大于1 的整数整除,若能整除,则跳出了此次for循环。不判断下面的a不等于b。  但是除了满足第一个if判断的条件循环外,此外的 每次b++的循环中,都会判断a是否不等于b 。 因此  拿a=5 举例:b=2, 第一个if不成立,判断第二个if,满足条件5!=2,打印5;b=3,第一个if不成立,判断第二个if,满足条件5!=3,打印5;依次类推。这就是你多次打印同一个数的原因。



  • 慕用4035794
    2020-04-23 15:46:02

    这是if()语句去掉了{ }之后的形式,要注意缩进格式。

    其实就是

    if()

        break;

    就相当于

    if(){

    break;

    }

  • qq_微笑让快乐围绕_0
    2020-04-21 21:21:09

    #include<stdio.h>

    int main()

    {

    int a, b;

    for (a=2; a<=50; a++)

    {

    for(b=2; b<a; b++)

    {

    if(a%b==0)

    break;

    }

    if(a!=b)

    printf("%d\n", a);

    }

    return 0;

    }

    if后面需要用“;”吗,我不太清楚,我去掉就好了