7
У правляющие операторы С: ветвление и переходы
В ЭТОЙ ГЛАВЕ...
• Ключевые слова: if, else, switch, continue, break, case,default, goto
• Операции: && || ?:
• Функции: getchar(), putchar(), семейство ctype.h
• Использование операторов if и if else и вложение их друг в друга
• Использование логических операций для комбинирования выражений отношения в более сложные проверочные выражения
• Условные операции
• О перато р switch
• Операторы переходов break, continue и goto
• Использование функций символьного ввода-вывода:
getchar() и putchar()
• Семейство функций анализа символов, предоставляемых заголовочным файлом ctype.h
248 Глава 7
П
о мере освоения языка С, скорее всего, вы захотите решать более сложные задачи. Тогда вам понадобятся способы управления и организации своих проектов. Для этого в С имеются необходимые инструментальные средства. Вы уже научились пользоваться циклами для программирования повторяющихся действий. В этой главе вы узнаете о структурах ветвления, таких как операторы if и switch, которые позволяют программе основывать свои действия на условиях проверки. Кроме того, вы получите начальные сведения о логических операциях С, позволяющих проверять более одного отношения в условиях while или if, а также ознакомитесь с операторами переходов, с помощью которых можно передавать управление в другую точку программы. К концу главы вы будете располагать всей базовой информацией, необходимой для проектирования программы, которая ведет себя желаемым образом.
Оператор if
Давайте начнем с простого примера применения оператора if, представленного в листинге 7.1. Эта программа считывает список показаний минимальных дневных температур (по шкале Цельсия) и выводит общее количество элементов, а также процент значений, меньших точки замерзания (т.е. ниже нуля по Цельсию). Для чтения значений используется функция scanf() в цикле. На каждой итерации цикла инкрементируется счетчик, отслеживая количество показаний. С помощью оператора if идентифицируются значения температуры ниже нуля, ведется отдельный подсчет таких случаев.
Листинг7.1. Программа colddays.с

Ниже показан результат выполнения этой программы:
Введите список минимальных дневных температур.
Используйте шкалу Цельсия, для завершения введите q.
12 5-2.5 0 6 8 -3 -10 5 10 q
10 - общее количество дней: 30.0% дней с температурой ниже нуля.
Управляющие операторы С: ветвление и переходы 249
В условии проверки цикла while значение, возвращаемое функцией scanf(), используется для завершения цикла, когда встречается нечисловое значение. За счет применения типа float вместо int для переменной temperature программа получает возможность принимать такие показания температуры, как -2.5, а также 8.
Вот новый оператор в блоке while:
if (temperature < FREEZING) cold_days++;
Этот оператор if инструктирует компьютер увеличить значение cold days на 1, если только что считанное значение (temperature) меньше нуля. Что произойдет, если значение temperature не меньше нуля? Тогда оператор cold_days+ +; пропускается, а выполнение цикла while продолжается и читается следующее значение температуры. Оператор if еще два раза используется в программе для управления выводом. Если данные в наличии, программа выводит результаты. Если данные отсутствую/ программа сообщает об этом. (Вскоре мы рассмотрим более элегантный способ реализации этой части программы.)
Чтобы избежать целочисленного деления при вычислении процентного отношения, в примере выполняется приведение к типу float. На самом деле в этом приведении нет необходимости, т.к. входящее в выражение 100.0 * cold days / all days подвыражение 100.0 * cold days вычисляется первым и принудительно приводится к типу с плавающей запятой правилами автоматического преобразования типов. Тем не менее, явное указание приведения типа документирует ваше намерение и помогает защитить программу от ошибочных переделок. Оператор if называется оператором ветвления или оператором выбора, потому что он представляет собой узловой пункт, где программа должна выбрать один из двух путей для дальнейшего следования. Общая форма оператора if имеет вид:
if (выражение)
оператор
Если выражение имеет истинное (ненулевое) значение, то оператор выполняется. В противном случае он пропускается. Как и в цикле while, оператор может быть как одиночным, так и составным оператором. Его структура очень похожа на структуру while. Основное различие заключается в том, что в операторе if проверка условия и (возможное) выполнение производится всего лишь один раз, в то время как в цикле while проверка условия и выполнение могут повторяться многократно.
Читать дальше