Лекция 8. Структура языка С/С++. Циклы с предусловием и постусловием. Реализация циклов с помощью операторов ветвления и передачи управления. Операторы.

Презентация:



Advertisements
Похожие презентации
1 Программирование на языке Паскаль Циклы. 2 Цикл – это многократное выполнение одинаковой последовательности действий. цикл с известным числом шагов.
Advertisements

1 Программирование на языке Паскаль Циклы с условием.
Pascal Алгоритмы циклической структуры, программирование на языке Pascal Часть 2 8 «Б» и 10 «Б» классы.
Практическое занятие 5 Циклы с условием. 2 Цикл с неизвестным числом шагов Пример: Отпилить полено от бревна. Сколько раз надо сделать движения пилой?
Основы программирования. 2 Циклы Цикл – это многократное выполнение одинаковой последовательности действий. цикл с известным числом шагов цикл с неизвестным.
ЦИКЛЫ С УСЛОВИЕМ 1 Программирование на языке Паскаль.
1 Программирование на языке Паскаль © К.Ю. Поляков, ВведениеВведение 2.ВетвленияВетвления 3.Сложные условияСложные условия 4.ЦиклыЦиклы 5.Циклы.
1 Программирование на языке Паскаль Тема 5. Циклы с условием © К.Ю. Поляков,
К. Поляков, Программирование на алгоритмическом языке Тема 4. Циклы.
1 Тема: Циклы с заранее неизвестным числом повторений.
1 Программирование на языке Паскаль 1. Циклы с параметром.
1 Программирование на языке Бейсик Тема. Циклы. 2 Циклы Цикл – это многократное выполнение одинаковой последовательности действий. цикл с известным числом.
Цикл со счетчиком. Циклы Цикл – это многократное выполнение одинаковой последовательности действий. цикл с известным числом шагов цикл с неизвестным числом.
Программирование на языке Паскаль. 3 Циклы Цикл – это многократное выполнение одинаковой последовательности действий. цикл с известным числом шагов цикл.
1 Программирование на языке Паскаль Тема 4. Циклы.
1 Тема 4. Циклы на языке Паскаль.
1 Программирование на языке Паскаль © К.Ю. Поляков, ВведениеВведение 2.ВетвленияВетвления 3.Сложные условияСложные условия 4.ЦиклыЦиклы 5.Циклы.
Основы программирования Pascal ABC. 2 Циклы Цикл – это многократное выполнение одинаковой последовательности действий. цикл с известным числом шагов цикл.
1 Программирование на языке Паскаль Тема: Циклы по счётчику. © К.Ю. Поляков,
1 Программирование на языке Паскаль Тема 4. Циклы.
Транксрипт:

Лекция 8. Структура языка С/С++. Циклы с предусловием и постусловием. Реализация циклов с помощью операторов ветвления и передачи управления. Операторы цикла while, do while, for.

План лекции: Циклы с предусловием и постусловием. Реализация циклов с помощью операторов ветвления и передачи управления. Операторы цикла while, do while, for.

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

Цикл while (с предусловием). Формат: while ( выражение ) оператор; Выполнение оператора начинается с проверки условия в скобках после while. Если условие истинно, выполняется оператор цикла, иначе управление передается оператору, следующему за циклом. Если при первой же проверке условие не выполняется (равно false), то цикл не выполнится ни разу. Потенциальный источник ошибок если в теле цикла условие не изменяется, но оно является истинным, цикл будет бесконечным. Это также можно использовать в своих целях, например объявить цикл: while (true ) {... } ; и организовать выход изнутри цикла с помощью break.

Например, составим программу, которая будет печатать таблицу значений функции у = х^2 + 2x + 5 в диапазоне пользователем: #include int main ( ) { float xn, xk, dx; printf( Введите диапазон и шаг изменения аргумента: ); scanf(%f%f%f, &xn, &xk, &dx); printf ( X | Y | \n); float x = xn; while (x

Цикл do while (с постусловием). Формат: do оператор while выражение; Цикл do while отличается от цикла while только тем, что в нем проверка условия происходит после цикла, то есть он достоверно выполнится хоть раз. Порядок выполнения данного цикла следующий: вначале выполняется простой или составной оператор, являющейся телом цикла, затем проверяется выражение. Если оно не равно false, тело цикла выполняется еще раз. Цикл завершается, когда выражение становится равным false, или если происходит выход из цикла при помощи оператора передачи управления. do { cout > num;... // действия счислом } while (num ! = 0);

Цикл for (с параметром). Формат: for ( инициализация; выражение; модификации) оператор; Если цикл for предназначен для многократного выполнения не одной инструкции, а программного блока, то его общий формат выгдядит так for( инициализация; выражение; инкремент) { Последовательность инструкций } Цикл с параметром – один из мощнейших инструментов языка С++. Он позволяет не только повторять последовательность операторов заданное число раз, но и создавать сложные циклы с условиями выхода и прочими продвинутыми возможностями.

Примеры использования цикла с параметром. Уменьшение параметра: for ( n=10; n>0; n--) { оператор}; Изменение шага корректировки: for ( n=2; n>60; n+=13) { оператор }; Возможность проверять условие отличное от условия, которое налагается на число итераций: for ( num=1;num*num*num

Циклы

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

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

12 Алгоритм (с блоком «цикл») начало i, i2, i3 конец i2 = i * i; i3 = i2 * i; i = 1,8 блок «цикл» тело цикла

13 Программа main() { int i, i2, i3; for (i=1; i

14 Цикл с уменьшением переменной Задача. Вывести на экран квадраты и кубы целых чисел от 8 до 1 (в обратном порядке). Особенность: переменная цикла должна уменьшаться. Решение: for ( ) { i2 = i*i; i3 = i2*i; printf("%4d %4d %4d\n", i, i2, i3); } for ( ) { i2 = i*i; i3 = i2*i; printf("%4d %4d %4d\n", i, i2, i3); } i = 8; i >= 1; i --

15 Цикл с переменной 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; ) {... }

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

17 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

18 Сколько раз выполняется цикл? a = 1; for(i=1; i= 1; i--)a += b; a = 7a = 7 a = 7a = 7 a = 1; for(i=1; i >= 3; i--)a = a+1; a = 1; for(i=1; i >= 3; i--)a = a+1; a = 1a = 1 a = 1a = 1 a = 1; for(i=1; i

19 Задания «4»: Ввести a и b и вывести квадраты и кубы чисел от a до b. Пример: Введите границы интервала: «5»: Вывести квадраты и кубы 10 чисел следующей последовательности: 1, 2, 4, 7, 11, 16, … Пример:

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

21 Цикл с неизвестным числом шагов Пример: Отпилить полено от бревна. Сколько раз надо сделать движения пилой? Задача: Ввести целое число (

22 Алгоритм начало count конец нет да n != 0? count = 0 ; count = count + 1; n = n / 10; обнулить счетчик цифр ввод n выполнять «пока n != 0»

23 Программа 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;

24 Цикл с условием while ( условие ) { // тело цикла } while ( условие ) { // тело цикла } Особенности: можно использовать сложные условия: если в теле цикла только один оператор, скобки {} можно не писать: while ( a < b && b < c ) {... } while ( a < b ) a ++;

25 Цикл с условием Особенности: условие пересчитывается каждый раз при входе в цикл если условие на входе в цикл ложно, цикл не выполняется ни разу если условие никогда не станет ложным, программа зацикливается a = 4; b = 6; while ( a > b ) a = a– b; a = 4; b = 6; while ( a > b ) a = a– b; a = 4; b = 6; while ( a < b ) d = a + b; a = 4; b = 6; while ( a < b ) d = a + b;

26 Сколько раз выполняется цикл? a = 4; b = 6; while ( a < b ) a ++; a = 4; b = 6; while ( a < b ) a ++; 2 раза a = 6 2 раза a = 6 a = 4; b = 6; while ( a < b ) a += b; a = 4; b = 6; while ( a < b ) a += b; 1 раз a = 10 1 раз a = 10 a = 4; b = 6; while ( a > b ) a ++; a = 4; b = 6; while ( a > b ) a ++; 0 раз a = 4 0 раз a = 4 a = 4; b = 6; while ( a < b ) b = a - b; a = 4; b = 6; while ( a < b ) b = a - b; 1 раз b = -2 1 раз b = -2 a = 4; b = 6; while ( a < b ) a --; a = 4; b = 6; while ( a < b ) a --; зацикливание

27 Замена for на while и наоборот for( i=1; i= b ) { // тело цикла i --; } В языке Си замена цикла for на while и наоборот возможна всегда! !

28 Задания «4»: Ввести целое число и найти сумму его цифр. Пример: Введите целое число: 1234 Сумма цифр числа 1234 равна 10. «5»: Ввести целое число и определить, верно ли, что в его записи есть две одинаковые цифры. Пример: Введите целое число: Введите целое число: Нет. Да.

29 Последовательности Примеры: 1, 2, 3, 4, 5, … 1, 2, 4, 7, 11, 16, … 1, 2, 4, 8, 16, 32, … an = nan = n an = nan = n a 1 = 1, a n+1 = a n +1 a 1 = 1, a n+1 = a n + n a n = 2 n-1 a 1 = 1, a n+1 = 2 a n b 1 = 1, b n+1 = b n +1 c 1 = 2, c n+1 = 2 c n

30 Последовательности Задача: найти сумму всех элементов последовательности, которые по модулю больше 0,001: Элемент последовательности (начиная с 2): n b12345 c z b = b+1; c = 2*c; z = -z;

31 Алгоритм начало 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 ; новый элемент изменение Перестановка? ?

32 Программа #include 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; чтобы не было округления при делении

33 Задания «4»: Найти сумму элементов последовательности с точностью 0,001: Ответ: S = «5»: Найти сумму элементов последовательности с точностью 0,001: Ответ: S = 1.220

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

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

36 Программа main() { int n; do { printf("Введите положительное число\n"); scanf("%d", &n); } while ( n

37 Сколько раз выполняется цикл? a = 4; b = 6; do { a ++; } while (a = b ); 2 раза b = 6 2 раза b = 6 a = 4; b = 6; do a += 2; while ( a >= b ); a = 4; b = 6; do a += 2; while ( a >= b ); зацикливание

38 Задания (с защитой от неверного ввода) «4»: Ввести натуральное число и определить, верно ли, что сумма его цифр равна 10. Пример: Введите число >= 0: Введите число >= 0: Нужно положительное число. Нет Введите число >= 0: 1234 Да «5»: Ввести натуральное число и определить, какие цифры встречаются несколько раз. Пример: Введите число >= 0: Повторяются: 2, 3 Нет повторов.