Типы данных

M
1
Типы данных
Введение в программирование на языке C#
2
Основные понятия языка С#
Состав языка:
Символы
Лексемы: константы, имена, ключевые слова, разделители
Выражения
Операторы
3
Состав языка
 Символы:
 буквы: A-Z, a-z, _, буквы нац. алфавитов
 цифры: 0-9, A-F
 спец. символы: +, *, {, …
 пробельные символы
Лексемы:
константы 2 0.11 “Вася”
имена Vasia a _11
ключевые слова double do if
знаки операций + <= new
разделители ; [ ] ,
Выражения
выражение - правило вычисления значения: a + b
Операторы
исполняемые: c = a + b;
описания: double a, b;
static void Main()
{ Samolet tu154 =
new Samolet();
tu154.fly();
}
Лексема (token, токен) –
минимальная единица языка,
имеющая самостоятельный
смысл
4
Вид Примеры
Булевские true false
Целые десятич. 8 199226 0Lu
16-ричн. 0xA 0x1B8 0X00FFL
Веществ. с тчк 5.7 .001f 35m
с порядком 0.2E6 .11e–3 5E12
Символьные 'A' 'x74' '0' '' 'uA81B'
Строковые "Здесь был Vasia"
"tЗначение r=xF5n"
"Здесь был u0056u0061"
@"C:tempfile1.txt"
Константа null null
Константы (литералы) C#
Кодировк
а Unicode
Суффикс
типа
Управляющи
й символ
5∙1012
5
Имена (идентификаторы)
 имя должно начинаться с буквы или _;
 имя должно содержать только буквы, знак
подчеркивания и цифры;
 прописные и строчные буквы различаются;
 длина имени практически не ограничена.
 имена не должны совпадать с ключевыми словами,
однако допускается: @if, @float…
 в именах можно использовать управляющие
последовательности Unicode
Примеры правильных имен:
Vasia, Вася, _13, u00F2u01DD, @while.
Примеры неправильных имен:
2late, Big gig, Б#г
6
Нотации
Понятные и согласованные между собой имена —
основа хорошего стиля. Существует несколько
нотаций — соглашений о правилах создания имен.
В C# для именования различных видов
программных объектов чаще всего используются
две нотации:
 Нотация Паскаля - каждое слово начинается с
прописной буквы:
 MaxLength, MyFuzzyShooshpanchik
 Camel notation - с прописной буквы начинается
каждое слово, составляющее идентификатор,
кроме первого:
 maxLength, myFuzzyShooshpanchik
7
Ключевые слова, знаки операций, разделители
 Ключевые слова — идентификаторы, имеющие специальное
значение для компилятора. Их можно использовать только в
том смысле, в котором они определены.
 Например, для оператора перехода определено слово goto.
 Знак операции — один или более символов, определяющих
действие над операндами. Внутри знака операции пробелы не
допускаются.
 Например: + - = == %= new is
 Операции делятся на унарные (с одним операндом),
бинарные (с двумя) и тернарную (с тремя).
 Разделители используются для разделения или, наоборот,
группирования элементов. Примеры разделителей: скобки,
точка, запятая.
8
Ключевые слова C#
abstract as base bool break byte case
catch char checked class const continue
decimal default delegate do double
else enum event explicit extern false
finally fixed float for foreach goto if
implicit in int interface internal is
lock long namespace new null object
operator out override params private
protected public readonly ref return
sbyte sealed short sizeof stackalloc
staticstring struct switch this
throw true try typeof uint ulong
unchecked unsafe ushort using virtual
void volatile while
9
Типы данных:
Концепция
Классификация
Встроенные типы данных
10
 внутреннее представление данных =>
множество их возможных значений
 допустимые действия над данными =>
операции и функции
Тип данных определяет:
Концепция типа данных
11
Различные классификации типов данных
Типы
данных
Простые Структуриро-
ванные
Типы
данных
Встроенные Определяемые
программистом
Типы
данных
Статические Динамические
12
Тип void Указатели
Типы
данных
Ссылочные
object
Массивы
Строки string
Классы
Интерфейсы
Делегаты
Значения
Булевский
Целые
Вещественные
Финансовый
Символьный
Перечисления
Структурные
типы
Структуры
Типы nullable
Основная классификация типов C#
13
Хранение в памяти величин значимого и
ссылочного типа
Хип (дин. область)
Стек
СсылкаЗначение
Тип-значение Ссылочный тип
Значение
Ссылка
Значение
Ссылка
а b c
y
Значение
x
14
Встроенные типы данных C#:
 Булевский
 Целые
 Вещественные
 Финансовый
 Символьный
 object
15
Название Ключевое
слово
Тип .NET Диапазон
значений
Описание Размер в
битах
Булевский
bool Boolean true, false
Целые
sbyte SByte –128 — 127 знаковое 8
byte Byte 0 — 255 беззнаковое 8
short Int16 –32768 —32767 знаковое 16
ushort UInt16 0 — 65535 беззнаковое 16
int Int32 ≈(–2•109
— 2•109
) знаковое 32
uint UInt32 ≈(0 — 4•109
) беззнаковое 32
long Int64 ≈(–9•1018
— 9•1018
) знаковое 64
ulong UInt64 ≈(0— 18•1018
) беззнаковое 64
Логический (булевский) и целые
16
Остальные
Символьный
char Char U+0000 — U+ffff символ
Unicode
16
Веществен-
ные
float Single (+-)1.5•10-45
— 3.4•1038
7 цифр 32
double Double (+-) 5.0•10-324
—
1.7•10308
15-16 цифр 64
Финансовый
decimal Decimal (+-) 1.0•10-28
—
7.9•1028
28-29 цифр 128
Строковый
string String длина ограничена
объемом доступной
памяти
строка из
символов
Unicode
object
object Object можно хранить все,
что угодно
всеобщий
предок
Название Ключевое
слово
Тип .NET Диапазон значений Описание Размер
в битах
17
Поля и методы встроенных типов
 Любой встроенный тип C# построен на основе
стандартного класса библиотеки .NET. Это значит, что у
встроенных типов данных C# есть методы и поля. С
помощью них можно, например, получить:
 double.MaxValue (или System.Double.MaxValue) —
максимальное число типа double;
 uint.MinValue (или System.UInt32.MinValue) — минимальное
число типа uint.
 В вещественных классах есть элементы:
 положительная бесконечность PositiveInfinity;
 отрицательная бесконечность NegativeInfinity;
 «не является числом»: NaN.
18
Математические функции: класс Math
Имя Описание Результат Пояснения
Abs Модуль перегружен |x| записывается Math.Abs(x)
Acos Арккосинус double Acos(double x)
Asin Арксинус double Asin(double x)
Atan Арктангенс double Atan(double x)
Atan2 Арктангенс double
Atan2(double x, double y)—
угол, тангенс которого есть
результат деления y на x
BigMul Произведение long BigMul(int x, int y)
Ceiling Округление до
большего целого
double Ceiling(double х)
Cos Косинус double Сos(double x)
Cosh Гиперболический
косинус
double Cosh(double x)
DivRem Деление и остаток перегружен DivRem(x, y, rem)
E База натурального
логарифма (число е)
double 2,71828182845905
Exp Экспонента double ex
записывается Math.Exp(x)
19
Floor Округление до меньшего
целого
double Floor(double х)
IEEERemainder Остаток от деления double
IEEERemainder(double x,
double y)
Log Натуральный логарифм double loge
x записывается Math.Log(x)
Log10 Десятичный логарифм double
log10
x записывается
Math.Log10(x)
Max Максимум из двух чисел перегружен Max(x, y)
Min Минимум из двух чисел перегружен Min(x, y)
PI Значение числа π double 3,14159265358979
Pow Возведение в степень double xy
записывается Math.Pow(x, y)
Round Округление перегружен
Round(3.1) даст в результате 3
Round (3.8) даст в результате 4
Sign Знак числа int аргументы перегружены
Sin Синус double Sin(double x)
Sinh гиперболический синус double Sinh(double x)
Sqrt Квадратный корень double √x записывается Math.Sqrt(x)
Tan Тангенс double Tan(double x)
Tanh Гиперболический тангенс double Tanh(double x)
20
Линейные программы:
 Структура программы
 Переменные
 Операции
 Выражения
 Введение в обработку исключительных ситуаций
 Простейший ввод-вывод
21
using System;
namespace A
{
class Class1
{
static void Main()
{
// описания и операторы, например:
Console.Write("Превед медвед");
}
// описания
}
}
Структура простейшей программы на С#
22
Переменные
 Переменная — это величина, которая во время
работы программы может изменять свое значение.
 Все переменные, используемые в программе,
должны быть описаны.
 Для каждой переменной задается ее имя и тип:
int number;
float x, y;
char option;
Тип переменной выбирается исходя из
диапазона и требуемой точности
представления данных.
23
Общая структура программы на С#
пространство имен
Класс А
Класс В
Метод Main
Переменные класса
Методы класса:
Переменные класса
Локальные переменные
Методы класса:
…
24
Область действия и время жизни переменных
 Переменные описываются внутри какого-л. блока:
1) класса
2) метода или блока внутри метода
 Переменные, описанные непосредственно внутри класса,
называются полями класса.
 Переменные, описанные внутри метода класса, называются
локальными переменными.
 Область действия переменной - область программы, где можно
использовать переменную.
 Область действия переменной начинается в точке ее описания
и длится до конца блока, внутри которого она описана.
 Время жизни: переменные создаются при входе в их область
действия (блок) и уничтожаются при выходе.
Блок — код, заключенный в
фигурные скобки. Основное
назначение блока —
группировка операторов.
25
Инициализация переменных
 При объявлении можно присвоить переменной начальное
значение (инициализировать).
int number = 100;
float x = 0.02;
char option = ’ю’;
При инициализации можно использовать не только
константы, но и выражения — главное, чтобы на момент
описания они были вычислимыми, например:
int b = 1, a = 100;
int x = b * a + 25;
 Поля класса инициализируются «значением по
умолчанию» (0 соответствующего типа).
 Локальные переменные автоматически НЕ
инициализируются. Рекомендуется всегда явным образом
инициализировать переменные при описании.
26
Пример описания переменных
using System;
namespace CA1
{ class Class1
{ static void Main()
{
int i = 3;
double y = 4.12;
decimal d = 600m;
string s = "Вася";
}
}
}
27
Именованные константы
Вместо значений констант можно (и нужно!) использовать в
программе их имена.
Это облегчает читабельность программы и внесение в нее
изменений:
const float weight = 61.5;
const int n = 10;
const float g = 9.8;
Никаких чисел, кроме 0 и 1, в
программе быть не должно
(нигде, кроме описаний
именованных констант)
28
Выражения
 Выражение — правило вычисления
значения.
 В выражении участвуют операнды,
объединенные знаками операций.
 Операндами выражения могут быть
константы, переменные и вызовы
функций.
 Операции выполняются в
соответствии с приоритетами.
 Для изменения порядка выполнения
операций используются круглые
скобки.
 Результатом выражения всегда
является значение определенного
типа, который определяется типами
операндов.
 Величины, участвующие в
выражении, должны быть
совместимых типов.
 t + Math.Sin(x)/2 * x
результат имеет
вещественный тип
 a <= b + 2
результат имеет
логический тип
 x > 0 && y < 0
результат имеет
логический тип
29
Ассоциативность выражений
 Слева направо
 a + b – c + d
 ( ( ( a + b ) – c ) + d )
 a * b / c * d
 ( ( ( a * b ) / c ) * d )
 Справа налево
 a = b = c = d
 ( a = ( b = ( c = d ) ) )
d
c
ba
*
*
30
1. Первичные (), [], ++, --, new, …
2. Унарные ~, !, ++, --, -, …
3. Типа умножения (мультипликативные) *, /, %
4. Типа сложения (аддитивные) +, -
5. Сдвига <<, >>
6. Отношения и проверки типа <, >, is, …
7. Проверки на равенство ==, !=
8. Поразрядные логические &, ^, |
9. Условные логические &&, ||
10. Условная ?:
11. Присваивания =, *=, /=,…
Приоритеты операций C#
31
Тип результата выражения
 Если входящие в выражение операнды одного типа и
операция для этого типа определена, то результат
выражения будет иметь тот же тип.
 Если операнды разного типа и (или) операция для этого
типа не определена, перед вычислениями автоматически
выполняется преобразование типа по правилам,
обеспечивающим приведение более коротких типов к
более длинным для сохранения значимости и точности.
char c = 'A';
int i = 100;
double d = 1;
double summa = c + i + d; // 166
32
Явное преобразование типа
 Автоматическое (неявное) преобразование возможно не
всегда, а только если при этом не может случиться потеря
значимости.
 Если неявного преобразования из одного типа в другой не
существует, программист может задать явное
преобразование типа с помощью операции (тип) x.
char c = 'A';
int i = 100;
double d = 1;
с = (char) i; // 'd'
c = (char) d;
i = (int) d;
33
Неявные арифметические преобразования
типов в C#
sbyte
short
int
ushort
long
byte
uint
float
ulong
double
decimal
char
при отсутствии
линии возникает
ошибка
компиляции
34
Понятие «исключительная ситуация»
 При вычислении выражений могут возникнуть ошибки
(переполнение, деление на ноль).
 В C# есть механизм обработки исключительных
ситуаций (исключений), который позволяет избегать
аварийного завершения программы.
 Если в процессе вычислений возникла ошибка, система
сигнализирует об этом с помощью выбрасывания
(генерирования) исключения.
 Каждому типу ошибки соответствует свое исключение.
Исключения являются классами, которые имеют общего
предка — класс Exception, определенный в пространстве
имен System.
 Например, при делении на ноль будет выброшено
исключение DivideByZeroException, при переполнении —
исключение OverflowException.
 В программе необходимо предусмотреть обработку
исключений.
35
Инкремент и декремент
using System;
namespace CA1
{ class C1
{ static void Main()
{ int x = 3, y = 3;
Console.Write( "Значение префиксного выражения: " );
Console.WriteLine( ++x );
Console.Write( "Значение х после приращения: " );
Console.WriteLine( x );
Console.Write( "Значение постфиксного выражения: " );
Console.WriteLine( y++ );
Console.Write( "Значение у после приращения: " );
Console.WriteLine( y );
}}} Результат работы программы:
Значение префиксного выражения: 4
Значение х после приращения: 4
Значение постфиксного выражения: 3
Значение у после приращения: 4
36
Операция new
Cлужит для создания нового объекта (выделение памяти в
хипе + инициализация).
Формат:
new тип ( [ аргументы ] )
С помощью этой операции можно создавать объекты как
ссылочных, так и значимых типов, например:
object z = new object();
Monster Вася = new Monster(100);
int i = new int(); // то же самое, что int i = 0;
Для значимых типов обычно не применяется.
37
Операции отрицания - ! ~
using System;
namespace ConsoleApplication1
{ class Class1
{ static void Main()
{
sbyte a = 3, b = -63, c = 126;
bool d = true;
Console.WriteLine( -a ); // Результат -3
Console.WriteLine( -c ); // Результат -126
Console.WriteLine( !d ); // Результат false
Console.WriteLine( ~a ); // Результат -4
Console.WriteLine( ~b ); // Результат 62
Console.WriteLine( ~c ); // Результат -127
}}}
a = 00000011
~a = 11111100
b = 11000001
~b = 00111110
c = 01111110
~c = 10000001
38
Явное преобразование типа
 long b = 300;
 int a = (int) b; // данные не теряются
 byte d = (byte) a; // данные теряются
39
Умножение *
 Возвращает результат перемножения двух операндов.
 Стандартная операция умножения определена для типов
int, uint, long, ulong, float, double и decimal.
 К величинам других типов ее можно применять, если для
них возможно неявное преобразование к этим типам.
 Тип результата операции равен «наибольшему» из типов
операндов, но не менее int.
 Если оба операнда целочисленные или типа decimal и
результат операции слишком велик для представления с
помощью заданного типа, генерируется исключение
System.OverflowException
40
Результаты вещественного умножения
* +y -y +0 -0 +∞ -∞ NaN
+x +z -z +0 -0 +∞ -∞ NaN
-x -z +z -0 +0 -∞ +∞ NaN
+0 +0 -0 +0 -0 NaN NaN NaN
-0 -0 +0 -0 +0 NaN NaN NaN
+∞ +∞ -∞ NaN NaN +∞ -∞ NaN
-∞ -∞ +∞ NaN NaN -∞ +∞ NaN
NaN NaN NaN NaN NaN NaN NaN NaN
41
Пример (умножение *, деление /, остаток %)
using System;
namespace ConsoleApplication1
{ class Class1
{ static void Main()
{
int x = 11, y = 4;
float z = 4;
Console.WriteLine( z * y ); // Результат 16
Console.WriteLine( z * 1e308 ); // Рез. "бесконечность"
Console.WriteLine( x / y ); // Результат 2
Console.WriteLine( x / z ); // Результат 2,75
Console.WriteLine( x % y ); // Результат 3
Console.WriteLine( 1e-324 / 1e-324 ); // Результат NaN
}}}
42
Операции сдвига (<< и >>)
 Применяются к целочисленным операндам.
 Сдвигают двоичное представление первого операнда
влево или вправо на количество двоичных разрядов,
заданное вторым операндом.
 При сдвиге влево (<<) освободившиеся разряды
обнуляются.
 При сдвиге вправо (>>) освободившиеся биты
заполняются нулями, если первый операнд
беззнакового типа, и знаковым разрядом в противном
случае.
 Стандартные операции сдвига определены для типов
int, uint, long и ulong.
43
Пример
using System;
namespace ConsoleApplication1
{ class Class1
{ static void Main()
{
byte a = 3, b = 9;
sbyte c = 9, d = -9;
Console.WriteLine( a << 1 ); // Результат 6
Console.WriteLine( a << 2 ); // Результат 12
Console.WriteLine( b >> 1 ); // Результат 4
Console.WriteLine( c >> 1 ); // Результат 4
Console.WriteLine( d >> 1 ); // Результат -5
}
}
}
000000110000011000001100
44
Операции отношения и проверки на равенство
 Операции отношения (<, <=, >, >=, ==, !=) сравнивают
первый операнд со вторым.
 Операнды должны быть арифметического типа.
 Результат операции — логического типа, равен true или
false.
x == y -- true, если x равно y, иначе false
x != y -- true, если x не равно y, иначе false
x < y -- true, если x меньше y, иначе false
x > y -- true, если x больше y, иначе false
x <= y -- true, если x меньше или равно y, иначе false
x >= y -- true, если x больше или равно y, иначе false
45
Условные логические операции && и ||
using System;
namespace ConsoleApplication1
{ class Class1
{ static void Main()
{
Console.WriteLine( true && true ); // Результат true
Console.WriteLine( true && false ); // Результат false
Console.WriteLine( true || true ); // Результат true
Console.WriteLine( true || false ); // Результат true
}
}
}
(a < b) || (a < c)
Если первое условие истинно,
второе не вычисляется
46
Условная операция
 операнд_1 ? операнд_2 : операнд_3
Операнд_1 — выражение, для которого существует неявное
преобразование к логическому типу.
Если результат вычисления операнда_1 равен true, результат
операции — значение операнда_2,
иначе — значение операнда_3.
using System;
namespace ConsoleApplication1
{ class Class1
{ static void Main()
{
int a = 11, b = 4;
int max = b > a ? b : a;
Console.WriteLine( max ); // Результат 11
}}}
47
Присваивание – это замена старого значения переменной на
новое. Старое значение стирается бесследно.
Операция может использоваться в программе как законченный
оператор.
переменная = выражение
a = b + c;
x = 1;
x = x + 0.5;
Правый операнд операции присваивания должен иметь неявное
преобразование к типу левого операнда, например:
вещественная переменная = целое выражение;
Операция присваивания
1
x
1+0.51.5
48
Сложное присваивание в C#
 x += 0.5; соответствует x = x + 0.5;
 x *= 0.5; соответствует x = x * 0.5;
 a %= 3; соответствует a = a % 3;
 a <<= 2; соответствует a = a << 2;
и т.п.
49
Консольный ввод-вывод
50
Приложение: консольное или Windows?
class A
{
public static void Main()
{
System.Windows.Forms.MessageBox.Show("Hello!"
);
}
}
// Необходимо добавить ссылку на
System.Windows.Forms
// (Add Reference…)
51
using System;
namespace A
{ class Class1
{ static void Main()
{
int i = 3;
double y = 4.12;
decimal d = 600m;
string s = "Вася";
}
}
Вывод на консоль – 1/4
Результат работы программы:
3 y = 4,12
d = 600 s = Вася
Console.Write( i );
Console.WriteLine( " y = " + y);
Console.WriteLine("d = " + d + " s = " + s );
52
using System;
namespace A
{ class Class1
{ static void Main()
{
int i = 3;
double y = 4.12;
decimal d = 600m;
string s = "Вася";
}
}
}
Вывод на консоль – 2/4
Результат работы программы:
3 y = 4,12
d = 600 s = Вася
Console.Write( i );
Console.Write( " y = {0} nd = {1}", y, d );
Console.WriteLine( " s = " + s );
53
using System;
namespace A
{ class Class1
{ static void Main()
{
int i = 3;
double y = 4.12;
decimal d = 600m;
string s = "Вася";
}
}
}
Вывод на консоль – 3/4
Результат работы программы:
3 y = 4,12
d = 600 s = Вася
Console.Write( i );
Console.Write( " y = {0:F2} nd = {1:D3}", y, d );
Console.WriteLine( " s = " + s );
Формат Формат
54
using System;
namespace A
{ class Class1
{ static void Main()
{
int i = 3;
double y = 4.12;
decimal d = 600m;
string s = "Вася";
Console.Write( " y = {0,5:0.# ' руб. '} n", y );
}
}
}
Вывод на консоль – 4/4
y = 4,1 руб.
5 позиций под
значение
пользовательский
формат
Формат местозаполнителя
{ номер [ , длина ] [ : формат ] }
 номер – номер элемента в списке вывода (может идти не
по порядку и повторяться)
 длина – количество позиций под значение. Если длина
отрицательная, значение выравнивается по левому краю,
иначе - по правому.
 формат – строка формата для выводимого значения
(описатели формата на следующем слайде)
 Примеры:
{0,-6:F4}
{2:X4}
{1:hh}
55
Описатели формата – 1/3
56
Описатели формата – 2/3
57
Описатели формата – 3/3
"P"
или
"p"
Процент
Результат: число, умноженное на 100 и
отображаемое с символом процента.
Поддерживается: всеми числовыми
типами данных.
Описатель точности: желаемое число
знаков дробной части.
1 ("P", en-US) -> 100.00 %
1 ("P", fr-FR) -> 100,00 %
-0.39678 ("P1", en-US) -> -39.7 %
-0.39678 ("P1", fr-FR) -> -39,7 %
"R"
или "r"
Приемо-
передача
Результат: строка, дающая при
обратном преобразовании идентичное
число.
Поддерживается: Single, Double и
BigInteger.
Описатель точности: игнорируется.
123456789.12345678 ("R") ->
123456789.12345678
-1234567890.12345678 ("R") ->
-1234567890.1234567
"X"
или
"x"
Шестнадцат
еричный
Результат: шестнадцатеричная строка.
Поддерживается: только
целочисленными типами данных.
Описатель точности: число цифр в
результирующей строке.
255 ("X") -> FF
-1 ("x") -> ff
255 ("x4") -> 00ff
-1 ("X4") -> 00FF
Любой
другой
символ
Неизвестны
й описатель
Результат: порождение исключения
FormatException во время выполнения.
58
59
using System;
namespace A
{ class Class1
{ static void Main()
{
string s = Console.ReadLine(); // ввод строки
char c = (char)Console.Read(); // ввод символа
Console.ReadLine();
string buf; // буфер для ввода чисел
buf = Console.ReadLine();
int i = Convert.ToInt32( buf ); // преобразование в целое
buf = Console.ReadLine();
double x = Convert.ToDouble( buf ); // преобразование в вещ.
buf = Console.ReadLine();
double y = double.Parse( buf ); // преобразование в вещ.
}
}
}
Ввод с консоли – 1/2
60
using System;
namespace A
{ class Class1
{ static void Main()
{
string s = Console.ReadLine(); // ввод строки
char c = (char)Console.Read(); // ввод символа
Console.ReadLine();
int i = Convert.ToInt32( Console.ReadLine() );
double x = Convert.ToDouble( Console.ReadLine() );
double y = double.Parse( Console.ReadLine() );
}
}
}
Ввод с консоли – 2/2
61
using System;
namespace CA1
{ class Class1
{ static void Main()
{
Console.WriteLine( "Введите температуру по Фаренгейту" );
double fahr = Convert.ToDouble( Console.ReadLine() );
double cels =5.0 / 9 * (fahr - 32);
Console.WriteLine( "По Фаренгейту: {0} в градусах Цельсия: {1}",
fahr, cels );
}
}
}
Пример: перевод температуры из F в С
5
( 32)
9
C F= −
62
Домашнее задание
Изучить темы:
 Виды констант в C#
 Понятие «тип данных»; встроенные типы С#
 Переменные: описание, инициализация, область
действия, время жизни
 Операции: приоритеты, тип результата
 Неявные преобразования типов
 Простейший ввод и вывод (класс Console)
Примечание: «изучить» - прочитать в учебнике, найти в
стандарте, найти в справке, понять, применить в программе,
уложить в голове в систему, объяснить бабушке.
1 de 62

Recomendados

C++ осень 2013 лекция 2 por
C++ осень 2013 лекция 2C++ осень 2013 лекция 2
C++ осень 2013 лекция 2Technopark
1.1K visualizações44 slides
Управляющие структуры в Ruby: условия por
Управляющие структуры в Ruby: условияУправляющие структуры в Ruby: условия
Управляющие структуры в Ruby: условияEvgeny Smirnov
2.6K visualizações15 slides
Ruby — Паттерны программирования por
Ruby — Паттерны программированияRuby — Паттерны программирования
Ruby — Паттерны программированияEvgeny Smirnov
2.4K visualizações24 slides
Java. Generic - шаблонные типы. por
Java.  Generic - шаблонные типы.Java.  Generic - шаблонные типы.
Java. Generic - шаблонные типы.Unguryan Vitaliy
10.2K visualizações31 slides
десант презентация por
десант презентациядесант презентация
десант презентацияАндрей Голованов
330 visualizações44 slides
Автоматическая генерация тестов по комментариям к программному коду por
Автоматическая генерация тестов по комментариям к программному кодуАвтоматическая генерация тестов по комментариям к программному коду
Автоматическая генерация тестов по комментариям к программному кодуAlexey Noskov
393 visualizações15 slides

Mais conteúdo relacionado

Mais procurados

презентация кметодическим указаниям к лаб. работам por
презентация кметодическим указаниям к лаб. работампрезентация кметодическим указаниям к лаб. работам
презентация кметодическим указаниям к лаб. работамstudent_kai
369 visualizações73 slides
C++ Базовый. Занятие 05. por
C++ Базовый. Занятие 05.C++ Базовый. Занятие 05.
C++ Базовый. Занятие 05.Igor Shkulipa
182 visualizações20 slides
C++ осень 2013 лекция 4 por
C++ осень 2013 лекция 4C++ осень 2013 лекция 4
C++ осень 2013 лекция 4Technopark
1.1K visualizações53 slides
Java. Вложенные классы и интерфейсы. por
Java. Вложенные классы и интерфейсы.Java. Вложенные классы и интерфейсы.
Java. Вложенные классы и интерфейсы.Unguryan Vitaliy
10.3K visualizações39 slides
java 8 por
java 8java 8
java 8Unguryan Vitaliy
1.5K visualizações28 slides
C++ осень 2013 лекция 5 por
C++ осень 2013 лекция 5C++ осень 2013 лекция 5
C++ осень 2013 лекция 5Technopark
692 visualizações47 slides

Mais procurados(15)

презентация кметодическим указаниям к лаб. работам por student_kai
презентация кметодическим указаниям к лаб. работампрезентация кметодическим указаниям к лаб. работам
презентация кметодическим указаниям к лаб. работам
student_kai369 visualizações
C++ Базовый. Занятие 05. por Igor Shkulipa
C++ Базовый. Занятие 05.C++ Базовый. Занятие 05.
C++ Базовый. Занятие 05.
Igor Shkulipa182 visualizações
C++ осень 2013 лекция 4 por Technopark
C++ осень 2013 лекция 4C++ осень 2013 лекция 4
C++ осень 2013 лекция 4
Technopark1.1K visualizações
Java. Вложенные классы и интерфейсы. por Unguryan Vitaliy
Java. Вложенные классы и интерфейсы.Java. Вложенные классы и интерфейсы.
Java. Вложенные классы и интерфейсы.
Unguryan Vitaliy10.3K visualizações
java 8 por Unguryan Vitaliy
java 8java 8
java 8
Unguryan Vitaliy1.5K visualizações
C++ осень 2013 лекция 5 por Technopark
C++ осень 2013 лекция 5C++ осень 2013 лекция 5
C++ осень 2013 лекция 5
Technopark692 visualizações
Java. Методы por Unguryan Vitaliy
Java. Методы Java. Методы
Java. Методы
Unguryan Vitaliy11.6K visualizações
Java. Наследование. por Unguryan Vitaliy
Java. Наследование.Java. Наследование.
Java. Наследование.
Unguryan Vitaliy9.6K visualizações
Java. Полиморфизм. por Unguryan Vitaliy
Java. Полиморфизм.Java. Полиморфизм.
Java. Полиморфизм.
Unguryan Vitaliy10.5K visualizações
Типы данных por OlgaDask
Типы данныхТипы данных
Типы данных
OlgaDask791 visualizações
Урок 17. Паттерн 9. Смешанная арифметика por Tatyanazaxarova
Урок 17. Паттерн 9. Смешанная арифметикаУрок 17. Паттерн 9. Смешанная арифметика
Урок 17. Паттерн 9. Смешанная арифметика
Tatyanazaxarova210 visualizações
Java. Логические операторы, операторы ветвления. por Unguryan Vitaliy
Java. Логические операторы, операторы ветвления.Java. Логические операторы, операторы ветвления.
Java. Логические операторы, операторы ветвления.
Unguryan Vitaliy15.1K visualizações
Java. Массивы. Многомерные массивы. por Unguryan Vitaliy
Java. Массивы. Многомерные массивы.Java. Массивы. Многомерные массивы.
Java. Массивы. Многомерные массивы.
Unguryan Vitaliy12.7K visualizações
Исключения и ошибки por Unguryan Vitaliy
Исключения и ошибкиИсключения и ошибки
Исключения и ошибки
Unguryan Vitaliy9.5K visualizações
ch6.pdf por carbontable
ch6.pdfch6.pdf
ch6.pdf
carbontable386 visualizações

Similar a Типы данных

Rgsu04 por
Rgsu04Rgsu04
Rgsu04EvgeniyaOstr
195 visualizações52 slides
Rgsu04 por
Rgsu04Rgsu04
Rgsu04EvgeniyaOstr
310 visualizações52 slides
C++ осень 2012 лекция 6 por
C++ осень 2012 лекция 6C++ осень 2012 лекция 6
C++ осень 2012 лекция 6Technopark
622 visualizações48 slides
Java. Переменные, типы данных, операторы por
Java. Переменные, типы данных, операторыJava. Переменные, типы данных, операторы
Java. Переменные, типы данных, операторыUnguryan Vitaliy
17.3K visualizações69 slides
Обзор Ruby por
Обзор RubyОбзор Ruby
Обзор RubyDigital-агентство Мэйк
359 visualizações30 slides
!Predictive analytics part_2 por
!Predictive analytics part_2!Predictive analytics part_2
!Predictive analytics part_2Vladimir Krylov
1.1K visualizações122 slides

Similar a Типы данных(20)

Rgsu04 por EvgeniyaOstr
Rgsu04Rgsu04
Rgsu04
EvgeniyaOstr195 visualizações
Rgsu04 por EvgeniyaOstr
Rgsu04Rgsu04
Rgsu04
EvgeniyaOstr310 visualizações
C++ осень 2012 лекция 6 por Technopark
C++ осень 2012 лекция 6C++ осень 2012 лекция 6
C++ осень 2012 лекция 6
Technopark622 visualizações
Java. Переменные, типы данных, операторы por Unguryan Vitaliy
Java. Переменные, типы данных, операторыJava. Переменные, типы данных, операторы
Java. Переменные, типы данных, операторы
Unguryan Vitaliy17.3K visualizações
!Predictive analytics part_2 por Vladimir Krylov
!Predictive analytics part_2!Predictive analytics part_2
!Predictive analytics part_2
Vladimir Krylov1.1K visualizações
Cpp/cli types por mcroitor
Cpp/cli typesCpp/cli types
Cpp/cli types
mcroitor468 visualizações
элементы языка и типы данных por Елена Ключева
элементы языка и типы данныхэлементы языка и типы данных
элементы языка и типы данных
Елена Ключева905 visualizações
C++ осень 2012 лекция 9 por Technopark
C++ осень 2012 лекция 9C++ осень 2012 лекция 9
C++ осень 2012 лекция 9
Technopark578 visualizações
тема множество для загрузки 2013 por AliyaAringazinova
тема множество для загрузки 2013тема множество для загрузки 2013
тема множество для загрузки 2013
AliyaAringazinova275 visualizações
углубленное программирование на C++. лекция no.5 [4.0] por Technopark
углубленное программирование на C++. лекция no.5 [4.0]углубленное программирование на C++. лекция no.5 [4.0]
углубленное программирование на C++. лекция no.5 [4.0]
Technopark1.3K visualizações
01 - Знакомство с Java por phearnot
01 - Знакомство с Java01 - Знакомство с Java
01 - Знакомство с Java
phearnot523 visualizações
Погружение в Dart por Sergey Penkovsky
Погружение в DartПогружение в Dart
Погружение в Dart
Sergey Penkovsky541 visualizações
C++ Базовый. Занятие 02. por Igor Shkulipa
C++ Базовый. Занятие 02.C++ Базовый. Занятие 02.
C++ Базовый. Занятие 02.
Igor Shkulipa292 visualizações
Технологии анализа бинарного кода приложений: требования, проблемы, инструменты por Positive Development User Group
Технологии анализа бинарного кода приложений: требования, проблемы, инструментыТехнологии анализа бинарного кода приложений: требования, проблемы, инструменты
Технологии анализа бинарного кода приложений: требования, проблемы, инструменты
Positive Development User Group1.1K visualizações
C++ осень 2013 лекция 7 por Technopark
C++ осень 2013 лекция 7C++ осень 2013 лекция 7
C++ осень 2013 лекция 7
Technopark1.4K visualizações
Введение в машинное обучение por Grigory Sapunov
Введение в машинное обучениеВведение в машинное обучение
Введение в машинное обучение
Grigory Sapunov2.4K visualizações
Принципы работы статического анализатора кода PVS-Studio por Andrey Karpov
Принципы работы статического анализатора кода PVS-StudioПринципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-Studio
Andrey Karpov217 visualizações

Типы данных

  • 1. 1 Типы данных Введение в программирование на языке C#
  • 2. 2 Основные понятия языка С# Состав языка: Символы Лексемы: константы, имена, ключевые слова, разделители Выражения Операторы
  • 3. 3 Состав языка  Символы:  буквы: A-Z, a-z, _, буквы нац. алфавитов  цифры: 0-9, A-F  спец. символы: +, *, {, …  пробельные символы Лексемы: константы 2 0.11 “Вася” имена Vasia a _11 ключевые слова double do if знаки операций + <= new разделители ; [ ] , Выражения выражение - правило вычисления значения: a + b Операторы исполняемые: c = a + b; описания: double a, b; static void Main() { Samolet tu154 = new Samolet(); tu154.fly(); } Лексема (token, токен) – минимальная единица языка, имеющая самостоятельный смысл
  • 4. 4 Вид Примеры Булевские true false Целые десятич. 8 199226 0Lu 16-ричн. 0xA 0x1B8 0X00FFL Веществ. с тчк 5.7 .001f 35m с порядком 0.2E6 .11e–3 5E12 Символьные 'A' 'x74' '0' '' 'uA81B' Строковые "Здесь был Vasia" "tЗначение r=xF5n" "Здесь был u0056u0061" @"C:tempfile1.txt" Константа null null Константы (литералы) C# Кодировк а Unicode Суффикс типа Управляющи й символ 5∙1012
  • 5. 5 Имена (идентификаторы)  имя должно начинаться с буквы или _;  имя должно содержать только буквы, знак подчеркивания и цифры;  прописные и строчные буквы различаются;  длина имени практически не ограничена.  имена не должны совпадать с ключевыми словами, однако допускается: @if, @float…  в именах можно использовать управляющие последовательности Unicode Примеры правильных имен: Vasia, Вася, _13, u00F2u01DD, @while. Примеры неправильных имен: 2late, Big gig, Б#г
  • 6. 6 Нотации Понятные и согласованные между собой имена — основа хорошего стиля. Существует несколько нотаций — соглашений о правилах создания имен. В C# для именования различных видов программных объектов чаще всего используются две нотации:  Нотация Паскаля - каждое слово начинается с прописной буквы:  MaxLength, MyFuzzyShooshpanchik  Camel notation - с прописной буквы начинается каждое слово, составляющее идентификатор, кроме первого:  maxLength, myFuzzyShooshpanchik
  • 7. 7 Ключевые слова, знаки операций, разделители  Ключевые слова — идентификаторы, имеющие специальное значение для компилятора. Их можно использовать только в том смысле, в котором они определены.  Например, для оператора перехода определено слово goto.  Знак операции — один или более символов, определяющих действие над операндами. Внутри знака операции пробелы не допускаются.  Например: + - = == %= new is  Операции делятся на унарные (с одним операндом), бинарные (с двумя) и тернарную (с тремя).  Разделители используются для разделения или, наоборот, группирования элементов. Примеры разделителей: скобки, точка, запятая.
  • 8. 8 Ключевые слова C# abstract as base bool break byte case catch char checked class const continue decimal default delegate do double else enum event explicit extern false finally fixed float for foreach goto if implicit in int interface internal is lock long namespace new null object operator out override params private protected public readonly ref return sbyte sealed short sizeof stackalloc staticstring struct switch this throw true try typeof uint ulong unchecked unsafe ushort using virtual void volatile while
  • 10. 10  внутреннее представление данных => множество их возможных значений  допустимые действия над данными => операции и функции Тип данных определяет: Концепция типа данных
  • 11. 11 Различные классификации типов данных Типы данных Простые Структуриро- ванные Типы данных Встроенные Определяемые программистом Типы данных Статические Динамические
  • 13. 13 Хранение в памяти величин значимого и ссылочного типа Хип (дин. область) Стек СсылкаЗначение Тип-значение Ссылочный тип Значение Ссылка Значение Ссылка а b c y Значение x
  • 14. 14 Встроенные типы данных C#:  Булевский  Целые  Вещественные  Финансовый  Символьный  object
  • 15. 15 Название Ключевое слово Тип .NET Диапазон значений Описание Размер в битах Булевский bool Boolean true, false Целые sbyte SByte –128 — 127 знаковое 8 byte Byte 0 — 255 беззнаковое 8 short Int16 –32768 —32767 знаковое 16 ushort UInt16 0 — 65535 беззнаковое 16 int Int32 ≈(–2•109 — 2•109 ) знаковое 32 uint UInt32 ≈(0 — 4•109 ) беззнаковое 32 long Int64 ≈(–9•1018 — 9•1018 ) знаковое 64 ulong UInt64 ≈(0— 18•1018 ) беззнаковое 64 Логический (булевский) и целые
  • 16. 16 Остальные Символьный char Char U+0000 — U+ffff символ Unicode 16 Веществен- ные float Single (+-)1.5•10-45 — 3.4•1038 7 цифр 32 double Double (+-) 5.0•10-324 — 1.7•10308 15-16 цифр 64 Финансовый decimal Decimal (+-) 1.0•10-28 — 7.9•1028 28-29 цифр 128 Строковый string String длина ограничена объемом доступной памяти строка из символов Unicode object object Object можно хранить все, что угодно всеобщий предок Название Ключевое слово Тип .NET Диапазон значений Описание Размер в битах
  • 17. 17 Поля и методы встроенных типов  Любой встроенный тип C# построен на основе стандартного класса библиотеки .NET. Это значит, что у встроенных типов данных C# есть методы и поля. С помощью них можно, например, получить:  double.MaxValue (или System.Double.MaxValue) — максимальное число типа double;  uint.MinValue (или System.UInt32.MinValue) — минимальное число типа uint.  В вещественных классах есть элементы:  положительная бесконечность PositiveInfinity;  отрицательная бесконечность NegativeInfinity;  «не является числом»: NaN.
  • 18. 18 Математические функции: класс Math Имя Описание Результат Пояснения Abs Модуль перегружен |x| записывается Math.Abs(x) Acos Арккосинус double Acos(double x) Asin Арксинус double Asin(double x) Atan Арктангенс double Atan(double x) Atan2 Арктангенс double Atan2(double x, double y)— угол, тангенс которого есть результат деления y на x BigMul Произведение long BigMul(int x, int y) Ceiling Округление до большего целого double Ceiling(double х) Cos Косинус double Сos(double x) Cosh Гиперболический косинус double Cosh(double x) DivRem Деление и остаток перегружен DivRem(x, y, rem) E База натурального логарифма (число е) double 2,71828182845905 Exp Экспонента double ex записывается Math.Exp(x)
  • 19. 19 Floor Округление до меньшего целого double Floor(double х) IEEERemainder Остаток от деления double IEEERemainder(double x, double y) Log Натуральный логарифм double loge x записывается Math.Log(x) Log10 Десятичный логарифм double log10 x записывается Math.Log10(x) Max Максимум из двух чисел перегружен Max(x, y) Min Минимум из двух чисел перегружен Min(x, y) PI Значение числа π double 3,14159265358979 Pow Возведение в степень double xy записывается Math.Pow(x, y) Round Округление перегружен Round(3.1) даст в результате 3 Round (3.8) даст в результате 4 Sign Знак числа int аргументы перегружены Sin Синус double Sin(double x) Sinh гиперболический синус double Sinh(double x) Sqrt Квадратный корень double √x записывается Math.Sqrt(x) Tan Тангенс double Tan(double x) Tanh Гиперболический тангенс double Tanh(double x)
  • 20. 20 Линейные программы:  Структура программы  Переменные  Операции  Выражения  Введение в обработку исключительных ситуаций  Простейший ввод-вывод
  • 21. 21 using System; namespace A { class Class1 { static void Main() { // описания и операторы, например: Console.Write("Превед медвед"); } // описания } } Структура простейшей программы на С#
  • 22. 22 Переменные  Переменная — это величина, которая во время работы программы может изменять свое значение.  Все переменные, используемые в программе, должны быть описаны.  Для каждой переменной задается ее имя и тип: int number; float x, y; char option; Тип переменной выбирается исходя из диапазона и требуемой точности представления данных.
  • 23. 23 Общая структура программы на С# пространство имен Класс А Класс В Метод Main Переменные класса Методы класса: Переменные класса Локальные переменные Методы класса: …
  • 24. 24 Область действия и время жизни переменных  Переменные описываются внутри какого-л. блока: 1) класса 2) метода или блока внутри метода  Переменные, описанные непосредственно внутри класса, называются полями класса.  Переменные, описанные внутри метода класса, называются локальными переменными.  Область действия переменной - область программы, где можно использовать переменную.  Область действия переменной начинается в точке ее описания и длится до конца блока, внутри которого она описана.  Время жизни: переменные создаются при входе в их область действия (блок) и уничтожаются при выходе. Блок — код, заключенный в фигурные скобки. Основное назначение блока — группировка операторов.
  • 25. 25 Инициализация переменных  При объявлении можно присвоить переменной начальное значение (инициализировать). int number = 100; float x = 0.02; char option = ’ю’; При инициализации можно использовать не только константы, но и выражения — главное, чтобы на момент описания они были вычислимыми, например: int b = 1, a = 100; int x = b * a + 25;  Поля класса инициализируются «значением по умолчанию» (0 соответствующего типа).  Локальные переменные автоматически НЕ инициализируются. Рекомендуется всегда явным образом инициализировать переменные при описании.
  • 26. 26 Пример описания переменных using System; namespace CA1 { class Class1 { static void Main() { int i = 3; double y = 4.12; decimal d = 600m; string s = "Вася"; } } }
  • 27. 27 Именованные константы Вместо значений констант можно (и нужно!) использовать в программе их имена. Это облегчает читабельность программы и внесение в нее изменений: const float weight = 61.5; const int n = 10; const float g = 9.8; Никаких чисел, кроме 0 и 1, в программе быть не должно (нигде, кроме описаний именованных констант)
  • 28. 28 Выражения  Выражение — правило вычисления значения.  В выражении участвуют операнды, объединенные знаками операций.  Операндами выражения могут быть константы, переменные и вызовы функций.  Операции выполняются в соответствии с приоритетами.  Для изменения порядка выполнения операций используются круглые скобки.  Результатом выражения всегда является значение определенного типа, который определяется типами операндов.  Величины, участвующие в выражении, должны быть совместимых типов.  t + Math.Sin(x)/2 * x результат имеет вещественный тип  a <= b + 2 результат имеет логический тип  x > 0 && y < 0 результат имеет логический тип
  • 29. 29 Ассоциативность выражений  Слева направо  a + b – c + d  ( ( ( a + b ) – c ) + d )  a * b / c * d  ( ( ( a * b ) / c ) * d )  Справа налево  a = b = c = d  ( a = ( b = ( c = d ) ) ) d c ba * *
  • 30. 30 1. Первичные (), [], ++, --, new, … 2. Унарные ~, !, ++, --, -, … 3. Типа умножения (мультипликативные) *, /, % 4. Типа сложения (аддитивные) +, - 5. Сдвига <<, >> 6. Отношения и проверки типа <, >, is, … 7. Проверки на равенство ==, != 8. Поразрядные логические &, ^, | 9. Условные логические &&, || 10. Условная ?: 11. Присваивания =, *=, /=,… Приоритеты операций C#
  • 31. 31 Тип результата выражения  Если входящие в выражение операнды одного типа и операция для этого типа определена, то результат выражения будет иметь тот же тип.  Если операнды разного типа и (или) операция для этого типа не определена, перед вычислениями автоматически выполняется преобразование типа по правилам, обеспечивающим приведение более коротких типов к более длинным для сохранения значимости и точности. char c = 'A'; int i = 100; double d = 1; double summa = c + i + d; // 166
  • 32. 32 Явное преобразование типа  Автоматическое (неявное) преобразование возможно не всегда, а только если при этом не может случиться потеря значимости.  Если неявного преобразования из одного типа в другой не существует, программист может задать явное преобразование типа с помощью операции (тип) x. char c = 'A'; int i = 100; double d = 1; с = (char) i; // 'd' c = (char) d; i = (int) d;
  • 33. 33 Неявные арифметические преобразования типов в C# sbyte short int ushort long byte uint float ulong double decimal char при отсутствии линии возникает ошибка компиляции
  • 34. 34 Понятие «исключительная ситуация»  При вычислении выражений могут возникнуть ошибки (переполнение, деление на ноль).  В C# есть механизм обработки исключительных ситуаций (исключений), который позволяет избегать аварийного завершения программы.  Если в процессе вычислений возникла ошибка, система сигнализирует об этом с помощью выбрасывания (генерирования) исключения.  Каждому типу ошибки соответствует свое исключение. Исключения являются классами, которые имеют общего предка — класс Exception, определенный в пространстве имен System.  Например, при делении на ноль будет выброшено исключение DivideByZeroException, при переполнении — исключение OverflowException.  В программе необходимо предусмотреть обработку исключений.
  • 35. 35 Инкремент и декремент using System; namespace CA1 { class C1 { static void Main() { int x = 3, y = 3; Console.Write( "Значение префиксного выражения: " ); Console.WriteLine( ++x ); Console.Write( "Значение х после приращения: " ); Console.WriteLine( x ); Console.Write( "Значение постфиксного выражения: " ); Console.WriteLine( y++ ); Console.Write( "Значение у после приращения: " ); Console.WriteLine( y ); }}} Результат работы программы: Значение префиксного выражения: 4 Значение х после приращения: 4 Значение постфиксного выражения: 3 Значение у после приращения: 4
  • 36. 36 Операция new Cлужит для создания нового объекта (выделение памяти в хипе + инициализация). Формат: new тип ( [ аргументы ] ) С помощью этой операции можно создавать объекты как ссылочных, так и значимых типов, например: object z = new object(); Monster Вася = new Monster(100); int i = new int(); // то же самое, что int i = 0; Для значимых типов обычно не применяется.
  • 37. 37 Операции отрицания - ! ~ using System; namespace ConsoleApplication1 { class Class1 { static void Main() { sbyte a = 3, b = -63, c = 126; bool d = true; Console.WriteLine( -a ); // Результат -3 Console.WriteLine( -c ); // Результат -126 Console.WriteLine( !d ); // Результат false Console.WriteLine( ~a ); // Результат -4 Console.WriteLine( ~b ); // Результат 62 Console.WriteLine( ~c ); // Результат -127 }}} a = 00000011 ~a = 11111100 b = 11000001 ~b = 00111110 c = 01111110 ~c = 10000001
  • 38. 38 Явное преобразование типа  long b = 300;  int a = (int) b; // данные не теряются  byte d = (byte) a; // данные теряются
  • 39. 39 Умножение *  Возвращает результат перемножения двух операндов.  Стандартная операция умножения определена для типов int, uint, long, ulong, float, double и decimal.  К величинам других типов ее можно применять, если для них возможно неявное преобразование к этим типам.  Тип результата операции равен «наибольшему» из типов операндов, но не менее int.  Если оба операнда целочисленные или типа decimal и результат операции слишком велик для представления с помощью заданного типа, генерируется исключение System.OverflowException
  • 40. 40 Результаты вещественного умножения * +y -y +0 -0 +∞ -∞ NaN +x +z -z +0 -0 +∞ -∞ NaN -x -z +z -0 +0 -∞ +∞ NaN +0 +0 -0 +0 -0 NaN NaN NaN -0 -0 +0 -0 +0 NaN NaN NaN +∞ +∞ -∞ NaN NaN +∞ -∞ NaN -∞ -∞ +∞ NaN NaN -∞ +∞ NaN NaN NaN NaN NaN NaN NaN NaN NaN
  • 41. 41 Пример (умножение *, деление /, остаток %) using System; namespace ConsoleApplication1 { class Class1 { static void Main() { int x = 11, y = 4; float z = 4; Console.WriteLine( z * y ); // Результат 16 Console.WriteLine( z * 1e308 ); // Рез. "бесконечность" Console.WriteLine( x / y ); // Результат 2 Console.WriteLine( x / z ); // Результат 2,75 Console.WriteLine( x % y ); // Результат 3 Console.WriteLine( 1e-324 / 1e-324 ); // Результат NaN }}}
  • 42. 42 Операции сдвига (<< и >>)  Применяются к целочисленным операндам.  Сдвигают двоичное представление первого операнда влево или вправо на количество двоичных разрядов, заданное вторым операндом.  При сдвиге влево (<<) освободившиеся разряды обнуляются.  При сдвиге вправо (>>) освободившиеся биты заполняются нулями, если первый операнд беззнакового типа, и знаковым разрядом в противном случае.  Стандартные операции сдвига определены для типов int, uint, long и ulong.
  • 43. 43 Пример using System; namespace ConsoleApplication1 { class Class1 { static void Main() { byte a = 3, b = 9; sbyte c = 9, d = -9; Console.WriteLine( a << 1 ); // Результат 6 Console.WriteLine( a << 2 ); // Результат 12 Console.WriteLine( b >> 1 ); // Результат 4 Console.WriteLine( c >> 1 ); // Результат 4 Console.WriteLine( d >> 1 ); // Результат -5 } } } 000000110000011000001100
  • 44. 44 Операции отношения и проверки на равенство  Операции отношения (<, <=, >, >=, ==, !=) сравнивают первый операнд со вторым.  Операнды должны быть арифметического типа.  Результат операции — логического типа, равен true или false. x == y -- true, если x равно y, иначе false x != y -- true, если x не равно y, иначе false x < y -- true, если x меньше y, иначе false x > y -- true, если x больше y, иначе false x <= y -- true, если x меньше или равно y, иначе false x >= y -- true, если x больше или равно y, иначе false
  • 45. 45 Условные логические операции && и || using System; namespace ConsoleApplication1 { class Class1 { static void Main() { Console.WriteLine( true && true ); // Результат true Console.WriteLine( true && false ); // Результат false Console.WriteLine( true || true ); // Результат true Console.WriteLine( true || false ); // Результат true } } } (a < b) || (a < c) Если первое условие истинно, второе не вычисляется
  • 46. 46 Условная операция  операнд_1 ? операнд_2 : операнд_3 Операнд_1 — выражение, для которого существует неявное преобразование к логическому типу. Если результат вычисления операнда_1 равен true, результат операции — значение операнда_2, иначе — значение операнда_3. using System; namespace ConsoleApplication1 { class Class1 { static void Main() { int a = 11, b = 4; int max = b > a ? b : a; Console.WriteLine( max ); // Результат 11 }}}
  • 47. 47 Присваивание – это замена старого значения переменной на новое. Старое значение стирается бесследно. Операция может использоваться в программе как законченный оператор. переменная = выражение a = b + c; x = 1; x = x + 0.5; Правый операнд операции присваивания должен иметь неявное преобразование к типу левого операнда, например: вещественная переменная = целое выражение; Операция присваивания 1 x 1+0.51.5
  • 48. 48 Сложное присваивание в C#  x += 0.5; соответствует x = x + 0.5;  x *= 0.5; соответствует x = x * 0.5;  a %= 3; соответствует a = a % 3;  a <<= 2; соответствует a = a << 2; и т.п.
  • 50. 50 Приложение: консольное или Windows? class A { public static void Main() { System.Windows.Forms.MessageBox.Show("Hello!" ); } } // Необходимо добавить ссылку на System.Windows.Forms // (Add Reference…)
  • 51. 51 using System; namespace A { class Class1 { static void Main() { int i = 3; double y = 4.12; decimal d = 600m; string s = "Вася"; } } Вывод на консоль – 1/4 Результат работы программы: 3 y = 4,12 d = 600 s = Вася Console.Write( i ); Console.WriteLine( " y = " + y); Console.WriteLine("d = " + d + " s = " + s );
  • 52. 52 using System; namespace A { class Class1 { static void Main() { int i = 3; double y = 4.12; decimal d = 600m; string s = "Вася"; } } } Вывод на консоль – 2/4 Результат работы программы: 3 y = 4,12 d = 600 s = Вася Console.Write( i ); Console.Write( " y = {0} nd = {1}", y, d ); Console.WriteLine( " s = " + s );
  • 53. 53 using System; namespace A { class Class1 { static void Main() { int i = 3; double y = 4.12; decimal d = 600m; string s = "Вася"; } } } Вывод на консоль – 3/4 Результат работы программы: 3 y = 4,12 d = 600 s = Вася Console.Write( i ); Console.Write( " y = {0:F2} nd = {1:D3}", y, d ); Console.WriteLine( " s = " + s ); Формат Формат
  • 54. 54 using System; namespace A { class Class1 { static void Main() { int i = 3; double y = 4.12; decimal d = 600m; string s = "Вася"; Console.Write( " y = {0,5:0.# ' руб. '} n", y ); } } } Вывод на консоль – 4/4 y = 4,1 руб. 5 позиций под значение пользовательский формат
  • 55. Формат местозаполнителя { номер [ , длина ] [ : формат ] }  номер – номер элемента в списке вывода (может идти не по порядку и повторяться)  длина – количество позиций под значение. Если длина отрицательная, значение выравнивается по левому краю, иначе - по правому.  формат – строка формата для выводимого значения (описатели формата на следующем слайде)  Примеры: {0,-6:F4} {2:X4} {1:hh} 55
  • 58. Описатели формата – 3/3 "P" или "p" Процент Результат: число, умноженное на 100 и отображаемое с символом процента. Поддерживается: всеми числовыми типами данных. Описатель точности: желаемое число знаков дробной части. 1 ("P", en-US) -> 100.00 % 1 ("P", fr-FR) -> 100,00 % -0.39678 ("P1", en-US) -> -39.7 % -0.39678 ("P1", fr-FR) -> -39,7 % "R" или "r" Приемо- передача Результат: строка, дающая при обратном преобразовании идентичное число. Поддерживается: Single, Double и BigInteger. Описатель точности: игнорируется. 123456789.12345678 ("R") -> 123456789.12345678 -1234567890.12345678 ("R") -> -1234567890.1234567 "X" или "x" Шестнадцат еричный Результат: шестнадцатеричная строка. Поддерживается: только целочисленными типами данных. Описатель точности: число цифр в результирующей строке. 255 ("X") -> FF -1 ("x") -> ff 255 ("x4") -> 00ff -1 ("X4") -> 00FF Любой другой символ Неизвестны й описатель Результат: порождение исключения FormatException во время выполнения. 58
  • 59. 59 using System; namespace A { class Class1 { static void Main() { string s = Console.ReadLine(); // ввод строки char c = (char)Console.Read(); // ввод символа Console.ReadLine(); string buf; // буфер для ввода чисел buf = Console.ReadLine(); int i = Convert.ToInt32( buf ); // преобразование в целое buf = Console.ReadLine(); double x = Convert.ToDouble( buf ); // преобразование в вещ. buf = Console.ReadLine(); double y = double.Parse( buf ); // преобразование в вещ. } } } Ввод с консоли – 1/2
  • 60. 60 using System; namespace A { class Class1 { static void Main() { string s = Console.ReadLine(); // ввод строки char c = (char)Console.Read(); // ввод символа Console.ReadLine(); int i = Convert.ToInt32( Console.ReadLine() ); double x = Convert.ToDouble( Console.ReadLine() ); double y = double.Parse( Console.ReadLine() ); } } } Ввод с консоли – 2/2
  • 61. 61 using System; namespace CA1 { class Class1 { static void Main() { Console.WriteLine( "Введите температуру по Фаренгейту" ); double fahr = Convert.ToDouble( Console.ReadLine() ); double cels =5.0 / 9 * (fahr - 32); Console.WriteLine( "По Фаренгейту: {0} в градусах Цельсия: {1}", fahr, cels ); } } } Пример: перевод температуры из F в С 5 ( 32) 9 C F= −
  • 62. 62 Домашнее задание Изучить темы:  Виды констант в C#  Понятие «тип данных»; встроенные типы С#  Переменные: описание, инициализация, область действия, время жизни  Операции: приоритеты, тип результата  Неявные преобразования типов  Простейший ввод и вывод (класс Console) Примечание: «изучить» - прочитать в учебнике, найти в стандарте, найти в справке, понять, применить в программе, уложить в голове в систему, объяснить бабушке.

Notas do Editor

  1. Арифметическое -, логическое !, поразрядное ~
  2. Это консольное приложение, выводящее окно сообщений W-s. Компилятор различает приложения по ключу target:exe или target:winexe. Он показывает, как загружать и запускать программу. Вин-приложения, в свою очередь, могут использовать вывод на консоль.