为了账号安全,请及时绑定邮箱和手机立即绑定

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


#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;

}


正在回答

3 回答

如果你要输出合数,循环判断条件:只要能被 比该数小的非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;依次类推。这就是你多次打印同一个数的原因。



0 回复 有任何疑惑可以回复我~

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

其实就是

if()

    break;

就相当于

if(){

break;

}

0 回复 有任何疑惑可以回复我~

#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后面需要用“;”吗,我不太清楚,我去掉就好了

1 回复 有任何疑惑可以回复我~
#1

qq_微笑让快乐围绕_0

是不是 if(a%b==0); 相当于 if(a%b==0) [空];
2020-04-21 回复 有任何疑惑可以回复我~
#2

慕用4035794

if后面不要分号
2020-04-23 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信