Книга: Язык Си - руководство для начинающих

ЦИКЛ while

     В предшествующих главах мы интенсивно пользовались этой формой цикла, сейчас же хотим рассмотреть его работу в случае простой, возможно, даже примитивной программы, угадывающей число.

/* угадывание числа1 */

/* неэффективный способ угадывания */

#inlude

 main( )

{

int guess = 1;

char response;

printf(" Задумайте целое число от 1 до 100. Я попробую угадать");

printf(" его.n Отвечайте д, если моя догадка правильна и");

printf(" n н, если я ошибаюсь. n");

рintf("Итак ... ваше число %d?n" , guess);

while((response = getchar( )) != 'д') /* получениеответа*/

    if (response != ' n') /* пропуск символа "новая  строка" */

        printf(" Ну, тогда оно равно %d?n", ++guess);

printf(" Я знала, что смогу сделать это!n");

}

     Обратите внимание на логику программы. Если вы отвечаете д, в программе осуществляется выход из цикла и переход на завершающий оператор печати. Программа просит вас отвечать и в случае, если ее догадка неверна, но фактически любой ответ, отличный от символа д, приводит к тому, что программа входит в цикл. Однако если введен символ "новая строка", то при данном прохождении тела цикла никаких операций не производится. Получение другого символа приводит к очередной попытке угадывания целого числа. (Что произошло бы в случае использования операции guess++ вместо операции ++guess?).

     Строка if(response ! = 'n') позволяет программе игнорировать поступление постороннего символа "новая строка", когда вы нажмете клавишу [ввод].

     В этом случае тело цикла while не нужно заключать в фигурные скобки, поскольку оператор if, хотя он и занимает две строки в программе, рассматривается как один оператор.

     Вы, по-видимому, уже заметили, что это довольно "тупая" программа. Она написана правильно и решает поставленную задачу, но делает это крайне неэффективно. Данный пример показывает нам, что правильность написания - не единственный критерий, по которому необходимо оценивать программу. При этом очень важна ее эффективность. Мы вернемся к данной программе несколько позже и попытаемся ее немного улучшить.

     В общем виде цикл while записывается так:

while(выражение)   оператор

     В наших примерах в качестве выражений использовались условные выражения, но, вообще говоря, это могут быть выражения произвольного типа. В качестве оператора можно использовать простой оператор с символом "точка с запятой" в конце или составной oпeратор, заключенный в фигурные скобки. Если выражение истинно (т.е. в общем случае не равно нулю), то оператор, входящий в цикл while выполняется один раз, а затем выражение проверяется снова, а последовательность действий, состоящая из проверки и выполнения оператора, периодически повторяется до тех пор, пока выражение не станет ложным (или в общем случае равным нулю). Такой шаг называется "итерация". Данная структура аналогична структуре оператора if. Основное отличие заключается в том, что в операторе if проверка условия и (возможное) выполнение оператора осуществляется только один раз, а в цикле while эти действия производятся, вообще говоря, неоднократно.

 

                                                                      РИС. 8.1. Структура цикла while.

Оглавление книги


Генерация: 0.287. Запросов К БД/Cache: 2 / 0
поделиться
Вверх Вниз