Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
46
Добавлен:
28.03.2015
Размер:
252.93 Кб
Скачать

Условия, выбор и циклы

Глава 2 Условия, выбор и циклы

Программы, которые мы рассмотрели в первой главе, были достаточно простыми и заключались лишь в последовательном выполнении инструкций. Исходные данные на эту последовательность не влияли, и шаги алгоритма были одни и те же независимо от действий пользователя. В реальных ситуациях необходимо выполнять те или иные действия в зависимости от определенных входных значений (часто не буквально входных значений, а результатов текущих вычислений). Например, из курса математики вы знаете, что соотношения для нахождения решения квадратного уравнения различаются в зависимости от параметров (коэффициентов) этого уравнения. В языках С/С++, как и в других языках программирования, имеются средства для реализации подобных ситуаций — несколько вариантов структур условия.

В большом числе случаев при построении алгоритмов требуется выполнять периодически повторяющиеся действия. Для этого в языках программирования существуют циклы. Циклили циклический вычислительный процесс характеризуется повторением одних и тех же действий над различными данными. Числом повторений цикла управляет специальная переменная, называемаясчетчикомцикла. На счетчик накладывается условие, определяющее, до каких пор следует выполнять цикл. Повторяемый блок вычислений называюттеломцикла. В цикле должно быть обеспечено изменение значения счетчика, чтобы он мог завершиться через конечное число шагов. Однократное выполнение тела цикла называют егошагом.

В организации цикла часто подразумевается, что число шагов цикла (повторений) известно заранее. Однако встречаются и ситуации, когда количество прохождений цикла заранее неизвестно. Оно определяется лишь постепенно после некоторого количества повторений. В этом случае применяется другая разновидность цикла — это цикл с условием. В языках С/С++ предусмотрено два варианта цикла с условием:

  • условие проверяется перед телом цикла;

  • условие проверяется после тела цикла.

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

Структура условия

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

Познакомимся со структурой условия на простом практическом примере программной разработки. Так, задача заключается во вводе числа (в общем случае — дробного) с клавиатуры и его последующем анализе. Сам анализ достаточно простой: если число меньше 5, то его квадрат выводится на экран. В противном случае (если данное условие не выполняется) на экран ничего не выводится.

В листинге 2.1 приведена программа, которая решает данную задачу.

Листинг 2.1. Пример использования неполной формы структуры условия

#include <iostream>

using namespace std;

#include <conio.h>

void main()

{ float Z;

cout << " Input Z ";

cin >> Z;

cout << "\n";

if ( Z < 5)

cout << Z*Z;

_getch();

}

Данную разработку дополним блок-схемой (рис. 2.1). Здесь использован новый элемент в виде ромба (блок с названием "решение"), который имеет один вход и два выхода. В зависимости от выполнения указанного внутри ромба условия последующее действие организуется по одному из двух направлений. Технически данный элемент блок-схемы реализуется с помощью структуры if, формат которой выглядит следующим образом:

if ( условие )

оператор ;

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

if ( условие )

оператор;

else

оператор;

В этом случае при выполнении условия производится выполнение оператора (или нескольких операторов, что будет показано далее) между ключевыми словами if иelse. Если же условие не выполняется, то выполняется оператор (операторы), расположенные после else.Таким образом, в этом случае всегда выполняется одна из двух групп операторов.

Рис. 2.1. Блок-схема к программе листинга 2.1

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

Листинг 2.2. Пример использования полной формы структуры условия

#include <iostream>

using namespace std;

#include <conio.h>

#include <math.h>

void main()

{ float Z;

cout << " Input Z ";

cin >> Z;

cout << "\n";

if ( Z < 5)

cout << pow(Z,2);

else

cout << sqrt(Z);

_getch();

}

Рис. 2.2. Блок-схема к программе листинга 2.2

Разумеется, приведенные примеры являются ограниченными в том плане, что после служебных слов ifиelseмы использовали только одну строку (один оператор). Если же требуется выполнить несколько операторов подряд, то их заключают в блок, образуемый фигурными скобками. Модернизация (в большей степени искусственная) предыдущей программы с целью демонстрации включения таких блоков приведена в листинге 2.3.

Листинг 2.3. Пример оператора условия с использованием блоков

#include <iostream>

using namespace std;

#include <conio.h>

#include <math.h>

void main()

{ float Z;

cout << " Input Z ";

cin >> Z;

cout << "\n";

if ( Z < 5)

{ cout << "Z=";

cout << pow(Z,2); }

else

{ cout << "Z=";

cout << sqrt(Z); }

_getch();

}

Приведем еще один пример, в котором производится ввод с клавиатуры трех чисел. Далее в случае, если они все равны, на экран выводится соответствующее сообщение. В случаях, если равна только одна пара чисел или если все введенные числа различны, также формируются соответствующие сообщения. Листинг 2.4 содержит текст программы, а на рис. 2.3 приведена блок-схема алгоритма.

Листинг 2.4. Сопоставление трех введенных с клавиатуры чисел

#include <iostream>

using namespace std;

#include <conio.h>

#include <math.h>

void main()

{ int Z,X,W;

cout << " Input Z ";

cin >> Z;

cout << "\n Input X ";

cin >> X;

cout << "\n Input W ";

cin >> W;

if ((X == Z) && (X == W))

cout << " Все числа равны ";

else

{ if ((X == Z) || (W == Z) || (X == W))

cout << "Только два числа равны";

else

cout << "Все числа разные";

}

_getch();

}

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

if (условие1)

оператор1;

else if (условие2)

оператор2;

...

else if (условиеN)

операторN;

else

оператор0;

При использовании такой конструкции последовательно проверяются логические выражения (от первого до N-го). Если одно из этих выражений истинно, то выполняется соответствующий оператор и управление передается на оператор, следующий за данной условной конструкцией. Если все условия ложны, то выполняетсяоператор0(если он задан). При этом число ветвейNнеограниченно, а последней ветви (послеelse) может и не быть.

Рис. 2.3. Блок-схема к программе листинга 2.4

В качестве примера на данную тему рассмотрим такую задачу: необходимо по трем введенным с клавиатуры числам принять решение:

  • если среди данных чисел имеется одно, которое превосходит два других, то его необходимо вывести на экран;

  • если же нет одного превосходящего два других, то необходимо сообщение об этом вывести на экран.

Листинг 2.5 содержит текст программы, а на рис. 2.4 приведена блок-схема алгоритма.

Листинг 2.5. Анализ трех введенных с клавиатуры чисел

#include <iostream>

using namespace std;

#include <conio.h>

#include <math.h>

void main()

{ int Z,X,W;

cout << " Input Z ";

cin >> Z;

cout << "\n Input X ";

cin >> X;

cout << "\n Input W ";

cin >> W;

if ((X > Z) && (X > W))

cout << "X больше двух других чисел";

else if ((Z > X ) && (Z > W))

cout << "Z больше двух других чисел";

else if ((W > X ) && (W > Z))

cout << "W больше двух других чисел";

else

cout << "Среди чисел имеются одинаковые";

_getch();

}

Рис. 2.4. Блок-схема к программе листинга 2.5

К примерам, связанным со структурой условия, мы вернемся в этой главе при рассмотрении многочисленных примеров программных разработок.

Соседние файлы в папке файлы по информатике