- •Тема 2. Условный оператор if
- •Тема 3. Циклы for и while
- •Тема 4. Циклы с неизвестным числом повторений. Вычисление суммы ряда с заданной точностью
- •Тема 5. Цикл do…while. Случайные числа
- •Тема 6. Использование массивов
- •Тема 7. Работа со строками
- •Тема 8. Функции
- •Тема 9. Работа с файлами
- •Тема 10. Использование структур
Тема 3. Циклы for и while
В третьей теме представлены циклы while и for и некоторые операции (присваивания, инкремента).
/* Нахождение суммы целых чисел от 1 до 100 (ответ 5050)
Вариант с циклом while
*/
#include <iostream>
using namespace std;
int main()
{
int sum = 0;
int i = 1;
while (i <= 100) { // сокращенная форма записи для:
sum += i; // sum = sum + i
++i; // i = i + 1
}
cout << "Сумма чисел от 1 до 100 = " << sum;
return 0;
}
Оператор while служит для многократного выполнения некоторых действий в программе и называется цикл «пока». В общем случае цикл «пока» записывается следующим образом:
while (условие) {
действия;
}
Тело цикла, записанное в { } выполняется до тех пор, пока является истинным условие, записанное в ( ) после while. Чтобы конструкция не превратилась в «вечный» цикл, нужно следить, чтобы управляющая переменная, влияющая на завершение цикла, как-то изменялась внутри самого цикла.
Операция присваивания в языке С++ записывается "=", её не следует путать с операцией сравнения, которая обозначается двумя знаками равенства "==". Использование операции присваивания вместо операции сравнения – это одна из распространённых ошибок при переходе с языка Паскаль на С++.
Оператор ++i демонстрирует операцию ++, которая обозначает увеличение на единицу (инкремент). Можно записать i = i + 1, но ++i более кратко и эффективно. Имеется соответствующая операция уменьшения на единицу --. Операции ++ и -- могут быть как префиксные, так и постфиксные. По одной из версий, язык С++, как преемник языка С, получил своё наименование именно благодаря операции инкремента.
Существуют и другие сокращенные формы записи арифметических операций. В общем случае запись вида:
<переменная> <операция>= <выражение>
является сокращенной формой для:
<переменная> = <переменная> <операция> <выражение>
В качестве операции могут выступать арифметические и побитовые логические: –, +, *, /, %, &, |, <<, >> и т.п. Например, выражение prod *= 10 означает, что текущее значение переменной prod надо увеличить в 10 раз.
Переменные могут быть инициализированы во время описания константным выражением, например: int sum = 0. Вообще, давать начальное значение всем переменным – это хорошая практика. В языке С++ переменные, объявленные внутри функции, являются локальными и не инициализируются никаким значением по умолчанию (то есть содержат «мусор»), поэтому перед использованием им обязательно нужно присваивать начальное значение.
/* Нахождение суммы целых чисел от 1 до 100 (ответ 5050)
Вариант с циклом for
*/
#include <iostream>
using namespace std;
int main()
{
int sum = 0;
for (int i = 1; i <= 100; ++i) {
sum += i;
}
cout << "Сумма чисел от 1 до 100 = " << sum;
return 0;
}
Оператор for является более сложным оператором цикла по сравнению с while. Он содержит в заголовке три части, разделенные ";", каждая из которых может быть выражением. Первая часть int i = 1 выполняется один раз перед входом в сам цикл (инициализация). Вторая часть i <= 100 является условием, если оно истинно, то выполняется тело цикла. Затем выполняется третья часть ++i (модификация), после чего снова проверяется условие.
Обратите внимание, что переменная i доступна и существует только внутри цикла for, поскольку она объявлена в заголовке цикла. А область действия переменной i, объявленной перед циклом while в предыдущем примере, простирается до конца функции main.
В заголовке оператора for любая из частей может быть опущена, в предельном случае запись for(;;) обозначает "вечный" цикл. Другой общепринятой записью "вечного" цикла является while(true).
Задания к теме 3
Задание 3–1. [Сумма чётных целых чисел от 1 до N]
Ввести с клавиатуры целое положительное число N. Посчитать сумму чётных целых чисел от 1 до N.
Задание 3–2. [Таблица у = sin(x)]
Напечатать таблицу значений функции у = sin(x), где x изменяется от 0 до 180° с шагом 15. Нарисовать разделительные линии и шапку таблицы. Замечание: библиотечная функция sin(x) принимает значение угла в радианах, а не градусах (π радиан = 180°).
Задание 3–3. [Таблица Фаренгейт–Цельсий]
Соответствие между шкалой Цельсия и шкалой Фаренгейта задается формулой: C = 5/9 * (F – 32).
Напечатать таблицу соответствия двух шкал, если градусы Фаренгейта изменяются от 0 до 300 с шагом 20. Нарисовать разделительные линии и шапку таблицы.
Задание 3–4. [Вычисление x^n для целого неотрицательного n]
Написать программу вычисления x^n, где x – вещественное число, а n – целое неотрицательное. Значения x и n ввести с клавиатуры.
*Задание 3–5. [Вычисление x^n]
Написать программу вычисления x^n, где x – вещественное число, а n – произвольное целое число (в том числе и отрицательное). Значения x и n ввести с клавиатуры.
*Задание 3–6. [Цифры числа]
Ввести с клавиатуры целое положительное число. Напечатать его цифры через пробел в прямом порядке (без ведущих нулей).
Задание 3–7. [«Счастливые» билетики]
Подсчитать число «счастливых» шестизначных билетиков в диапазоне от 100000 до 999999. Билет считается «счастливым», если сумма его первых трёх цифр совпадает с суммой последних трёх. (Ответ: 50412)