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

Ассоциативность

Когда выражение содержит два или более операторов с одинаковым порядком применения, они вычисляются на основе ассоциативности. Запросы с левой ассоциативностью вычисляются слева направо. Например, 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.WriteLineb равно » + 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