Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

книги / Технологии разработки объектно-ориентированных программ на язык C++. Основы структурного программирования на алгоритмическом языке C++

.pdf
Скачиваний:
4
Добавлен:
12.11.2023
Размер:
3.17 Mб
Скачать

Пример: фрагмент программы, в которой считается разность двух введенных чисел.

double a, b, raz; /* Объявляем три переменных, резервируем под них память */

cout << “Введите две переменных” << endl;

/* Выводим на экран строку, заключенную в « » */

cin >> a >> b; /*

Считываем значения. Программа считает первое значение, введенное пользователем с клавиатуры, до пробела или нажатия клавиши перехода на следующую строку – enter, запишет его в переменную а, затем считает следующее значение, введенное пользователем, и запишет его в b

*/

raz = a – b;

cout << “Разность двух введенных чисел равна ” << raz << endl;

Задания для самостоятельной работы:

Напишите фрагмент программы для умножения двух чисел

ивывода на экран результата. Числа задает пользователь. Разработайте блок-схему.

Напишите фрагмент программы, в которой вводятся пять символов и выводятся на экран в обратной последовательности.

21

Глава 6. БЛОК-СХЕМЫ И ОПЕРАТОРЫ БАЗОВЫХ КОНСТРУКЦИЙ СТРУКТУРНОГО ПРОГРАММИРОВАНИЯ

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

6.1. Линейные алгоритмы

Следование – это конструкция последовательного выполнения двух или более операторов. Ветвление – это конструкция, задающая выполнение оператора 1 или оператора 2 в зависимости от выполнения условия. Цикл – это конструкция многократного выполнения оператора, который здесь называется телом цикла.

Рис. 6.1. Блок-схемы базовых конструкций

Обратите внимание на появление стрелок в блок-схеме (рис. 6.1). Линии используются, если переход между операторами идет сверху вниз или слева направо. Если же переход происходит снизу вверх или справа налево, то используется стрелка с указателем направления.

6.2. Алгоритмы ветвления

Оператор if выбирает одно из двух дальнейших действий в зависимости от выполнения условия. После оператора в круглых скобках пишется условие, после которого в фигурных скобках размещается фрагмент программы, который выполняется, если результат проверки условия истина. Далее пишется оператор else, и после

22

него в фигурных скобках размещается фрагмент программы, который выполняется, если результат проверки условия ложь:

if (условие) {

…действия при истинности условия…

}

else {

… действия при ложности условия…

}

Ветвь else может отсутствовать, тогда при ложном условии действие переходит к оператору, находящемуся после ветвления

(рис. 6.2).

Рис. 6.2. Блок-схема полного и неполного ветвлений

Например, необходимо вывести на экран минимальное из трех введенных чисел. С помощью ветвления определяется, какое значение из трех чисел будет минимальным (рис. 6.3).

Программный код пишется после составления блок-схемы:

int a, b, c, min; cin >> a >> b >> c;

min = a; // Предположим, что минимальным будет первое число

if (min>b){ // Если число b меньше а… min = b;} // То минимальным станет b

if (min>c){ // Если же с еще меньше min = c;} // То минимальным станет с

cout << “Минимальное число: ” << min;

23

Рис. 6.3. Пример блок-схемы с ветвлением

24

В данном примере использовалось неполное ветвление, так как при ложном условии значение переменной с именем min не должно было изменяться.

Условие в операторе if не обязательно должно быть выражением. Это может быть любая целочисленная переменная, причем условие будет истинным, если она не равна 0 (любое другое значение переменной – истина). Также это может быть логическая переменная, которая имеет тип данных bool.

Например:

bool a = 0; // Равнозначно записи a = false;

if (a) { // Если значение переменной а истинно cout << “true”;}

else {

cout << a;} /* На экран выведется значение переменной в виде цифры, то есть 0 */

Вложенные условные операторы

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

Пример построения блок-схемы алгоритма с двумя уровнями вложенности представлен на рис. 6.4.

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

int a,

b, c,

min;

 

cin >> a >> b >> c;

 

if (a<b){

 

// Если число b больше а

if (a<c)

{

// Если с больше а

 

min =

a;}

// То минимальное а

else {min = c; }

// Иначе минимальное с

}

 

 

 

else {

 

 

 

if (b<c){

 

// Если же b меньше а и меньше с

 

min =

b;}

// То минимальное b

25

else {min = c; // Иначе минимальное с

}

cout << “Минимальное число: ” << min;

Рис. 6.4. Вложенные условные операторы

Задания для самостоятельной работы:

Разработать блок-схему алгоритма и составить программу. Вводятся четыре переменные, необходимо вывести результат формулы a*b/c*d. Учесть, что переменные могут быть равны 0.

Разработать блок-схему алгоритма и составить программу. Вводятся две переменные, необходимо вывести на экран результат:

26

если x < –4, то на экран выводятся значения у, вычисленного по формуле y = x + 2;

если x >= –4 и x < 4, то на экран выводятся значения у, вычисленного по формуле y = x2 – 3;

если x > 4, то на экран выводятся значения у, вычисленного по формуле y = x3 + 2.

Разработать блок-схему алгоритма и составить программу. Найти минимальный корень уравнения вида a*x = b. Коэффициенты a и b пользователь вводит с клавиатуры.

Переключатель

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

switch (Переключающее выражение) {

case константное_выражение_1: оператор_1; case константное_выражение_2: оператор_2; case константное_выражение_3: оператор_3;

default: оператор;

}

Переключатель работает по следующим правилам:

Управление передается тому case, для которого константное выражение совпало с переключающим. Если нет совпадения, то выполняется оператор в строке default, который может быть только один.

Если default отсутствует и не было совпадений, то компилятор полностью обходит switch и выполняет алгоритм дальше.

Если внутри case не предусмотрен выход или переход, то после него последовательно выполняются все операторы, начиная

стой метки, куда было передано управление!

27

Для того чтобы выйти из case после выполнения всех операторов в этой ветви, нужно написать ключевое слово break.

Представление switch в блок-схемах

Данный оператор имеет свое особое обозначение в блок-схеме. Представим вышерассмотренный пример в виде блок-схемы (рис. 6.5).

Рис. 6.5. Switch в блок-схеме

Как видно из рис. 6.5, для каждого значения переключающего выражения существует своя ветвь, которые после включения сливаются в одну. Каждый оператор break ведет к выходу из данного блока.

Пример работы переключателя:

int a = 3;

switch (a) { // В зависимости от значения а выбирается действие

28

case 1:

{

// Если а равна 1

 

a =

5+a;

 

 

break;}

// Прервать после выполнения

case 2: {

// Если а равна 2

 

a =

a*a;

 

 

break;}

// Прервать после выполнения

case 3: {

// Если а равна 3

(наш случай)

a =

a*a-6;

 

 

break;}

// Прервать после выполнения

case 4: {

// Если а равна 4

 

a =

a+3;

 

 

break;}

// Прервать после выполнения

default: break; // Если нет совпадений, то тоже прервать

}

6.3.Логические операторы

ВС++ существуют специальные логические операторы, позволяющие записывать сложные условия.

Логическое сложение и умножение

&& – логическое умножение, || – логическое сложение. Логическое умножение (логическое ИЛИ) дает истину тогда

и только тогда, когда все связанные с помощью него условия истинны.

Например:

Условие a > 3 && a < 5 будет истинно только для одного целого числа 4.

Логическое сложение (логическое ИЛИ) дает истину тогда, когда хотя бы одно из условий истинно.

Например:

Условие n < 10 || n > 12 будет истинно всегда, кроме чисел из промежутка от 10 до 12.

Если число n = 11, то оба условия не выполнятся и все сложное условие приобретет значение ложь.

Условие И выполняется раньше ИЛИ.

29

Например:

В условии n > 10 && n < 12 || n < 0 && n > –3 сначала проверяется истинность фрагмента n > 10 && n < 12, затем истинность фрагмента n < 0 && n > –3, и если хоть одно из них истинно, то все выражение становится истинным.

Логическое отрицание

Следующий оператор – это «!» (логическое НЕ). Он изменяет текущее значение проверки условия на противоположное.

Например:

Условие 3 < 5 истинно, а условие !(3 < 5) ложно.

Оператор не имеет высшего приоритета среди логических операций. Иными словами, в условии !n > 10 && n < 12 сначала проверяется истинность, действительно ли n > 10, затем это значение меняется на противоположное, и затем выполняется оператор &&. В данном случае истинными будут все значения, меньшие или равные 10.

Изменение приоритета операций

Как и в математике, приоритет операций можно создать самостоятельно, правильно расставив скобки.

Например:

В условии !n > 10 && n < 12 истинны все значения, меньшие или равные 10, а в условии !(n > 10 && n < 12) истинны все значения, большие либо равные 10, и все значения, меньшие либо равные 12.

Задания для самостоятельной работы:

Чему равно значение (b || !b) при различных значениях переменной b (тип bool)?

Чему равно значение (a&b||a) при различных значениях переменных a и b (тип bool)?

30

Соседние файлы в папке книги