- •Тема 2.1.1 Синтаксис языка c#. Данные и операции над ними
- •Тема 2.1.1 Синтаксис языка c#. Данные и операции над ними 1
- •Какие типы данных присутствуют в c#?
- •Int[] mass;// объявление массива целых чисел mass
- •Какие типы данных встроены в c#?
- •Почему в c# типы данных являются одновременно и классами?
- •При каких условиях переменным одного типа можно присваивать значения другого типа?
- •Как в c# автоматизируется преобразование типов?
- •Как в c# объявляются и инициируются переменные?
- •Где в c# объявляются переменные?
- •Каково поведение локальных переменных в c#?
- •Как в c# объявляются константы?
- •Какие математические функции и константы встроены в c#?
- •Как в c# генерировать случайные числа?
- •Выводы:
Какие математические функции и константы встроены в c#?
Смотрите класс 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, IEEEReminder.
Пример возведения в степень:
double u = 2.5, v = 1.5, p;
p= Math.Pow(u,v);
Как в c# генерировать случайные числа?
Смотрите класс Random.
Пример генерации случайных чисел:
const int initRnd = 77;
// Объекты-генераторы случайных чисел
Random realRnd = new Random();
Random repeatRnd = new Random(initRnd);
// 5 случайных действительных чисел в диапазоне [0.0 -:- 0.99999999]
for (int i = 1; i <= 5; i++)
{ Console.WriteLine("Число " + i + "= " + realRnd.NextDouble()); }
// 5 случайных целых чисел в диапазоне [-5 -:- 6]
for (int i = 1; i <= 5; i++)
{ Console.WriteLine("Число " + i + "= " + realRnd.Next(-5, 6)); }
// массив из 10 случайных байтов
byte[] bar = new byte[10];
repeatRnd.NextBytes(bar);
for (int i = 0; i < 10; i++)
{ Console.WriteLine("Число " + i + "= " + bar[i]); }
Чем операторы C# отличаются от операторов С++?
Практически ничем. Несколько отличается оператор switch. Добавлен оператор foreach
Оператор switch:
switch(выражение)
{
case константное_выражение_1: [операторы_1 оператор_перехода_1]
...
case константное_выражение_K: [операторы_K оператор_перехода_K]
[default: операторы_N оператор_перехода_N]
}
В нем выражение при switch может быть не только целочисленным, но и текстовой строкой string. Оператор перехода в конце блока case обязателен, желательно, чтобы это был break.
Цикл foreach
Новым видом цикла, не унаследованным от С++, является цикл foreach, удобный при работе с массивами, коллекциями и другими подобными контейнерами данных:
foreach(тип идентификатор in контейнер) оператор
Тело цикла выполняется для каждого элемента в контейнере. Тип идентификатора должен быть согласован с типом элементов, хранящихся в контейнере данных. Предполагается также, что элементы контейнера (массива, коллекции) упорядочены.
На каждом шаге цикла идентификатор, задающий текущий элемент контейнера, получает значение очередного элемента в соответствии с порядком, установленным на элементах контейнера. С этим текущим элементом и выполняется тело цикла – выполняется столько раз, сколько элементов находится в контейнере.
Цикл заканчивается, когда полностью перебраны все элементы контейнера.
Серьезным недостатком циклов foreach в языке C# является то, что цикл работает только на чтение, но не на запись элементов. Так что наполнять контейнер элементами приходится с помощью других операторов цикла.
Выводы:
Чтобы экономить память и время, по возможности используйте структуры вместо классов.
Переменные значимых типов можно использовать, как представители классов – у них тоже есть методы (в частности – функции преобразования типов).
Предкам можно присвоить значение потомков, но не наоборот. При этом, как правило, просто переставляются ссылки. И всегда можно добраться до «скрывшихся» полей потомков.
Переменные класса Object можно использовать для временного хранения любых значений.
Удобно преобразовывать типы методами класса Convert.
Глобальных переменных нет, а локальные и статические переменные ведут себя иначе, чем в С++.
Операции типа x++ x-- ведут себя иначе, чем в С++.
В C# нельзя явно применять целые числа вместо логических чисел, как в С++.
Выражение при switch может быть не только целочисленным, но и текстовой строкой string. Оператор перехода в конце блока case обязателен.
На самостоятельное изучение:
Ознакомиться с основами Visual Studio .Net и Framework .Net по лекции 1 из «Лекции по C# В_А_Биллинг.pdf»
Ознакомиться с основами создания проектов в C# по лекции № 2 из «Лекции по C# В_А_Биллинг.pdf»
Проверить на практике, что переменные класса Object можно использовать для временного хранения любых значений, которые можно извлекать из них с помощью явного преобразования типа.
Проверить на практике, что при присваивании переменных типа массив, строка и класс друг другу значения полей не копируются, а становятся общими.
Ознакомиться с вопросами преобразования типов в C# по лекции № 4 из «Лекции по C# В_А_Биллинг.pdf». Обратить особое внимание на пример с опасными преобразованиями. Проверить его на своем компьютере.