Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЛР3 С#1 Линейные и разветвляющиеся алгоритмы

.pdf
Скачиваний:
0
Добавлен:
25.02.2024
Размер:
2.49 Mб
Скачать

 

 

 

Таблица 1

Тип C#

Тип

Длина

Диапазон значений

.NET Framework

(байт)

 

 

 

 

Целые типы

 

 

 

 

sbyte

System.SByte

1

от -128 до 127

 

 

 

 

byte

System.Byte

1

от 0 до 255

 

 

 

 

short

System.Intl6

2

от -32768 до 32767

 

 

 

 

ushort

System.UIntl6

2

от 0 до 65535

 

 

 

 

int

System.Int32

4

от -2147483648 до 2147483647

 

 

 

 

uint

System.UInt32

4

от 0 до 4294967295

 

 

 

 

long

System.Int64

8

от -9223372036854775808

до 9223372036854775807

 

 

 

 

 

 

 

ulong

System.UInt64

8

от 0 до 18446744073709551615

 

 

 

 

 

Вещественные типы

 

 

 

 

float

System.Single

4 (7)

от 1,5 10-45 до 3,4 1038

 

 

 

 

double

System.Double

8(16)

от 5,0 10-324 до 1,7 10308

 

 

 

 

decimal

System.Decimal

12(28)

от 1,0 10-28 до 7,9 1028

 

 

 

 

 

 

Логический тип

 

 

 

 

bool

System.Boolean

2

Булево значение, которое может иметь

значение либо true, либо false

 

 

 

 

 

 

 

 

 

Символьный тип

 

 

 

 

 

 

 

Одиночный символ Unicode,

char

System.Char

1

сохраняемый в виде целого числа в

 

 

 

диапазоне от 0 до 65535

 

 

Строковый тип

string

System.String

 

Строка символов в кодировке Unicode

 

 

 

 

Примечание. Символ u в начале имен некоторых типов является сокращением от

слова unsigned (без знака). Для вещественных типов в скобках указана точность.

Формат объявления констант:

const Тип данных Имя константы = Значение;

Формат объявления переменных:

Тип данных Имя переменной [= Значение];

31

Примеры объявлений:

const double с = 5.9732;

int a = 1;

int i,j,k;

Double a, b, c;

2.6.2Преобразование типов

Впрограммировании нередко значения переменных одного типа присваиваются переменным другого типа.

Например,

int i = 10;

float f;

f = i; //Присвоить целое значение переменной типа float

Значение переменной i сначала преобразуется в тип float, а затем

присваивается переменной f.

Неявное преобразование типов происходит автоматически при

следующих условиях:

-оба типа совместимы;

-диапазон представления чисел целевого типа шире, чем у исходного типа.

Если оба эти условия удовлетворяются, то происходит расширяющее

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

Потеря данных здесь невозможна, компилятор будет неявным образом расширять каждую переменную типа short до типа int.

32

Приведение типов – это команда компилятору преобразовать результат вычисления выражения в указанный тип.

Например:

int a = 2;

byte b = (byte)(a);

Некоторые функции приведения типов

Откуда

Куда

 

 

byte

char

 

 

short

byte, char

 

 

int

byte, short, char

 

 

char

byte, short

 

 

double

byte, short, int, char

 

 

Если приведение типов приводит к сужающему преобразованию, то часть информации может быть потеряна.

Например, когда значение с плавающей точкой приводится к целочисленному, то в результате усечения теряется дробная часть этого числового значения.

Double a = 2.55;

int a = 256;

int b = (int)(a);

byte b = (byte)(a);

Результат: 2

Результат: 0

Условия переполнения (overflow) и потери значимости

(underflow) происходят без выдачи ошибки.

В качестве меры безопасности потери данных в С# предусмотрена операция checked, благодаря которой, компилятор С# генерирует дополнительные инструкции, обеспечивающие проверку на предмет условий переполнения, которые могут возникать в результате сложения, умножения,

вычитания или деления двух числовых типов данных. Тогда в случае возникновения условия переполнения во время выполнения будет генерироваться исключение OverflowException (рис. 25).

33

Рисунок 25 – Исключение OverflowException

Метод Parse. Позволяет преобразовать строку символов в указанный тип данных:

Double y;

Int x;

String S, s;

//Преобразование строки S в целый тип данных

x = Int32.Parse(S);

//Преобразование строки s в вещественный тип данных

y = Double.Parse(s);

Методы класса Convert. Данный класс определен в пространстве имен System, содержит 15 статических методов вида

ToType,

где Type может принимать значения от Boolean до UInt64 для всех встроенных типов.

Пример использования класса Convert для преобразования типов:

Double y;

Int x;

//Приведение вещественной y переменной к целому типу

x = Convert.ToInt32(y);

//Приведение целой переменной x к вещественному типу

y = Convert.ToDouble(x);

34

2.6.3Оператор присваивания

Формат простого оператора присваивания:

Элемент = Выражение

Элементом может быть простая скалярная переменная, свойство или

элемент массива.

Составной оператор присваивания позволяет сократить запись

присвоения. Например, x +=

10 это краткий эквивалент оператора

x = x + 10.

 

 

 

 

Примеры составных операторов присваивания

 

 

 

 

 

 

Пример

 

Пояснение

 

 

 

 

 

 

 

y += x

 

y = y + x

 

 

 

 

 

 

 

y -= x

 

y = y - x

 

 

 

 

 

 

 

y *= x

 

y = y * x

 

 

 

 

 

 

 

y /= x

 

y = y / x

 

 

 

 

 

 

 

y %= x

 

y = y % x

 

 

 

 

 

 

Любое выражение состоит из операндов и операторов, которые выполняются над операндами. Для записи сложных выражений используются круглые скобки. В зависимости от того, какие операторы используются в выражениях, различают арифметические, логические и строковые выражения.

35

В

арифметических

выражениях

могут

использоваться

арифметические операторы, а также операторы инкремента и декремента в

пре- и постфиксной форме.

 

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

Оператор

Пример

Результат

использования

 

 

 

 

 

 

 

varl присваивается результат сложения

+

varl = var2 + var3;

 

 

 

значений var2 и var3

 

 

 

 

 

varl присваивается результат вычитания

-

varl = var2 - var3;

 

 

 

значения var3 из значения var2

 

 

 

 

 

varl присваивается результат умножения

*

varl = var2 * var3;

 

 

 

значений var2 и var3

 

 

 

 

 

varl присваивается результат деления

/

varl = var2 / var3;

 

 

 

значения var2 на значение var3

 

 

 

 

 

varl присваивается остаток деления значения

%

varl = var2 % var3;

 

 

 

var2 на значение var3

 

 

 

Примечание. Типы, определенные пользователем, для операндов, участвующих в операции деления, влияют на результат операции.

При делении двух целых чисел результат всегда является целочисленным. Например, результат выражения 7 / 3 равняется 2. Чтобы получить частное в виде вещественного числа, необходимо присвоить делителю или делимому вещественный тип float или double.

36

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

Оператор

Пример

Результат

использования

 

 

 

 

 

 

++ var;

var увеличивается на 1

++

 

 

 

var2 увеличивается на 1

 

varl = ++ var2;

 

 

 

varl присваивается значение var2

 

 

 

 

-- var;

var уменьшается на 1

--

 

 

 

var2 уменьшается на 1

 

varl = -- var2;

 

 

 

varl присваивается значение var2

 

 

 

Примечание. Префиксная форма: операнд обрабатывается перед выполнением

любых других вычислений в выражении.

 

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

Оператор

Пример

Результат

использования

 

 

 

 

 

 

var ++;

var увеличивается на 1

++

 

 

 

varl присваивается значение var2

 

varl = var2 ++;

 

 

 

var2 увеличивается на 1

 

 

 

 

var --;

var уменьшается на 1

--

 

 

 

varl присваивается значение var2

 

varl = var2 --;

 

 

 

var2 уменьшается на 1

 

 

 

Примечание. Постфиксная форма: операнд обрабатывается после выполнения

всех остальных вычислений в выражении.

 

37

В логических выражениях возможно использовать логические

операторы и операторы сравнения

 

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

Оператор

Пример

Результат

использования

 

 

 

 

 

==

 

Результат имеет значение true, если

varl == var2;

var1 равна var2, иначе false

 

 

 

 

 

!=

 

Результат имеет значение true, если

varl != var2;

 

 

 

var1 не равна var2, иначе false

 

 

 

>

 

Результат имеет значение true, если

varl > var2;

var1 больше var2, иначе false

 

 

 

 

 

 

 

Результат имеет значение true, если

>=

varl >= var2;

var1 больше или равна var2, иначе

 

 

false

 

 

 

<

 

Результат имеет значение true, если

varl < var2;

var1 меньше var2, иначе false

 

 

 

 

 

 

 

Результат имеет значение true, если

<=

varl <= var2;

var1 меньше или равна var2, иначе

 

 

false

 

 

 

38

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

Оператор

Пример

Результат

использования

 

 

 

 

 

!

var1 = !var2;

Отрицание НЕ

 

 

 

 

var1= var2 &

 

&

 

 

 

var3;

 

 

 

Логическое умножение И

 

var1= var2 &&

 

 

&&

 

 

 

var3;

 

 

 

 

 

var1= var2 |

 

|

 

 

 

var3;

 

 

 

Логическое сложение ИЛИ

 

var1= var2 ||

 

 

||

 

 

 

var3;

 

 

 

 

^

var1= var2 ^

Логическое исключающее сложение

 

 

 

var3;

ИЛИ

 

 

 

Примечание. Операторы && и & (|| и |) дают одинаковый результат, но способ получения результата разный. При использовании операторов & и | всегда вычисляются оба операнда. При использовании оператора &&, если значением первого операнда является false, значение второго операнда не рассматривается, так как результат все равно будет false. Точно так же и оператора | | будет всегда возвращать true, если значением первого операнда является true, каким бы ни было значение второго операнда.

Применение операторов && и || вместо & и | позволяет обеспечить более высокую производительность кода.

39

2.6.4Использование математических методов

Втаблице представлен неполный список математических методов класса System.Math библиотеки .NET Framework, предназначенный для выполнения некоторых математических операций.

Метод

Назначение

 

 

Abs(a)

абсолютное значение (модуль) числа а

 

 

Acos(a)

арккосинус числа а

 

 

Asin(a)

арксинус числа а

 

 

Atan(a)

арктангенс числа а

 

 

Cos(a)

косинус числа а

 

 

Sin(a)

синус числа а

 

 

Tan(a)

тангенс числа а

 

 

Log(a)

натуральный логарифм числа а

 

 

Log10(a)

десятичный логарифм указанного числа а

 

 

Exp(a)

экспоненту числа (ea → Exp(a))

 

 

Pow(a,b)

число а в степень b

 

 

PI()

число (аргументы не передаются)

 

 

Sqrt(a)

корень квадратный числа а

 

 

Формат вызова необходимого математического метода:

Math.Имя_метода(список аргументов)

Например, Math.Sin(x) – возвращает значение sin(x).

Для того чтобы всякий раз не прописывать имя класса Math, а использовать

только имя метода можно в начале кода указать следующую директиву

using static System.Math;

40