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

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

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

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

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

{

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

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

}

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

Если начальные условия таковы, что при входе в цикл <условие> ложно, то <тело_цикла> и <итерация> не выполнятся ни одного раза.

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

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

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

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

do

{

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

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

}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Задача 1.

1. Постановка задачи: разработать алгоритм вычисления и вывода значения суммы членов ряда = 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. Блок-схема алгоритма задачи:

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. Постановка задачи: разработать алгоритм вычисления и вывода значения частичной суммы членов ряда + … с точностью ε=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. Блок-схема алгоритма задачи:

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

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

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

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

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

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

;

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

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

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

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

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. Блок-схема алгоритма задачи:

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

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

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

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: