为什么返回1?在C中生成用户指定范围内的所有素数

093gszye  于 2023-01-08  发布在  其他
关注(0)|答案(1)|浏览(99)

我必须完成函数prime,以便函数main生成用户指定范围内的所有质数,但当我运行指定1为最小值、100为最大值的代码时,它返回1和所有质数。

    • 我怎么才能去掉1,一旦,根据定义,1不是质数?**
#include <cs50.h>
#include <stdio.h>

bool prime(int number);

int main(void)
{
    int min;
    do
    {
        min = get_int("Minimum: ");
    }
    while (min < 1);

    int max;
    do
    {
        max = get_int("Maximum: ");
    }
    while (min >= max);

    for (int i = min; i <= max; i++)
    {

        if (prime(i))
        {
            printf("%i\n", i);
        }
    }
}

bool prime(int number)
{
    // TODO
    int j;
    for (j = 2; j <= number - 1; j++)
    {
        if (number % j == 0)
        {
            return false;
        }
    }
    return number;
}

最小值:1
最大值:100
1
2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97

j9per5c4

j9per5c41#

我认为最简单的解决方案是在质数函数的开头添加一个测试,以指示任何小于“2”的值都将产生“假”布尔值,这样,就可以对该函数进行简单的重构。

bool prime(int number)
{
    // TODO
    if (number < 2) /* Exit gracefully if a minimum value of 1 or less is entered */
    {
        return false;
    }
    
    int j;
    for (j = 2; j <= number - 1; j++)
    {
        if (number % j == 0)
        {
            return false;
        }
    }
    return true;        /* Technically returning a value greater than zero will equate to true, but it is better to return "true" */
}

另外,注意函数中最后的return语句的修改。从技术上讲,任何大于零的整数值都将被视为布尔“真”值,最好在那里返回布尔“真”值,以便任何阅读代码的人都能清楚地看到。
看看这是否符合你项目的精神。

相关问题