Вы находитесь на странице: 1из 11

Операторы цикла в языке программирования Си++

Цель работы: ознакомиться с циклическими алгоритмами и операторами,


реализующими эти алгоритмы. Освоить особенности применения кождого оператора.
Задание: Нарисовать блок-схему задачи согласно варианту. Составить программы с
использованием всех операторов цикла.
1. Теоретические сведения
Циклический процесс, или просто цикл, – это повторение одних и тех же действий.
Последовательность действий, которые повторяются в цикле, называют телом цикла.
Один проход цикла называют шагом, или итерацией. Переменные, которые изменяются
внутри цикла и влияют на его окончание, называются параметрами цикла.
Понятие итерации в математике и программировании несколько отличаются. В
математике под итерацией понимают повторение какой-либо математической операции,
использующее результат предыдущей аналогичной операции. В программировании
итерация — это организация обработки данных, при котором действия повторяются
многократно, не приводя при этом к вызовам самих себя.
При написании циклических алгоритмов следует помнить следующее. Во-первых,
чтобы цикл имел шанс когда-нибудь закончиться, содержимое его тела должно
обязательно влиять на условие цикла. Во-вторых, условие должно состоять из корректных
выражений и значений, определенных еще до первого выполнения тела цикла.
В языке С++ для удобства программиста предусмотрены три оператора, реализующих
циклический процесс: (цикл с предусловием) while, (цикл с постусловием) do … while и
(цикл с параметром) for.

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


Описание:
while (выражение) оператор;
здесь while – зарезервированное слово языка С++, выражение – логическая константа,
переменная или логическое выражение, оператор – любой допустимый оператор языка.
Блок-схема приведена на рис.1 и рис.3.
Работает оператор while следующим образом. Вначале вычисляется значение
выражения. Выполняется оператор до тех пор, пока значение выражения в скобках
истинно. Выражение вычисляется перед каждой итерацией цикла. Когда значение
выражения ложно, цикл while заканчивается и управление передается оператору,
следующему за телом цикла. Если выражение ложно с самого начала, оператор не
выполняется ни разу.
В теле цикла должны выполняться действия, в результате которых меняется значение
управляющего выражения. В противном случае можем получить бесконечный цикл.

Рисунок 1. Алгоритм циклической структуры с предусловием


Если в цикле надо выполнить более одного оператора, необходимо использовать
составной оператор:
while (условие)
{
оператор_1;
оператор_2;
...
оператор_n;
};
Рассмотрим пример 1. Пусть необходимо вывести на экран значения функции y=esin
x
cosx на отрезке [0;π] с шагом 0.1. Применим цикл с предусловием:
#include <stdio.h>
#include <cmath>
using namespace std;
int main()
{
const float pi=3.14159;
float x, y ,h;
printf("введите шагh \n");
scanf("%f",&h);
//Присваивание параметру цикластартового значения.
x=0;
//Цикл с предусловием.
while (x<=pi) /*Пока параметр цикла не превышает конечное значение, выполнять тело
цикла.*/
{
//Вычислить значение y.
y=exp(sin(x))*cos(x);
//Вывод на экран пары х и y.
printf("x= %4.1f ; y=%7.4f \n", x,y);
//Изменение параметра цикла -переход к следующему значению x.
x+=h;
} //Конец цикла.
return 0;
}
В результате работы данного фрагмента программы на экран последовательно будут
выводиться сообщения со значениями переменныхxиy:
x= 0; y=1.0000
x= 0.1; y=1.0995
...
x= 3.1; y=-1.0416

Пример 2. Вычислить сумму натуральных четных чисел, не превышающих N


Входные данные: N – целое число.
Выходные данные: S – сумма четных чисел.
Промежуточные переменные: i – параметр цикла, принимает
значения 2, 4, 6, 8 и так далее, также имеет целочисленное значение. При сложении
нескольких чисел необходимо накапливать результат в определенном участке памяти,
каждый раз считывая из этого участка предыдущее значение суммы и прибавляя к нему
следующее слагаемое. Для выполнения первого оператора накапливания суммы из
участка памяти необходимо взять такое число, которое не влияло бы на результат
сложения. Перед началом цикла переменной, предназначенной для накапливания суммы,
необходимо присвоить значение нуль (s=0).
Блок-схема решения этой задачи представлена на рис. 2.Так как параметр цикла i
изменяется с шагом 2, в блок–схеме, построенной для решения данной задачи,
использован цикл с предусловием, который реализуется при составлении программы с
помощью оператора while
Отрывок программы:
long int s=0;
int i=2;
int N;
printf("введите целое число n \n");
scanf("%i",&N);

while (i<=N)
{
s +=i; // увеличение значения s на i
i +=2; //
}
//Вывод на экран s.
printf("s= %7ld ", s);

Рис.2. Алгоритм
вычисления суммы
четных науральных чисел
Оператор цикла с параметром for
Операторы цикла с условием обладают значительной гибкостью, но не слишком удобны
для организации «строгих» циклов, которые должны быть выполнены заданное число раз.
Оператор цикла с параметромfor используется именно в таких случаях:
for (выражение 1; выражение 2; выражение 3 ) оператор;
где оператор – любой оператор языка, выражение 1 - выражение задающее начальное
значение параметра цикла, выражение 2 - выражение задающее условие окончания цикла,
выражение 3 - выражение задающее закон изменения параметра цикла.
В случае если тело цикла состоит более чем из одного оператора, необходимо
использовать составной оператор:
for (i= in;i<ik ; i+=dx)
{
оператор_1;
оператор_2;
...........
оператор_n;
}
Переменную i называют параметром цикла. Переменные in и ik — диапазон изменения
параметра цикла: in — начальное значение, а ik — конечное значение параметра цикла.
Шаг изменения цикла for всегда постоянен и равен интервалу между двумя ближайшими
значениями типа параметра цикла.
Опишем (рис.3) алгоритм работы цикла for:
1. Параметру цикла i присваивается начальное значение in.
2. Если значение параметра цикла превосходит конечное значение (i>ik), то цикл
завершает свою работу. В противном случае выполняется пункт 3.
3. Выполняется оператортела цикла.
4. Значение параметра цикла i изменяется на соответствующий шаг dx и осуществляется
переход к п.2 и т. д.
Понятно, что этот алгоритм представляет собой цикл с предусловием.
Рисунок 3. Алгоритм работы цикла for
В дальнейшем, чтобы избежать создания слишком громоздких алгоритмов, в блок-схемах
цикл for будем изображать так, как показано на рис. 4.
Фрагмент программы, приведенный далее, демонстрирует применение цикла for:

Рисунок 4. Представление цикла for с помощью блок-схемы

Если шаг изменения параметра цикла равен единице, его в блок-схемах можно не
указывать.
//Вывод на экран чисел от 1 до 10.
for (int i=1; i<=10; i++) cout<<i<<"\n";
//Вывод на экран чисел от 10 до -10.
for (int i=10 ; i<=-10;i--)cout<<i<<"\n";
//Вывод на экран символов от a до r.
for (char c='a' ; c<= 'r';c++) cout<<c<<"\n";
Вернемся к задаче вывода значений функции y= e sin x cos xна отрезке [0;π] с шагом 0.1.
Как видим, здесь количество повторений цикла явно не задано. Однако это значение,
можно легко вычислить. Предположим, что параметр цикла х принимает значения в
диапазоне от xn до xk, изменяясь с шагом h, тогда количество повторений тела цикла
можно определить по формуле:

n= (xk-xn)/h
округлив результат деления до целого числа. Следовательно, фрагмент программы вывода
значений функции y= e sin x cos xна отрезке [0;π] с шагом 0.1 будет иметь вид:
int i,n;
float x, xk, xn, y;
//Количество повторений цикла:
xk=pi, xn=0, h=0.1;
n=(xk-xn)/h;
n=round(n)+1; // для использования функции округления round надо подключить
библиотеку stdlib.h
x=0; //Начальное значение аргумента.
//Цикл с известным числом повторений,
//i – параметр цикла, изменяется от 1 до n с шагом 1.
for (i=1; p<=n; i++ ) //Начало цикла.
{
//Вычисление значения функции
y=exp(sin(x))*cos(x); //для соответствующего значения аргумента.
cout<<"x= ">>x<<" y= "<<y<<"\n";
x+=h; //Вычисление нового значения аргумента.
}

Задачу из примера 2 можно решить иначе, используя цикл for. Блок-схема решения этой
задачи представлена на рис. 5.
Отрывок программы приведен ниже.
{ long int s=0;
начало int N;
printf("введите целое число N \n");
N scanf("%i",&N);
for (int i=2; i<=N; i +=2)
i=2,N,2 s +=i; // увеличение значения s на i
printf("s= %7ld ", s);//Вывод на экран s.
s=s+i }
Результат:

конец

Рис.5. Алгоритм вычисления


суммы четных науральных
чисел с использованием
цикл for
1.3. Оператор цикла do-while
Если в цикле с предусловием проверка условия осуществляется до тела цикла, то в
цикле с постусловием условие проверяется после тела цикла (рис. 6). Сначала
выполняются операторы, являющиеся телом цикла, после чего проверяется условие, если
последнееистинно, то цикл повторяется. Выполнение цикла прекратится, если условие
станет ложным.
В языке С+++ цикл с постусловием реализован конструкцией:
do оператор while (выражение);
здесь do … while – зарезервированные слова языка С++.
.
В операторе do-while тело цикла выполняется по крайней
мере один раз. Тело цикла будет выполняться до тех пор, пока
выражение в скобках не примет ложное значение. Если оно
ложно при входе в цикл, то его тело выполняется ровно один
раз.
Если в теле цикла содержится более одной инструкции, то
операторы цикла заключаются в фигурные скобки.
Рис.6. Алгоритм цикла Если применить цикл с постусловием для создания
с постусловием программы, которая выводит значения функции y= e sin x cos x
на отрезке [0;π] с шагом 0.1 , получим:
#include <stdio.h>
#include <cmath>
using namespace std;
int main()
{
const float pi=3.14159;
float x, y ,h;
printf("введите шагh \n");
scanf("%f",&h);
x=0; //Присваивание параметру цикла стартового значения.
//Цикл с постусловием.
do
{
y=exp(sin(x))*cos(x); //Вычислить значение y.

printf("x= %4.1f ; y=%7.4f \n", x,y); //Вывод на экран пары х и y.


x+=h; //Изменение параметра цикла - переход к следующему значению x.
}
while (x<=pi); /*Пока параметр цикла не превышает конечное значение, выполнять тело
цикла.*/
return 0;
}
Пример выполнения работы

Написать программу вывода на экран таблицы значений функции для x∋ [1.5, 5] с


шагом dx = 0,5.
#include <iostream.h>
#include <iomanip.h>
int main() {
double s, x, x0, xk, dx;
int k, i;
cout << "Vvedite x0, xk, dx, k:" << endl;
cin>>x0>>xk>>dx>>k;
cout << "\tx \t : \t y" << endl;
x = x0;
do {
s = 0;
for (i = 1; i <= k; i++)
s += i*x;
cout << setw(15) << x << setw(15) << s << endl; // Вывод таблицы
x += dx; // Изменение значения x на величину шага dx
}
while (x <= xk); // Проверка условия продолжения цикла по x
cout << endl; // Переход на новую строку
return 0;
}
Результат выполнения программы:
Заданиe
1. Задание взять из таблицы 1 и таблицы 2 согласно варианту.
2. Разработать блок-схемы алгоритма.
3. Написать и отладить программы.
Задание 1 . Вывести на экран таблицу значений функции F(x) для x [x0 , xn] с шагом h,
используя все три вида оператора цикла (for, while, do while)
Таблица 1
Задание 2. Вычислить значение Y, используя вложенные циклы
Таблица 2
№ Задание
варианта
3 3

1. y = ∏ ( j ∑ ( j +k ))
j= 1 k= 1

( )
3

2. ∏ ( j2+i2 )
y =∑ 1i +
3
j=1

i=1 i
3
∑ (k+ j)
3. y=∏
3
k =1
2
j=1 j

( )
3
i+ ∑ ( i + j )
4. 3
y =∏ j =1

i =1 i2

( )
3 3
5. y =∑ i⋅∏ ( i+3 j )
i =1 i =1

( )
3
i
y =∑ i−
6. i =1
3
∏ ( k +2)
k =1

( )
3 3
7. y =∏ 2+ a ∑ ( i +2 j )
j =1 i=1

( )
3
i
y =∏ 5+ 3
8. i =1
4 ∑ (i+ j)
j =1
№ Задание
варианта

( )
4
1+i
y =∑
9.
3
∏ ( i2 +2 j )
j=1

i =1
3
a
y =∏
10. j =1
3
∑ ( i2+ j2 )
i =1

( )
3
c
y =∑ i 2 +
11. i =1
3
∏ (i + ja )
j=1

( )
3
1+ m
y=∑
12. 3
∏ ( j +m )
m=1

j=1
3
1 i
y= ∑
13. a i=1
∏(
3
j+
i
)
j =1 b
3
1
y =∑ (i + )
14. i =1
3
∏ ( i+ j 2)
j =1

( )
3
a2 +i 2
y =∏
15. i =1
3
∑ ( j +i )
j =1

( )
3
a+ ∑ ( i + j )
16. 3
y =∏ j =1

i =1 a+b

( )
3
1
y =∑ +i 2
17.
3
i =1
∏ ( i2+ j )
j=1

( )
3 4
18. y= 1 ∏ 1 +c∑(i+ j)
a j=1 b i =1

( )
3
j +∏ ( i + j )
19. 1
4
y=
b
∑ i=1
j +5
j =1
1+с
y=
20.
( )
4 3
∏ j +2 ∑ ( k + j )
j=1 k =1

( )
3
j +1
y =∏
21. j =1
3
∑ ( i2+ j2 )
i =1

( )
3
1+i
y =∏ i 2 +
22.
3
i =1
∑ ( i+ j )
j=1

( )
3
a 2 + ∑ (i + j 2 )
23 3
y =a ∏ i −1

j =1 b+a

( )
3

24. 3
1
∏ ( a+i + j )
y =∑ + j=1

i =1 i b2
№ Задание
варианта
3
i + ∏ ( j 2 +i )
25. y =∑
3
j =1

j=1 5i

26.
У=

27.
У=

28.
У=

29.
У=

30.
У=

31.
У=

32.
У=

33.
У=

34.
У=

35.

36.

37.

38.
№ Задание
варианта

39.

40.

Вам также может понравиться