Когда ввожу размерность массива меньше нуля ошибка не вылезает - C (СИ)
Формулировка задачи:
Всем здравствуйте. Программа заменяет max и min целочисленного массива средним арифметическим оставшихся чисел.
Когда ввожу размерность массива меньше нуля ошибка не вылезает. Как решить? Заранее спасибо.
#include <stdio.h> #include <malloc.h> int main() { unsigned int SIZE_ARRAY, minIndex, maxIndex, sredIndex; float *array, min, max, sumElements, average, sred; puts("Программа заменяет max и min целочисленного массива средним арифметическим оставшихся чисел."); P1: printf("Введите размерность массива ==> "); scanf("%u", &SIZE_ARRAY); if (SIZE_ARRAY <0) {puts("Ошибка! Размерность не может быть меньше или равна нулю.\n"); exit(0);} if (SIZE_ARRAY==0) {puts("Ошибка! Размерность не может быть меньше или равна нулю.\n"); exit(0);} if (SIZE_ARRAY==1) {puts("Программа не может быть выполнена, так как в массиве один эллемент.\n"); exit(0);} if (SIZE_ARRAY==2) {puts("Программа не может быть выполнена. Между минимальным и максимальным значениями должны быть эллементы массива.\n"); exit(0);} // Создание динамического массива размером SIZE_ARRAY array = (float*)malloc(sizeof(float) * SIZE_ARRAY); printf("Введите массив: \n"); for (unsigned int i = 0; i < SIZE_ARRAY; ++i) scanf("%f", &array[i]); printf("\n"); // Поиск максимума и минимума, а также их индексов min = array[0]; max = array[0]; minIndex = 0; maxIndex = 0; for (unsigned int i = 0; i < SIZE_ARRAY; ++i) { if (min > array[i]) { min = array[i]; minIndex = i; } if (max < array[i]) { max = array[i]; maxIndex = i; } } // Суммирование элементов массива, кроме максимального и минимального for (unsigned int i = 0; i < SIZE_ARRAY; ++i) { if (i == minIndex || i == maxIndex) continue; sumElements += array[i]; } // Среднее арифметическое average = sumElements / (SIZE_ARRAY - 2); // Замена элементов array[minIndex] = average; array[maxIndex] = average; for (unsigned int i = 0; i < SIZE_ARRAY; ++i) printf("%g\n", array[i]); printf("\n"); free(array); return 0; }
Решение задачи: «Когда ввожу размерность массива меньше нуля ошибка не вылезает»
textual
Листинг программы
int fillMethod; printf("Choose the way to fill array (1 - manual, 2 - random): "); scanf("%d", &fillMethod); if (fillMethod == 1) { /* вводим массив вручную */ } else if (fillMethod == 2) { /* заполняем рандомно */ } else { printf("You should choose 1 or 2, but you did it wrong.\n"); return 1; }
Объяснение кода листинга программы
- Объявлена переменная fillMethod типа int.
- Выводится сообщение с просьбой выбрать метод заполнения массива (ручной или случайный).
- С помощью функции scanf() считывается введенное значение и сохраняется в переменной fillMethod.
- Производится проверка значения переменной fillMethod.
- Если fillMethod равно 1, то выполняется блок кода для ручного заполнения массива.
- Если fillMethod равно 2, то выполняется блок кода для случайного заполнения массива.
- Если fillMethod не равно 1 и fillMethod не равно 2, то выводится сообщение об ошибке и возвращается 1.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д