netlib.narod.ru< Назад | Оглавление | Далее >

3.3. Конструкция else-if

Конструкция

    if (выражение)
      инструкция
    else if (выражение)
      инструкция
    else if (выражение)
      инструкция
    else if (выражение)
      инструкция
    else
      инструкция

встречается так часто, что о ней стоит поговорить особо. Приведенная последовательность инструкций if — самый общий способ реализации многовариантного выбора. Выражения вычисляются по порядку; как только встречается выражение со значением «истина» (не нуль), выполняется соответствующая ему инструкция; на этом последовательность проверок завершается. Здесь под словом инструкция имеется в виду либо отдельная инструкция, либо группа инструкций в фигурных скобках.

Последняя часть else срабатывает, если не выполняются все предыдущие условия. Иногда в последней части не требуется производить никаких действий, в этом случае фрагмент

    else
      инструкция

можно опустить или использовать для сообщения об ошибочной ситуации.

В качестве иллюстрации трехвариантного выбора рассмотрим функцию бинарного поиска значения x в массиве v. Предполагается, что элементы массива v упорядочены по возрастанию. Функция возвращает позицию числа x в массиве v (число в пределах от 0 до n-1), если x там встречается, и -1, если его нет.

При бинарном поиске значение x сначала сравнивается с элементом, находящимся в середине массива v. Если x меньше, чем это значение, то областью поиска становится «верхняя» половина массива v, в противном случае — «нижняя». В любом случае следующий шаг — это сравнение со средним элементом отобранной половины. Процесс «уполовинивания» диапазона продолжается ло тех пор, пока либо не будет найдено значение, либо не станет пустым диапазон поиска. Запишем функцию бинарного поиска:

/* binsearch: Найти x в массиве v. Массив должен быть
              упорядочен по возрастанию. */
int binsearch (int x, int v[], int n)
{
  int low, high, mid;

  low = 0;
  high = n - 1;
  while (low <= high) {
    mid = (low + high) / 2;
    if (x < v[mid])
      high = mid - 1;
    else if (x > v[mid])
      low = mid + 1;
    else
      return mid;  /* совпадение найдено */
  }
  return -1;       /* совпадений нет */
}

Основное действие, выполняемое на каждом шаге поиска, — сравнение значения x (меньше, больше или равно) с элемнтом v[mid]; это сравнение и выполняется конструкцией else-if.


Упражнение 3-1


В нашей программе бинарного поиска внутри цикла осуществляются две проверки, хотя могла быть только одна (при увеличении числа проверок вне цикла). Напишите программу, предусмотрев в ней одну проверку внутри цикла. Оцените разницу во времени выполнения.



netlib.narod.ru< Назад | Оглавление | Далее >

Сайт управляется системой uCoz