
Лабораторная работа №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.