Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015
- Название:Язык программирования C. Лекции и упражнения (6-е изд.) 2015
- Автор:
- Жанр:
- Издательство:Вильямс
- Год:0101
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015 краткое содержание
Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Листинг 7.5. Программа divisors.с
262 Глава 7
Обратите внимание на то, что программа использует операцию запятой в управляющем выражении цикла for, чтобы предоставить вам возможность инициализации переменной is Prime значением true при каждом вводе нового числа.
Ниже показан пример выполнения этой программы:
Введите целое число для анализа; для завершения введите q.
123456789
123456789 делится на 3 и 41152263.
123456789 делится на 9 и 13717421.
123456789 делится на 3607 и 34227.
123456789 делится на 3803 и 32463.
123456789 делится на 10821 и 11409.
Введите следующее число для анализа; для завершения введите q.
149
149 является простым числом.
Введите следующее число для анализа; для завершения введите q.
2013
2013 делится на 3 и 671.
2013 делится на 11 и 183.
2013 делится на 33 и 61.
Введите следующее число для анализа; для завершения введите q.
q
До свидания.
Программа будет идентифицировать 1 как простое число, хотя формально это не так. Логические операции, обсуждаемые в следующем разделе, позволят исключить 1 из списка простых чисел.
Сводка: использование операторов if для реализации выбора Ключевые слова
if, else
Общий комментарий
В каждой из приведенных ниже форм конструкция оператор может быть простым или составным оператором. Истинным является выражение, имеющее ненулевое значение.
Форма 1
if (выражение) опера тор
оператор выполняется, когда выражение принимает истинное значение.
Форма 2
if (выражение) оператор1 else
оператор2
Если выражение истинно, выполняется оператор1, в противном случае - оператор2. Форма 3
if (выражение1) опера тор!
else if (выражение2) оператор2 else
операторЗ
Управляющие операторы С: ветвление и переходы 263
Если выражение 1 истинно, выполняется оператор1. Если выражение 1 ложно, но выражение2 истинно, выполняется оператор2. Если оба выражения ложны, выполняется
опера торЗ.
Пример
if (legs == 4)
printf("Это может быть лошадь.\n"); else if (legs > 4)
printf(“Это не лошадь.\n"); else /* случай, когда ног меньше 4 */
{
legs++;
printf("Теперь на одну ногу больше.\n");
}
Давайте будем логичными
Ранее вы видели, что в операторах if и while в качестве условий проверки часто применяются выражения отношений. Временами возникает необходимость в объединении двух и более выражений. Например, предположим, что требуется программа, которая подсчитывает во введенном предложении количество символов, отличных от одиночных и двойных кавычек. В данном случае можно использовать логические операции и символ точки (.) для идентификации конца предложения. В листинге 7.6 представлена короткая программа, иллюстрирующая этот метод.
Листинг 7.6. Программа chcount.c
Вот пример выполнения этой программы:
Я не читал бестселлер "Я ничего не смыслю в программировании".
Здесь имеется 60 символов, отличных от кавычек.
Действие начинается с чтения символа и проверки, не является ли этот символ точкой, поскольку точка обозначает конец предложения. Далее появляется кое-что новое: в операторе присутствует логическая операция “И” — &&. Оператор if можно трактовать так: если символ не является двойной кавычкой И не является одиночной кавычкой, то увеличить значение charcount на 1.
264 Глава 7
Чтобы все выражение целиком было истинным, должны быть истинными оба условия. Логические операции имеют более низкий приоритет, чем условные операции, так что дополнительные круглые скобки для подвыражений не нужны.
В С доступны три логических операции.
Предположим, что expl и ехр2 — два простых условных выражения, такие как cat > rat и debt == 1000. Тогда справедливы следующие утверждения.
• expl && ехр2 истинно, только если истинны оба выражения expl и ехр2.
• expl || ехр2 истинно, если истинно либо выражение expl, либо выражение ехр2 или оба.
• lexpl истинно, если expl ложно, и ложно, если expl истинно.
Рассмотрим несколько конкретных примеров.
• 5>2&&4>7 ложно, поскольку истинно только одно из подвыражений.
• 5 > 2 || 4 > 7 истинно, т.к., по меньшей мере, одно из подвыражений истинно.
• ! (4 > 7) истинно, потому что 4 не больше 7.
Кстати, последний пример эквивалентен следующему выражению:
4 <= 7
Если вы не знакомы или недостаточно освоились с логическими операциями, не забывайте о простой истине:
(практика && время) == совершенство
Альтернативное представление: заголовочный файл iso646.h
Язык С разрабатывался в США на системах, оснащенных стандартными для США клавиатурами. Однако в мире не все клавиатуры имеют те же самые символы, что и клавиатуры в США. В связи с этим стандарт С99 вводит альтернативные формы написания логических операций, которые определены в заголовочном файле iso646.li. Включив этот файл в программу, вы можете указывать and вместо &&, or вместо || и not вместо !. Например, фрагмент
if (ch ! = "" && ch ! = ‘\ " ) charcount + +;
можно переписать следующим образом:
if (ch != '"' and ch != ‘\' ') charcount++;
Возможные варианты перечислены в табл. 7.3; запомнить их довольно легко. Может возникнуть вопрос, почему в С просто не используются эти новые термины. Вероятнее всего потому, что исторически в языке С пытались обходиться минимальным количеством ключевых слов. В справочном разделе V приложения Б приведен список дополнительных альтернативных форм записи для операций, с которыми вы пока еще не встречались.
Управляющие операторы С: ветвление и переходы 265
Таблица 7.3. Альтернативное представление логических операций
приоритеты операций
Операция ! имеет очень высокий уровень приоритета — больше, чем у операции умножения, и такой же, как у операции инкремента; выше него только приоритет круглых скобок. Операция && имеет более высокий приоритет, чем II, и обе они по приоритету уступают условным операциям, но превосходят операцию присваивания. Таким образом, выражение
a>b && b>c || b>d интерпретируется так, как показано ниже:
( (а > b) && (b > с) ) || (b>d)
То есть значение b находится между а и с или значение b больше, чем d.
Многие программисты указывают скобки даже там, где они не обязательны, как во второй версии. Это позволяет понять смысл выражения тем, кто не очень хорошо помнит приоритеты логических операций.
Порядок вычисления выражений
Помимо случаев, когда две операции совместно используют один операнд, в С совершенно не гарантируется, какие части сложного выражения будут вычислены первыми. Например, в следующем операторе подвыражение 5 + 3 может быть вычислено как раньше подвыражения 9 + 6, так и позже:
Читать дальшеИнтервал:
Закладка: