对于循环没有做什么打算

问题描述 投票:-2回答:2

这是一个for循环,用于在给定范围内打印素数,并在最后打印给定范围内的素数。该程序还打印1作为素数。

程序:

#include <stdio.h>
int main(){
    int a,b,k,c,s=0;

    printf("Enter the start : ");
    scanf("%d",&a);
    printf("Enter the end : ");
    scanf("%d",&b);

    for( ;a<=b;a++){
    k = 1;
        for(c=2;c<=a/2;c++){
            if(a%c==0) {
                k-=1;
                break;
            }
            else
                continue;
        }
        (k!=0)?(printf("%d ",a),s+=1):printf("");
    }
    printf("\nNo. of Primes : %d",s);
    return 0;
}

输出:

Enter the start : 1
Enter the end : 25
1 2 3 5 7 11 13 17 19 23 
No. of Primes : 10

我想知道如何更改代码只能获得质数。

c
2个回答
3
投票

你得到1作为结果,因为你设置

k = 1;

和以下循环

for(c=2;c<=a/2;c++){
...

如果a1,因为c <= a没有实现,所以不会改变这一点。

更换

k = 1;

if(a > 1) k = 1;
else k = 0;

循环中的代码

    for(c=2;c<=a/2;c++){
        if(a%c==0){
        k-=1;break;}
        else continue;
    }

有点奇怪。

我会写k-=1;而不是k=0;,因为这清楚表明你希望价值成为0。你可以删除else continue;,因为这就是循环无论如何都会做的。


1
投票

您测试素数的代码也将传递给1数字。在这种情况下不输入内部for循环,因此k永远不会设置为零,并且行(k != 0) ? (printf("%d ", a), s += 1) : printf("");将采用真正的分支。

简单修复:

(k != 0 && a != 1) ? ...
© www.soinside.com 2019 - 2024. All rights reserved.