Опорный конспект Форма ф со пгу 18. 2/05 Министерство образования и науки Республики Казахстан

Вид материалаКонспект

Содержание


Циклические конструкции в программах
Цикл while
Пример: #inсlude
Цикл do...while
Подобный материал:
1   2   3   4   5   6   7   8   9   10   ...   15

Циклические конструкции в программах


Наряду с операторами (или группами операторов), которые мо­гут выполняться в зависимости от каких-либо условий, существуют еще и операторы, которые могут выполняться несколько раз в одной и той же последовательности. Такой вид конструкции в программе известен как цикл. Есть три основных типа циклов (хотя два из них можно рассматривать как разновидность одного). Это цикл while ("пока"), цикл for ("для") и цикл do...while ("делать ... пока"). Рассмотрим их по порядку.

Цикл while


Цикл while является наиболее общим и может использоваться вместо двух других типов циклических конструкций. В принципе мож­но сказать, что по-настоящему для программирования необходим только цикл while, а другие типы циклических конструкций служат лишь для удобства написания программ.

Пример:

#inсlude

main()

int len;

len=0;

puts("Наберите предложение, затем нажмите <Ввод>");

while ( getchar() != '\n')

len++;

printf("\nВаше предложение имеет длину %d символов\n",len);

Эта программа позволяет ввести предложение с клавиатуры и подсчитать при этом, сколько раз вы нажали на клавиши клавиатуры до тех пор, пока не нажали на клавишу <Ввод> (соответствует спе­циальному символу конца строки - '\n'). Затем программа сообщит

вам сколько символов (символ '\n' не подсчитывается) вы ввели.

Оператор while имеет следующий формат:

while (выражение)

оператор

где "выражение" принимает нулевое или отличное от нуля значение,

а "оператор" может представлять собой как один оператор, так и

составной оператор.

В процессе выполнения цикла while вычисляется значение "вы­ражения". Если оно истинно, то "оператор", следующий за ключевым словом while, выполняется и "выражение" вычисляется снова. Если "выражение" ложно, то цикл while завершается и программа продол­жает выполняться дальше.

Цикл for


Цикл for является одним из основных видов циклов, которые имеются во всех универсальных языках программирования, включая Си. Однако, версия цикла for, используемая в Си, как вы увидите, обладает большей мощностью и гибкостью.

Основная идея, заложенная в его функционирование, заключает­ся в том, что операторы, находящиеся внутри цикла, выполняются фиксированное число раз, в то время как переменная цикла (извест­ная еще как индексная переменная) пробегает определенный ряд зна­чений. Например, модифицируем программу, о которой говорилось вы­ше, в следующую:

#include

main()

char *msg;

int indx;

msg = "Здравствуй, мир";

for (indx = 1; indx <= 10; indx++ )

printf("Время #%2d: %s\n",indx,msg);

Эта программа делает те же действия, что и программа с циклом while, которую мы уже разобра­ли.

Теперь приведем основной формат цикла for:

for (выр1; выр2; выр3)

оператор

Так же, как и в цикле while, "оператор" в теле цикла for обычно является одним из операторов программы, но может использо­ваться и составной оператор, заключенный в фигурные скобки (...).

Заметим, что параметры цикла for, заключенные в скобки, должны разделяться точкой с запятой (позиционный параметр), кото­рая делит в свою очередь пространство внутри скобок на три секто­ра. Каждый параметр, занимающий определенную позицию, означает следующее:

- выр1 - обычно задает начальное значение индексной переменной;

- выр2 - условие продолжения цикла;

- выр3 - обычно задает некоторую модификацию (приращение) индексной переменной за каждое выполнение цикла.

Основной вариант цикла for эквивалентен следующей конструк­ции, выраженной с помощью цикла while:

выр1;

while (выр2)

оператор;

выр3;

Вы можете опускать одно, несколько или даже все выражения в операторе for, однако о необходимости наличия точек с запятой вы должны помнить всегда. Если вы опустите "выр2", то это будет рав­носильно тому, что значение выражения "выр2" всегда будет иметь значение 1 (истина) и цикл никогда не завершится (такие циклы из-

вестны еще как бесконечные).

Во многих случаях вам поможет использование оператора запя­тая (,), который позволяет вводить составные выражения в оператор цикла for.

Пример:

#include

main()

char *msg;

int up,down;

msg = "Здравствуй, мир";

for (up = 1, down = 9; up <= 10; up++, down--)

printf("%s: %2d растет, %2d уменьшается \n",msg,up,down);

Заметьте, что и первое и последнее выражение в этом цикле for состоит из двух выражений, инициализирующих и модифицирующих переменные up и down. Вы можете сделать эти выражения сколь угод-

но сложными.

Цикл do...while


Последним видом цикла является цикл do...while.

Пример:

#include

#include

main()

float a,b,ratio;

do

printf("\nВведите два числа: ");

scanf("%f %f", &a, &b);

if (b == 0.0)

printf("\n Деление на ноль!");

else

ratio = a/b;

printf("\nРезультат деления двух чисел: %f",ratio);

printf("\nНажми 'q' для выхода или любую клавишу для"

" продолжения")

while ( getch() != 'q');

Эта программа вычисляет результат деления одного числа на другое. Затем просит вас нажать любую клавишу. Если вы нажмете клавишу 'q', то выражение в операторе цикла while в конце прог­раммы примет значение "ложь" и цикл (а значит и программа) завер­шится. Если вы введете какой-либо другой символ, отличный от 'q', то выражение будет иметь значение "истина" и цикл повторится.

Формат цикла do...while можно представить в виде:

do оператор while (выр);

Основным отличием между циклом while и циклом do...while в том, что операторы внутри do...while всегда выполняются хотя бы один раз (т.к. проверка условия выполнения цикла осуществляется после выполнения последовательности операторов, составляющих тело цикла). Это похоже на цикл repeat...until в Паскале с одним, од­нако, различием: цикл repeat выполняется дотехпор, пока его усло­вие не станет истинным; а цикл do...while выполняется пока исти­на.