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