Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab2.docx
Скачиваний:
3
Добавлен:
23.08.2019
Размер:
188.42 Кб
Скачать
    1. Условное выражение

В C#, как и в C++, разрешены условные выражения. Конечно, без них можно обойтись, заменив их условным оператором. Вот простой пример их использования, поясняющий синтаксис их записи:

//Условное выражение

int a = 7, b = 9, max;

max = (a > b) ? a : b;

Условное выражение начинается с условия, заключенного в круглые скобки, после которого следует знак вопроса и пара выражений, разделенных двоеточием " : ". Условие задается выражением типа bool. Если оно истинно, то из пары выражений выбирается первое, в противном случае результатом является значение второго выражения. В данном примере переменная max получит значение 9.

Заметьте, условное выражение является примером тернарного выражения - выражения с тремя операндами. И здесь, как и в случае условных логических операций, не требуется, чтобы все операнды были определены. Если булевский операнд определен и имеет значение true, то вычисляется второй операнд, а третий операнд не вычисляется и может быть в этот момент не определен.

    1. Инкремент и декремент

Операции увеличения и уменьшения на 1 (++ и --). Имеют две формы записи – префиксную и постфиксную. В префиксной форме сначала изменятся операнд, а затем его значение становится результирующим значением выражения, а в постфиксной форме значением выражения является исходное значения операнда, после чего он изменяется.

static void Main()

{ int x = 3, y = 3;

Console.WriteLine( "Значение префиксного выражения: {0} \n", ++x );

Console.WriteLine ( "Значение постфиксного выражения: {0} \n", y++ );

Console.WriteLine ( "Значение х после приращения: {0} \n", x );

Console.WriteLine ( "Значение у после приращения: {0} \n", у );

}

Результат работы программы:

Значение префиксного выражения: 4

Значение постфиксного выражения: 3

Значение х после приращения: 4

Значение у после приращения: 4

В справочной системе утверждается, что к высшему приоритету относятся постфиксные операции x++ и x--, это нашло отражение в таблице 2.1. Префиксные операции имеют на единицу меньший приоритет.

Следует также заметить, что запись в C# выражения < --x++ > приведет к ошибке.

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

x++; y--;

В этом случае фактически исчезает побочный эффект, являющийся опасным средством, и операции используются как краткая запись операторов:

x = x + 1; y = y - 1;

    1. Арифметические операции

В языке C# имеются обычные для всех языков арифметические операции - "+, -, *, /, %". Все они перегружены. Операции "+" и "-" могут быть унарными и бинарными. Унарные операции приписывания знака арифметическому выражению имеют наивысший приоритет среди арифметических операций. К следующему приоритету относятся арифметические операции типа умножения, к которому относятся три операции - умножения, деления и взятия остатка. Все эти операции перегружены и определены для разных подтипов арифметического типа. Следует, однако, помнить, что арифметические операции не определены над короткими числами (byte, short) и начинаются с типа int.

Операция деления "/" над целыми типами осуществляет деление нацело, для типов с плавающей и фиксированной точкой - обычное деление. Операция "%" возвращает остаток от деления нацело и определена не только над целыми типами, но и над типами с плавающей точкой. Тип результата зависит от типов операндов. Приведу пример вычислений с различными арифметическими типами:

/// <summary>

/// Арифметические операции

/// </summary>

static void Ariphmetic()

{

byte b1 = 7, b2 = 3, b3;

b3 = (byte)(b1 / b2);

int n = -7, m = 3, p, q, r;

p = n / m; q = n % m; r = p*m + q;

Console.WriteLine("Операции над типом int");

Console.WriteLine(

"n = {0}, m = {1}, p = n/m = {2}, " +

"q = n % m = {3}, r = p*m + q = {4}",

n, m, p, q, r);

Console.WriteLine("Операции над типом double");

double x = 7.5, y = 3.5, u, v, w;

u = x / y; v = u * y;

w = x % y;

Console.WriteLine(

"x = {0}, y = {1}, u = x/y = {2}, " +

"v = u*y = {3}, w = x % y = {4}",

x, y, u, v, w);

Console.WriteLine("Операции над типом decimal");

decimal d1 = 7.5M, d2 = 3.5M, d3, d4, d5;

d3 = d1 / d2; d4 = d3 * d2;

d5 = d1 % d2;

Console.WriteLine(

"d1 = {0}, d2 = {1}, d3 = d1/d2 = {2}, " +

"d4 = d3*d2 = {3}, d5 = d1 % d2 = {4}",

d1, d2, d3, d4, d5);

}//Ariphmetica

Результаты вычислений показаны на рис. 2.1.

Рис. 2.1.  Результаты работы вызова метода Ariphmetic

Для целых типов можно исходить из того, что равенство n=(n/m)*m+n истинно. Для типов с плавающей точкой выполнение точного равенства x=(x/y)*y следует считать скорее случайным, а не закономерным событием. Законно невыполнение этого равенства, как это происходит при вычислениях с фиксированной точкой.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]