Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб№2.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
140.29 Кб
Скачать

Лабораторная работа №2

Тема: «Программы линейной и разветвляющейся структуры»

Цель: знакомство с правилами записи и использования операций сравнения, отношения; усвоение правил записи условного оператора if в полной и сокращенной формах; оператора множественного выбора switch; формирование навыков и умений записи простых и составных логических условий; применения условной операции, условного оператор, оператора множественного выбора для программирования разветвляющихся алгоритмов.

Теоритические сведения.

Операции сравнения

<,<=,>,>=,==,!= Меньше, меньше равно, больше,

больше равно, равно, не равно.

Операции сравнения определены на множестве операндов арифметического типа. Допускается также сравнение значений адресов в памяти ЭВМ. Следующая таблица демонстрирует зависимость результата сравнения от значений операндов Val1 и Val2. Результат сравнения всегда целочисленный и может принимать одно из двух значений: 0 и 1. При этом 0 означает ложь, а 1 - истину.

Операция

Смысл

== (два знака "равно")

Равно

!=

Не равно

>

Больше, чем

<

Меньше, чем

>=

Больше или равно

<=

Меньше или равно

Логические бинарные операции

Операция

Смысл

&&

и

||

или

!

не

Операция с тремя операндами

?: Условная операция.

Единственная в C++ операция с тремя операндами. Первое выражение-операнд располагается слева от знака ?, второе выражение-операнд располагается между знаками ? и :, третье выражение-операнд - справа от знака :. Выполнение условной операции начинается с вычисления значения самого левого операнда. Если его значение оказывается отличным от 0, то вычисляется значение второго операнда, которое и становится значением выражения. Если значение первого операнда оказывается равным 0, то вычисляется значение третьего операнда, и тогда это значение становится значением выражения.

(x < 10)? x = 25: x++

Условный оператор if

Этот оператор используется тогда, когда необходимо проверить какое-то условие, и в зависимости от проверки принять то или иное решение. Общей формой этого оператора является:

If (логическоеВыражение) {

оператор1;

оператор2;

} else {

оператор3;

оператор4;

}

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

Замечание 1. Иногда нет необходимости в блоке else{операторы;}. В этом случае этот блок просто не пишется.

Замечание 2. При проверке условия допускается использование арифметических операций (в том числе инкремент и декремент)

В современных системах C++ для контроля за управлением в различных инструкциях используются булевские значения true и false.

Замечание 3.Одна из "ловушек" C++ заключается в том, что операторы равенства и присваивания визуально похожи. Выражение а = = b является проверкой на равенство, тогда как а = b — это выражение присваивания. Одна из наиболее распространенных ошибок программирования на C++ может выглядеть как-нибудь так:

if (i = 1)

//делать что-нибудь

Конечно, подразумевалось

if (i == 1)

//делать что-нибудь

В первой инструкции if переменной i присваивается значение 1, и результат выражения присваивания также равен 1, поэтому условие в скобках будет всегда выполнено (не ноль, то есть true). Подобную ошибку бывает очень трудно найти.

Логические операторы !, && и || вырабатывают булевское значение true или false. Логическое отрицание может быть применено к любому выражению. Если выражение имело значение false, то его отрицание выработает true.

Приоритет && выше, чем ||, но оба оператора имеют более низкий приоритет, чем все унарные, арифметические операторы и операторы сравнения. Порядок их выполнения — слева направо.

Условный оператор ?: необычен тем, что это тройной оператор. Он принимает в качестве операндов три выражения. В конструкции

expr1 ? expr2 : ехрr3

первым вычисляется выражение expr1. Если оно истинно, то вычисляется expr2, и оно становится значением условного выражения в целом. Если expr1 ложно, то вычисляется ехрr3, и уже оно становится значением условного выражения в целом.

В следующем примере условный оператор используется для присваивания переменной х наименьшего из двух значений: х = (у < z) ? у : z;

Скобки здесь не обязательны, так как оператор сравнения имеет более высокий приоритет, чем оператор присваивания. Однако, использование скобок — это хороший стиль, поскольку с ними ясно, что с чем сравнивается. Тип условного выражения expr1 ? expr2 : ехрr3 определяется операндами expr2 и ехрr3. Если они разных типов, то применяются обычные правила преобразования. Тип условного выражения не может зависеть от того, какое из двух выражений expr2 или ехрr3 будет вычислено. Порядок выполнения условных операторов ?: — справа налево.

Пример:

#include < iostream.h >

// Необходимо определить принадлежит ли число, введенное пользователем, интервалу (1, 10).

void main()

{ int i;

cout << "Input i: " << "\n";

cin >> i;

// Здесь мы используем вложенный оператор if

if ( i > 1 )

if (i < 10 )

cout << " i принадлежит интервалу (1, 10)"<< "\n";

else

cout << " i не принадлежит интервалу (1, 10)" << "\n"; }

Пример:

#include < iostream.h >

// Необходимо определить принадлежит ли число, введенное пользователем, интервалу (1, 10).

void main()

{

int i;

cout << "Input i: " << "\n";

cin >> i;

if ( i > 1 && i < 10 )

cout << " i принадлежит интервалу (1, 10)"<< "\n";

else

cout << " i не принадлежит интервалу (1, 10)" << "\n";

}

Пример:

На плоскости нарисовано кольцо с центром в точке (x0,y0). И радиусами границ r1<r2. Кроме того, на этой же плоскости дана точка с координатами (x, y).

Необходимо определить, принадлежит ли эта точка кольцу. Если логическое выражение r1<L<r2 верно, то точка принадлежит кольцу. Если же хотя бы одно из этих условий не выполнено, то точка не принадлежит кольцу. Программа, реализующая это решение, приведена ниже:

// Точка и кольцо

#include <iostream.h>

#include <math.h>

void main() {

// Объявление переменных

int x0, y0, r1, r2, x, y;

float L;

// Пусть пользователь введет данные

cout<<"Input coordinates of circle’s center (X0, Y0): ";

cin>>x0>>y0;

cout<<"Input circle radiuses R1 and R2: ";

cin>>r1>>r2;

cout<<"Input point coordinates (X, Y): ";

cin>>x>>y;

L = sqrt(pow(x - x0, 2) + pow(y - y0, 2));

if ((r1 < L) && (L < r2 )) {

cout<<"This point is situated inside the circle.\n";

} else {

cout<<"This point is not situated inside the circle.\n";

}

}

В этой программе появилось несколько новых элементов. Во-первых, это функция sqrt(), которая вычисляет квадратный корень и входит в состав библиотеки math.h.