Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015
- Название:Язык программирования C. Лекции и упражнения (6-е изд.) 2015
- Автор:
- Жанр:
- Издательство:Вильямс
- Год:0101
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015 краткое содержание
Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Рис. 6.2. Операция отношения == и операция пршдаивания =
Операция присваивания устанавливает значение переменной, указанной слева от знака операции. С другой стороны, операция проверки на равенство выясняет, эквивалентны ли левая и правая части операции. Она не изменяет значение переменной, расположенной слева, если она указана. Рассмотрим пример:
canoes =5 <- Присваивает значение 5 переменной canoes
canoes == 5 <- Проверяет, имеет ли переменная canoes значение 5
Будьте внимательны во время применения операции. Компилятор позволит вам использовать неподходящую форму, выдавая результат, который будет отличаться от ожидаемого. (Однако из-за того, что очень много программистов слишком часто
212 глава 6 неправильно применяли операцию =, большинство компиляторов выводит на экран предупреждение о том, что возможно предполагалась другая операция.) Если одно из сравниваемых значений является константой, его можно поместить слева от знака операции сравнения, чтобы облегчить выявление ошибки:
5 = canoes <- Синтаксическая ошибка
5 = canoes <- Проверяет, имеет ли переменная canoes значение 5
Смысл в том, что присваивать значение константе не допускается, поэтому компилятор трактует такую операцию присваивания как синтаксическую ошибку. Многие практикующие программисты в выражениях проверки на равенство первой указывают константу.
Итак, операции отношения используются для построения условных выражений. Выражения отношений имеют значение 1, если они истинны, и 0, если ложны. В операторах (таких как while и if), где обычно применяются выражения отношений в качестве условий проверки, могут использоваться любые выражения, при этом их ненулевые значения интерпретируются как “истина”, а нулевые — как “ложь”.
НОВЫЙ ТИП _Bool
Переменные, предназначенные для представления истинных и ложных значений, в языке С традиционно имеют тип int. В стандарте С99 для переменных такого вида был введен тип Bool. Тип получил свое название в честь Джорджа Буля (George Boole), английского математика, который разработал алгебраическую систему, позволяющую формулировать и решать логические задачи. В программировании переменные, представляющие истинные и ложные значения, известны как булевские, так что именем типа для этих переменных в языке С является Bool. Переменная типа Bool может иметь только значения 1 (“истина”) и 0 (“ложь”). Если вы попытаетесь присвоить переменной Bool ненулевое числовое значение, то она получит значение 1, отражая тот факт, что любое ненулевое значение в С трактуется как “истина”.
В листинге 6.9 исправлено условие проверки, указанное в листинге 6.8, и переменная status типа int заменена переменной input_is_good типа Bool. Назначение булевским переменным имен, но которым ясно, что они принимают истинные и ложные значения, является общей практикой.
Листинг 6.9. Программа boolean.с
Управляющие операторы С: циклы 213
Обратите внимание на то, как в коде присваивает результат сравнения переменной:
input_is_good = (scanf("%ld", &num) == 1);
Такое присваивание имеет смысл, поскольку операция == возвращает значение 1 или 0. Кстати, круглые скобки, заключающие в себе выражение ==, не нужны, поскольку операция == имеет более высокий приоритет, чем =; тем не менее, они способствуют улучшению читабельности кода. Кроме того, взгляните, насколько изменение имени переменной делает проверку цикла while более понятной:
while (input_is_good)
Стандарт С99 также предлагает заголовочный файл stdbool.li, в котором bool сделан псевдонимом типа Bool и определены символические константы true и false для значений 1 и 0. Включение этого заголовочного файла позволяет писать код, совместимый с программами на языке C++, где bool, true и false являются ключевыми словами.
Если ваша система не поддерживает тип Bool, его можно заменить типом int, и приведенный выше пример будет работать так же.
приоритеты операций отношений
Приоритет операций отношений ниже приоритета арифметических операций, + и -, но выше, чем у операции присваивания. Это значит, например, что следующее выражение:
х > у + 2 эквивалентно х > (у + 2)
И также значит, что х = у > 2 эквивалентно х = (у > 2)
Другими словами, переменной х присваивается значение 1, если у больше 2, и 0 — в противном случае; переменной х не присваивается значение у.
Операции отношений имеют больший приоритет, чем операции присваивания. Поэтому
x_bigger = х > у; эквивалентно
x_bigger = (х > у);
Операции отношений по своему приоритету делятся на две группы.
Группа с большим приоритетом: <<=>>=
Группа с меньшим приоритетом: == ! =
Подобно большинству других операций, операции отношений выполняются слева направо. Поэтому
ex != wye == zee
эквивалентно
(ex != wye) == zee
214 Глава 6
Сначала осуществляется проверка на неравенство значений переменных ех и wye. Затем полученное значение, которое может быть равно 1 или 0 (“истина” или “ложь”), сравнивается со значением zee. Мы вовсе не предлагаем вам применять конструкции подобного рода, но считаем своим долгом дать соответствующее пояснение.
В табл. 6.2 показаны приоритеты операций, представленных до сих пор. В справочном разделе || приложения Б приведена информация но приоритетам всех операций.
Таблица 6.2. Приоритет операций
Сводка: оператор while Ключевое слово
while
Общий комментарий
Оператор while создает цикл, который повторяется до тех пор, пока проверочное выражение не станет ложным, или нулевым. Оператор while представляет собой цикл с предусловием; это значит, что решение относительно очередной итерации цикла принимается перед проходом. Следовательно, вполне возможно, что цикл вообще не будет выполнен. Операторная часть цикла может быть простым или составным оператором.
Форма записи
while (выражение) опера тор
Часть оператор повторяется до тех пор, пока выражение не станет ложным или равным О,
Примеры
while (n++ < 100)
printf(" %d %d\n",n, 2 * n + 1); // одиночный оператор while (fargo < 1000)
{ // составной оператор
fargo = fargo + step; step = 2 * step;
}
Управляющие операторы С: циклы 215
Сводка: операции отношений и условные выражения Операции отношений
Каждая операция отношения сравнивает значение в ее левой части со значением в ее правой части:
< меньше <= меньше или равно == равно
>= больше или равно > больше ! = неравно Условные выражения
Простое условное выражение состоит из знака операции отношения и операндов слева и справа. Если выражение истинно, то условное выражение имеет значение 1. Если отношение ложно, то условно! выражения получает значение 0.
Читать дальшеИнтервал:
Закладка: