Массив. Помогите с ошибками в коде

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
 
#define N 12
 
int main()
{
    int min, i_min = 0;
    double Z[N], aver = 0;
    srand(time(0));
    for (unsigned i = 0; i < N; ++i)
        Z[i] = rand() % 201 - 100;
 
    for (unsigned i = 0; i < N; ++i)
    {
        if (Z[i] < Z[i_min])
            i_min = i;
        if (Z[i] < 0)
            aver += Z[i];
    }
    aver = -aver / N;
 
    printf("minimal element = %.2lf\nabsolute value of average by negative elements = %.2lf\n\nZ array = [", Z[i_min], aver);
    for (unsigned i = 0; i < N; ++i)
        printf("%.2lf  ", Z[i]);
    printf("]\n\nResult array = [");
 
    Z[i_min] = aver;
    for (unsigned i = 0; i < N; ++i)
        printf("%.2lf  ", Z[i]);
    printf("]\n");
 
    getchar();
 
    return 0;
}
Минимальный элемент заданного массива Z (12) заменить абсолютному значению среднего арифметического всех отрицательных элементов этого массива. вывести минимальный элемент, среднее арифметическое, начальный и превращен массивы.

Сделал на DevC++, нужно написать на обычной Си Выдает такие ошибки [Error] subscripted value is neither array nor pointer nor vector [Error] conflicting types for 'i' [Note] previous declaration of 'i' was here [Error] 'for' loop initial declarations are only allowed in C99 or C11 mode


Ответы (1 шт):

Автор решения: dIm0n

Судя по ошибке, у вас старый стандарт C, когда ещё переменные нормально в цикле объявить нельзя было. Если это ожидаемо, то уберите unsigned из циклов и в самом начале программы добавьте unsigned i = 0;, если же нет, то найдите в DevC++ настройку, изменяющую флаги компиляции, и используйте стандарт C11. Вот тут есть с картинками, как это сделать https://stackoverflow.com/q/16951376/13970074 (только вместо стандартов С++ выбирайте С стандарты)

→ Ссылка