836.31K
Категория: ПрограммированиеПрограммирование

Циклы в С++

1.

ЦИКЛЫ В С++

2.

ВИДЫ ЦИКЛОВ
Цикл — это неоднократно повторяющаяся при
выполнении некоторого условия
последовательность действий.
Цикл с предусловием (while())
Цикл с постусловием (do while())
Цикл с параметрами (for())

3.

ЦИКЛ С ПРЕДУСЛОВИЕМ while
while (условие)
{тело цикла;}
или
while (условие)
тело цикла;

4.

ЦИКЛ БУДЕТ ВЫПОЛНЯТЬСЯ ДО ТЕХ ПОР,
ПОКА УСЛОВИЕ, УКАЗАННОЕ В КРУГЛЫХ
СКОБКАХ, ЯВЛЯЕТСЯ ИСТИНОЙ

5.

ЦИКЛ С ПРЕДУСЛОВИЕМ while
1. Цикл while объявляется с использованием ключевого слова while
2. В начале цикла обрабатывается условие.
3. Если его значением является true (любое ненулевое значение), то тогда
выполняется тело цикла. В теле цикла обязательно присутствует
операция, которая влияет на изменение значения переменной,
относительно которой сформулировано условие.
4. После завершения выполнения тела цикла, управление возвращается
обратно к while и процесс проверки условия повторяется.
5. Если условие опять является true, то тогда тело цикла выполняется еще
раз.

6.

ПРИМЕР ПРОГРАММЫ while
Составить программу вывода цифр десятичной системы счисления
#include <iostream>
using namespace std;
int main()
{
int count = 0;
while (count < 10)
{
cout << count << " ";
++count;
}
cout << "done!";
return 0;
}
Результат выполнения программы:
0 1 2 3 4 5 6 7 8 9 done!

7.

К ВОПРОСУ ОБ ОБЛАСТИ ВИДИМОСТИ
ПЕРЕМЕННЫХ
Любые объекты,
объявленные
внутри блока,
видны
исключительно
только в данном
блоке!
#include <iostream>
using namespace std;
int main()
{int count=1; //переменные определены в главной функции
int result=0;//переменные определены в главной функции
while (count <= 6) // итераций будет 6
{ int z; // z создается здесь при каждой итерации
cout << "Enter integer #" << count << ':';
cin >> z;
result += z;
// Увеличиваем значение счетчика цикла на единицу
++count;
} // z уничтожается здесь по новой с каждой итерацией
cout << "The sum of all numbers entered is: " << result;
return 0;
}

8.

ПРИМЕР ПРОГРАММЫ С while
#include <iostream>
Задача: вывести числа от 0 до 50.
using namespace std;
Числа первого десятка с 0 впереди,
int main()
каждый новый десяток начать с новой
{ int count = 1;
строчки
while (count <= 50)
{ // Выводим числа до 10 (перед каждым числом добавляем 0)
if (count < 10)
cout << "0" << count << " ";
else
cout << count << " "; // выводим остальные числа
// Если счетчик цикла делится нацело на 10, вставляем символ новой строки
if (count % 10 == 0)
cout << "\n";
++count; // Увеличиваем значение счетчика цикла на единицу
}
Результат выполнения программы:
return 0;
01 02 03 04 05 06 07 08 09 10
}
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50

9.

ЗАДАЧА 2
Дано натуральное число. Определите, является
ли это число точной степенью числа 2?
#include <iostream>
#include <locale>
using namespace std;
int main()
{setlocale(LC_ALL, "rus"); long number, temp; int stepen = 0;
cout << "Введите число ";cin >> number; temp = number;
while (temp%2==0)
{ temp /= 2;
stepen++;
}
if (temp==1)cout<<endl<<"число "<<number << "- "<< stepen << " числа 2"<< endl;
else cout << "число "<< number << "- не является степенью числа 2"<< endl;
system("pause");
return 0;
}

10.

Вклад в банке составляет x рублей. Ежегодно он
ЗАДАЧА 3 увеличивается на p процентов, после чего дробная часть
копеек отбрасывается. Каждый год сумма вклада
становится больше. Определите, через сколько лет вклад
составит не менее y рублей.
Программа получает на вход три натуральных числа: x, p, y
и должна вывести одно целое число.
#include <locale>
while (x<y) {
using namespace std;
x *= (1 + p / 100.0);
int main()
x *= 100;
x = (int)x;
{setlocale(LC_ALL, "rus");
x /= 100; years++;
double x, p, y;
}
int years = 0;
cout << endl<<years;
cout<< “Введите x,p,y”<<endl; system("pause");
cin >> x >> p >> y;
return 0;
}

11.

ЗАДАЧА 4
Определите сумму всех элементов
последовательности, завершающейся числом 0.
#include <iostream>
#include <locale>
using namespace std;
int main()
{setlocale(LC_ALL, "rus"); int a, summa;
a = -1; summa = 0;
while (cin >> a) {
if (a == 0) break;
summa = summa + a;
}
cout << summa;
system("pause");
return 0;
}

12.

ЦИКЛЫ С ПОСТУСЛОВИЕМ do …while
При выполнении цикла do … while один проход
цикла будет выполнен независимо от условия
do
{тело цикла;}
while (условие);
1. Тело цикла do … while (…); всегда выполняется хотя бы один раз.
2. В теле цикла обязательно присутствует операция, которая влияет на
изменение значения переменной, относительно которой
сформулировано условие.
3. После выполнения тела цикла проверяется условие.
4. Если оно истинно, то выполнение переходит к началу блока do и тело
цикла выполняется снова.

13.

ОРГАНИЗОВАТЬ КОРРЕКТНЫЙ ВВОД В
ПРОГРАММУ КОНЦОВ ОТРЕЗКА [a,b]
#include <iostream>
#include <locale>
using namespace std;
int main()
{setlocale(LC_ALL, "rus"); int a, b;
cout<<"\nВведите концы отрезка[a,b],которые являются натуральными числами"<<endl;
do { cout << " \n Введите целое a>0
while (a<=0);
do { cout << " \n Введите целое b>a
while (a>b);
"; cin >> a;}
cout << "\n Вы правильно ввели концы отрезка" << endl;
system("pause");
return 0;
}
"; cin >> b;}

14.

ОРГАНИЗОВАТЬ КОРРЕКТНЫЙ ВВОД В
ПРОГРАММУ КОНЦОВ ОТРЕЗКА [a,b]
#include <iostream>
#include <locale>
using namespace std;
int main()
{setlocale(LC_ALL, "rus"); int a, b, popitka=0, gran=5;
cout << "\nВведите концы отрезка[a,b],которые являются натуральными числами" << endl;
do {popitka++;
cout << " \n Введите целое a>0
"; cin >> a;
} while ((a <= 0)&&(popitka<gran));
do {popitka++;
cout << " \n Введите целое b>a
"; cin >> b;
} while ((a>b)&&(popitka<gran));
if (popitka<gran)cout << "\n Вы правильно ввели концы отрезка" << endl;
else cout << "\n Вы не поняли условие задания" << endl;
system("pause");return 0;
}

15.

ЦИКЛ С ПАРАМЕТРАМИ
for(действие до начала цикла; условие продолжения
цикла;действия в конце каждой итерации цикла)
{
инструкция цикла 1;
инструкция цикла 2;
инструкция цикла N;
}

16.

Цикл for применяется, если тело цикла
необходимо выполнить определенное число раз

17.

ПРИМЕР ПРОГРАММЫ
Задача: вывести цифры от 0 до 9
#include <iostream>
int main()
{for (int count = 0; count < 10; ++count)
std::cout << count << " ";
return 0;
}
Результат: 0 1 2 3 4 5 6 7 8 9

18.

ПРИМЕР ПРОГРАММЫ
#include <iostream>
int main()
{for (int count = 8; count >= 0; --count)
std::cout << count << " ";
return 0;
}
Результат: 8 7 6 5 4 3 2 1 0

19.

ПРИМЕР ПРОГРАММЫ
float f(float x)
{
float temp;
if (x < 0.5)temp = -x;
else if (x < 1.5)temp = x + 3;
else temp = x * 3;
return temp;
}
int main()
{setlocale(LC_ALL, "rus");
float a=-1, b=2.5, x;
for (x = a; x <= b; x += 0.3)
{cout.width(6);
cout << endl << x << "
" << f(x);
}
cout << endl;
system("pause");
return 0;
}

20.

ОПИСАНИЕ СИНТАКСИСА
• Сначала присваивается первоначальное значение счетчику, после чего
ставится точка с запятой.
• Затем задается конечное значение счетчика цикла. После того, как
значение счетчика достигнет указанного предела, цикл завершится. Снова
ставим точку с запятой.
• Задаем шаг цикла. Шаг цикла — это значение, на которое будет
увеличиваться или уменьшаться счетчик цикла при каждой итерации.

21.

ОСОБЕННОСТИ for: ОБЪЯВЛЕНИЯ
НЕСКОЛЬКИХ ПЕРЕМЕННЫХ
#include <iostream>
int main()
{int aaa, bbb;
for (aaa = 0, bbb = 9; aaa < 10; ++aaa, --bbb)
std::cout << aaa << " " << bbb << std::endl;
return 0;
}
Результат выполнения программы:
0 9
1 8
2 7
3 6
4 5
5 4
6 3
7 2
8 1
9 0

22.

Бесконечные циклы
for (;;)
тело цикла;
Вышеприведенный пример эквивалентен:
while (true)
тело цикла;
Если условие цикла всегда принимает значение true, то и сам цикл будет
выполняться бесконечно
Способы выйти из бесконечного цикла — использовать
операторы return, break, или воспользоваться функцией exit()

23.

ИСПОЛЬЗОВАНИЕ CONTINUE
В случае с циклом for часть инкремента/декремента счетчика попрежнему выполняется даже после выполнения continue
(так как инкремент/декремент происходит вне тела цикла)
Будьте осторожны при использовании оператора continue с
циклами while или do while. Поскольку в этих циклах инкремент
счетчиков выполняется непосредственно в теле цикла, то
использование continue может привести к тому, что цикл станет
бесконечным!

24.

ВЛОЖЕННЫЕ ЦИКЛЫ (while)
#include <iostream>
Результат
выполнения
программы
int main()
1
1 2
{int outer = 1;
1 2 3
while (outer <= 5)
1 2 3 4
{int inner = 1;
1 2 3 4 5
while (inner <= outer)
std::cout << inner++ << " ";
// Вставляем символ новой строки в конце каждого ряда
std::cout << "\n";
outer++;
}
return 0;
}

25.

РЕКОМЕНДАЦИИ ПО ИСПОЛЬЗОВАНИЮ ЦИКЛОВ
For
While
do...while
int sum = 0;
for (int i = 1; i < n; i = i+1)
{
sum = sum + i;
}
int sum = 0;
int i = 1;
while (i < n) {
sum = sum + i;
i = i+1;
}
int sum = 0;
int i = 1;
if (i < n) {
do {
sum = sum + i;
i = i+1;
} while (i < n);
}

26.

РЕКОМЕНДАЦИИ ПО ИСПОЛЬЗОВАНИЮ ЦИКЛОВ
1. Используйте наиболее подходящую форму цикла для решения своей
задачи. Если у вас есть явно выделенный счетчик или тело цикла надо
повторить заданное число раз — используйте For
2. Если перед проверкой условия нужно выполнить тело цикла do...while (такая ситуация редко, но встречается). В остальных случаях используйте while
3. Старайтесь как можно реже применять вечные циклы, а также
операторы continue и break. Эти конструкции резко увеличивают время,
необходимое для понимания вашего кода - он становится сложнее. Перед
их использованием подумайте, можно ли решить вашу задачу «более
элегантным образом».

27.

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

28.

1. Ввод целого числа n.
2. Целое delitel, bool resultat = true;
3. Если (число n меньше или равно 1) или (n четное и n больше, чем 2) ,
то resultat = false.
Иначе delitel = 3
Пока (delitel <=
English     Русский Правила