- •Тема 1. Программирование на c# 8 Типы данных
- •Локальные и глобальные переменные
- •Описание всех встроенных типов языка c# и их основные характеристики.
- •Объявление переменных
- •Синтаксис объявления
- •Выражения
- •Приоритет и порядок выполнения операций
- •Операции "увеличить" и "уменьшить" (increment, decrement)
- •Логические операции
- •Условное выражение
- •Перегрузка операций
- •Выполнение выражения
- •Класс Math и его функции
- •Класс Random и его функции
- •Присваивание
- •Операторы языка c#
- •Операторы перехода
Класс Math и его функции
Кроме переменных и констант, первичным материалом для построения выражений являются функции. Kласс System.Math, содержит стандартные математические функции. Этот класс содержит два статических поля, задающих константы E и PI, а также 23 статических метода. Методы задают:
тригонометрические функции - Sin, Cos, Tan;
обратные тригонометрические функции - ASin, ACos, ATan, ATan2 (sinx, cosx);
гиперболические функции - Tanh, Sinh, Cosh;
экспоненту и логарифмические функции - Exp, Log, Log10;
модуль, корень, знак - Abs, Sqrt, Sign;
функции округления - Ceiling, Floor, Round;
минимум, максимум, степень, остаток - Min, Max, Pow, IEEERemainder.
Класс Random и его функции
Класс Random содержит все необходимые для того чтобы генерировать случайные числа. Класс Random имеет конструктор класса: для того, чтобы вызывать методы класса, нужно вначале создавать экземпляр класса.
Перегруженный метод public int Next() при каждом вызове возвращает положительное целое, равномерно распределенное в некотором диапазоне. Диапазон задается параметрами метода. Три реализации метода отличаются набором параметров:
public int Next () - метод без параметров выдает целые положительные числа во всем положительном диапазоне типа int;
public int Next (int max) - выдает целые положительные числа в диапазоне [0,max];
public int Next (int min, int max) - выдает целые положительные числа в диапазоне [min,max].
Метод public double NextDouble () имеет одну реализацию. При каждом вызове этого метода выдается новое случайное число, равномерно распределенное в интервале [0,1).
Еще один полезный метод класса Random позволяет при одном обращении получать целую серию случайных чисел. Метод имеет параметр - массив, который и будет заполнен случайными числами. Метод описан как public void NextBytes (byte[] buffer). Так как параметр buffer представляет массив байтов, то, естественно, генерированные случайные числа находятся в диапазоне [0, 255].
Присваивание
В большинстве языков программирования присваивание - это оператор, а не операция. Правильно построенное выражение присваивания состоит из левой и правой части. Левая часть - это список переменных, в котором знак равенства выступает в качестве разделителя. Правая часть - это выражение. Выражение правой части вычисляется, при необходимости приводится к типу переменных левой части, после чего все переменные левой части получают значение вычисленного выражения. Операция присваивания выполняется справа налево, поэтому вначале значение выражения получит самая правая переменная списка левой части, при этом значение самого выражения не меняется. Затем значение получает следующая справа по списку переменная - и так до тех пор, пока не будет достигнут конец списка.
Операторы языка c#
Блок или составной оператор
С помощью фигурных скобок несколько операторов языка (возможно, перемежаемых объявлениями) можно объединить в единую синтаксическую конструкцию, называемую блоком или составным оператором:
{
оператор_1
...
оператор_N
}
Синтаксически блок воспринимается как единичный оператор и может использоваться всюду в конструкциях, где синтаксис требует одного оператора. Тело цикла, ветви оператора if, как правило, представляются блоком.
Пустой оператор
Пустой оператор - это "пусто", завершаемое точкой с запятой. Иногда полезно рассматривать отсутствие операторов как существующий пустой оператор. Синтаксически допустимо ставить лишние точки с запятой, полагая, что вставляются пустые операторы. Например, синтаксически допустима следующая конструкция:
for (int j=1; j<5; j++)
{;;;};
Оператор if
Синтаксис оператора if:
if(выражение_1) оператор_1
else if(выражение_2) оператор_2
...
else if(выражение_K) оператор_K
else оператор_N
Выражения if должны заключаться в круглые скобки и быть булевого типа. Точнее, выражения должны давать значения true или false. Арифметический тип не имеет явных или неявных преобразований к булевому типу. Каждый из операторов может быть блоком - в частности, if-оператором. Поэтому возможна и такая конструкция:
if(выражение1) if(выражение2) if(выражение3) ...
Ветви else и if, позволяющие организовать выбор из многих возможностей, могут отсутствовать. Может быть опущена и заключительная else-ветвь. В этом случае краткая форма оператора if задает альтернативный выбор - делать или не делать - выполнять или не выполнять then-оператор. Выражения if проверяются в порядке их написания. Как только получено значение true, проверка прекращается и выполняется оператор (это может быть блок), который следует за выражением, получившим значение true. С завершением этого оператора завершается и оператор if. Ветвь else, если она есть, относится к ближайшему открытому if.
Оператор switch
Частным, но важным случаем выбора из нескольких вариантов является ситуация, при которой выбор варианта определяется значениями некоторого выражения. Соответствующий оператор C#, унаследованный от C++, но с небольшими изменениями в синтаксисе, называется оператором switch. Вот его синтаксис:
switch(выражение)
{
case константное_выражение_1: [операторы_1 оператор_перехода_1]
...
case константное_выражение_K: [операторы_K оператор_перехода_K]
[default: операторы_N оператор_перехода_N]
}
Ветвь default может отсутствовать. Константные выражения в case должны иметь тот же тип, что и switch-выражение.
Вначале вычисляется значение switch-выражения. Затем оно поочередно в порядке следования case сравнивается на совпадение с константными выражениями. Как только достигнуто совпадение, выполняется соответствующая последовательность операторов case-ветви. Поскольку последний оператор этой последовательности является оператором перехода (чаще всего это оператор break), то обычно он завершает выполнение оператора switch. Если значение switch-выражения не совпадает ни с одним константным выражением, то выполняется последовательность операторов ветви default, если же таковой ветви нет, то оператор switch эквивалентен пустому оператору.
Циклы
С# предлагает четыре различных механизма, позволяющих циклически исполнять фрагмент кода до тех пор, пока не будет выполнено какое-либо условие.
Циклы for
Циклы for предоставляют механизм для прохода по циклу, при котором инициализируется некоторая локальная переменная и выполняется оператор в цикле до тех пор, пока заданное условие истинно, причем перед переходом к следующей итерации производится какой-нибудь простой шаг. Синтаксис цикла:
for (инициализатор; условие; итератор) оператор (ы)
где инициализатор — выражение, вычисляемое до начала выполнения цикла (обычно здесь инициализируется локальная переменная, используемая в качестве счетчика цикла), условие — выражение, которое вычисляется перед выполнением каждой итерации цикла (например, проверка того, что счетчик цикла меньше определенного значения), а итератор — это выражение, которое будет выполняться после каждой итерации цикла (например, увеличение счетчика цикла).
Цикл for известен также как цикл с предусловием, поскольку условие цикла вычисляется до выполнения операторов цикла, а в том случае, если условие сразу оказывается равным false, операторы цикла вообще не будут исполнены. Перед каждой итерацией цикла условие вычисляется вновь. Цикл завершается, как только результат вычисления условия становится равным false. Цикл for превосходно подходит для повтора оператора или нескольких операторов заранее определенное число раз. Следующий пример показывает типичное использование цикла for:
for int I = 0; I < 100; I + +
Цикл будет выполнен 100 раз
Циклы for можно вкладывать друг в друга, так что внутренний цикл полностью выполняется один раз для каждой итерации внешнего цикла. Эта схема обычно используется для прохода по каждому элементу в многомерном прямоугольном массиве. Внешний цикл осуществляет проход по всем строкам, а внутренний — по каждому столбцу соответствующей строки.
Цикл while
Как и цикл for, цикл while является циклом с предусловием. Это означает, что условие цикла сразу же окажется равным false, цикл while не выполнится. Синтаксис цикла while аналогичен синтаксису цикла for с тем исключением, что используется только одно выражение:
while {условие) выражение (я) ;
В отличие от цикла for, цикл while чаще всего применяется для повтора оператора или блока операторов такое число раз, которое неизвестно перед началом.
Все циклы в С#, включая while, разрешают опускать фигурные скобки в том случае если в цикле выполняется только один оператор, а не блок операторов. Однако во избежание ошибок, связанных с добавлением новых операторов в тело цикла рекомендуется использовать фигурные скобки, даже если циклически повторяется один оператор.
Цикл do...while
Цикл do.. .while является версией цикла while с постусловием. Это означает, что условие цикла проверяется после выполнения тела цикла. Следовательно, циклы do... полезны в том случае, когда блок кода должен быть выполнен как минимум один раз.
Цикл foreach
И еще одним механизмом циклов, предлагаемых С#, является цикл foreach. Если другие циклы применялись в более ранних версиях С и C++, то оператор foreach i (заимствован из VB). Цикл foreach позволяет производить итерацию по каждому объекту в контейнерном классе, поддерживающем интерфейс IEnumerable. К контейнерным классам относятся массивы С#, классы коллекций в пространствах имен System.Collection и определенные пользователем классы коллекций.
