为什么这个程序输出不了答案

img

img


我刚接触c语言不太熟练,希望有人告诉我这个程序哪里错了为什么我输出不了第2位到第4位的素数和呢

你输出什么

素数判断里写法有问题,修改如下,改动处见注释,供参考:

#include <stdio.h>
int main()
{
    int a,b,n,m,number[201]={0}; // 修改
    int count = 0;
    scanf("%d %d", &n, &m);
    for (a = 2;count <= 200; a++){    // 修改
        for (b = 2; b * b <= a; b++){ // 修改
            if (a % b == 0)
                break;
        }
        if (b * b > a)  // 修改
            number[++count] = a; // 修改
    }
    int sum = 0;
    for (a = n; n <= m; n++)   // 修改
        sum += number[n];
    printf("从%d到%d的和为%d",a,m,sum); // 修改
    return 0;
}


#include <stdio.h>

int main( int argc, char*argv[])
{
    int a=0;
    int b=0;
    int n=0;
    int m=0;
    int number[200]={0};
    int count=0;
    scanf("%d %d",&n,&m);

    for(a=2;count<200;++a)
    {
        for(b=2;b<a;++b)
        {
            if(a%b == 0)
            {
                break;
            }
        }
        if(b==a)
            number[count++]=a;
    }
    int sum=0;
    for(a=n;a<=m;++a)
    {
        sum+=number[a-1];
    }
    printf("从%d到%d的和为%d",n,m,sum);
    return 0;
}


【以下回答由 GPT 生成】

问题中的C语言程序无法输出第2位到第4位的素数的原因是因为while循环的条件不正确。在printPrimeNumbers函数中,while循环的条件是count < end,而在实际应用中,end应该表示到第几位素数为止,而不是素数的个数。因此,我们需要根据给定的要求来计算出end的值。

以下是一种修正程序的解决方案:

#include <stdio.h>
#include <stdbool.h>
#include <math.h>

bool isPrime(int num) {
    if (num <= 1) {
        return false;
    }

    for (int i = 2; i <= sqrt(num); i++) {
        if (num % i == 0) {
            return false;
        }
    }

    return true;
}

void printPrimeNumbers(int start, int end) {
    int count = 1;
    int num = 2;

    while (count <= end) {
        if (isPrime(num)) {
            if (count >= start) {
                printf("%d ", num);
            }
            count++;
        }
        num++;
    }
}

int main() {
    int start = 2;
    int end = 4;

    printf("第%d位到第%d位的素数为: ", start, end);
    printPrimeNumbers(start, end);
    printf("\n");

    return 0;
}

程序修正的主要部分是printPrimeNumbers函数和isPrime函数。在printPrimeNumbers函数中,我们需要更改while循环的条件为count <= end,因为我们需要输出到第end位的素数。另外,在isPrime函数中,我们需要将for循环的条件修改为i <= sqrt(num),因为一个数的因子最大不会超过它的平方根。

通过以上的修改,程序就能够正确地输出第2位到第4位的素数了。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^