Программирование >>  Процедурные приложения 

1 ... 28 29 30 [ 31 ] 32 33 34 ... 150


Если операторная часть ветви if или else содержит не одно выражение, а несколько, необходимо заключать их в фигурные скобки, как показано в следующих примерах:

if(условие) { выражение1; выражение.?; выражениеЗ;

else

выражение 4; if (условие) ( выражение1; else { выражение2;

выражениеЗ; выражение4 ;

if (условие) { выражение1; выражение2; выражениеЗ;

else {

выражение 4; выражение5; выражение 6; }

Обратите внимание, что после закрывающей фигурной скобки точка с запятой не ставится. В следующем примере демонстрируется использование инструкции if /else:

* crapif.c

* В этой программе на языке С демонстрируется использование

* инструкции if /else.

#include <stdio.h> int main ()

char c;

int ihow many, i, imore; while (imore == 1) {

printf ( Введите название товара: );

if (scanf ( %c ,&c)!= EOF)

{ while (c != \n) scanf ( %c ,&c) ;

printf ( Сколько заказано? );

scanf ( %d ,&ihow many) ;

scanf ( %c ,&c) ;

for(i= 1; i <= ihow many;

printf ( * ); printf ( \n ); } else

imore = 0 ;} return(0); }

Эта программа предлагает пользователю ввести название товара, и, если не получен признак конца файла [Ctrl+C] (EOF), то название будет прочитано буква за буквой, пока не встретится символ конца строки (генерируется при нажатии клавиши [Enter]). В следующей строке отобразится надпись Сколько заказано? , после которой необходимо ввести число заказанных единиц товара. Затем в цикле for на экран выводится ряд звездочек, количество которых соответствует введенному числу. При обнаружении признака конца файла программный блок ветви if пропускается и выполняется строка программы в ветви else. В этой строке



устанавливается нулевое значение флага imore, что служит признаком завершения программы.

Вложенные инструкции if/else

Если используется несколько вложенных инструкций if, следует тщательно следить, какой из них соответствует ветвь else. Взгляните на следующий пример и попытайтесь определить порядок выполнения команд:

if(itemperature < 50) if(itemperature < 30) printf( Наденьте меховую куртку. ); else printf( Наденьте шубу! );

В этом примере мы специально не делали отступов с помощью табуляции, чтобы не давать вам подсказок. Что произойдет, если значение переменной itemperature будет 55? Появится ли сообщение Наденьте шубу! ? Конечно же, нет. В данном примере ветвь else связана со второй инструкцией if. Дело в том, что компилятор всегда связывает инструкцию else с ближайшей к ней несвязанной инструкцией if.

Безусловно, профессиональный программист должен позаботиться о том, чтобы отступы в программе позволяли четко выявить связи между инструкциями:

if(itemperature < 50)

if (itemperature < 30)

printf ( Наденьте меховую куртку. );

else printf( Наденьте шубу! );

Еще нагляднее следующая нотация:

if(itemperature < 50) if(itemperature < 30) printf( Наденьте меховую куртку. ); else printf( Наденьте шубу! );

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

Рассмотрим пример:

if(условие1) if(условие2) выражение2; else выражение1 ;

Нетрудно заметить, что выделения отступами в этом примере ошибочны, и данный код ничем не отличается от предыдущего примера. Многие начинающие программисты часто пытаются устанавливать связи внутри блоков путем изменения отступов. Но ведь компилятор не учитывает отступы! Как же сделать так, чтобы выражение1 действительно было связано с условием1, а не условием2?

Чтобы исправить ошибку, необходимо использовать фигурные скобки:

if(условие1) { if (условие.2) выражение2;

else

выражение1;

С помощью фигурных скобок мы объединили условие2 и выражение2 в единый блок, выполняемый в том случае, если условие1 равно true. В результате ветвь else связывается с, первой, а не со второй инструкцией if.

Конструкция if/else/if

Конструкция if/else/if используется для того, чтобы последовательно проверить несколько условий. Ее синтаксис выглядит следующим образом:



if(условие!)

выражение1; else if(условие2) выражение2; else if (условие3) выражениеЗ;

Каждое выражение может представлять собой не одну строку, а блок команд. В таком случае требуются фигурные скобки (но помните, что после закрывающей фигурной скобки не ставится точка с запятой). В данном примере программа будет проверять условие за условием до тех пор, пока одно из них не возвратит значение true. Как только это произойдет, все остальные операторы else и связанные с ними действия будут пропущены. Если ни одно из условий не равно true, ни одно из действий не будет выполнено.

Теперь рассмотрим слегка видоизмененную версию предыдущего примера: if(условие!)

выражение1; else if(условие2) выражение2; else if(условиеЗ) выражениеЗ; else действие по умолчанию;

В данном случае какое-то действие обязательно будет выполнено. Если ни одно из условий не равно true, выполняется действие по умолчанию. Чтобы понять, в каких случаях лучше применять эту конструкцию, рассмотрим следующий пример. Здесь переменная fconverted value содержит значение длины в футах, а переменная econvert to - признак преобразования. Если значение последней не соответствует ни одному из известных типов преобразования, отображается соответствующее сообщение.

if (econvert to == YARDS)

fconverted value = length/3; else if (econvert to == INCHES) fconverted value = length * 12; else if (econvert to == CENTIMETERS) fconverted value = length * 30.48; else if (econvert to == METERS) fconverted value = length * 30. 48/100; else printf ( Преобразование невозможно );

Условный оператор ?:

Оператор ? : позволяет создавать простые однострочные условные выражения, в которых выполняется одно из двух действий в зависимости от значения условия. Данный оператор можно использовать вместо инструкции if /else, а синтаксис его таков:

условие ? выражение1 : выражение2;

Оператор ? : называют тернарным, поскольку он требует наличия трех операндов. Рассмотрим пример, в котором определяется модуль числа:

if (f value >= 0.0) fvalue = fvalue; else fvalue = -fvalue;

С помощью условного оператора его можно записать в одну строку:

fvalue = (fvalue >= 0.0)? fvalue : -fvalue;

В следующей программе на языке C++ условный оператор применяется для того, чтобы выбрать правильный вид выводимых данных:

condit.cpp

В этой программе на языке C++ демонстрируется использование условного оператора. #include <math.h> #include <iostream.h> int main() <

float fbalance, fpayment;

cout << Введите сумму заема : ;



1 ... 28 29 30 [ 31 ] 32 33 34 ... 150

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика