Оператор цикла с постусловием.

Постусловие вычисляется и проверяется после выполнения операторов, составляющих тело цикла, и если значение логического выражения, определяющего условие работы цикла (в языке Си), истинно (=1), то цикл продолжает выполняться до тех пор, пока это значение не станет ложным (=0). В любом случае тело цикла с постусловием выполнится, по крайней мере, один раз.

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

[<инициализация>; ]

do

{

<тело_цикла>;

[<итерация>;]

}

while (<условие>);

<условие> – логическое выражение, определяющее условие повторения тела цикла; <инициализация> и <итерация> – необязательны.

II. Контрольные вопросы.

1. Что такое цикл?

2. Какие существуют два типа циклов?

3. Структура оператора цикла с параметром.

4. Как работает цикл с параметром?

5. Указать особенности оператора цикла с параметром в языке Си?

6. Какие циклы относятся к итерационным?

7. Привести структуру оператора цикла с предусловием.

8. Как работает цикл с предусловием?

9. Какую структуру имеет оператор цикла с постусловием?

10. Как работает цикл с постусловием?

III. Практическая часть.

1. Выполнение общего задания.

Задача 1.

1. Постановка задачи:разработать алгоритм вычисления и вывода значения суммы членов ряда Оператор цикла с постусловием. - student2.ru = x+x2+x3+…+xn-1+xn для 0<x≤5 при n=8. Написать программу, реализующую разработанный алгоритм.

2. Математическая модель и описательный алгоритм задачи:

• ввести значение переменной x;

• проверить условие: если 0<x≤5, то продолжить выполнение алгоритма, иначе вывести соответствующее сообщение и выйти из алгоритма;

• для формирования суммы использовать переменную S, изначально ее обнулить – S=0;

• для получения степени переменной x использовать переменную xs, изначально xs=x;

• в цикле c параметром (количество повторений = n) каждый раз значение S увеличивать на значение xs, а значение xs увеличивать в x раз для получения степени x;

• после выхода из цикла вывести значение переменной S.

3. Блок-схема алгоритма задачи:

Оператор цикла с постусловием. - student2.ru

4. Текст программы:

#include <stdio.h>

#include <conio.h>

int main()

{

const n=8;

float x,xs,S;

printf(“\nВвести x=”);

scanf(“%d”,&x);

if (x>0 && x<=5)

{

S=0; xs=x;

for (int i=1;i<=n;i++)

{

S=S+xs; xs=xs*x;

}

printf(“\nS=%d”,S);

}

getch(); return 0;

}

5. Тестирование:

Теоретически рассчитанное выходное значение Практически полученное выходное значение
Тест 1: входные данные: x=-2 (не удовлетворяют условию 0<x≤5)
выход из программы выход из программы
Тест 2: входные данные: x=1
S=8 S=8.000000
Тест 3: входные данные: x=10 (не удовлетворяют условию 0<x≤5)
выход из программы выход из программы

Задача 2.

1. Постановка задачи: разработать алгоритм вычисления и вывода значения частичной суммы членов ряда Оператор цикла с постусловием. - student2.ru + … с точностью ε=10-4 (суммировать пока очередной член ряда по модулю не будет ≤10-3) для π/3≤x≤2ּπ/3. Написать программу, реализующую разработанный алгоритм.

2. Математическая модель и описательный алгоритм задачи:

• значение переменной x изначально обнулить (x=0) перед входом в цикл с предусловием x≤π/3 или x≥2∙π/3 с тем, чтобы войти в цикл и вводить значение в переменную x до тех пор, пока оно не будет удовлетворять заданному условию: π/3<x<2∙π/3;

• для формирования суммы использовать переменную S, изначально ее обнулить (S=0);

• изначально коэффициент i=1 при переменной x;

• в цикле c предусловием |sin(i∙x)/i| ≥ε (проверяется очередной член ряда по модулю) формировать сумму членов ряда – S=S+sin(i∙x)/i и коэффициент i увеличивать на 1 для следующей итерации;

• после завершения цикла вывести значение переменной S и количество итераций i-1 (сколько раз повторился цикл, т.е. сколько членов ряда суммировалось, чтобы получить частичную сумму для заданных условий; количество итераций равно i-1, так как увеличение i=i+1 происходит для следующего прохода цикла, который, возможно, не выполнится).

3. Блок-схема алгоритма задачи:

Оператор цикла с постусловием. - student2.ru

4. Текст программы:

#include <stdio.h>

#include <conio.h>

#include <math.h>

int main()

{

const float p=3.14, e=.0001;

int i=1;

float S,x=0;

while (x<=p/3 || x>=2*p/3)

{

printf(“\nВвести x = ”);

scanf(“%f”,&x);

}

S=0;

while (fabs(sin(i*x)/i)>=e)

{

S=S+sin(i*x)/i;

i++;

}

printf(“\n S = %f, количество итераций = %d”,S,i-1);

getch();

return 0;

}

5. Тестирование:

Теоретически рассчитанное выходное значение Практически полученное выходное значение
Тест: входные данные: x=1,57 (≈π/2)
S=?; кол-во итер.=? S=?; кол-во итер.=?

Задача 3.

1. Постановка задачи: разработать алгоритм вычисления значения частичной суммы членов ряда Фибоначчи Оператор цикла с постусловием. - student2.ru + … для -3<x≤2 и оценить скорость сходимости, найдя число слагаемых, необходимое для достижения заданной погрешности ε=10-4. Вывести значения суммы и числа слагаемых. Написать программу, реализующую разработанный алгоритм.

2. Математическая модель и описательный алгоритм задачи:

• в цикле с постусловием x≤-5 или x≥5 вводить значение в переменную x,пока не будет -3<x≤2;

• для введенного значения переменной х сначала вычисляется левая часть равенства при использовании встроенной функции exp(x), затем вычисляется частичная сумма ряда правой части Оператор цикла с постусловием. - student2.ru до тех пор, пока она не будет отличаться от левой части менее, чем на заданную погрешность ε (использовать константу e=10-4) или количество итераций будет больше некоторого заданного значения limit=30;

• для формирования суммы использовать переменную S, изначально S=1, так как первый член ряда=1;

• для вычисления каждого слагаемого ряда Оператор цикла с постусловием. - student2.ru требуется возведение в степень (достаточно трудоемкая операция) и вычисление факториала (дополнительный цикл), поэтому в случаях степенной функции и факториала для упрощения вычисления суммы ряда следует использовать рекуррентную формулу, которая позволяет получить следующий член ряда через предыдущий, т.е. каждое очередное слагаемое можно рекуррентно вычислить через предыдущее:

Оператор цикла с постусловием. - student2.ru ; Оператор цикла с постусловием. - student2.ru

• изначально очередной член ряда – переменная a=1 и количество итераций – переменная i=0;

• для вычисления частичной суммы ряда организовать цикл с постусловием |y-S|≥e и i≤limit, в котором увеличивать число итераций i=i+1, вычислять следующий член ряда a=a∙x/i и формировать сумму S=S+a;

• после выхода из цикла проверить, по невыполнению какого из двух условий завершился цикл: если i>limit, то вывести информацию «точность не достигнута»; иначе вывести значение S и количество итераций i.

3. Блок-схема алгоритма задачи:

Оператор цикла с постусловием. - student2.ru

4. Текст программы:

#include <stdio.h>

#include <соnio.h>

#include <math.h>

int main()

{

const float e=.0001;

const limit=30;

int i=0;

float y,a,S,x;

do

{

printf(“\nВвести x = ”);

scanf(“%f”,&x);

}

while (x<=-3 || x>2);

y=exp(x);

S=1; a=1;

do

{

i++;

a=a*x/i;

S=S+a;

}

while (fabs(y-S)>=e && i<=limit);

if (i>limit) printf(“\n точность не достигнута”);

else

{

printf(“\n S = %f\t y = %f”,S,y);

printf(“\n количество итераций = %d”,i);

}

getch();

return 0;

}

5. Тестирование:

Теоретически рассчитанное выходное значение Практически полученное выходное значение
Тест 1: входные данные: x=-1.5 (-3<x≤2)
S=?; количество итераций=? y=?; S=?; количество итераций=?
Тест 2: входные данные: x=2 (-3<x≤2)
S=?; количество итераций=? y=?; S=?; количество итераций=?
Тест 3: входные данные: x=-3 (-3<x≤2)
точность не достигнута точность не достигнута

Задача 4.

1. Постановка задачи: разработать алгоритм суммирования n введенных чисел и вывода значения суммы.

2. Математическая модель и описательный алгоритм задачи:

• используя цикл с постусловием n≤0 (количество введенных чисел не может быть меньше или равно нуля), ввести количество вводимых чисел, чтобы n>0;

• для формирования суммы значение s обнулить (s=0);

• в цикле c параметром (количество повторений = n) каждый раз вводить значение a и формировать сумму: s=s+a;

• после выхода из цикла вывести значение переменной s.

3. Блок-схема алгоритма задачи:

Оператор цикла с постусловием. - student2.ru

4. Текст программы: написать самостоятельно!

5. Тестирование: произвести самостоятельно!

Теоретически рассчитанное выходное значение Практически полученное выходное значение
Тест 1: входные данные: ?
S=? S=?
Тест 2: входные данные: ?
S=? S=?

2. Выполнение индивидуального задания.

Постановка задачи.

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

2. Входные и выходные данные.

Все действующие в программе переменные должны быть объявлены.

Недопустимо задавать исходные (входные) данные с помощью операторов присваивания. Ввод данных с клавиатуры должен предваряться выводом соответствующего сообщения.

3. Математическая модель и описательный алгоритм задачи.

Блок-схема алгоритма.

Представить циклический алгоритм в виде блок-схемы.

Текст программы.

Разработанный алгоритм реализуется на языке программирования высокого уровня Cи.

Тестирование.

Результаты тестирования представить в виде таблицы.

IV. Требования к разработке программы.

Программа должна содержать следующие три составные части:

  • ввод исходных данных;
  • обработку данных;
  • вывод результатов.

Произвести отладку и тестирование разработанной программы.

V. Требования к защите индивидуальных заданий.

ИМЕТЬ отчет, который включает:

1. постановку задачи;

2. математическую модель и описательный алгоритм задачи;

3. блок-схему алгоритма;

4. текст программы;

5. результаты тестирования.

ЗНАТЬ ответы на контрольные вопросы.

VI. Варианты индивидуальных заданий.

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

Вариант №1

1. Найти и вывести все двузначные числа, в которых есть цифра n или само число делится на n.

Вариант №2

1. Из чисел от 10 до 99 вывести те, сумма цифр которых равна n, где 0<n<18.

Вариант №3

1. Вывести количество трехзначных натуральных чисел, сумма цифр которых равна заданному числу n.

Вариант №4

1. Среди двузначных чисел найти и вывести те, сумма квадратов цифр которых делится на 13.

Вариант №5

1. Найти и вывести двузначные числа такие, что если к сумме цифр этого числа прибавить квадрат этой суммы, то получится это число.

Вариант №6

1. Найти и вывести сумму целых положительных чисел из интервала от a до b, кратных 4.

Вариант №7

1. Для натурального n вывести все его натуральные делители.

Вариант №8

1. Сумма цифр трехзначного числа кратна 7, само число также делится на 7. Найти и вывести все такие числа.

Вариант №9

1. Среди четырехзначных чисел найти и вывести те, у которых все 4 цифры различны.

Вариант №10

1. Определить, является ли введенное число n совершенным, т.е. равным сумме всех своих делителей, не превосходящих само число; вывести соответствующую информацию.

Вариант №11

1. Определить и вывести все числа, кратные введенным a и b, меньшие a∙b.

Вариант №12

1. Определить, являются ли введенные натуральные числа a и b взаимно простыми, т.е. не имеющими общих делителей, кроме единицы.

Вариант №13

1. Вычислить и вывести для введенного натурального числа n сумму S=1+22+33+…+nn, не используя стандартную функцию возведения в степень.

Вариант №14

1. Получить и вывести все простые числа p, удовлетворяющие неравенству a<p<b, где введенные а, b (а<b) – натуральные числа.

Вариант №15

1. Для введенного натурального числа s, выражающего площадь, найти и вывести стороны, выраженные натуральными числами, всех таких прямоугольников, площадь которых равна s.

Вариант №16

1. Найти и вывести все двузначные числа, в которых есть цифра n или само число делится на n.

Вариант №17

1. Из двузначных чисел вывести те, сумма цифр которых равна n, где 1<n<11.

Вариант №18

1. Вывести количество двухзначных натуральных чисел, сумма цифр которых равна заданному числу n.

Вариант №19

1. Среди трехзначных чисел найти и вывести те, сумма квадратов цифр которых делится на 35.

Вариант №20

1. Найти и вывести двузначные числа такие, что если к сумме цифр каждого из них прибавить квадрат этой суммы, то можно получить само число.

Вариант №21

1. Найти и вывести сумму целых положительных чисел из диапазона от a до b, кратных 3.

Вариант №22

1. Для натурального n вывести все его простые делители.

Вариант №23

1. Найти и вывести все трехзначные числа, сумма цифр которых кратна 3, а само число делится на 3.

Вариант №24

1. Среди трехзначных чисел найти и вывести те, у которых все 3 цифры различны.

Вариант №25

1. Определить, является ли введенное число n совершенным, т.е. равным сумме всех своих делителей, не превосходящих само число; вывести соответствующую информацию.

Таблица 3.

Вычислить частичную сумму ряда с точностью e:

N Формула частичной суммы ряда N Формула частичной суммы ряда
1 Оператор цикла с постусловием. - student2.ru , e=10-5, Оператор цикла с постусловием. - student2.ru Оператор цикла с постусловием. - student2.ru , e=0.5∙10-5, Оператор цикла с постусловием. - student2.ru
Оператор цикла с постусловием. - student2.ru , e=10-4, Оператор цикла с постусловием. - student2.ru Оператор цикла с постусловием. - student2.ru , e=10-5, Оператор цикла с постусловием. - student2.ru
Оператор цикла с постусловием. - student2.ru , e=10-6, Оператор цикла с постусловием. - student2.ru Оператор цикла с постусловием. - student2.ru , e=10-4, Оператор цикла с постусловием. - student2.ru
Оператор цикла с постусловием. - student2.ru , e=0.5∙10-5, Оператор цикла с постусловием. - student2.ru Оператор цикла с постусловием. - student2.ru , e=10-4, Оператор цикла с постусловием. - student2.ru
Оператор цикла с постусловием. - student2.ru , e=10-3, Оператор цикла с постусловием. - student2.ru Оператор цикла с постусловием. - student2.ru , e=0.5∙10-5
Оператор цикла с постусловием. - student2.ru , e=0.2∙10-5, Оператор цикла с постусловием. - student2.ru Оператор цикла с постусловием. - student2.ru , e=10-3, Оператор цикла с постусловием. - student2.ru
Оператор цикла с постусловием. - student2.ru , e=10-4, Оператор цикла с постусловием. - student2.ru Оператор цикла с постусловием. - student2.ru , e=10-5, Оператор цикла с постусловием. - student2.ru
15 Оператор цикла с постусловием. - student2.ru , e=10-4, Оператор цикла с постусловием. - student2.ru Оператор цикла с постусловием. - student2.ru , e=10-4, Оператор цикла с постусловием. - student2.ru
Оператор цикла с постусловием. - student2.ru , e=10-5, Оператор цикла с постусловием. - student2.ru Оператор цикла с постусловием. - student2.ru , e=0.2∙10-4, Оператор цикла с постусловием. - student2.ru
Оператор цикла с постусловием. - student2.ru , e=10-4, Оператор цикла с постусловием. - student2.ru Оператор цикла с постусловием. - student2.ru , e=10-5
Оператор цикла с постусловием. - student2.ru , e=10-5, Оператор цикла с постусловием. - student2.ru Оператор цикла с постусловием. - student2.ru , e=10-4, Оператор цикла с постусловием. - student2.ru
Оператор цикла с постусловием. - student2.ru , e=10-5, Оператор цикла с постусловием. - student2.ru Оператор цикла с постусловием. - student2.ru , e=10-4, Оператор цикла с постусловием. - student2.ru
Оператор цикла с постусловием. - student2.ru , e=10-5, Оператор цикла с постусловием. - student2.ru    

Лабораторная работа №8

Тема

Наши рекомендации