Содержание

Слайд 2

План Лекция 6 План Пара заданий для самопроверки Операторы цикла Оператор

План

Лекция 6

План
Пара заданий для самопроверки
Операторы цикла
Оператор с переменной (for)
Оператор с пред-условием
Последовательности
Оператор

с пост-условием
Прерывание циклов
Слайд 3

Пара заданий для самопроверки Задание для самопроверки 1 Задание для самопроверки 2

Пара заданий для самопроверки

Задание для самопроверки 1
Задание для самопроверки 2

Слайд 4

Пара заданий для самопроверки Задание для самопроверки 1 Что будет выведено

Пара заданий для самопроверки

Задание для самопроверки 1

Что будет выведено если пользователь

введет 13?


#include
void main(){
int number;
printf(“введи число: “);
scanf(“%d“, &number);
if (number = 0)
printf(“равно 0\n“);
else
printf(“не равно 0\n“);
}

Частая ошибка: = вместо ==

Слайд 5

Пара заданий для самопроверки Задание для самопроверки 2 Что будет выведено

Пара заданий для самопроверки

Задание для самопроверки 2

Что будет выведено если пользователь

введет 2 и 3?


#include
void main(){
int a, b, max=0;
printf(“введи a и b: “);
scanf(“%d%d “, &a,&b);
if (a > b)
if (a > 0) max = a;
else
max = b;
printf(“max=%d\n“, max);
}

Частая ошибка! else – всегда альтернатива к ближайшему if

Слайд 6

Цикл с переменной Цикл с переменной (for) Цикл с пред-условием (while)

Цикл с переменной

Цикл с переменной (for)
Цикл с пред-условием (while)
Последовательности
Цикл с пост-условием

(do…while)
Прерывание цикла
Слайд 7

Операторы цикла Циклы Цикл – это многократное выполнение одинаковой последовательности действий.

Операторы цикла

Циклы

Цикл – это многократное выполнение одинаковой последовательности действий.
цикл с известным

числом шагов
цикл с неизвестным числом шагов (цикл с условием)
Задача. Вывести на экран квадраты и кубы целых чисел от 1 до 8 (от a до b).
Особенность: одинаковые действия выполняются 8 раз.
Слайд 8

Операторы цикла Алгоритм начало i, i2, i3 конец нет да i

Операторы цикла

Алгоритм

начало

i, i2, i3

конец

нет

да

i <= 8?

i = 1;

i = i +

1;

i2 = i * i;
i3 = i2 * i;

задать начальное значение переменной цикла

проверить, все ли сделали

вычисляем квадрат и куб

вывод результата

перейти к следующему i

Слайд 9

Операторы цикла Алгоритм (с блоком «цикл») начало i, i2, i3 конец

Операторы цикла

Алгоритм (с блоком «цикл»)

начало

i, i2, i3

конец

i2 = i * i;
i3

= i2 * i;

i = 1,8

блок «цикл»

тело цикла

Слайд 10

Операторы цикла Программа void main() { int i, i2, i3; for

Операторы цикла

Программа

void main()
{
int i, i2, i3;
for (i=1; i<=8; i++)

{
i2 = i*i;
i3 = i2*i;
printf("%4d %4d %4d\n",i,i2,i3);
}
}

for (i=1; i<=8; i++)
{
i2 = i*i;
i3 = i2*i;
printf("%4d %4d %4d\n",i,i2,i3);
}

переменная цикла

начальное значение

конечное значение

изменение после каждого шага:
i=i+1

ровные столбики

очередной шаг цикла выполняется, если условие верно

цикл

начало цикла

конец цикла

заголовок цикла

for (i=1; i<=8; i++)

i2 = i*i;
i3 = i2*i;
printf("%4d %4d %4d\n",i,i2,i3);

тело цикла

Слайд 11

Операторы цикла Цикл с уменьшением переменной Задача. Вывести на экран квадраты

Операторы цикла

Цикл с уменьшением переменной

Задача. Вывести на экран квадраты и кубы

целых чисел от 8 до 1 (в обратном порядке).
Особенность: переменная цикла должна уменьшаться.
Решение:

for ( )
{
i2 = i*i;
i3 = i2*i;
printf("%4d %4d %4d\n", i, i2, i3);
}

i = 8; i >= 1; i --

Слайд 12

Операторы цикла Цикл с переменной for (начальные значения; условие продолжения цикла;

Операторы цикла

Цикл с переменной

for (начальные значения;
условие продолжения цикла;
изменение на

каждом шаге)
{
/* тело цикла */
}

Примеры:

for (a = 2; a < b; a+=2) { ... }

for (a = 2, b = 4; a < b; a+=2) { ... }

for (a = 1; c < d; x++) { ... }

for (; c < d; x++) { ... }

for (; c < d; ) { ... }

Слайд 13

Операторы цикла Цикл с переменной Особенности: условие проверяется в начале очередного

Операторы цикла

Цикл с переменной

Особенности:
условие проверяется в начале очередного шага цикла, если

оно ложно, цикл не выполняется;
изменения (третья часть в заголовке) выполняются в конце очередного шага цикла;
если условие никогда не станет ложным, цикл может продолжаться бесконечно (зацикливание)
если в теле цикла один оператор, скобки {} можно не ставить:

for(i=1; i<8; i++) { i--; }

for (i = 1; i < 8; i++) a += b;

Слайд 14

Операторы цикла for (i=8; i>=1; i--) printf("Привет"); printf("i=%d", i); Цикл с

Операторы цикла

for (i=8; i>=1; i--) printf("Привет");
printf("i=%d", i);

Цикл с переменной

Особенности:
после выполнения цикла

во многих системах устанавливается первое значение переменной цикла, при котором нарушено условие:

for (i=1; i<=8; i++) printf("Привет");
printf("i=%d", i);

i=9

i=0

Слайд 15

Операторы цикла Сколько раз выполняется цикл? a = 1; for(i=1; i

Операторы цикла

Сколько раз выполняется цикл?

a = 1;
for(i=1; i<4; i++) a++;

3 раза
a

= 4

a = 1; b=2;
for(i=3; i >= 1; i--)a += b;

3 раза
a = 7

a = 1;
for(i=1; i >= 3; i--)a = a+1;

0 раз
a = 1

a = 1;
for(i=1; i<= 4; i--)a ++;

зацикливание

a = 1;
for(i=1; i<4; i++) a = a+i;

3 раза
a = 7

Слайд 16

Цикл с предусловием Цикл while Взаимозаменяемость циклов for и while

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

Цикл while
Взаимозаменяемость циклов for и while

Слайд 17

Операторы цикла Цикл с неизвестным числом шагов Пример: Отпилить полено от

Операторы цикла

Цикл с неизвестным числом шагов

Пример: Отпилить полено от бревна. Сколько

раз надо сделать движения пилой?
Задача: Ввести целое число (<2000000) и определить число цифр в нем.
Идея решения: Отсекаем последовательно последнюю цифру, увеличиваем счетчик.
Проблема: Неизвестно, сколько шагов надо сделать.
Решение: Надо остановиться, когда n = 0, т.е. надо делать «пока n != 0».
Слайд 18

Операторы цикла Алгоритм начало count конец нет да n != 0?

Операторы цикла

Алгоритм

начало

count

конец

нет

да

n != 0?

count = 0;

count = count + 1;
n

= n / 10;

обнулить счетчик цифр

ввод n

выполнять «пока n != 0»

Слайд 19

Операторы цикла Программа void main() { int n, count; printf("Введите целое

Операторы цикла

Программа

void main()
{
int n, count;
printf("Введите целое число\n");
scanf("%d", &n);

count = 0;
while (n != 0)
{
count ++;
n = n / 10;
}
printf("В числе %d нашли %d цифр", n, count);
}

n1 = n;

n1,

выполнять «пока n != 0»

, n1;

Слайд 20

Операторы цикла Цикл с условием while ( условие ) { /*

Операторы цикла

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

while ( условие )
{
/* тело

цикла */
}

Особенности:
можно использовать сложные условия:
если в теле цикла только один оператор, скобки {} можно не писать:

while ( a < b && b < c ) { ... }

while ( a < b ) a ++;

Слайд 21

Операторы цикла Цикл с условием Особенности: условие пересчитывается каждый раз при

Операторы цикла

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

Особенности:
условие пересчитывается каждый раз при входе в цикл
если

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

a = 4; b = 6;
while ( a > b ) a = a– b;

a = 4; b = 6;
while ( a < b ) d = a + b;

Слайд 22

Операторы цикла Сколько раз выполняется цикл? a = 4; b =

Операторы цикла

Сколько раз выполняется цикл?

a = 4; b = 6;
while (

a < b ) a ++;

2 раза
a = 6

a = 4; b = 6;
while ( a < b ) a += b;

1 раз
a = 10

a = 4; b = 6;
while ( a > b ) a ++;

0 раз
a = 4

a = 4; b = 6;
while ( a < b ) b = a - b;

1 раз
b = -2

a = 4; b = 6;
while ( a < b ) a --;

зацикливание

Слайд 23

Операторы цикла Замена for на while и наоборот for( i=1; i

Операторы цикла

Замена for на while и наоборот

for( i=1; i<=10; i++)
{

/* тело цикла */
}

i = 1;
while ( i <= 10 ) {
/* тело цикла */
i ++;
}

for ( i=a; i>=b; i--)
{
/* тело цикла */
}

i = a;
while ( i >= b ) {
/* тело цикла */
i --;
}

Слайд 24

Последовательности Способы определения Типичные алгоритмы Пример программы

Последовательности

Способы определения
Типичные алгоритмы
Пример программы

Слайд 25

Операторы цикла Последовательности Примеры: 1, 2, 3, 4, 5, … 1,

Операторы цикла

Последовательности

Примеры:
1, 2, 3, 4, 5, …
1, 2, 4, 7, 11,

16, …
1, 2, 4, 8, 16, 32, …

an = n

a1 = 1, an+1 = an+1

a1 = 1, an+1 = an + n

an = 2n-1

a1 = 1, an+1 = 2an

b1 = 1, bn+1 = bn+1

c1 = 2, cn+1 = 2cn

Слайд 26

Операторы цикла Последовательности Задача: найти сумму всех элементов последовательности, которые по

Операторы цикла

Последовательности

Задача: найти сумму всех элементов последовательности,
которые по модулю

больше 0,001:

Элемент последовательности (начиная с №2):

b = b+1;

c = 2*c;

z = -z;

Слайд 27

Операторы цикла Алгоритм начало S конец нет да |a| > 0.001

Операторы цикла

Алгоритм

начало

S

конец

нет

да

|a| > 0.001

S = S + a;

S = 0; b

= 1; c = 2; z = -1; a = 1;

начальные значения

a = z*b/c;
b = b + 1; c = 2*c; z = -z;

первый элемент

a = 1;

S = 0;

новый элемент

изменение

Слайд 28

Операторы цикла Программа #include void main() { int b, c, z;

Операторы цикла

Программа

#include
void main()
{
int b, c, z;
float S, a;

S = 0; z = -1;
b = 1; c = 2; a = 1;
while (fabs(a) > 0.001) {
S += a;
a = z * b / c;
z = - z;
b ++;
c *= 2;
}
printf ("S = %10.3f", S);
}

переход к следующему слагаемому

начальные значения

увеличение суммы

расчет элемента последовательности

математические функции

fabs – модуль вещественного числа

, b;

чтобы не было округления при делении

Слайд 29

Операторы цикла Упражнения 1. Найти сумму элементов последовательности с точностью 0,001:

Операторы цикла

Упражнения

1. Найти сумму элементов последовательности с точностью 0,001:
Ответ:
S = 1.157
2.

Найти сумму элементов последовательности с точностью 0,001:
Ответ:
S = 1.220
Слайд 30

Цикл с постусловием Цикл с пост-условием (do…while) Общая схема Пример

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

Цикл с пост-условием (do…while)
Общая схема
Пример

Слайд 31

Операторы цикла Цикл с постусловием Задача: Ввести целое положительное число (

Операторы цикла

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

Задача: Ввести целое положительное число (<2000000) и определить

число цифр в нем.
Проблема: Как не дать ввести отрицательное число или ноль?
Решение: Если вводится неверное число, вернуться назад к вводу данных (цикл!).
Особенность: Один раз тело цикла надо сделать в любом случае ⇒ проверку условия цикла надо делать в конце цикла (цикл с постусловием).

Цикл с постусловием – это цикл, в котором проверка условия выполняется в конце цикла.

Слайд 32

Операторы цикла Цикл с постусловием: алгоритм начало конец нет да n

Операторы цикла

Цикл с постусловием: алгоритм

начало

конец

нет

да

n <= 0

тело цикла

условие

блок «типовой процесс»

ввод

n

основной алгоритм

Слайд 33

Операторы цикла Программа void main() { int n; do { printf("Введите

Операторы цикла

Программа

void main()
{
int n;
do {
printf("Введите положительное число\n");
scanf("%d",

&n);
}
while ( n <= 0 );
... /* основной алгоритм */
}

условие

Особенности:
тело цикла всегда выполняется хотя бы один раз
после слова while («пока…» ) ставится условие продолжения цикла

Слайд 34

Операторы цикла Сколько раз выполняется цикл? a = 4; b =

Операторы цикла

Сколько раз выполняется цикл?

a = 4; b = 6;
do {

a ++; } while (a <= b);

3 раза
a = 7

a = 4; b = 6;
do { a += b; } while ( a <= b );

1 раз
a = 10

a = 4; b = 6;
do { a += b; } while ( a >= b );

зацикливание

a = 4; b = 6;
do b = a - b; while ( a >= b );

2 раза
b = 6

a = 4; b = 6;
do a += 2; while ( a >= b );

зацикливание

Слайд 35

Прерывание цикла Прерывание цикла (break) Прерывание шага цикла (continue) Прерывание вложенных циклов

Прерывание цикла

Прерывание цикла (break)
Прерывание шага цикла (continue)
Прерывание вложенных циклов

Слайд 36

Операторы цикла Прерывание цикла Оператор break break досрочно завершает (прерывает) цикл

Операторы цикла

Прерывание цикла

Оператор break

break досрочно завершает (прерывает) цикл и передает управление

на оператор, следующий за циклом
Работает для любого цикла
for
while
do … while


while(<условие>) { <оператор 1>;
<оператор 2>;

if(…) break;

<оператор N>;
}
<оператор>;

Слайд 37

Операторы цикла Прерывание шага цикла Оператор continue continue досрочно завершает шаг

Операторы цикла

Прерывание шага цикла

Оператор continue

continue досрочно завершает шаг цикла и начинает

следующий
Работает для любого цикла
for
while
do … while


while(<условие>) { <оператор 1>;
<оператор 2>;

if(…) continue;

<оператор N>;
}

Слайд 38

Операторы цикла Прерывание вложенных циклов Оператор goto goto осуществляет безусловный переход

Операторы цикла

Прерывание вложенных циклов

Оператор goto

goto осуществляет безусловный переход в точку программы,

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


for() {
while(<условие>) { <оператор 1>;
<оператор 2>;

if(…) goto error;

<оператор N>;
}
}
error: <оператор>;