Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по Си.doc
Скачиваний:
11
Добавлен:
04.06.2015
Размер:
2.75 Mб
Скачать

Int main()

{

const floor eps_0 = 0.001;

int k = 0;

float x, y, s;

printf(“\nx =”);

scanf(“%f”, &x);

y = 1.0;

s = y;

do

{

k++;

y *= x / k;

s += y;

}

while (fabs(y)>eps_0);

printf(“\nСумма = %5.3f”, s);

return 0;

}

Циклы с постусловием обычно используются в фильтрах входных данных– исходные данные вводятся до тех пор, пока они не будут корректными, а некорректные исходные данные отвергаются.

Пример: по введенному месяцу года определить количество дней в нем.

Программа: Схема фильтра (month– номер месяца)

#include <stdio.h>

#include <conio.h>

#include <math.h>

Int main()

{

Int month;

do

{

printf(“\nВведите номер месяца: ”);

scanf(“%d”, &month);

}

while ((month < 1) || (month > 12));

switch (month)

{

case 1: case 3: case 5:

case 7: case 8: case 10:

case 12: printf(“\n31 день”);

break;

case 4: case 6: case 9:

case 11: printf(“\n30 дней”);

break;

case 2: printf(“\n28 дней”);

break;

default: printf(“\nТакого месяца нет\n”);

}

return 0;

}

Циклы с пред- и постусловиями используются тогда, когда заранее неизвестно количество их повторений (итераций). Если количество итераций известно заранее, то используютсяциклы с параметром.

Циклы с параметром

Управление работой циклов с параметромосуществляется не толькоусловием, но и значением специальной переменной –параметра цикла(счетчика).

Циклы этого типа получили наиболее широкое распространение в алгоритмических языках.

Схему цикла с параметром можно представить в следующем виде:

где x – параметр цикла– любая переменная,

x_нач– егоначальноезначение,

x_кон– егоконечноезначение,

x_шагшагего изменения (не только целое число).

В Сициклы с параметром реализуютсяоператором цикла:

for (инициализация; условие; изменение)

{

оператор;

оператор;

оператор;

. . .

оператор;

}

где инициализация– устанавливаетначальноезначение параметра цикла,

условие– определяетусловиевыполнения цикла,

изменение – задаетизменениепараметра цикла после каждой итерации.

Действия цикла:

  1. параметру цикла xприсваивается его начальное значениеx_нач,

  2. проверяется условиевыполнения цикла; если оноистинно(не равно нулю), то выполняется тело цикла,

  3. параметр цикла автоматически увеличивается на шаг, и цикл повторяется до тех пор, покаусловиене становится ложным (равным нулю),

  4. если условиене выполняется, то цикл заканчивает работу,

  5. из цикла можно выйти досрочно, используя оператор break.

Внимание!Все три составляющие в круглых скобках разделяютсяточками с запятой. После круглых скобок точка с запятойне ставится.

Пример: определить суммуs натуральных чисел от1до100.

Схема алгоритма:

Программа:

#include <stdio.h>

#include <conio.h>

#include <math.h>

Int main()

{

int s = 0;

for (int n=1; n<=100; n++) // n – локальная

s+=n; // переменная цикла

printf(“\ns=%d”, s);

return 0; }

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

Этот же цикл можно организовать без тела цикла:

for (int n=1; n<=100; s+=n++);

Эту же задачу можно решить, суммируя числа справа налево, то есть от 100до1:

for (int n=100; n>=1; s+=n--);

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

for (;;);

Это бесконечный цикл. Точки с запятой в скобках должны обязательно присутствовать, даже если между ними ничего нет.

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

for (puts(“Славное”); puts(“море -”); puts(“Байкал!”))

puts(“священный”);

На экран будет выведена бесконечная последовательность:

Славное

море -

священный

Байкал!

море -

священный

Байкал!

море -

священный

Байкал!

. . . . .

Условие выполнения цикла проверяется передкаждой итерацией, а приращение параметра цикла может бытьпеременным, поэтому, в отличие отПаскаля, вСидопускается изменение значения параметра цикла и условия продолжения цикла в теле этого же цикла. Может отсутствовать и сам оператор, выполняемый в цикле:

for (int count=0; getch()!=’\n’; count++);

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

В одном цикле for можно использовать одновременно несколько параметров цикла, которые при инициализации разделяютсязапятыми:

#define N 100

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]