Array M. УЭИТ - Язык Си - руководство для начинающих
- Название:Язык Си - руководство для начинающих
- Автор:
- Жанр:
- Издательство:Мир
- Год:1988
- Город:Москва
- ISBN:5-03-001309-1 /русск./
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Array M. УЭИТ - Язык Си - руководство для начинающих краткое содержание
Язык Си — руководство для начинающих
Язык Си - руководство для начинающих - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Этот фрагмент, конечно, более компактно можно записать следующим образом:
while((ch=getchar( ))!= EOF)
if(ch != '\n') putchar(ch);
Очень часто, так же как и в данном случае, изменение условия в операторе ifна обратное позволяет исключить необходимость введения в цикл оператора continue.
С другой стороны, оператор continueпомогает иногда сократить некоторые программы, особенно если они включают в себя вложенные операторы if else.
goto:
Оператор goto- одно из важнейших средств Бейсика и Фортрана - также реализован и в Си. Однако на этом языке в отличие от двух других можно программировать, совершенно не используя указанное средство. Керниган и Ритчи считают оператор goto"чрезвычайно плохим" средством и предлагают "применять его как можно реже или не применять совсем".
Сначала мы покажем, как его использовать, а затем объясним, почему этого нe нужно делать.
Оператор gotoсостоит из двух частей - ключевого слова gotoи имени метки. Имена меток образуются по тем же правилам, что и имена переменных. Приведем пример записи оператора
goto pait2;
Чтобы этот оператор выполнился правильно, необходимо наличие другого оператора, имеющего метку part2;в этом случае запись оператора начинается с метки, за которой следует двоеточие.
part2: printf(" Уточненный анализ:\n");
Избегайте использовать goto
В принципе вы никогда не обязаны пользоваться оператором gotoпри программировании на Си. Но если ваш предыдущий опыт связан с работой на Фортране или Бейсике, в каждом из которых требуется его использовать, то у вас могли выработаться навыки программирования, основанные на применении данного оператора. Чтобы помочь вам преодолеть эту привычку, ниже вкратце приводится несколько знакомых вам ситуации, реализуемых с помощью goto, а затем показывается, как это можно осуществить другими средствами, в большей степени соответствующими духу языка Си.
1. Работа в ситуации, когда в операторе ifтребуется выполнить более одного оператора:
if(size > 12)
goto a;
goto b;
a: cost = cost * 1.05;
flag = 2;
b: bill = cost * flag;
(В стандартных Бейсике и Фортране только один оператор, непосредственно следующий за if-условием, считается относящимся к оператору if. Мы выразим это с помощью эквивалентного фрагмента на Си.)
Обычный подход, применяемый в языке Си и заключающийся в использовании составного оператора, или блока, упрощает понимание смысла программы:
if(size > 12);
{
cost = cost * 1.05;
flag = 2;
}
bill = cost * flag;
2. Осуществление выбора из двух вариантов:
if(size > 14) goto a;
sheds = 2;
goto b;
a: sheds = 3;
b: help = 2 * sheds;
Наличие в языке Си структуры if-elseпозволяет реализовать такой выбор более наглядно:
if(ibex > 14)
sheds = 3;
else
sheds = 2;
help = 2 * sheds;
3. Реализация бесконечного цикла:
readin: scanf(" %d", &score);
if(score < 0) goto stagc2;
большое количество операторов;
goto readin:
stagc2: дополнительная чепуха;
}
Эквивалентный фрагмент, в котором используется цикл while, выглядит так:
scanf(" %d", &score);
whilet(score >= 0)
{
большое количество операторов;
scanf("%d", &score);
}
дополнительная чепуха;
4. Пропуск операторов до конца тела цикла: используйте оператор continue.
5. Выход из цикла: используйте оператор break. Фактически breakи continueявляются специальными формами оператора goto. Преимущество их использования заключается в том, что, во-первых, названия этих операторов говорят об осуществляемых ими функциях, а во-вторых, поскольку они нe используют меток, отсутствует опасность пометить не тот оператор программы.
6. Выполнение переходов к различным частям программы непредсказуемым образом: так программировать нельзя!
Существует один случай, когда использование оператора 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, его структура оказывается лучшей, чем в большинстве других языков программирования поскольку в качестве меток можно использовать смысловые имена, а не числа.
Резюме: переходы в программах
I. Ключевые слова: break, continue, goto
II. Общие замечания
Выполнение каждого из этих трех операторов языка вызывает скачкообразное изменение процесса выполнения программы, т. е. переход от одной команды программы к другой (не следующий за ней непосредственно).
III. break
Оператор breakможно использовать внутри любой из трех форм цикла и конструкции switch. Его выполнение приводит к тому, что управление программой, минуя оставшуюся часть тела цикла или конструкцию switch, содержащую данный оператор, передается на следующую (за этим циклом или за конструкцией switch) команду.
Пример:
switch(number)
{
case 4: printf(" Этохорошийвыбор.\n");
break;
case 5: printf(" Это неплохой выбор.\n");
break;
default: рrintf(" Это плохой выбор.\n");
}
IV. Continue
Оператор continueможет использоваться в любой из трех форм циклов, но нe в операторе switch. Его выполнение приводит к такому изменению логики программы, что остальные операторы тела цикла пропускаются. Для циклов whileили forвслед за этим начинается новый шаг, а для цикла do whileпроверяется условие на выходе, и затем, если оно оказывается истинным, выполняется следующая итерация.
Читать дальшеИнтервал:
Закладка: