- •Лабораторная работа №2. Верификация входных данных. Операции сравнения, логический тип данных, условные и логические выражения.
- •Основные операторы
- •Унарные операторы
- •Операторы равенства
- •Логические, условные операторы и Null-операторы
- •Операторы назначения и анонимные операторы
- •Ассоциативность
- •Добавление скобок
- •Ветвящиеся алгоритмы
- •Ветвление программ
- •Условные переходы
- •Использование составных инструкций сравнения
Ассоциативность
Когда выражение содержит два или более операторов с одинаковым порядком применения, они вычисляются на основе ассоциативности. Запросы с левой ассоциативностью вычисляются слева направо. Например, x * y / z вычисляется как (x * y) / z. Запросы с правой ассоциативностью вычисляются справа налево. Например, оператор присваивания является правоассоциативным. Если бы это было не так, следующий код вызвал бы ошибку.
int a, b, c;
c = 1;
// The following two lines are equivalent.
a = b = c;
a = (b = c);
// The following line, which forces left associativity, causes an error.
//(a = b) = c;
Операторы присваивания и троичный оператор (?:) имеют правую ассоциативность. Все прочие двоичные операторы имеют левую ассоциативность.
Независимо от того, используется ли для операторов в выражении левая ассоциация или правая ассоциация, сначала оцениваются операнд каждого выражения — слева направо. Следующие примеры иллюстрируют порядок оценки операторов и операндов.
Оператор |
Порядок вычислений |
a = b |
a, b, = |
a = b + c |
a, b, c, +, = |
a = b + c * d |
a, b, c, d, *, +, = |
a = b * c + d |
a, b, c, *, d, +, = |
a = b - c + d |
a, b, c, -, d, +, = |
a += b -= c |
a, b, c, -=, += |
Добавление скобок
Можно изменить порядок, установленный приоритетом и ассоциативностью операторов, воспользовавшись скобками. Например, выражение 2 + 3 * 2 в обычном случае будет иметь значение 8, поскольку операторы умножения выполняются раньше операторов сложения. Однако если выражение записано в форме (2 + 3) * 2, сложение выполняется перед умножением и в результате получается 10. Следующие примеры иллюстрируют порядок оценки выражений в скобках. Как и в предыдущих примерах, операнды вычисляются до того, как применяется оператор.
Оператор |
Порядок вычислений |
a = (b + c) * d |
a, b, c, +, d, *, = |
a = b - (c + d) |
a, b, c, d, +, -, = |
a = (b + c) * (d - e) |
a, b, c, +, d, e, -, *, = |
Условное выражение. Тип результата вычисления условного выражения.
Оператор if выбирает оператор для выполнения на основе значения выражения Boolean. В следующем примере переменной result типа Boolean присваивается значение true, а затем она проверяется оператором if. Результат получается следующим: The variable is set to true.
bool result = true;
if (result)
{
Console.WriteLine("The variable is set to true.");
}
else
{
Console.WriteLine("The variable is set to false.");
}
Если выражение в скобках оценивается как "true", то выполняется оператор Console.WriteLine("The variable is set to true."); . После выполнения оператора if управление передается следующему оператору. В этом примере "else" не выполняется.
Если требуется выполнить более одного оператора, условное выполнение нескольких операторов можно организовать, объединив их в блоки с помощью {}, как продемонстрировано в приведенном выше примере.
Оператор, выполняемый после проверки условия, может быть любого типа, включая другой оператор if, вложенный в оригинальный оператор if. Во вложенных операторах if предложение else принадлежит к последнему оператору if, у которого нет соответствующего else. Примеры.
int x = 12;
int y = 18;
if (x > 10)
if (y > 20)
Console.Write("Statement_1");
else
Console.Write("Statement_2");
В этом примере Statement_2 отображается, если условие (y > 20) оценивается как false. Однако если требуется связать Statement_2 с условием (x >10), используйте фигурные скобки:
if (x > 10)
{
if (y > 20)
Console.Write("Statement_1");
}
else
Console.Write("Statement_2");
В этом случае Statement_2 отображается, если условие (x > 10) оценивается как false.
Условный оператор (?:) возвращает одно из двух значений в зависимости от значения логического выражения. Для условного оператора используется следующий синтаксис.
condition ? first_expression : second_expression
condition должен вычисляться в true или false. Если параметр condition имеет значение true, вычисляется выражение first_expression и итог этого вычисления становится результатом. Если параметр condition имеет значение false, вычисляется выражение second_expression и итог этого вычисления становится результатом. В любом случае вычисляется только одно из двух выражений.
Либо first_expression и second_expression должны быть одинакового типа, либо должно существовать неявное преобразование из одного типа в другой.
Можно выразить расчеты, которые в другом случае требовали бы уточнения конструкции if-else, воспользовавшись условным оператором. Например, в следующем коде использует используется сначала оператор if, а затем условный оператор для проверки на возможную ошибки деления на нуль перед вычислением функции sin.
if(x != 0.0) s = Math.Sin(x)/x; else s = 1.0;
s = x != 0.0 ? Math.Sin(x)/x : 1.0;
Условный оператор является правоассоциированным Выражение a ? b : c ? d : e вычисляется как a ? b : (c ? d : e), а не как (a ? b : c) ? d : e.
Условный оператор перегрузить нельзя.
class ConditionalOp
{
static double sinc(double x)
{
return x != 0.0 ? Math.Sin(x) / x : 1.0;
}
static void Main()
{
Console.WriteLine(sinc(0.2));
Console.WriteLine(sinc(0.1));
Console.WriteLine(sinc(0.0));
}
}
Логический тип данных.
Для представления логического типа данных используется такой тип как bool. Значения данного типа могут принимать одно из двух доступных значений – true или false. Также особенность работы в Си Шарп с логическими типами данных заключается в том что здесь нету возможности взаимного преобразования логических значений в числовые и наоборот.
Ниже приведена программа на Си Шарп демонстрирующая работу с логическим типом данных
// Продемонстрировать применение типа bool.
using System;
class BoolDemo {
static void Main() {
bool b;
b = falser;
Console .WriteLine ( «b равно 11 + b) ;
b = true;
Console.WriteLine(«b равно » + b);
// Логическое значение может управлять оператором if.
if(b) Console.WriteLine(«Выполняется.»);
b = false;
if(b) Console.WriteLine(«He выполняется.»);
// Результатом выполнения оператора отношения
// является логическое значение.
Console.WriteLine(«10 > 9 равно » + (10 > 9) ) ;
}
}
Эта программа дает следующий результат.
b равно False
b равно True
Выполняется. 10 > 9 равно True
При работе данной программы можно заметить несколько занятных особенностей.
Для управления оператором if достаточно самого значения переменной типа bool
Когда выводиться на экран значение типа bool при использовании метода WriteLine () на экране монитора буде появляться значение «True» или «False».
При выполнении оператора отношения мы получим логическое значение
Логические операции
Логические, условные операторы и Null-операторы
Категория |
Выражение |
Описание |
Логическое И |
x & y |
Целочисленное поразрядное AND, логическое AND |
Логическое исключающее XOR |
x ^ y |
Целочисленное поразрядное исключающее XOR, логическое исключающее XOR |
Логическое ИЛИ |
x | y |
Целочисленное поразрядное OR, логическое OR |
Условное AND |
x && y |
Вычисляет y только если x имеет значение true |
Условное OR |
x || y |
Вычисляет y только если x имеет значение false |
Объединение нулей |
x ?? y |
Равно y, если x — нулевое, в противном случае равно x |
Условная |
x ?: y : z |
Равно y, если x имеет значение true, z если x имеет значение false |
Таблица истинности
Таблица истинности
О п е р а ц и и
Операнды || & & ^
true,true true true false
true,false true false true
false,true true false true
false,false false false false
!
true false
false true