{
printf ("Введите ваш пароль:"); scanf ("%d", &usr_input);
}
while (passwd != usr_input);
......
2.4. Цикл со счётчиком
Цикл со счётчиком является, наверное, наиболее удобным для использования в большинстве программ. В этом цикле в обязательном порядке вначале задаются начальное значение счётчика, проверяемое условие и шаг счётчика.
Синтаксис цикла со счётчиком таков:
for (начальное значение счётчика; проверяемое условие; шаг счётчика)
{
оператор1;
оператор2;
}
Изображение такого цикла в блок-схеме следующее:
Приведём пример использования цикла for() - вычислим сумму первых n членов ряда Фибоначчи (числовая последовательность: 1 1 2 3 5 8 13 21 34 ..... - в которой каждый последующий член равен сумме двух предыдущих).
Решение сводится к вычислению каждого последующего члена ряда Фибоначчи и добавлению его к общей сумме.
Для решения задачи потребуется как минимум пять переменных:
1.для хранения суммы (sum),
2.для хранения ограничения, вводимого пользователем, т. е. числа суммируемых членов (n),
3.4. для хранения текущего и предыдущего членов ряда (ecurrent и eprevious).
5. для счётчика (сколько членов ряда уже входит в сумму) - i.
Поскольку ряд состоит из целых чисел, логично использовать целый тип переменных.
Возможно использование беззнакового целого, т. к. отрицательных чисел в ряде Фибоначчи нет.
Алгоритм решения:
●Задать начальные значения первых двух членов ряда Фибоначчи (все члены, начиная с третьего, можно вычислить, суммируя два предыдущих члена),
● обнулить переменные суммы и счётчика: sum = 0; i = 0;
●рассчитать сумму одного члена ряда: sum = sum + ecurrent; (а также нарастить счётчик на единицу: i++; чтобы отметить, что один член ряда уже просуммирован).
●Постоянно, до достижения n, добавляем в сумму текущий член ряда, увеличиваем
счётчик на единицу: sum = sum + ecurrent; i++;
● Вычисляем новый член ряда: enext = eprevious + ecurrent;
Обратите внимание, что при суммировании следующий член ряда станет текущим, текущий - предыдущим
eprevious = ecurrent; ecurrent = enext;
... и так далее до достижения n; Код выглядит следующим образом:
#include <stdio.h> int main (void)
{
int eprevious, ecurrent, enext; int sum, n;
int i;
ecurrent = 1; |
/* |
задаём явно первый член ряда */ |
sum = ecurrent; |
/* |
включаем первый член ряда в сумму */ |
eprevious = ecurrent; /* сдвигаемся на 1 член, текущий член ряда становится предыдущим */
ecurrent = 1; /* задаём явно второй член ряда */
printf ("Please enter the number of row members to sum: "); scanf ("%d", &n);
for (i = 1; i <= n; i++)
{
sum = sum + ecurrent;
enext = ecurrent + eprevious; eprevious = ecurrent; ecurrent = enext;
}
printf ("\n The sum of %d first row members is %d", n, sum);
}
2.5. Дополнительные операции присваивания
Довольно удобно использовать сокращённую нотацию для выполнения арифметических
операций. В сокращённой нотации определены следующие операторы:
+= |
*= |
-= |
%= |
/= |
|
Следующая таблица устанавливает соответствие между сокращённой и стандартной нотациями:
Операция в сокращённой |
Стандартный |
нотации |
эквивалент |
|
|
i += 1; |
i = i + 1; |
i -= 1; |
i = i - 1; |
i /= 2; |
i = i / 2; |
i *= 2; |
i = i * 2; |
i %= 2; |
i = i % 2; |
Также часто используются унарные операторы инкремента и декремента: ++ и --. Оператор ++ увеличивает значение переменной на единицу; оператор -- - уменьшает.
Операторы инкремента и декремента могут использоваться в постфиксной (оператор стоит после переменной) и префиксной (оператор стоит перед переменной) форме.
Различие между формами употребления операторов иллюстрируется следующим примером:
Номер Код строки
1int a = 1, b = 1;
2int p, q;
3p = a ++;
4q = ++b;
Значения переменных после выполнения операторов каждой строки будут таковы:
Номер строки |
|
Значения переменных |
|
||
|
|
||||
|
a |
b |
p |
|
q |
1 |
1 |
1 |
нет |
|
нет |
2 |
1 |
1 |
нет |
|
нет |
3 |
2 |
1 |
1 |
|
нет |
4 |
2 |
2 |
1 |
|
2 |
Обратите внимание, что при использовании постфиксной формы (строка 3) сначала производится операция присваивания (p = a), а потом уже значение переменной a увеличивается на единицу (a++). При использовании префиксной формы (строка 4) сначала значение b увеличивается на единицу, а потом уже новое значение b присваивается переменной q.