Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015
- Название:Язык программирования C. Лекции и упражнения (6-е изд.) 2015
- Автор:
- Жанр:
- Издательство:Вильямс
- Год:0101
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015 краткое содержание
Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
sheds = 2;
help = 2 * sheds;
В действительности синтаксис более поздних версий BASIC и FORTRAN включает конструкцию else.
• Организация бесконечного цикла:
readin: scanf("%d", &score); if (score < 0) goto stage2; множество операторов goto readin;
stage2: дополнительная обработка;
Взамен применяйте цикл while:
scanf("%d", &score); while (score <= 0)
{
множество операторов scanf("%d", &score);
}
дополнительная обработка;
Управляющие операторы С: ветвление и переходы 285
• Пропуск операторов до конца цикла и начало следующей итерации. Используйте оператор continue вместо goto.
• Выход из цикла. Применяйте оператор break вместо goto. Операторы break и continue фактически являются специализированными формами goto. Преимущество их использования заключается в том, что имена операторов позволяют понять их назначение, а также в том, что в них не применяются метки, поэтому отсутствует опасность помещения метки в неподходящее место.
• Беспорядочные переходы между разными частями программы. Избегайте их!
Существует ситуация, в которой многие программисты допускают использование оператора goto — выход из набора глубоко вложенных циклов в случае возникновения ошибки (одиночный оператор break обеспечит выход только из самого внутреннего цикла):
while (funct > 0)
{
for (i = 1, i <= 100; i++)
{
for (j = 1; j <= 50; j++)
{
множество операторов; if (признак ошибки) goto help; операторы;
}
еще множество операторов;
}
другое множество операторов;
}
третье множество операторов; help: код устранения ошибки;
Как можно было заметить в других примерах, альтернативные формы кода яснее для восприятия, чем формы с оператором goto. Различия становятся еще более заметными при смешивании нескольких случаев подобного рода. Какие операторы goto содействуют операторам if, какие эмулируют конструкции if else, какие управляют циклами, а какие применены лишь потому, что вы загнали себя в угол? Чрезмерно используя goto, вы создаете лабиринт в потоке управления программы. Если вы не знакомы с оператором goto, то и не меняйте это положение дел. Если вы привыкли к нему, то постарайтесь отвыкнуть. По иронии судьбы, язык С, который совершенно не нуждается в goto, располагает лучшим синтаксисом этого оператора, чем большинство других языков, т.к. позволяет применять для меток описательные слова, а не числа.
Сводка: переходы в программах Ключевые слова
break, continue, goto
Общий комментарий
Эти операторы заставляют поток управления программы перейти из одного места в другое. Оператор break
Оператор break может использоваться с любой из трех форм цикла и оператором switch. Он приводит к пропуску оставшихся операторов в теле цикла или внутри switch и передаче управления оператору, следующему за оператором цикла или switch.
286 глава 7
Пример
switch (число)
{
case 4: printf("Это лучший выбор.\n");
break;
case 5: printf("Это хороший выбор.\n");
break;
default: printf("Это плохой выбор.\n");
}
Оператор continue
Оператор continue может применяться с любой из трех форм циклов, но не с оператором switch. Он приводит к пропуску оставшихся операторов цикла. В цикле while или for начинается новая итерация. В цикле do while проверяется условие завершения, после чего при необходимости начинается следующая итерация цикла.
Пример
while ((ch = getchar()) != '\n')
{
if (ch = ' ') continue; putchar(ch); chcount++;
}
Этот фрагмент кода выводит и подсчитывает символы, отличные от пробела.
Оператор goto
Оператор goto приводит к передаче управления оператору, снабженному указанной меткой. Для отделения помеченного оператора от его метки используется двоеточие. Метки именуются согласно тем же правилам, что и переменные. Помеченный оператор может находиться либо до, либо после оператора goto.
Ключевые понятия
Одним из аспектов интеллекта является возможность подгонять ответы под конкретные обстоятельства. Таким образом, операторы выбора представляют собой основу для разработки программ с интеллектуальным поведением. В языке С выбор реализуется с помощью операторов if, if else и switch, а также условной операции (?:).
Управляющие операторы С: ветвление и переходы 287
Для определения того, какие операторы должны быть выполнены, в if и if else применяется условие проверки. Любое ненулевое значение трактуется как истинное, а ноль — как ложное. Обычно в проверках используются условные выражения, в которых сравниваются два значения, и логические выражения, в которых посредством логических операций создаются сложные выражения.
Следует запомнить один общий принцип: если требуется проверить два условия, нужно применять логическую операцию с двумя завершенными проверочными выражениями. Например, следующий код ошибочен:
if (а < х < z) // неправильно - отсутствует логическая операция
if (ch != 'q' && != 'Q') // неправильно - отсутствует завершенное выражение проверки
Правильный способ предусматривает объединение двух условных выражений с помощью логической операции:
if(a
if (ch != 'q' && ch != 'Q') // использование && для объединения двух выражений
Управляющие операторы, представленные в последних двух главах, позволяют разрабатывать намного более мощные и сложные программы, нежели те, с которыми вы имели дело ранее. Чтобы удостовериться в этом, достаточно сравнить некоторые примеры из этой главы с примерами, рассмотренными в предшествующих главах.
Резюме
В данной главе было рассмотрено довольно много тем, так что давайте кратко подытожим. В операторе if используется условие проверки для определения того, должен ли быть выполнен одиночный оператор или блок, следующий после условия. Выполнение происходит в случае, если проверочное выражение имеет ненулевое значение, и не происходит, если его значение равно нулю. Оператор if else позволяет производить выбор из двух альтернатив. Если условие проверки дает ненулевое значение, выполняется оператор, предшествующий else. Если условие проверки имеет нулевое значение, выполняется оператор, следующий за else. Указывая непосредственно за else еще один оператор if, можно построить структуру, которая производит выбор из последовательности альтернатив.
Выражение проверки часто является выражением отношения, т.е. выражением, построенным с применением одной из условных операций, таких как < или ==. С помощью логических операций С выражения отношений можно объединять, создавая более сложные проверки.
Условная операция (? :) позволяет создавать выражение, которое во многих случаях оказывается более компактной альтернативой оператору if else.
Семейство функций для работы с символами ctype.h, подобных isspace() и isalpha(), предлагает удобные инструменты для построения выражений проверки, основанных на классификации символов.
Читать дальшеИнтервал:
Закладка: