Операторы цикла
Цикл с параметром for
Цикл с параметром for
Ошибка неучтенной единицы
Объявления переменных в цикле for
Пример: найти сумму четных чисел от 0 до 10.
В спортзал ежедневно приходит какое-то количество посетителей. Необходимо предложить пользователю ввести такие данные: сколько
Пример: найти сумму всех целых чисел от 0 до 100, которые не делятся на 7.
Задания для самостоятельного выполнения.
Вложенные циклы
Пример: написать программу для нахождения следующей суммы
задание
Цикл с предусловием WHILE (пока)
Пример: найти сумму чисел от 1 до 5.
Задание 1
Задание 2
Пример № 1
Пример № 2
Пример № 3 Отгадать целое число, которое "загадал" компьютер в диапазоне от 1 до 100.
Задача 1. Найти наибольший общий делитель (НОД) двух натуральных чисел А и В.
В блок-схеме решения задачи, представленной на рис.1, для решения поставленной задачи используется цикл с предусловием, то есть
Задание 2. Вашей задачей будет написать программу на языке программирования С++. Вы должны написать три программы,
Задание 3. написать программу для решения следующей задачи: Вычислить сумму натуральных четных чисел, не превышающих N.
Блок-схема решения этой задачи представлена на рис. 2.
Цикл с постусловием do while
Пример(do while): программа вывода на экран целых чисел из интервала от 1 до п.
Пример(do while): прочитать символы, вводимые с клавиатуры до тех пор, пока не будет введен символ *
Пример(do while): составить блок-схему и написать программу для нахождения суммы нечетных чисел от 0 до 10
Использование операторов цикла
задание
4.32M
Category: programmingprogramming

Циклические операторы. Часть 6

1.

Часть 6.
Циклические операторы

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

ОПЕРАТОРЫ ЦИКЛА
Операторы цикла используются
для организации многократно
повторяющихся вычислений.
- цикл с параметром for.
- цикл с предусловием while,
- цикл с постусловием do while

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

ЦИКЛ С ПАРАМЕТРОМ FOR
Оператор цикла состоит из заголовка цикла и тела цикла.
Тело цикла – оператор, который будет повторно
выполняться.
Заголовок – это ключевое слово FOR, после которого в
круглых скобках записаны 3 выражения, разделенные
точкой с запятой. Первое выражение вычисляется один
раз до начала выполнения цикла; второе – условие цикла.
Тело цикла будет повторяться до тех пор пока условие
истинно. Третье выражение вычисляется после каждого
повторения тела цикла.
Оператор FOR реализует фундаментальный принцип
вычислений в программировании – итерацию
(повторение).

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

ЦИКЛ С ПАРАМЕТРОМ FOR
Цикл с параметром имеет следующую структуру:
for (<инициализация>; <выражение>; <модификации>) <оператор>;
Инициализация используется для объявления и присвоения начальных значений
величинам, используемым в цикле.
В этой части можно записать несколько операторов, разделенных запятой.
Областью действия переменных, объявленных в части инициализации цикла,
является цикл и вложенные блоки.
Выражение определяет условие выполнения цикла:
- если его результат истинен, цикл выполняется.
Истинность выражения проверяется перед каждым выполнением тела цикла,
таким образом, цикл с параметром реализован как цикл с предусловием.
Модификации выполняются после каждой итерации цикла и служат обычно для
изменения параметров цикла.
В части модификаций можно записать несколько операторов через запятую.
Оператор (простой или составной) представляет собой тело цикла.

5.

6.

Пример: найти сумму целых чисел от 1 до 100
int sum=0;
int i;
for (i=0; i<100; ++i)
sum=sum+i;
Любая
из частей оператора for (инициализация, выражение, модификация,
оператор) может отсутствовать, но точку с запятой, определяющую позицию
пропускаемой части, надо оставить.
Пример: найти сумму целых чисел от 1 до 100
Вариант 1: int sum=0;
int i=0;
for (; i<100; ) {sum=sum+i; ++i;}
Вариант 2: int sum=0;
int i=0;
for (; ; ) {if (i>=100) break; sum=sum+i; i=i+1;}

7.

Задача. Вывести на экран квадраты и кубы целых чисел
от 1 до 8.
начало
задать начальное значение
переменной цикла
i = 1;
проверить, все ли сделали
i <= 8?
да
i2 = i * i;
i3 = i2 * i;
i, i2, i3
i = i + 1;
нет
конец
вычисляем
квадрат и куб
вывод
результата
перейти к
следующему i
7

8.

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

9.

9
Программа
main()
{
int i, i2, i3;
переменная цикла
начальное
значение
заголовок
цикла
конечное
значение
цикл
изменение на
for (i=1;
(i=1; i<=8;
i<=8; i++)
i++)
for
каждом шаге:
i=i+1
{{ начало цикла
i2 === i*i;
i*i; цикл работает, пока это
i2
i2
i*i;
тело цикла
условие верно
i3 === i2*i;
i2*i;
i3
i3
i2*i;
cout<<i<<”\t”<<i2<<”\t”<<i3<<”\t”;
cout<<i<<”\t”<<i2<<”\t”<<i3<<”\t”;
cout<<i<<”\t”<<i2<<”\t”<<i3<<”\t”;
}}
конец цикла
ровные
}
столбики

10.

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

11.

12.

13.

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

14.

14
Цикл с переменной
Особенности:
• условие проверяется в начале очередного шага цикла,
если оно ложно цикл не выполняется;
• изменения (третья часть в заголовке) выполняются в
конце очередного шага цикла;
• если условие никогда не станет ложным, цикл может
продолжаться бесконечно (зацикливание)
for(i=1; i<8; i++) { i--; }
!
Не рекомендуется менять переменную
цикла в теле цикла!
• если в теле цикла один оператор, скобки {} можно не
ставить:
for (i = 1; i < 8; i++) a += b;

15.

15
Какой результат выполнения цикла?
a = 1;
for(i=1; i<4; i++) a++;
a= 4
a = 1;
for(i=1; i<4; i++) a = a+i;
a= 7
a = 1; b=2;
for(i=3; i >= 1; i--)a += b;
a= 7
a = 1;
for(i=1; i >= 3; i--)a = a+1;
a = 1;
for(i=1; i<= 4; i--)a ++;
a= 1
зацикливание

16. Ошибка неучтенной единицы

ОШИБКА НЕУЧТЕННОЙ ЕДИНИЦЫ
Одна из самых больших проблем с которой приходится сталкиваться начинающим
программистам в циклах for (а также и в других типах циклов) — это ошибка на
единицу (или «ошибка неучтенной единицы»). Она возникает, когда цикл
повторяется на 1 раз больше или на 1 раз меньше нужного количества итераций.
Это обычно происходит из-за того, что в условии используется некорректный
оператор сравнения (например, > вместо >= или наоборот). Как правило, эти
ошибки трудно отследить, так как компилятор не будет жаловаться на них,
программа будет работать, но её результаты будут неправильными.
При написании циклов for помните, что цикл будет выполняться до тех пор, пока
условие является истинным. Рекомендуется тестировать циклы, используя разные
значения для проверки работоспособности цикла. Хорошей практикой является
проверять циклы с помощью данных ввода (чисел, символов и прочего), которые
заставляют цикл выполниться 0, 1 и 2 раза. Если цикл работает исправно, значит
всё ОК.
Правило: Тестируйте свои циклы, используя входные данные, которые заставляют
цикл выполниться 0, 1 и 2 раза.

17. Объявления переменных в цикле for

ОБЪЯВЛЕНИЯ ПЕРЕМЕННЫХ В ЦИКЛЕ FOR

18. Пример: найти сумму четных чисел от 0 до 10.

#include <iostream.h>
void main()
{int n,sum;
for (n=0, sum=0; n<=10; n+=2)
{ sum+=n;
cout<<“промежуточный результат: n=“;
cout<<n<<“\tsum=“<<sum<<“\n”;}
cout<<“\nОкончательный результат: n=“<<n;
cout<<“\tsum=“<<sum<<“\n”;}

19. В спортзал ежедневно приходит какое-то количество посетителей. Необходимо предложить пользователю ввести такие данные: сколько

человек посетило спортзал
за день, ввести возраст каждого посетителя и в итоге показать возраст самого
старшего и самого молодого из них, а так же посчитать средний возраст
посетителей.

20.

20
Задания
Ввести a и b и вывести квадраты и кубы чисел от a до b.
Пример:
Введите границы интервала:
4 6
4 16
64
5 25 125
6 36 216
Вывести квадраты и кубы 10 чисел следующей
последовательности: 1, 2, 4, 7, 11, 16, …
Пример:
1
1
1
2
4
8
4
16
64
...
46 2116 97336

21.

Оператор break завершает выполнение
цикла
Оператор continue заставляет пропустит
остаток тела цикла и перейти к
следующей итерации (повторению)

22.

23.

24. Пример: найти сумму всех целых чисел от 0 до 100, которые не делятся на 7.

int sum=0;
for (int i=1; i<=100; i=i+1)
{ if (i%7==0) continue;
sum=sum+i;}

25. Задания для самостоятельного выполнения.

1.
2.
3.
4.
5.
6.
Вывести на экран кубы целых чисел от 10 до 100.
Вычислите сумму ряда S = 1 + 1/x + 1/2x + 1/3x +
... 1/nx, для n и х введённых с клавиатуры.
Вычислить значение n! для n введённого с
клавиатуры.
Вычислить A(A+1)(A+2)...(A+N), для A и N введённых
с клавиатуры.
Найти максимальное число среди N
вещественных чисел, введенных с клавиатуры
Вычислить сумму ряда Y = 1! + 2! + 3! + ... n!, для n
введённого с клавиатуры.

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

ВЛОЖЕННЫЕ ЦИКЛЫ
Циклы могут быть простые или вложенные (кратные, циклы в цикле).
Вложенными могут быть циклы любых типов: while, do while, for.
Структура вложенных циклов на примере типа for приведена ниже:
for(i=1;i<ik;i++)
{…
for (j=10; j>jk;j- -)
{...for(k=1;k<kk;j+=2){...} 3 2
1
...}
...}
Каждый внутренний цикл должен быть полностью вложен во все внешние
циклы.
--- «Пересечения» циклов не допускается.

27.

28.

Рассмотрим пример использования вложенных циклов, который
позволит вывести на экран следующую таблицу:
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
#include <iostream>
int main()
{ for (int i=1; i<=4;++i,cout<<endI) //внешний цикл
for (int j= 1; j<=5; ++j)
//внутренний цикл
cout<<"2\t";
//тело внутреннего цикла
return 0;}
Внешний цикл определяет количество строк, выводимых на экран. В блоке
модификации данного цикла стоят два оператора.
Первый ++/ будет увеличивать значение i на единицу после каждого выполнения
внутреннего цикла, а второй -cout <<endl будет переводить выходной поток на
новую строку.
Внутренний цикл является телом внешнего цикла.
Внутренний цикл определяет, сколько чисел нужно вывести в каждой строке, а в
теле внутреннего цикла выводится нужное число.

29.

Рассмотрим еще один пример использования вложенных циклов, который
позволит вывести на экран следующую таблицу:
1
1
1
1
1
#include <iostream>
3
3
3
3
5
5
5
7
7
9
int main()
{ for (int i=1; i<=5; ++i, cout<<endl) //внешний цикл
for(int j=1; j<=2*i-1; j+=2) //внутренний цикл
cout<<j<<"\t";
//тело внутреннего цикла
return 0;}
В данном случае таблица состоит из пяти строчек, в каждой из которых печатаются
только нечетные числа.
Последнее нечетное число в строчке зависит от ее номера.
Эта зависимость выражается через формулу k =2i-l (зависимость проверить
самостоятельно), где к - последнее число в строке, ;i - номер текущей строки.
Внешний цикл следит за номером текущей строки i а внутренний цикл будет
печатать нечетные числа из диапазона от 1 до 2i-I.

30. Пример: написать программу для нахождения следующей суммы

3
4
y (n 2 m 2 )
n 1 m 2
#include <iostream>
main()
{ int n,y,m;
for (n=1,y=0; n<=3; n++)
for(m=2; m<=4; m++)
{y+=(n*n+m*m);
cout<<“n=“<<n<<“ \t”;
cout<<“m=“<<m<<“ \t y=”<<y<<endl;}
cout<<“Ответ:у=“<<y;
}
Ответ: у=129

31. задание

ЗАДАНИЕ
5
5
5
5
5
Вывести на экран числа в виде следующих
таблиц:
1.)
2.)
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5 5
5 5 5

32. Цикл с предусловием WHILE (пока)

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

33.

34. Пример: найти сумму чисел от 1 до 5.

{ int n=1, sum=0;
while (n<=5)
{sum+=n;
n++;
}
cout<<“S=“<<s<<endl;
}

35.

- если условие B во время работы цикла не будет изменяться, то
возможна ситуация зацикливания, то есть невозможность
выхода из цикла.
Внутри тела должны находиться операторы, приводящие к изменению
значения выражения В так, чтобы цикл мог завершиться.
Рассмотрим программу вывода на экран целых чисел из интервала от 1 до n.
#include <iostream>
int main()
{ int n, i=1;
cout <<"n="; cin >>n;
while (i<=n) //пока i меньше или равно n
{ cout<<i<<"\t";
//выводим на экран значение i
++i;}//увеличиваем i на единицу
return 0;}

36.

37.

38.

39. Задание 1

ЗАДАНИЕ 1
Измените программу из последнего подраздела
«Вложенные циклы while» так, чтобы она
выводила следующее:

40. Задание 2

ЗАДАНИЕ 2
Теперь сделайте так, чтобы цифры выводились
следующим образом (используя программу из
предыдущего задания):

41. Пример № 1

ПРИМЕР № 1

42. Пример № 2

ПРИМЕР № 2

43. Пример № 3 Отгадать целое число, которое "загадал" компьютер в диапазоне от 1 до 100.

ПРИМЕР № 3
ОТГАДАТЬ ЦЕЛОЕ ЧИСЛО, КОТОРОЕ "ЗАГАДАЛ" КОМПЬЮТЕР В
ДИАПАЗОНЕ ОТ 1 ДО 100.
Описание переменных:
a – число, "загаданное" компьютером;
b – очередное число, вводимое пользователем.
Алгоритм решения задачи:
Программа генерирует псевдослучайное число, которое записывается в
переменную a.
Пока число a не совпадет с числом b, пользователю будет предлагаться ввести
очередное число. При этом, если b > a, то на экран будет выдаваться
сообщение "Много". Иначе будет проверяться условие b < a. При его
положительном значении появится сообщение "Мало", иначе сообщение
"Угадал".
Не трудно понять, что если b не больше и не меньше a, то значит оно равно a.
В таком случае логическое выражение при while вернет false, и цикл
прервется.
43

44. Задача 1. Найти наибольший общий делитель (НОД) двух натуральных чисел А и В.

ЗАДАЧА 1. НАЙТИ НАИБОЛЬШИЙ ОБЩИЙ ДЕЛИТЕЛЬ
(НОД) ДВУХ НАТУРАЛЬНЫХ ЧИСЕЛ А И В.
Решение:
Входные данные: А и В.
Выходные данные: А - НОД.
Построим
математическую модель
Для решения поставленной задачи воспользуемся
алгоритмом Евклида: будем уменьшать каждый раз большее из
чисел на величину меньшего до тех пор, пока оба значения не
станут равными, так, как показано в таблице 1.
Таблица 1. Поиск НОД для чисел А=25 и В=15.
Исходные
данные
Первый шаг Второй шаг Третий шаг НОД(А,В)=5
А=25
А=10
А=10
А=5
В=15
В=15
В=5
В=5
44

45. В блок-схеме решения задачи, представленной на рис.1, для решения поставленной задачи используется цикл с предусловием, то есть

В БЛОК-СХЕМЕ РЕШЕНИЯ ЗАДАЧИ, ПРЕДСТАВЛЕННОЙ НА РИС.1,
ДЛЯ РЕШЕНИЯ ПОСТАВЛЕННОЙ ЗАДАЧИ ИСПОЛЬЗУЕТСЯ ЦИКЛ С
ПРЕДУСЛОВИЕМ, ТО ЕСТЬ ТЕЛО ЦИКЛА ПОВТОРЯЕТСЯ ДО ТЕХ ПОР,
ПОКА А НЕ РАВНО В.
Рис. 1 Поиск наибольшего общего
делителя двух чисел
45

46. Задание 2. Вашей задачей будет написать программу на языке программирования С++. Вы должны написать три программы,

ЗАДАНИЕ 2. ВАШЕЙ ЗАДАЧЕЙ БУДЕТ НАПИСАТЬ ПРОГРАММУ
НА ЯЗЫКЕ ПРОГРАММИРОВАНИЯ С++. ВЫ ДОЛЖНЫ
НАПИСАТЬ ТРИ ПРОГРАММЫ, ИЛЛЮСТРИРУЮЩИЕ ПРОЦЕСС
РАБОТЫ ВСЕХ ВИДЫ АЛГОРИТМА: ЛИНЕЙНОГО,
РАЗВЕТВЛЯЮЩЕГОСЯ, ЦИКЛИЧЕСКОГО.
Пример:
Написать программу подсчёта длины
окружности, зная ее радиус.
Математическое решение:
L=2*Pi*R
46

47. Задание 3. написать программу для решения следующей задачи: Вычислить сумму натуральных четных чисел, не превышающих N.

ЗАДАНИЕ 3. НАПИСАТЬ ПРОГРАММУ ДЛЯ РЕШЕНИЯ
СЛЕДУЮЩЕЙ ЗАДАЧИ:
ВЫЧИСЛИТЬ СУММУ НАТУРАЛЬНЫХ ЧЕТНЫХ ЧИСЕЛ, НЕ
ПРЕВЫШАЮЩИХ N.
Входные данные: N - целое число.
Выходные данные: S - сумма четных чисел.
Промежуточные данные: i - переменная,
принимающая значения от 2 до N с шагом 2,
следовательно, также имеет целочисленное
значение.
47

48. Блок-схема решения этой задачи представлена на рис. 2.

БЛОК-СХЕМА РЕШЕНИЯ ЭТОЙ ЗАДАЧИ
ПРЕДСТАВЛЕНА НА РИС. 2.
Рис. 2. Вычисление суммы четных,
натуральных чисел
48

49. Цикл с постусловием do while

ЦИКЛ С ПОСТУСЛОВИЕМ DO WHILE
В отличие от цикла while условие завершения цикла проверяется после
выполнения тела цикла.
Формат цикла do while:
do S while (В);
В - выражение, истинность которого проверяется (условие завершения
цикла);
S - тело цикла: один оператор (простой или блок).
Сначала выполняется оператор S, а затем анализируется значение
выражения В:
- если оно истинно, то управление передается оператору S,
- если ложно - цикл завершается и управление передается на оператор,
следующий за условием В.

50. Пример(do while): программа вывода на экран целых чисел из интервала от 1 до п.

#include <iostream.h>
int main()
{int n, i=1;
cout <<"n="; cin >>n;
do //выводим на экран i, а замет увеличиваем
сout<<i++<<"\t"; //ее значении на единицу
while (i<=n); //до тех пор пока i меньше или равна n
return 0;}

51. Пример(do while): прочитать символы, вводимые с клавиатуры до тех пор, пока не будет введен символ *

#include <iostream.h>
#include<conio.h>
int main()
{char ch;
do ch=getch();
while (ch!=‘*’);
return 0;}

52. Пример(do while): составить блок-схему и написать программу для нахождения суммы нечетных чисел от 0 до 10

#include <iostream.h>
void main()
{int n=1, s=0;
do
{s+=n;
n+=2;}
while (n<=10);
cout<<“n=“<<n<<“\ts=“<<s<<endl;
return 0;}

53. Использование операторов цикла

ИСПОЛЬЗОВАНИЕ ОПЕРАТОРОВ ЦИКЛА
Программа, которая выводит на экран квадраты всех целых чисел от А до В
(А и В целые числа, при этом А<В).
Необходимо перебрать все целые числа из интервала от А до В.
Эти числа представляют собой упорядоченную последовательность, в которой
каждое число отличается от предыдущего на 1.
#include <iostream.h>
#include <iostream.h>
int main()
int main()
{ int a, b;
{ int a, b;
cout <<"a="; cin >>a;
cout <<"a="; cin >>a;
cout <<"b="; cin >>b;
cout <<"b="; cin >>b;
int i=a;
int i=a;
while (i<=b)
do cout<<i*i++<<"\t";
cout<<i*i++<<"\t";.
while (i<=b);
return 0;}
return 0;}
Выражение i*i++ (значение которого выводится на экран в теле каждого из циклов)
С учетом приоритета в начале выполнится операция умножение, результат которой
будет помещен в выходной поток, а затем постфиксный инкремент увеличит значение i
на 1.

54. задание

ЗАДАНИЕ
Написать программу, которая выводит на экран
квадраты всех четных чисел из диапазона от А до
В (А и В целые числа, при этом А<В).
(решить с помощью трех оператора цикла);
English     Русский Rules