Новосибирский Государственный Университет
Опубликован: 26.08.2005 | Доступ: свободный | Студентов: 17192 / 2755 | Оценка: 4.07 / 3.55 | Длительность: 13:11:00
ISBN: 978-5-9556-0057-4
Лекция 8:

Циклы и другие управляющие средства. Структурное программирование

< Лекция 7 || Лекция 8: 1234 || Лекция 9 >

Другие управляющие операторы

Операторы, определяющие циклические вычисления, которые мы рассмотрели, и условные операторы if, if-else и switch, являются важнейшими средствами управления выполнением программы на языке Си. Они должны использоваться для реализации общей структуры программы. Три оператора, рассматриваемые ниже, обычно рассматриваются реже, поскольку слишком частое их использование ухудшает читаемость программы, увеличивает вероятность ошибок и затрудняет ее модификацию. Никлаус Вирт дал определение структурного программирования, как программирования без goto.

Оператор break

Оператор break используется для выхода из оператора while, do, for, switch, непосредственно его содержащего. Управление передается на оператор, следующий за оператором, из которого осуществлен выход. Оператор break имеет форму

break;

Пример:

while((ch=getchar()) != EOF) 
/* читается символ ch=getchar(). Если он не совпадает с EOF, выполняется тело оператора while */
{
	if(ch=='\n')
	break; 
	putchar(ch);
}

Работа цикла полностью прекращается, как только при вводе встречается символ "новая строка".

Оператор continue

Оператор continue служит для пропуска оставшейся части выполняемой итерации цикла, непосредственно его содержащего. Если условиями цикла допускается новая итерация, то она выполняется, в противном случае цикл завершается. Оператор continue имеет следующую форму:

continue;

Пример:

while((ch=getchar()) != EOF) 
/* читается символ ch=getchar(). Если он не совпадает с EOF, выполняется тело оператора while */
{
	if(ch=='\n')
	continue;
	putchar(ch);
}

В версии с оператором continue просто пропускаются символы "новая строка", а выход из цикла происходит, только когда читается признак EOF.

Оператор goto

Оператор goto предназначен для безусловной передачи управления к оператору с указанной меткой. Он имеет следующую форму:

goto метка;

Керниган и Ритчи считают оператор goto "чрезвычайно плохим" средством и предлагают применять его как можно реже или не применять совсем. Приведем пример записи оператора:

goto part1;

Чтобы этот оператор выполнялся правильно, необходимо наличие другого оператора, имеющего метку part1. В этом случае запись оператора начинается с метки, за которой следует двоеточие:

part1: printf("точка перехода\n");
! Избегайте использовать goto! С тех пор как Дейкстра опубликовал свой знаменитый труд "Вредность оператора GOTO", специалисты бились над методами структурного программирования. Полное описание структурного программирования выходит за рамки этого курса лекций, однако отметим, что нужно очень осторожно использовать операторы: goto, break, continue, return.

Если без операторов goto, break, continue, return никак не обойтись, то при использовании goto переходите вперед по коду, а не назад.

Оператор break лучше не использовать для преждевременного выхода из цикла, его полезно использовать внутри оператора switch.

Оператор continue нежелательно использовать для модификации логики циклов.

Почему нежелательно использовать функции со многими операторами return. Один из принципов структурного программирования состоит в том, что программа должна иметь одну точку входа и одну точку выхода. Функции со многими операторами return более сложны для чтения, чем те, которые имеют лишь один оператор return в конце тела функции.

< Лекция 7 || Лекция 8: 1234 || Лекция 9 >
Вадим Ратьков
Вадим Ратьков

Объясните, пожалуйста, чем отличаются два этих кода?

printf("смешанное деление: 7./4 это %2.2f \n", 7./4);

и

printf("смешанное деление: 7./4 это %f \n", 7./4);

%f  это, понятное дело, float. А что такое %2.2f ?

Вопрос возник при прочтении лекции 3 часть вторая курса Основы программирования на языке C.

http://www.intuit.ru/studies/courses/43/43/lecture/1281?page=2

Анна Алексанина
Анна Алексанина

Я хочу выполнить одну из программ, которые есть в лекции. Но для этого мне надо компилировать текст, а я не знаю, как это сделать. ОС Windows.

Николай Алешин
Николай Алешин
Россия
Алексей Иванов
Алексей Иванов
Украина, Мариуполь