Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Циклы с постусловием




У циклов с постусловием (циклов типа ДО) проверка условия продолжения цикла производится после выполнения операторов, составляющих тело цикла:

 

ВЫПОЛНЯТЬ

Цепочка

ДО (условие);

 

Такой цикл повторяется до тех пор, пока условие истинно. Выполнение цикла заканчивается, если операторы цепочки изменяют значения переменных, входящих в условие, и оно становится ложным.

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

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

В Си цикл с постусловием реализован оператором цикла do:

Do

{

Оператор;

Оператор;

Оператор;

......

Оператор;

}

While (условие);

где do – служебное слово выполнять,

while – служебное слово пока.

Внимание! После слова do точка с запятой не ставится!

Перед закрывающей фигурной скобкой }поставить точку с запятой!

Действия оператора do:

1) выполняется оператор (цепочка),

2) проверяется выполнение условия, стоящего после слова while,

3) если оно истинно, то цикл повторяется,

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

Примеры

1. Вычислить сумму ста первых натуральных чисел:

s = 1 + 2 + 3 + … + 98 + 99 + 100

Пусть s – искомая сумма,

i – очередное число (изменяется от 1 до 100).

Тогда алгоритм решения задачи можно описать следующим образом:

a) обнуляем сумму s = 0,

b) берем первое число: i = 1,

c) добавляем в сумму очередное число s = s + i,

d) как только очередное число станет больше ста, цикл заканчивает работу.

Представим этот алгоритм так:

s = 0;

i = 1;

ВЫПОЛНЯТЬ

s = s + i;

i = i + 1;

ПОКА (i <= 100);

Программа


#include <stdio.h>

#include <conio.h>

#include <math.h>

Int main()

{

int i=1, s=0;

Do

{

s+=i;

i++;

}

while (i <= 100);


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

Return 0;

}

Результат решения задачи:

S = 5050 i = 101

 

Второй вариант решения задачи:

Do

s+=i++;

while (i <= 100);


2. Вычислить сумму s всех цифр заданного натурального числа n

Пусть s – искомая сумма,

i – очередная цифра числа.

Тогда алгоритм решения задачи можно описать следующим образом:

1) обнуляем сумму s = 0,

2) берем последнюю цифру числа, для чего определяем остаток от деления исходного числа на 10: i = n % 10,

3) добавляем в сумму найденную цифру: s = s + i,

4) уменьшаем число в 10 раз: n = n / 10,

5) повторяем цикл до тех пор, пока n!= 0.

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

Программа

#include <stdio.h>

#include <conio.h>

#include <math.h>

Int main()

{

int i, n, s = 0;

printf(“\nВведите целое положительное число:”);

scanf(“%d”, &n);

Do

{

i = n % 10;

s+=i;

n /= 10;

}

while (n!= 0);

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

Return 0;

}

3. Ввести с клавиатуры по одному последовательность целых чисел (конец последовательности – число 0). Определить их сумму, максимальное и минимальное число, количество введенных чисел и их среднее арифметическое.

Пусть s – искомая сумма,

min, max – минимальное и максимальное из введенных чисел,

count – количество введенных чисел,

sred – среднее арифметическое,

n – очередное число.

Тогда алгоритм решения задачи можно описать следующим образом:

a) обнуляем сумму s = 0,

b) вводим первое число n, и если оно не равно нулю, то

· принимаем его значение за min и max

· количество введенных чисел count = 1

· увеличиваем сумму на введенное число s = s + n

· входим в цикл ввода:

c) вводим очередное число n, и если оно не равно нулю, то

· количество введенных чисел увеличиваем на 1: count = count+1

· увеличиваем сумму на введенное число s = s + n

· если оно меньше min, то min = n,

· если оно больше max, то max = n,

d) повторяем цикл до тех пор, пока n # 0 – это и будет условием продолжения цикла.

Создадим интерфейс этой задачи – взаимодействие программы с пользователем, то есть что должно выводиться на экран:

Первое число: 3

Очередное число: 8

Очередное число: 1

Очередное число: -2

Очередное число: 0

Сумма = 10

Количество чисел = 4

min = -2

max = 8

Среднее арифметическое = 2.50

Программа

#include <stdio.h>

#include <conio.h>

#include <math.h>

Int main()

{

int min, max, n, count = 0;

float sred, s = 0.0;

printf(“\nВведите первое число:”);

scanf(“%d”, &n);

if (n==0)

Return 0;

min = n; // за минимум и максимум принимаем

max = n; // первое введенное число

count = 1; // введено одно число

s = n;

Do

{

printf(“\nВведите очередное число:”);

scanf(“%d”, &n);

if (n==0)

Break;

count++;

s += n;

if (n > max)

max = n;

if (n < min)

min = n;

}

while (n!= 0);

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

printf(“\nКоличество чисел = %d”, count);

printf(“\nmin = %d”, min);

printf(“\nmax = %d”, max);

sred = s / count;

printf(“\n Среднее арифметическое = %6.2f”,sred);

Return 0;

}


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








4. Вычислить s – сумму членов бесконечного ряда:

s = 1 + x/ 1! + x2 / 2! + x3 / 3! + … + xk / k! + …

с погрешностью ε0.

Каждый последующий член ряда можно определить через предыдущий, используя рекуррентную формулу:

yk+1 = yk·x / k

Текущая погрешность вычислений ε определяется последним просуммированным членом ряда:

ε = |yn|

Эту погрешность необходимо сравнить с заданной погрешностью ε0 для реализации условия окончания суммирования:

– если ε > ε0, то заданная точность еще не достигнута, и суммирование ряда необходимо продолжить, прибавив к имеющейся сумме еще один член,

– если ε <= ε0, то заданная точность достигнута, и суммирование необходимо прекратить.

Пусть s – искомая сумма,

y – очередной член ряда,

k – номер члена ряда,

eps_0 – заданная точность вычислений,

x – вводимый аргумент.

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

Программа


#include <stdio.h>

#include <conio.h>

#include <math.h>

Int main()

{

const float 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_шагшаг его изменения (не только целое число).

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






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных