 |
main()
{
char *msg;
int indx;
msg = "Здравствуй, мир";
indx = 1 ;
while (indx <= 10 ) {
printf("Время # %2d: %s\n", indx,msg);
indx++;
}
}
После компиляции и выполнения этой программы на экране будут
отображены строки со следующей информацией:
Время # 1 : Здравствуй, мир
Время # 2 : Здравствуй, мир
Время # 3 : Здравствуй, мир
........................
Время # 9 : Здравствуй, мир
Время # 10 : Здравствуй, мир
Очевидно, что оператор printf был выполнен ровно десять раз.
При этом значение параметра цикла indx изменилось от 1 до 10.
Немного подумав, вы сможете переписать этот цикл несколько
компактнее:
indx = 0 ;
while (indx++ < 10 )
printf("Время #%2d: %s\n",indx,msg);
Изучайте этот второй пример цикла while до тех пор, пока вам
не станет ясно, почему он работает точно так же, как и в первом
случае. Затем переходите к изучению цикла типа for.
Цикл for.
-----------------------------------------------------------------
- 453,454 -
Цикл 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, заключенные в скобки,
должны разделяться точкой с запятой (позиционный параметр), кото-
рая делит в свою очередь пространство внутри скобок на три секто-
ра. Каждый параметр, занимающий определенную позицию, означает
следующее:
- 455,456 -
- выр1 - обычно задает начальное значение индексной
переменной;
- выр2 - условие продолжения цикла;
- выр3 - обычно задает некоторую модификацию (приращение)
индексной переменной за каждое выполнение цикла.
Основной вариант цикла for эквивалентен следующей конструк-
ции, выраженной с помощью цикла while:
выр1;
while (выр2) {
оператор;
выр3;
}
Вы можете опускать одно, несколько или даже все выражения в
операторе for, однако о необходимости наличия точек с запятой вы
должны помнить всегда. Если вы опустите "выр2", то это будет рав-
носильно тому, что значение выражения "выр2" всегда будет иметь
значение 1 (истина) и цикл никогда не завершится (такие циклы из-
вестны еще как бесконечные).
Во многих случаях вам поможет использование оператора запя-
тая (,), который позволяет вводить составные выражения в оператор
цикла for. Вот, например, еще одна правильная модификация файла
HELLO.C с использованием составного выражения в операторе 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. Вы можете сделать эти выражения сколь угод-
- 457,458 -
но сложными. (Возможно вы слышали о легендарных хаккерах Си
(hacker - программист, способный писать программы без предвари-
тельной разработки спецификаций и оперативно вносить исправления
в работающие программы, не имеющие документации), которые запихи-
вают большинство своих программ в три выражения оператора for,
оставляя в теле цикла лишь несколько операторов).
Цикл do...while.
-----------------------------------------------------------------
Последним видом цикла является цикл do...while. Модифицируй-
те RATIO.C следующим образом:
#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 можно представить в виде:
- 459,460 -
do оператор while (выр);
Основным отличием между циклом while и циклом do...while в
том, что операторы внутри do...while всегда выполняются хотя бы
один раз (т.к. проверка условия выполнения цикла осуществляется
после выполнения последовательности операторов, составляющих тело
 |
|