数组中素数的总和

时间:2018-12-21 11:23:03

标签: c arrays

我需要从键盘输入一些随机值,并将它们放入数组中。之后,我只需要打印素数的平均值。这是我的代码,但是不起作用:

#include<stdio.h>
#include<conio.h>

int main()
{
int v[50], n, i, nrprim = 0, sum = 0, j;
float medie = 0;
printf("dati numarul de elemente al vectorului:\t");
scanf("%d", &n);
for ( i = 0; i < n; i++)
{
    printf("dati elmentele vectorului:\t");
    scanf("%d", &v[i]);
}

for(i=0; i<n; i++)
    for(j=2; j<v[i]; j++)
    {
        if(v[i]%j!=0)
        {
            sum = sum + v[i];
            nrprim++;
        }
    }

medie =( sum/nrprim);
printf("%f", medie);

_getch();
return 0;

}

2 个答案:

答案 0 :(得分:2)

您的主要检查错误。当您找到无法将其除以的第一个​​数字时,您将数字视为质数,而不是测试一个数字是否不能除以其他任何数字。因此,当您测试9是否为质数时,您说“是”,因为它不能被2除,而不检查是否可以被3除。尝试这样的事情:

int flag;
    for (i = 0; i < n; i++)
    {
        flag = 1;
        for (j = 2; j < v[i]; j++)
        {
            if (v[i] % j == 0)
            {
                flag = 0;
                break;
            }
        }
        if (flag) {
            sum = sum + v[i];
            nrprim++;
        }
    }

此外,如果没有输入素数,您的程序就会崩溃,因此您也需要处理这种情况。我建议像这样的东西:

if (nrprim) {
    medie = (sum / nrprim);
    printf("%f\n", medie);
}
else {
    printf("Error: no prime numbers were entered.\n");
}

答案 1 :(得分:2)

每次发现不重要的数字时,您都会添加到sumnrprim中。例如,在i == 8时,您将在j3567时添加到他们。

仅当以下数字中的个都不是因数时,该数字才是质数。您必须等到j循环结束才能知道这一点。

如果要取平均值,则需要在除之前将其中一个值转换为float。否则,您将获得整数除法。

#include<stdio.h>
#include<conio.h>

int main()
{
    int v[50], n, i, nrprim = 0, sum = 0, j;
    float medie = 0;
    printf("dati numarul de elemente al vectorului:\t");
    scanf("%d", &n);
    for ( i = 0; i < n; i++)
    {
        printf("dati elmentele vectorului:\t");
        scanf("%d", &v[i]);
    }

    for(i=0; i<n; i++)
        int is_prime = 1;
    for(j=2; j<v[i]; j++)
    {
        if(v[i]%j == 0)
        {
            is_prime = 0;
            break;
        }
    }
    if (is_prime) {
        sum = sum + v[i];
        nrprim++;
    }

    medie = float(sum)/nrprim;
    printf("%f", medie);

    _getch();
    return 0;

}