Сумма простых чисел в массиве - PullRequest
0 голосов
/ 21 декабря 2018

Мне нужно ввести с клавиатуры несколько случайных значений и поместить их в массив.После этого мне нужно вывести среднее значение только простых чисел.Это мой код, но он не работает:

#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 голосов
/ 21 декабря 2018

Вы добавляете к sum и nrprim каждый раз, когда находите число, которое не является его фактором.Например, когда i == 8, вы добавите к ним, когда j равно 3, 5, 6 или 7.

. Число простое, только если нет из чисел ниже это факторы.Вы должны подождать до конца цикла 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;

}
0 голосов
/ 21 декабря 2018

Ваш главный чек неверен.Вместо того, чтобы проверять, нельзя ли разделить число на какое-либо другое число, вы рассматриваете число как простое число, когда находите первое число, на которое его нельзя разделить.Например, когда вы проверяете, является ли 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");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...