C语言练习:打印出1~100之间的所有质数

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

前言

一个整数如果只能被他本身和1整除,他就被成为质数(prime)。
接下来将给出三段实现这一功能的代码,其中第二段和第三段的本质相同,只是使用的函数类型不同。

一、判断逻辑嵌入在main函数的循环

#include 

int main() {
    int i, j, judgePrime;
    int max = 100;
    int min = 2;

    printf("0到100之间的质数有:\n");
    for (i = 2; i <= max; i++) {
        judgePrime = 1; // 假设i是质数
        for (j = 2; j <= i / 2; j++) {
            if (i % j == 0) {
                judgePrime = 0; // i不是质数
                break; // 提前退出内层for循环,避免不必要的计算
            }
        }
        if (judgePrime) {
            printf("%d ", i);
        }
    }
    printf("\n");
    return 0;
}

这里需要注意的一点就是break语句作用的时机以及退出到了哪个循环里。给出本段代码的具体执行流程:

1)外层 for 循环遍历i从2到100的所有整数

2)对于每个ì,假设它是质数(JudgePrime =1)

3)内层 for 循环遍历 i从2到i /2的所有整数

4)如果i能被j整除(i%j==0),则将JudgePrime 设为0,表示i不是质数,并执行break 语句

5)break 语句会立即退出内层 for 循环,继续执行外层 for 循环的下一次迭代。

break语句的作用是当发现i不是质数时,提前退出内层 for 循环,避免不必要的计算。

二、判断逻辑封装成函数

#include 
int JudgePrime(int a);//这里要声明一下函数,不然会有个warning

int main() 
{
    int n;
    printf("1-100的素数有:\n");

    for (n = 1; n <= 100; n++)
        {
            if (JudgePrime(n) == 1)
            {
                printf("%d ", n);
            }
        }  
    return 0;
}

int JudgePrime(int a) {
    int i;
    
    if (a <= 1) 
    {
        return 0;
    }

    for (i = 2; i <= a / 2; i++)
    {
        if (a % i == 0) 
        {
            return 0;
        }
    }
    return 1;
}

三、判断逻辑函数使用_Bool类型

#include 
#include 

bool JudgePrime(int n) {
    if (n <= 1) return false;
    for (int i = 2; i <= n / 2; i++) {
        if (n % i == 0) return false;
    }
    return true;
}

int main() {
    printf("0到100之间的质数有:\n");
    for (int i = 2; i <= 100; i++) {
        if (JudgePrime(i)) {
            printf("%d ", i);
        }
    }
    printf("\n");
    return 0;
}

C语言中到底有没有bool类型?

《C和指针》这本书里原文是说“C并不具备布尔类型,而是用整形来代替”,但是,书一般都要落后,C99标准引入了_Bool类型,在新增头文件stdbool.h中,被重新用宏写成了bool,为了保证C/C++兼容性。


总结

以上就是要讲的内容,帮助新接触C#的朋友们一点可能的帮助

你可能感兴趣的:(C语言,c语言,开发语言,c#,c++)