Управляющие операторы. Базовые конструкции структурного программирования. Лекция 5

Содержание

Слайд 2

Управляющие операторы. Ветвления

Операция условие
Условный оператор
Оператор выбора

Управляющие операторы. Ветвления Операция условие Условный оператор Оператор выбора

Слайд 3

Управляющие операторы. Циклы

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

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

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

Слайд 4

Управляющие операторы. Циклы

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

Управляющие операторы. Циклы Один проход цикла называется итерацией. Переменные, принудительно изменяющиеся в
использующиеся при проверке условия выхода из него, называются параметрами цикла.
Замечание:
Нельзя передавать управление извне внутрь цикла.
Выход из цикла возможен как при выполнении условия выхода, так и по специальным операторам передачи управления.

Слайд 5

Управляющие операторы. Циклы

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

Управляющие операторы. Циклы цикл с предусловием цикл с постусловием цикл с параметром

Слайд 6

Линейная программа

Задача: Идет k-я секунда суток. Определить, сколько целых часов (h) и

Линейная программа Задача: Идет k-я секунда суток. Определить, сколько целых часов (h)
целых минут (m) прошло с начала суток.
Сколько секунд в минуте?
Сколько минут в часе?
Сколько секунд в часе?
Как вычислить число полных часов? k=18125
h=k/3600
Как вычислить число полных минут?
m=(k%3600)/60
С чего начать программу?
объявить переменные
ввести значения секунд k
вычислить
вывести результат

1 мин. = 60 сек.

1 час = 60 мин.

1 час = 3600 сек.

int h,m; long k;

scanf ?

scanf (″%ld″, &k);

оператор присваивания

printf

целочисленное деление (5 ч)

Слайд 7

Линейная программа

#include
int main( )
{long k; int h, m;
printf("Введите текущее время в

Линейная программа #include int main( ) {long k; int h, m; printf("Введите
секундах:");
scanf("%ld", &k);
h=k/3600; m=(k%3600)/60;
printf("Это %d часов %d минут.\n", h, m);
}

Слайд 8

Операция условие

– единственная операция имеющая три операнда.
Формат операции:
выражение1 ? выражение2 : выражение3
Операция

Операция условие – единственная операция имеющая три операнда. Формат операции: выражение1 ?
реализует алгоритмическую структуру ветвления.
Действие: Сначала вычисляется значение выражения1, которое, как правило, представляет собой некоторое условие.
Если оно истинно, т.е. ≠0, то вычисляется выражение2 и полученный результат становится результатом операции. В противном случае в качестве результата берется значение выражения3.

Слайд 9

Операция условие

Примеры:
1. Вычисление абсолютной величины переменной Х можно организовать:
Y=X<0 ? –X :

Операция условие Примеры: 1. Вычисление абсолютной величины переменной Х можно организовать: Y=X
X;
2. Выбор большего значения из двух переменных a и b:
max=(a<=b) ? b : a;
3. Заменить большее значение из двух переменных a и b на 1:
(a>b) ? a : b =1;
Си/С++ позволяет ставить условную операцию слева от знака операции присваивания.

Слайд 10

Условный оператор

Формат условного оператора:
- полная форма
if (выражение) оператор1; else оператор2;
- неполная форма
if

Условный оператор Формат условного оператора: - полная форма if (выражение) оператор1; else
(выражение) оператор1;

; обязательна

в скобках

Слайд 11

Условный оператор

Выбор большего значения из двух переменных a и b:
- операция условие:
max=(a>b)

Условный оператор Выбор большего значения из двух переменных a и b: -
? a : b;
- полная форма условного оператора:
if (a>b) max=a; else max=b;
- неполная форма условного оператора:
max=b;
if (a>b) max=a;

Слайд 12

<Выражения>: некоторые примеры

if ( a + 7 ) оператор1; else оператор2;

if (

: некоторые примеры if ( a + 7 ) оператор1; else оператор2;
a > 7 && a < 3 )оператор1;else оператор2;

if ( a = b/7 ) оператор1; else оператор2;

if ( a == b/7 ) оператор1; else оператор2;

if ( ( a > 3 && a < 7 )
|| ( a > 9 && a < 11 )
|| ( a > 15 && a < 17 ) ) . . .

Слайд 13

Условный оператор

Пример:
Вычислить значение функции знак х:
y=sign(x)=

Условный оператор Пример: Вычислить значение функции знак х: y=sign(x)=

Слайд 14

Условный оператор

1)
С полным вложенным ветвлением:

if (x<=0)
if (x==0) y=0;
else y=-1;
else y=1;

Условный оператор 1) С полным вложенным ветвлением: if (x if (x==0) y=0; else y=-1; else y=1;

Слайд 15

Условный оператор

2)
С неполным ветвлением:

y=1;
if (x<=0)
if (x==0) y=0;
else y=-1;

Условный оператор 2) С неполным ветвлением: y=1; if (x if (x==0) y=0; else y=-1;

Слайд 16

Составной оператор

Для создания сложных управляющих композиций иногда последовательность операторов необходимо указывать как

Составной оператор Для создания сложных управляющих композиций иногда последовательность операторов необходимо указывать
один оператор.
Для этой цели служит составной оператор. Синтаксически составной оператор в C++ - последовательность операторов взятая в фигурные скобки
{ оператор1;
оператор2;

операторN;
}

Слайд 17

Составной оператор

Пример: преобразование дюймов в сантиметры и наоборот; предполагается, что указываются единицы

Составной оператор Пример: преобразование дюймов в сантиметры и наоборот; предполагается, что указываются
измерения вводимых данных, добавляя i для дюймов и c для сантиметров
{ const float fac = 2.54;
float x, in, cm;
char ch = 0;
cout << "Vvedite dliny and izmerenie "; cin>> x >> ch;
if (ch == 'i') // inch - дюймы
{ in = x;
cm = x*fac;
}
else if (ch == 'c') // cm - сантиметры
{ in = x/fac;
cm = x;
}
else in = cm = 0;
cout << " in="<< in <<" cm="<< cm < system ("Pause");
}

Слайд 18

Составной оператор

Составной оператор иногда необходимо использовать для нарушения порядка выполнения операторов.
Совет:

Составной оператор Составной оператор иногда необходимо использовать для нарушения порядка выполнения операторов.
Чтобы сделать программу более читабельной, рекомендуется группировать операторы и конструкции во вложенных операторах if, используя фигурные скобки.
int main( )
{ int t=2, b=7, r=3;
if (t>b)
{ if (b else r=t;
cout << " r="<< r < system ("Pause");
}

Получим r=2

Слайд 19

Составной оператор

Пример:
int main( )
{ int t=2, b=7, r=3;
if (t>b)
{

Составной оператор Пример: int main( ) { int t=2, b=7, r=3; if
if (b else r=t;
cout << " r="<< r < system ("Pause");
}
Если фигурные скобки опущены, то компилятор связывает каждое ключевое слово else с наиболее близким if, для которого нет else.
int main( )
{ int t=2, b=7, r=3;
if (t>b)
if (b else r=t;
cout << " r="<< r < system ("Pause");
}

Получим r=3

r=2

Слайд 20

Условный оператор

Пример:
Производится выстрел по мишени, изображенной на рисунке. Определить количество очков.

#include
using

Условный оператор Пример: Производится выстрел по мишени, изображенной на рисунке. Определить количество
namespace std;
int main()
{ float x, y; int kol;
cout << "Введите координаты выстрела \n";
cin >> x >> y;
if ( x*x + y*y < 1 ) kol = 2;
else if ( x*x + y*y < 4 ) kol = 1;
else kol = 0;
cout << "\n Очков: " << kol;
}

Слайд 21

Условный оператор

Составить условное выражение для:
Задача 2. Записать логическое выражение, принимающее значение 1,

Условный оператор Составить условное выражение для: Задача 2. Записать логическое выражение, принимающее
если точка лежит внутри заштрихованной области, иначе 0.

для 1-ой прямой:
точка (x1,y1) координаты (0,-1)
точка (x2,y2) координаты (2,2)

Уравнение прямой проходящей через две точки

Слайд 22

Условный оператор

для 1-ой прямой получим:
точка (x1,y1) координаты (0,-1)
точка (x2,y2) координаты (2,2)

Проверим:
при

Условный оператор для 1-ой прямой получим: точка (x1,y1) координаты (0,-1) точка (x2,y2)
(1,2) получим 2>=(3*1.)/2-1=0.5 Истина
при (2, -1) получим -1>=(3*2.)/2-1=2 Ложь

Полуплоскость

Слайд 23

Условный оператор

для 2-ой прямой получим:
точка (x1,y1) координаты (0,-1)
точка (x2,y2) координаты (-2,2)

Проверим:
при

Условный оператор для 2-ой прямой получим: точка (x1,y1) координаты (0,-1) точка (x2,y2)
(-1,2) : 2>=-(3*-1.)/2-1=0.5 Истина
при (-2, -1) :-1>=-(3*-2.)/2-1=2 Ложь

аналогично составить для остальных прямых. Пересечение полуплоскостей – конъюнкция
(y>=3*x/2-1 && y>=-3*x/2-1 && ??? && ???)

Слайд 24

Выражения …

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

Выражения … Выражение в условном операторе может быть сколь угодно сложным выражением.
этом необходимо помнить, что в С/С++ выражение считается ложным, если его значением является нуль, и истинным, если значение не нулевое.
Примеры:
if (x) printf("True\n");else printf("False\n");
аналогично записи:
if (x!=0) printf("True\n");else printf("False\n");

Слайд 25

Выражения …

Примеры:
if (x==1) printf("True\n"); else printf("False\n");
Если вместо операции == использовать =, то

Выражения … Примеры: if (x==1) printf("True\n"); else printf("False\n"); Если вместо операции ==
при х=0 получим значение True
if (x=1) printf("True\n"); else printf("False\n");
т.к. получим, что х всегда 1, то есть истинно

Слайд 26

Выражения …

Пример:
if (x= (x==y))printf("True\n");else printf("False\n");

Выражения … Пример: if (x= (x==y))printf("True\n");else printf("False\n");

Слайд 27

Выражения …

Примеры:
#include
#include
#include
int main( )
{char ch;
printf("Vvedite simbol : ");
if (ch

Выражения … Примеры: #include #include #include int main( ) {char ch; printf("Vvedite
= getch()== 'g')printf("True %d \n", ch);
else printf("False %d \n", ch);
system("Pause");
}

Консольный ввод/вывод

Ожидает нажатие клавиши

Нажата произвольная клавиша, отличная от ‘g’

Нажата клавиша ‘g’

Слайд 28

Оператор выбора

switch ( выражение ){
case константное_выражение_1: [список_операторов_1]
case константное_выражение_2: [список_операторов_2]
...
case константное_выражение_n: [список_операторов_n]
[default: операторы

Оператор выбора switch ( выражение ){ case константное_выражение_1: [список_операторов_1] case константное_выражение_2: [список_операторов_2]
]
}

В [ ] необязательная часть

Слайд 29

Оператор выбора

switch ( выражение ){
case константное_выражение_1: [список_операторов_1]
case константное_выражение_2: [список_операторов_2]
...
case константное_выражение_n: [список_операторов_n]
[default: операторы

Оператор выбора switch ( выражение ){ case константное_выражение_1: [список_операторов_1] case константное_выражение_2: [список_операторов_2]
]
}

Действие оператора:
1. Вычисляется выражение в скобках после switch.
2.Полученное значение последовательно сравнивается с константами после слова case, при первом совпадении значений выполняются все нижестоящие операторы после :
3.Если ни с одной из констант совпадения не произошло, то выполнятся операторы после слова default.
Замечание: 1. Cтрока default может отсутствовать.
2. Чтобы обойти выполнение операторов на последующих ветвях необходимо принять специальные меры, используя оператор выхода (break).

Слайд 30

Оператор выбора

Вычислить значение выражения a+b или a-b или a*b или a/b

int main()
{

Оператор выбора Вычислить значение выражения a+b или a-b или a*b или a/b
int a, b, res; char op;
cout << "\nВведите 1й операнд : "; cin >> a;
cout << "\nВведите знак операции : "; cin >> op;
cout << "\nВведите 2й операнд : "; cin >> b;
bool f = true;
switch (op)
{ case '+': res = a + b; break;
case '-': res = a - b; break;
case '*': res = a * b; break;
case '/': res = a / b; break;
default : cout <<"\n Неизвестная операция"; f = false;
}
if (f) cout << "\nРезультат : " << res;
}

Слайд 31

Оператор выбора

Убрали break

Оператор выбора Убрали break

Слайд 32

Оператор выбора

Иногда удобно использовать оператор выбора без break;
Для вычисления положительной степени числа

Оператор выбора Иногда удобно использовать оператор выбора без break; Для вычисления положительной
не выше 10:

int main()
{ float x, res=1; int n; bool f = true;
cout << "\nВведите x: "; cin >> x;
cout << "\nВведите степень не больше 10: "; cin >> n;
switch (n)
{ case 10: res = res*x;
case 9: res = res*x;

case 2: res = res*x;
case 1: res = res*x; break
default : cout <<"\n Неправильная степень"; f = false;
}
if (f) cout << "\nРезультат : " << res;
}

Слайд 33

Цикл с предусловием

Общий формат цикла с предусловием:
while (выражение) оператор;
Сначала вычисляется значение выражения

Цикл с предусловием Общий формат цикла с предусловием: while (выражение) оператор; Сначала
в скобках, если оно истинно (не 0), то выполняется оператор тела цикла, затем снова вычисляется выражение и все повторяется.
Если выражение ложно (значение выражения равно 0) цикл заканчивает работу, управление передается следующему после цикла оператору.
Вместо оператора – тела цикла можно использовать составной оператор, тогда формат имеет вид:
while (выражение)
{ оператор1;
оператор2;

}

Тело цикла может ни разу не выполниться, если выражение сразу принимает значение 0.

Слайд 34

Цикл с предусловием

Вычислить факториал заданного числа
F = N! = 1*2*3*…*N
int main()
{

Цикл с предусловием Вычислить факториал заданного числа F = N! = 1*2*3*…*N
long int F=1; int i=1, N;
cout << "Введите число N\n";
cin >> N ;
while ( i<=N )
{ F=F*i;
i++;
}
cout << "\n"<

Слайд 35

Цикл с предусловием

Тот же пример. Составной оператор тела цикла можно записать одним

Цикл с предусловием Тот же пример. Составной оператор тела цикла можно записать
оператором присваивания:
#include
#include
int main()
{ long int F=1; int i=1, N;
cout << "Vvedite N\n";
cin >> N ;
while ( i<=N )
F=F*i++;
cout << "\n"<}

Более лаконично: F*=i++;

Эквивалентно двум операторам: F=F*i; i=i+1;

Предложите еще вариант

while ( i++<=N ) F*=i;

Слайд 36

Сначала выполняется простой или составной оператор – тело цикла, а затем вычисляется

Сначала выполняется простой или составной оператор – тело цикла, а затем вычисляется
выражение. Если значение выражения не равно 0 (истинно), тело цикла выполняется еще раз, и так далее, пока значение выражения не станет равным нулю или в теле цикла не будет выполнен какой-либо оператор передачи управления. Тип выражения должен быть арифметическим или приводимым к нему.

do оператор while (выражение);

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

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

Слайд 37

#include
#include
int main(){
setlocale(LC_ALL,”rus”);
char answer;
do{ cout << "\nКупи слона! ";
cin >> answer;
}while

#include #include int main(){ setlocale(LC_ALL,”rus”); char answer; do{ cout cin >> answer;
(answer != 'y');
}

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

Вызов функции setlocale устанавливает русскую локаль, после чего русские константы выводятся в консольное окно по-русски при использовании и printf, и cout.

Для работы функции setlocale необходимо подключение заголовочного файла #include

Вводить значение переменной answer и печатать текст пока answer не равно y. Использовать библиотеку вывода кириллицы.

Слайд 38

Суммой ряда называется предел (lim) к которому стремится последовательность частичных сумм ряда,

Суммой ряда называется предел (lim) к которому стремится последовательность частичных сумм ряда,
если такой lim существует.
Известно, что знакопеременный ряд сходится, если |rn| > |rn+1|, где rn - n-й член ряда.
Доказано, что |s-sn| <= |rn+1|<Ɛ
s – сумма ряда
sn – сумма n первых членов ряда
Ɛ – точность
Найти значения суммы ряда для Ɛ = 0,1; 0,01; 0,001; 0,0001 …
Оформить вывод значения суммы ряда до 9-12 знаков после десятичной точки.
В общем случае вид n-го члена ряда задан в постановке задачи.
Проверить ряд на сходимость.

1 – 1/x + 1/x2 – 1/x3 + 1/x4 - ...

Пример - вычисление суммы ряда с заданной точностью

R= -R/x;

Слайд 39

#include
#include
int main(){
double x, S, R, eps;
cout << "\nВведите аргумент x

#include #include int main(){ double x, S, R, eps; cout cin >>
и точность eps: ";
cin >> x >> eps;
if ( fabs(x)>1 )
{ S=R=1;
while ( fabs(R)> eps )
{ R= -R/x;
S += R;
}
cout << "\nСумма ряда= " << S;
}
else cout << "\nРяд расходится!";
}

1 – 1/x + 1/x2 – 1/x3 + 1/x4 - ...

Пример - Вычисление суммы ряда

Слайд 40

Общий формат цикла:

for (выражение_1; выражение_2; выражение_3)
оператор;

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

Действие:
Вычисляется

Общий формат цикла: for (выражение_1; выражение_2; выражение_3) оператор; Оператор цикла с параметром
значение выражения_1, которое (как правило) определяет начальное значение параметра цикла.
Выражение_2 – условие выполнения цикла, которое (как правило) определяет конечное значение параметра цикла. Вычисляется значение выражения_2, если не 0 (истинно), то выполняется оператор – тело цикла. Если значение выражения_2 равно 0 (ложно), цикл заканчивает работу.
Выражение_3 (как правило) определяет изменение параметра цикла.
Перейти на шаг 2 – вычисление выражения_2, т.е. проверку условия.

Заголовок цикла с параметром

Тело цикла с параметром

n1 – начальное значение, n2 – конечное значение параметра цикла, h – шаг изменения параметра

в заголовке цикла ; не ставится

Слайд 41

for (выражение_1; выражение_2; выражение_3)
оператор;

Оператор цикла с параметром (счетный цикл)

for (выражение_1; выражение_2; выражение_3) оператор; Оператор цикла с параметром (счетный цикл)

Слайд 42

#include
int main()
{
int i; double a=2;
for (i=1; i<5; i++)
cout

#include int main() { int i; double a=2; for (i=1; i cout
<< a*i <<"\n";
}

Оператор цикла с параметром (счетный цикл)

Слайд 43

for (int i = 1, s = 0; i<=100; i++)
s +=

for (int i = 1, s = 0; i s += i;
i;

Оператор цикла с параметром (счетный цикл)

Что вычисляется в цикле?

Слайд 44

Оператор цикла с параметром (счетный цикл)

1. Если условие (т.е. выражение_2) изначально ложно

for

Оператор цикла с параметром (счетный цикл) 1. Если условие (т.е. выражение_2) изначально
( i = 1; i<1 ; i++)
оператор;

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

2. Если условие (т.е. выражение_2) всегда истинно

for ( i = 1; i>0 ; i++)
оператор;

цикл будет повторятся бесконечно (зацикливание).

Слайд 45

Оператор цикла с параметром (счетный цикл)

3. В операторе цикла с параметром может

Оператор цикла с параметром (счетный цикл) 3. В операторе цикла с параметром
отсутствовать одно из выражений или даже все, но при этом ; должны оставаться.

{ int i=1; double a=2;
for ( ; i<5 ; i++)
cout<}

а) если отсутствует выражение_1, то не выполняется инициализация параметра цикла. В этом случае инициализация параметра должна быть выполнена до заголовка цикла с параметром.

б) Если выражение_3 отсутствует в заголовке цикла, тогда изменение параметра цикла должно быть выполнено в теле цикла

i инициализируется до цикла

инициализация i в цикле не требуется

{ double a=2;
for (int i=1 ; i<5 ; )
{ cout<}

{ double a=2;
for (int i=1 ; i<5 ; )
cout<}

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

Слайд 46

Оператор цикла с параметром (счетный цикл)

{double a=2;
for (int i=1; ; i++)

Оператор цикла с параметром (счетный цикл) {double a=2; for (int i=1; ;

cout<}

в) если отсутствует выражение_2, то есть отсутствует условие проверки окончания цикла, в этом случае результат проверки всегда – истина, получим бесконечный цикл.

выражение_2 отсутствует

for ( ; ; )
оператор;

бесконечный цикл

г) если все три выражения отсутствуют.

Слайд 47

Оператор цикла с параметром (счетный цикл)

for (F=1, i=1; i<=N ; i++)
F=F*i;

Используя

Оператор цикла с параметром (счетный цикл) for (F=1, i=1; i F=F*i; Используя
операцию «запятая» в выражениях заголовка цикла с параметром можно задавать несколько операторов.
Например, в выражении_1 инициализировать значение нескольких переменных (вспомним вычисление факториала).

в выражение_3 может быть внесен оператор – тело цикла.

for (F=1, i=1; i<=N ; F=F*i, i++) ;

for (F=1, i=0; i<=N ; i++, F=F*i) ;

Порядок операторов важен!

В данном варианте необходимо изменить начальное значение параметра цикла

; обязательна

Оператор тела цикла формаль-но отсутствует, так как внесен в выражение_3 заголовка

Порядок операторов не важен

Слайд 48

Оператор цикла с параметром (счетный цикл)

В качестве третьего выражения можно использовать любое

Оператор цикла с параметром (счетный цикл) В качестве третьего выражения можно использовать
правильно составленное выражение. Какое бы выражение мы ни указали, его значение будет меняться при каждой итерации:
for (x=y=1; y<=75; y=5*x++)
printf("%10d %10d\n",x,y);
Обратите внимание, что в спецификации цикла проверяется значение y, а не x. В каждом из трех выражений, управляющих работой цикла for, могут использоваться любые переменные.
! Хотя этот пример и правильный, он не может служить иллюстрацией хорошего стиля программирования. Программа выглядела бы гораздо понятнее, если бы мы не смешали процесс изменения переменной цикла с алгебраическими вычислениями.

Слайд 49

#include
int main(){
float Xn, Xk, Dx;
printf("Введите диапазон и шаг изм-я аргумента: ");
scanf("%f%f%f",

#include int main(){ float Xn, Xk, Dx; printf("Введите диапазон и шаг изм-я
&Xn, &Xk, &Dx);
printf("| X | Y |\n");
float X = Xn;
while (X <= Xk){
printf("| %5.2f | %5.2f |\n", X, X*X + 1); X += Dx;
}
}

Протабулировать значение функции y=x^2+1;

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

Переменная может быть объявлена в заголовке цикла

Слайд 50

Оператор цикла с параметром (счетный цикл)

Есть ли отличие в программах?

Что будет напечатано

Оператор цикла с параметром (счетный цикл) Есть ли отличие в программах? Что
в каждой из них?

Слайд 51

Оператор цикла с параметром (счетный цикл)

Что будет на экране?

Оператор цикла с параметром (счетный цикл) Что будет на экране?

Слайд 52

Оператор цикла с параметром (счетный цикл)

Параметр цикла может быть символьного типа (char).
#include

Оператор цикла с параметром (счетный цикл) Параметр цикла может быть символьного типа

#include
#include
int main()
{ char ch;
setlocale( LC_ALL, "rus" );
for (ch='а'; ch<='я'; ch++ )
printf("ASCII код символа %c равен %d \n", ch, ch);
system("Pause");
}

Слайд 53

Вложенные циклы

Операторы повторения часто могут быть вложенными друг в друга.
Цикл, содержащий в

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

Слайд 54

Вложенные циклы

Параметры циклов разных уровней не изменяются одновременно. Сначала все свои значения

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

Слайд 55

Пример: вывести на экран таблицу умножения от 1 до 9.

Вложенные циклы

#include
int

Пример: вывести на экран таблицу умножения от 1 до 9. Вложенные циклы
main()
{ int i, j, k;
for (i = 1; i < 10; i++) // Внешний цикл
{ cout << "\n";
for (j = 1; j<10; j++) // Внутренний цикл
{ k=i*j;
if (k<10) cout<<" "; // два пробела
else cout<<" "; // один пробел
cout< }
}
}

При фиксированном значении i, внутренний цикл по j выполнится от 1 до 9

Слайд 56

Операторы передачи управления
В С++ есть пять операторов, изменяющих естественный порядок выполнения вычислений:
оператор

Операторы передачи управления В С++ есть пять операторов, изменяющих естественный порядок выполнения
выхода из цикла и переключателя break;
оператор перехода к следующей итерации цикла continue;
оператор возврата из функции return;
оператор безусловного перехода goto;
оператор генерации исключения throw.
Оператор выхода break используется для немедленного завершения оператора цикла или switch. Выполнение передается следующему после завершенного оператору.
При этом оператор break обеспечивает завершение самого внутреннего из объединяющих его операторов switch, do, for, while.
Оператор перехода к следующей итерации цикла continue пропускает все операторы, оставшиеся до конца тела цикла, и передает управление на модификацию параметров цикла (в случае цикла for) и начало следующей итерации.

Оператор возврата из функции return завершает выполнение функции и передает управление в точку ее вызова. рассмотрим его вместе с функциями позже.

Исключительную ситуацию (или просто исключение) генерирует либо программист с помощью оператора throw, либо сама среда выполнения.
Это происходит, когда во время выполнения программы возникают ошибки, например, деление на ноль или переполнение. Механизм обработки исключений, реализованный в С++, позволяет реагировать на подобные ошибки и так избегать аварийного завершения.

Слайд 57

Изменение потока управления с помощью оператора выхода break; Вывести на экран часть

Изменение потока управления с помощью оператора выхода break; Вывести на экран часть
таблицы умножения от 1 до 9, прервав внутренний цикл по условию.

Вложенные циклы

#include
int main()
{ int i, j, k;
for (i = 1; i < 10; i++) // Внешний цикл
{ cout << "\n";
for (j = 1; j<10; j++) // Внутренний цикл
{ k=i*j;
if (k>35) break;
if (k<10) cout<<" "; // два пробела
else cout<<" "; // один пробел
cout< }
}
}

Куда будет осуществлен переход?

***

Каким будет следующий оператор?

Изменение параметра внешнего цикла

#include
int main()
{ int i, j, k;
for (i = 1; i < 10; i++) // Внешний цикл
{ cout << "\n";
for (j = 1; j<10; j++) // Внутренний цикл
{ k=i*j;
if (k>35) break;
if (k<10) cout<<" "; // два пробела
else cout<<" "; // один пробел
cout< } //*
}
}

Слайд 58

#include
int main()
{ int i, j, k=0;
for (i = 1; i

#include int main() { int i, j, k=0; for (i = 1;
< 10; i++) // Внешний цикл
{ cout << "\n";
for (j = 1; j<10; j++) // Внутренний цикл
{ if (k==i*i) continue;
k=i*j;
if (k<10) cout<<" "; // два пробела
else cout<<" "; // один пробел
cout< //*** }
}
}

Изменение потока управления с помощью оператора выхода continue; Вывести на экран часть таблицы умножения от 1 до 9,

Вложенные циклы

#include
int main()
{ int i, j, k=0;
for (i = 1; i < 10; i++) // Внешний цикл
{ cout << "\n";
for (j = 1; j<10; j++) // Внутренний цикл
{ if (k==i*i) continue;
k=i*j;
if (k<10) cout<<" "; // два пробела
else cout<<" "; // один пробел
cout< }
}
}

Какой оператор будет следующим?

Изменение параметра внутреннего цикла

Слайд 59

#include
int main()
{ int i;
for (i = 1; i <= 100;

#include int main() { int i; for (i = 1; i {
i++)
{ if ( i%2 ) continue;
cout <<"\t"<< i ;
}
}

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

Что будет выведено на экран?

Слайд 60

#include
#include
int main(){
const int MaxIter = 500;
double x, eps;
cout << "\nВведите

#include #include int main(){ const int MaxIter = 500; double x, eps;
аргумент и точность: ";
cin >> x >> eps;
bool ok = true;
double y = x, ch = x;
for (int n = 0; fabs(ch) > eps; n++){
ch *= x * x /(2 * n + 2)/(2 * n + 3);
y += ch;
if (n > MaxIter){ok = false; break;}
}
if (ok) cout << "\nЗначение функции: " << y;
else cout << "\nРяд расходится!";
}

sh x = 1 + x3/3! + x5/5! + x7/7! +...

Пример - Вычисление суммы ряда

Имя файла: Управляющие-операторы.-Базовые-конструкции-структурного-программирования.-Лекция-5.pptx
Количество просмотров: 38
Количество скачиваний: 0