Множественный выбор: конструкция else-if
Множественный выбор: конструкция else-if
Часто нам приходится осуществлять выбор более, чем из двух вариантов. Чтобы учесть это, мы можем расширить структуру if-else конструкцией else-if. Рассмотрим конкретный пример. Расценки, назначаемые за коммунальные услуги некоторыми компаниями зависят от количества потребляемой энергии. Приведем расценки, установленные за пользование электроэнергией:
Первые 240 кВт/ч: 0.05418 долл. за кВт/ч
Следующие 300 кВт/ч: 0.07047 долл. за кВт/ч
Свыше 540 кВт/ч: 0.09164 долл. за кВт/ч
Если вас занимает этот вопрос, мы могли бы подготовить программу, вычисляющую стоимость потребляемой энергии. Приведем пример программы, являющейся первым шагом, сделанным в этом направлении:
РИС. 7.1. Операторы if и if else
/* счет за электроэнергию */
/* вычисляет плату за электроэнергию */
#definе RATE1 0.05418 /* тариф за первые 240 кВт/ч */
#define RATE2 0.07047 /* тариф за следующие 300 кВт/ч */
#define RATE3 0.09164 /* тариф за потребление свыше 540 кВт/ч */
#define BASE1 13.00 /* плата за первые 240 кВт/ч */
#define BASE2 34.14 /* плата за первые 540 кВт/ч */
#define BREAK1 240.0 /* величина, определяющая первое условие ветвления */
#define BREAK2 540.0 /* величина, определяющая второе условие ветвления */
main( )
{
float kwh; /* количество использованных кВт/ч */
float bill; /* плата */
printf(" Укажите, пожалуйста, количество использованных кВт/ч. ");
scanf(" %f, &kwh);
if (kwh < BREAK1) bill = RATEl * kwh;
else if(kwh < BREAK2) /* количествокВт/чмежду240 и540 */
bill = BASE1 + RATE2*kwh;
else /* количествокВт/чсвыше540 */
bill = BASE2 + RATE3*kwh;
printf(" Платаза%.1f кВт/ч составляет$%1.2f. ", kwh, bill);
}
Для обозначения тарифов были использованы символические константы, которые поэтому оказались собранными в одном месте. Если электрическая компания изменит свои расценки (а это может случиться), то такое расположение констант не позволит нам забыть скорректировать какую-нибудь из них. Мы задали в символическом виде и константы, соответствующие граничным значениям потребляемой мощности Они также подвержены изменениям. Управляющая логика программы реализуется путем npoстого выбора одной из трех расчетных формул в зависимости oт значения переменной kwh, что иллюстрируется на рис. 7.2. Мы хотим подчеркнуть, что программа в процессе выполнения может достичь первого употребления else только в том случае, если величина переменной kwh больше или равна 240. Поэтому строка else if(kwh < BREAK2) эквивалентна требованию, чтобы значение kwh было заключено между 240 и 540, это мы и указали в комментарии к программе. Совершенно аналогично последнее употребление else может быть достигнуто, только если значение kwh больше или равно 540. И наконец, отметим, что константы BASE1 и BASE2 представляют собой величину платы за первые 240 или 540 кВт/ч электроэнергии соответственно. Поэтому требуется только прибавить дополнительную плату за количество потребляемой электроэнергии, превышающее эти величины.
РИС. 7.2. Блок схема программы расчета платы за электроэнергию
Фактически конструкция else-if является видоизмененным способом задания условного оператора, с которым мы познакомились раньше. Ядро нашей программы представляет собой другую форму записи следующей последовательности операторов.
if(kwh < BREAK1) bill = RATEl*kwh;
else if(kwh < BREAK2)
bill = BASE1 + RATE2*kwh;
else
bill = BASE2 + RATE3*kwh;
Отсюда видно, что программа состоит из оператора if-else, для которого часть else представляет собой другой оператор if-else.
Про второй оператор if-else говорят, что он "вложен" в первым. (Между прочим, вся структура if-else считается одним оператором. Вот почему мы не должны заключать вложенную конструкцию if-else в фигурные скобки).
Эти две формы записи являются абсолютно эквивалентными. Единственное отличие - дополнительные пробелы и символы "новая строка", но они игнорируются компилятором. Тем не менее первая форма записи предпочтительнее, поскольку она более четко показывает, что мы осуществляем выбор из трех возможностей. Кроме того, она облегчает просмотр программы и понимание семантики каждого варианта. Применяйте форму записи, использующую вложение операторов там, где это необходимо - например когда требуется проверить значения двух разных величин или (в нашем случае) если бы была установлена 10%-ная дополнительная плата за потребление энергии свыше 540 кВт/ч только в летние месяцы.
В одном операторе можно использовать столько конструкций else if, сколько нужно, что иллюстрируется приведенным ниже фрагментом:
if (score < 1000)
bonus = 0; else if (score < 1500)
bonus = 1; else if (score < 2000)
bonus = 2; else if (score < 2500)
bonus = 4; else bonus = 6;
(Этот фрагмент мог быть взят из игровой программы, где переменная bonus представляет собой количество дополнительных "фотонных бомб" или "питательных гранул", получаемых игроком для следующей партии ).
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
3. Оригинальная конструкция инфопродукта
3. Оригинальная конструкция инфопродукта Можно сделать оригинальный инфопродукт по конструкции. Например, в вашей нише все делают исключительно аудио– или видеокурсы. А вы сделайте, например, интеллект-карты, коучинговую программу, месячный тренинг. Найдите другой
R.11.7 Множественный доступ
R.11.7 Множественный доступ Если добраться до имени можно несколькими путями по графу, задающему множественное наследование, то право доступа этого имени считается максимальным из прав, получаемых на разных путях. Поясним это примером:class W { public: void f(); };class A: private virtual W {};class B:
R.16.3.4 Область видимости макроимен и конструкция #undef
R.16.3.4 Область видимости макроимен и конструкция #undef После появления макроопределения идентификатор из него считается определенным и остается в текущей области видимости (независимо от правил областей видимости в С++) до конца единицы трансляции или пока его определение
Конструкция for-do
Конструкция for-do Синтаксис конструкции for-do для цикла с увеличением значения счетчика:for идентификатор_счетчика := начальное_значение to конечное_эначение do блок_кода;Синтаксис конструкции for-do для цикла с уменьшением значения счетчика:for идентификатор_счетчика :=
Конструкция while-do
Конструкция while-do Синтаксис конструкции while-do: while выражение do блок_кода;Выход из цикла while-do происходит в том случае, если выражение, расположенное между ключевыми словами while и do, дает значение False. Цикл может не выполниться ни одного
Конструкция repeat-until
Конструкция repeat-until Синтаксис конструкции repeat-until: repeat блок_кода until выражение;Выход из цикла repeat-until происходит в том случае, если выражение, расположенное после ключевого слова until, дает значение
Витая конструкция
Витая конструкция Методы создания резных изделий из дерева разнообразны. Сейчас мы рассмотрим еще один метод, который позволяет создавать витые конструкции, наподобие той, что вы видели в комнате для курения кальянов в главе 5.На этот раз витая конструкция будет
Конструкция SELECT ... INTO
Конструкция SELECT ... INTO Конструкция SELECT ... INTO обычна для PSQL. Когда из таблицы запрашиваются значения, предложение INTO позволяет сохранить их в переменных - в локальных переменных или в выходных аргументах. В этой процедуре нет выходных параметров. Мы используем переменную ANY
Конструкция FOR SELECT ... DO
Конструкция FOR SELECT ... DO Для поиска множества строк в процедуре мы используем конструкцию FOR SELECT ... DO. Ее синтаксис:FOR<выражение-выбора>INTO <:переменная [, :переменная [, ...]] DO<составной-оператор>;<выражение-выбора> может быть любым запросом выбора, использующим
Базисная конструкция
Базисная конструкция Простота типизации в ОО-подходе есть следствие простоты объектной вычислительной модели. Опуская детали, можно сказать, что при выполнении ОО-системы происходят события только одного рода - вызов компонента (feature call):x.f (arg)означающий выполнение
Конструкция flash-диска USB
Конструкция flash-диска USB Несмотря на разнообразие корпусов, все flash-диски USB устроены одинаково. Половинки корпуса часто соединены защелками и обычно легко разбираются. Исключение составляют водонепроницаемые или ультрамодные корпуса – для их вскрытия иногда приходится
Виды и конструкция карт памяти
Виды и конструкция карт памяти Многие компании время от времени предлагали пользователям разные конструкции карт памяти. За редкими исключениями все они несовместимы между собой по числу и расположению контактов и электрическим характеристикам. Flash-карты бывают двух
FANатичная конструкция: Как из корпуса сделать конфетку
FANатичная конструкция: Как из корпуса сделать конфетку Автор: Филипп КазаковНесколько месяцев назад я созрел-таки для серьезного мероприятия - замены корпуса компьютера. Как часто бывает, немедленной реализации задумки воспрепятствовала масса объективных