Когда ввожу размерность массива меньше нуля ошибка не вылезает - 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;
    }

Объяснение кода листинга программы

  1. Объявлена переменная fillMethod типа int.
  2. Выводится сообщение с просьбой выбрать метод заполнения массива (ручной или случайный).
  3. С помощью функции scanf() считывается введенное значение и сохраняется в переменной fillMethod.
  4. Производится проверка значения переменной fillMethod.
  5. Если fillMethod равно 1, то выполняется блок кода для ручного заполнения массива.
  6. Если fillMethod равно 2, то выполняется блок кода для случайного заполнения массива.
  7. Если fillMethod не равно 1 и fillMethod не равно 2, то выводится сообщение об ошибке и возвращается 1.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.923 из 5
Похожие ответы