Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курс лекций по Программированию на С++.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
795.65 Кб
Скачать

Операции отношения и логические операции

Прежде чем перейти к рассмотрению циклов и ветвлений, необходимо охарактеризовать операции отношения и логические операции. Количество выполнений цикла, а также выполнение или невыполнение определённой части программы зависит от истинности или ложности вычисляемого выражения. Как правило, такие выражения содержат особый тип операций, называемых операциями отношения (>, <, ==, !=, >=, <=), сравнивающими два значения. Результатом сравнения является значение Истина (true) или Ложь (false).

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

&& - логическое И. Результат этой операции имеет значение true только если оба операнда имеют значение true.

|| - логическое ИЛИ. Результат этой операции имеет значение true, если хотя бы один из операндов имеет значение true.

Базовые конструкции структурного программирования

В теории программирования доказано, что программу для решения задачи любой сложности можно составить только из трёх структур, называемых следованием, ветвлением и циклом. Следованием называется конструкция, представляющая собой последовательное выполнение двух или более операторов. Ветвление задаёт выполнение либо одного, либо другого оператора в зависимости от выполнения какого-либо условия. Цикл задаёт многократное выполнение оператора (см. рис.).

Следование

Цикл

Ветвление

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

Циклы

Действие циклов заключается в последовательном повторении определённой части программы некоторое количество раз. Повторение продолжается до тех пор, пока выполняется соответствующее условие. Когда значение выражения, задающего условие, становится ложным, выполнение цикла прекращается, а управление передаётся оператору, следующему непосредственно за циклом. В С++ имеется три типа циклов: for, while и do while.

Цикл с параметром (for)

Цикл for организует выполнение программы фиксированное число раз. Как правило (хотя и не всегда), этот тип цикла используется тогда, когда число раз, за которое должно повториться исполнение кода, известно заранее. Рассмотрим пример программы, которая выводит на экран квадраты целых чисел.

int main() {

int j; // определение счетчика цикла

for (j=0; j<5; j++) // счетчик меняется от 0 до 4

cout << j * j << " "; // квадрат значения j выводится на экран (0 1 4 9 16)

cout << endl;

getch(); return 0;

}

Таким образом, цикл for имеет следующий формат:

for (инициализирующее выражение; условие выполнения; модифицирующее выражение)

оператор; // тело цикла состоит из одного оператора, который можно заключить в { }

или

for (инициализирующее выражение; условие выполнения; модифицирующее выражение) {

оператор; // тело цикла состоит из нескольких операторов - блок

оператор;

оператор;

}

Обратите внимание на то, что после оператора for отсутствует точка с запятой (;). Это объясняется тем, что оператор for вместе с телом цикла представляют из себя одну конструкцию (или один большой оператор).

Как видно из данного примера инициализирующее выражение выполняется только один раз – в начале выполнения цикла. В данном примере оно инициализирует счетчик цикла нулём. Как правило, условие выполнения цикла содержит в себе операции отношения. Условие проверяется каждый раз перед исполнением тела цикла и определяет, нужно ли исполнять цикл ещё раз или нет. Модифицирующее выражение предназначено для изменения значения счётчика цикла. Часто такое изменение сводится к инкрементированию или декрементированию счётчика (хотя совсем необязательно увеличение или уменьшение на 1). Модификация счётчика происходит после того, как тело цикла полностью выполнилось.

Рассмотрим следующий пример, который демонстрирует использование нескольких операторов в теле одного цикла.

#include <iostream>

#include <iomanip> //для setw

#include <conio>

using namespace std;

int main() {

int n; // счетчик цикла

for(n=1; n<=5; n++) { // цикл от 1 до 5

cout << setw(4) << n; // вывод первого столбца

int cub = n * n * n; // вычисление куба

cout << setw(6) << cub << endl; // вывод второго столбца

}

getch(); return 0;

}

Результат работы программы выглядит следующим образом:

  1. 1

  2. 8

  3. 27

  4. 64

  5. 125

В этой программе хорошо прослеживается момент, связанный с блоками и областью видимости переменных. Важной особенностью блока является то, что определённые внутри него переменные невидимы за его пределами. Здесь мы определили переменную cub внутри блока. Получить доступ к этой переменной вне блока невозможно – она видима лишь внутри фигурных скобок.

Рассмотрим пример, демонстрирующий, что модифицирующий оператор не обязательно должен производить операцию инкрементирования, а может выполнять любую другую операцию. Программа подсчитывает факториал введённого пользователем числа, а в операторе цикла используется декрементирование счётчика цикла.

#include <iostream>

#include <conio>

using namespace std;

int main() {

unsigned int n;

unsigned long fact = 1; // тип long для результата

cout << "Vvedite celoe chislo: ";

cin >> n; // ввод числа

for(int j=n; j>0; j--) // умножение 1 на

fact = fact * j; // или fact *= j

cout << "Faktorial chisla raven " << fact << endl;

getch(); return 0;

}

Д/З

Напишите программу, которая подсчитывает факториал введённого пользователем числа, а в операторе цикла используется инкрементирование счётчика цикла.

Ответ

int main() {

unsigned int n;

unsigned long fact=1; // тип long для результата

cout << "Vvedite celoe chislo: ";

cin >> n; // ввод числа

for(unsigned int j=1; j<=n; j++) // умножение 1 на

fact = fact * j; // или fact *= j

cout << "Faktorial chisla raven " << fact << endl;

getch(); return 0;

}