Кривцов М. А.
Шрифт:
getchar ;
return 0;
}
Как видите, данный оператор не может похвастаться хвалёной компактность записи, столь свойственной C. В Pascal подобная структура реализована куда элегантней. Вообще, современные среды программирования сводят на нет преимущество в экономии нажатий клавиш, поскольку все они обладают опцией автозавершения. Но данному монстру из C завоевать любовь программистов не поможет даже это.
SWITCH – переключатель, железнодорожная стрелка.
CASE – случай, обстоятельство.
BREAK – прервать.
DEFAULT – отсутствие, исключение, по умолчанию.
2.2. Повторение (операторы цикла)
2.2.1. Цикл типа “пока” (цикл с предусловием)
Пример 2.4: Программа находит наибольший общий делитель двух целых чисел.
#include <assert. h>
#include <stdio. h>
int main
{
int x, y;
printf (“Введите два целых числа через пробел\n”);
int r = scanf (”%d%d”, &x, &y);
assert (r == 2);
while (x!= y)
if (x> y)
x = x – y;
else
y = y – x;
printf (“НОД=%d\n”, x);
getchar ;
return 0;
}
Для проверки соответствия ввода пользователя требованиям программы мы сохраняем (=) результат выполнения scanf – количество успешно измененных переменных – в целочисленной переменной с именем r (int r), после чего требуем равенства её значения двум
(assert (r == 2);
Для этого и нужна директива препроцессора
#include <assert. h>
2.2.2. Цикл, который выполняется не меньше одного раза
Обратите внимание, что в цикле используется условие продолжения, а не завершения повторения! Это не цикл “до”, подобный REPEAT… UNTIL в Pascal, хотя назначение его то же – позволить телу цикла выполнится хотя бы один раз.
Пример 2.5: Решение предыдущей задачи.
#include <assert. h>
#include <stdio. h>
int main
{
int x, y;
printf (“Введите два целых числа через пробел\n”);
int r = scanf (”%d%d”, &x, &y);
assert (r == 2);
do
if (x> y)
x = x – y;
else
y = y – x;
while (x!= y);
printf (“НОД=%d\n”, x);
getchar ;
return 0;
}
2.2.3. Цикл с параметром (со счётчиком)
Пример 2.6: Вычислить факториал числа (n!=1x2x3x…xn).
#include <stdio. h>
int main
{
int f=1, k, n;
printf (“Введите целое положительное число\n”);
scanf (”%d”, &n);
for (k=1; k <=n; k++)
f=f*k;
printf (“n!=%d\n”, f);
getchar ;
return 0;
}
Для этого цикла в Си Рис. 6 из части о Паскале даже более нагляден, чем там! Особенно, если заменить в этом операторе k++ на k=k+1, что его работы не изменит. Разве, что только незаметно замедлит, поскольку унарные операции выполняются быстрее бинарных.