1 Платформа.NET Среда разработки Visual Studio.NET для нескольких языков программирования Каркас.NET Framework библиотека классов исполняющая система (виртуальная машина) Механизмы поддержки баз данных, электронной почты и коммерции и множество других средств
2 Структура.NET Платформа.NET Каркас.NET Framework Библиотека классов каркаса (FCL) Операционная система Общеязыковая среда выполнения (CLR) Базовые классы среды Классы для работы с данными и XML Web-сервисыИнтерфейс пользователя Среда разработки приложений Visual Studio.NET.NET Enterprise Servers.NET Building Block Services Аппаратные средства компьютера
3 Первый взгляд на классы Понятие класс аналогично обыденному смыслу этого слова в контексте «класс членистоногих», «класс задач». Класс является обобщенным понятием, определяющим характеристики и поведение некоторого множества конкретных объектов этого класса, называемых экземплярами класса (объектами). Все классы.NET имеют одного общего предка класс object, и организованы в единую иерархическую структуру. Классы логически сгруппированы в так называемые пространства имен, которые служат для упорядочивания имен классов и предотвращения их конфликтов: в разных пространствах имена могут совпадать. Пространства имен могут быть вложенными. Класс содержит данные, задающие свойства объектов класса, и функции (методы), определяющие их поведение.
4 Трансляция КомпиляцияИнтерпретация Исходный текст программы Компилятор, компоновщик Программа на машинном языке Выполнение программы Оператор на исходном языке Интерпре- татор Команды на машинном языке Выполнение команд
5 Гибридная схема трансляции Исходный текст программы Компилятор Программа на промежуточном языке Исполняющая система
6 Схема выполнения программы в.NET CLR Компилятор Исходный текст программы Исполняемый файл (IL и метаданные) Базовые классы среды (IL и метаданные) Загрузчик классов JIT-компилятор Исполняемый код (маш. команды) Выполнение программы Вызовы нескомпили- рованных методов Сборка (.exe или.DLL)
7 ©Павловская Т.А. (СПбГУ ИТМО) Часть I Введение в программирование на языке C#
8 ©Павловская Т.А. (СПбГУ ИТМО) Основные понятия языка С# Состав языка
©Павловская Т.А. (СПбГУ ИТМО) 9 Состав языка Символы: буквы: A-Z, a-z, _, буквы нац. алфавитов цифры: 0-9, A-F спец. символы: +, *, {, … пробельные символы Лексемы: константы Вася именаVasia a _11 ключевые словаdouble do if знаки операций+ - = разделители; [ ], Выражения выражение - правило вычисления значения:a + b Операторы исполняемые:c = a + b; описания:double a, b; static void Main() { Самолёт АН24 = new Самолёт(); АН24.Полетели(); }
©Павловская Т.А. (СПбГУ ИТМО) 10 ВидПримеры Булевскиеtruefalse Целые дес Lu шестн.0xA0x1B80X00FFL Веществ. с тчк f 35m с порядком 0.2E6.11e–3 5E10 Символьные 'A' '\x74' '\0' '\uA81B' Строковые "Здесь был Vasia" "\tЗначение r=\xF5\n " "Здесь был \u0056\u0061 " Константа null null Константы (литералы) C#
©Павловская Т.А. (СПбГУ ИТМО) 11 Имена (идентификаторы) имя должно начинаться с буквы или _; имя должно содержать только буквы, знак подчеркивания и цифры; прописные и строчные буквы различаются; длина имени практически не ограничена. имена не должны совпадать с ключевыми словами, в именах можно использовать управляющие последовательности Unicode Примеры правильных имен: Vasia, Вася, _13, Примеры неправильных имен: 2late, Big gig, Б#г
©Павловская Т.А. (СПбГУ ИТМО) 12 Нотации Понятные и согласованные между собой имена основа хорошего стиля. Существует несколько нотаций соглашений о правилах создания имен. В C# для именования различных видов программных объектов чаще всего используются две нотации: Нотация Паскаля - каждое слово начинается с прописной буквы: MaxLength, MyFuzzyShooshpanchik Camel notation - с прописной буквы начинается каждое слово, составляющее идентификатор, кроме первого: maxLength, myFuzzyShooshpanchik
©Павловская Т.А. (СПбГУ ИТМО) 13 Ключевые слова, знаки операций, разделители Ключевые слова идентификаторы, имеющие специальное значение для компилятора. Их можно использовать только в том смысле, в котором они определены. Например, для оператора перехода определено слово goto. Знак операции один или более символов, определяющих действие над операндами. Внутри знака операции пробелы не допускаются. Например: + - = == %= new is Операции делятся на унарные (с одним операндом), бинарные (с двумя) и тернарную (с тремя). Разделители используются для разделения или, наоборот, группирования элементов. Примеры разделителей: скобки, точка, запятая.
©Павловская Т.А. (СПбГУ ИТМО) 14 Ключевые слова C# abstractasbaseboolbreakbytecase catch charcheckedclassconstcontinue decimaldefaultdelegatedodouble elseenumeventexplicitexternfalse finallyfixedfloatforforeachgoto ifimplicitinintinterface internalislocklongnamespacenew nullobjectoperatoroutoverride paramsprivateprotectedpublic readonlyrefreturnsbytesealed shortsizeofstackallocstaticstring structswitchthisthrowtruetry typeofuintulong unchecked unsafe ushortusing virtualvoid volatilewhile
15 ©Павловская Т.А. (СПбГУ ИТМО) Типы данных
©Павловская Т.А. (СПбГУ ИТМО) 16 внутреннее представление данных => множество их возможных значений допустимые действия над данными => операции и функции Тип данных определяет: Концепция типа данных
©Павловская Т.А. (СПбГУ ИТМО) 17 Различные классификации типов данных Типы данных Простые Структурир ованные Типы данных Встроенные Определяемые программистом Типы данных Статические Динамические
©Павловская Т.А. (СПбГУ ИТМО) 18 Тип voidУказатели Типы данных Ссылочные object Массивы Строки string Классы Интерфейсы Делегаты Значения Булевский Целые Вещественные Финансовый Символьный Перечисления Структурные типы Структуры Типы nullable Основная классификация типов C#
©Павловская Т.А. (СПбГУ ИТМО) 19 Хранение в памяти величин значимого и ссылочного типа Хип Стек Ссылка Значение Тип-значениеСсылочный тип Значение Ссылка Значение Ссылка аbc y Значение x
20 ©Павловская Т.А. (СПбГУ ИТМО) Встроенные типы данных C#
©Павловская Т.А. (СПбГУ ИТМО) 21 НазваниеКлючево е слово Тип.NETДиапазон значенийОписаниеРазмер, бит Булевский bool Booleantrue, false Целые sbyte SByte – знаковое8 byte Byte 0 255беззнаковое8 short Int16 – знаковое16 ushort UInt беззнаковое16 int Int32 (– )знаковое32 uint UInt32 ( )беззнаковое32 long Int64 (– )знаковое64 ulong UInt64 ( )беззнаковое64 Логический и целые
©Павловская Т.А. (СПбГУ ИТМО) 22 Остальные Символьный char Char U+0000 U+ffffсимвол Unicode 16 Веществен- ные float Single (+-) цифр32 double Double (+-) цифр64 Финансовый decimal Decimal (+-) цифр128 Строковый string String длина ограничена объемом доступной памяти строка из символов Unicode object Object можно хранить все, что угодно всеобщий предок НазваниеКлючевое слово Тип.NETДиапазон значенийОписаниеРазмер, бит
©Павловская Т.А. (СПбГУ ИТМО) 23 Поля и методы встроенных типов Любой встроенный тип C# построен на основе стандартного класса библиотеки.NET. Это значит, что у встроенных типов данных C# есть методы и поля. С помощью них можно, например, получить: double.MaxValue (или System.Double.MaxValue) максимальное число типа double; uint.MinValue (или System.UInt32.MinValue) минимальное число типа uint. В вещественных классах есть элементы: положительная бесконечность PositiveInfinity; отрицательная бесконечность NegativeInfinity; «не является числом»: NaN.
©Павловская Т.А. (СПбГУ ИТМО) 24 Математические функции: класс Math ИмяОписаниеРезультатПояснения Abs Модульперегружен |x| записывается как Abs(x) Acos Арккосинус doubleAcos(double x) Asin Арксинус doubleAsin(double x) Atan Арктангенс doubleAtan(double x) Atan2 Арктангенс double Atan2(double x, double y) угол, тангенс которого есть результат деления y на x BigMul Произведение longBigMul(int x, int y) Ceiling Округление до большего целого doubleCeiling(double х) Cos Косинус doubleСos(double x) Cosh Гиперболический косинус doubleCosh(double x) DivRem Деление и остатокперегружен DivRem(x, y, rem) E База натурального логарифма (число е) double 2, Exp Экспонента double e x записывается как Exp(x)
©Павловская Т.А. (СПбГУ ИТМО) 25 Floor Округление до меньшего целого doubleFloor(double х) IEEERemainder Остаток от деления double IEEERemainder(double x, double y) Log Натуральный логарифм double log e x записывается как Log(x) Log10 Десятичный логарифм double log 10 x записывается как Log10(x) Max Максимум из двух чиселперегружен Max(x, y) Min Минимум из двух чиселперегружен Min(x, y) PI Значение числа π double 3, Pow Возведение в степень double x y записывается как Pow(x, y) Round Округлениеперегружен Round(3.1) даст в результате 3 Round (3.8) даст в результате 4 SignSign Знак числа int аргументы перегружены Sin Синус doubleSin(double x) Sinh гиперболический синус doubleSinh(double x) Sqrt Квадратный корень double x записывается как Sqrt(x) Tan Тангенс doubleTan(double x) Tanh Гиперболический тангенс doubleTanh(double x)
26 ©Павловская Т.А. (СПбГУ ИТМО) Линейные программы
©Павловская Т.А. (СПбГУ ИТМО) 27 using System; namespace A { class Class1 { static void Main() { // описания и операторы, например: Console.Write("Превед медвед"); } // описания } Структура простейшей программы на С#
©Павловская Т.А. (СПбГУ ИТМО) 28 Переменные Переменная это величина, которая во время работы программы может изменять свое значение. Все переменные, используемые в программе, должны быть описаны. Для каждой переменной задается ее имя и тип: int number; float x, y; char option; Тип переменной выбирается исходя из диапазона и требуемой точности представления данных.
©Павловская Т.А. (СПбГУ ИТМО) 29 Общая структура программы на С# пространство имен Класс А Класс В Метод Main Переменные класса Методы класса: Переменные класса Локальные переменные Методы класса: …
©Павловская Т.А. (СПбГУ ИТМО) 30 Область действия и время жизни переменных Переменные описываются внутри какого-л. блока: 1) класса 2) метода или блока внутри метода Переменные, описанные непосредственно внутри класса, называются полями класса. Переменные, описанные внутри метода класса, называются локальными переменными. Область действия переменной - область программы, где можно использовать переменную. Область действия переменной начинается в точке ее описания и длится до конца блока, внутри которого она описана. Время жизни: переменные создаются при входе в их область действия (блок) и уничтожаются при выходе. Блок код, заключенный в фигурные скобки. Основное назначение блока группировка операторов.
©Павловская Т.А. (СПбГУ ИТМО) 31 Инициализация переменных При объявлении можно присвоить переменной начальное значение (инициализировать). intnumber = 100; floatx = 0.02; charoption = ю; При инициализации можно использовать не только константы, но и выражения главное, чтобы на момент описания они были вычислимыми, например: int b = 1, a = 100; int x = b * a + 25; Поля класса инициализируются «значением по умолчанию» (0 соответствующего типа). Инициализация локальных переменных возлагается на программиста. Рекомендуется всегда инициализировать переменные при описании.
©Павловская Т.А. (СПбГУ ИТМО) 32 Пример описания переменных using System; namespace CA1 { class Class1 { static void Main() { int i = 3; double y = 4.12; decimal d = 600m; string s = "Вася"; }
©Павловская Т.А. (СПбГУ ИТМО) 33 Именованные константы Вместо значений констант можно (и нужно!) использовать в программе их имена. Это облегчает читабельность программы и внесение в нее изменений: constfloat weight = 61.5; constint n = 10; constfloat g = 9.8;
©Павловская Т.А. (СПбГУ ИТМО) 34 Выражения Выражение правило вычисления значения. В выражении участвуют операнды, объединенные знаками операций. Операндами выражения могут быть константы, переменные и вызовы функций. Операции выполняются в соответствии с приоритетами. Для изменения порядка выполнения операций используются круглые скобки. Результатом выражения всегда является значение определенного типа, который определяется типами операндов. Величины, участвующие в выражении, должны быть совместимых типов. t + Math.Sin(x)/2 * x результат имеет вещественный тип a 0 && y < 0 результат имеет логический тип
©Павловская Т.А. (СПбГУ ИТМО) 35 Ассоциативность выражений Слева направо a + b – c + d ( ( ( a + b ) – c ) + d ) a * b / c * d ( ( ( a * b ) / c ) * d ) Справа налево a = b = c = d ( a = ( b = ( c = d ) ) )
©Павловская Т.А. (СПбГУ ИТМО) Первичные (), [], ++, --, new, … 2. Унарные ~, !, ++, --, -, … 3. Типа умножения (мультипликативные) *, /, % 4. Типа сложения (аддитивные) +, - 5. Сдвига > 6. Отношения и проверки типа, is, … 7. Проверки на равенство ==, != 8. Поразрядные логические &, ^, | 9. Условные логические &&, || 10. Условная ?: 11. Присваивания =, *=, /=,… Приоритеты операций C#
©Павловская Т.А. (СПбГУ ИТМО) 37 Тип результата выражения Если входящие в выражение операнды одного типа и операция для этого типа определена, то результат выражения будет иметь тот же тип. Если операнды разного типа и (или) операция для этого типа не определена, перед вычислениями автоматически выполняется преобразование типа по правилам, обеспечивающим приведение более коротких типов к более длинным для сохранения значимости и точности. char c = 'A'; int i = 100; double d = 1; double summa = c + i + d; // 166
©Павловская Т.А. (СПбГУ ИТМО) 38 Явное преобразование типа Автоматическое (неявное) преобразование возможно не всегда, а только если при этом не может случиться потеря значимости. Если неявного преобразования из одного типа в другой не существует, программист может задать явное преобразование типа с помощью операции (тип) x. char c = 'A'; int i = 100; double d = 1; с = (char) i; // 'd' c = (char) d; i = (int) d;
©Павловская Т.А. (СПбГУ ИТМО) 39 Неявные арифметические преобразования типов в C# sbyte short int ushort long byte uint float ulong double decimal char при отсутствии линии возникает ошибка компиляции
©Павловская Т.А. (СПбГУ ИТМО) 40 Понятие «исключительная ситуация» При вычислении выражений могут возникнуть ошибки (переполнение, деление на ноль). В C# есть механизм обработки исключительных ситуаций (исключений), который позволяет избегать аварийного завершения программы. Если в процессе вычислений возникла ошибка, система сигнализирует об этом с помощью выбрасывания (генерирования) исключения. Каждому типу ошибки соответствует свое исключение. Исключения являются классами, которые имеют общего предка класс Exception, определенный в пространстве имен System. Например, при делении на ноль будет выброшено исключение DivideByZeroException, при переполнении исключение OverflowException. В программе необходимо предусмотреть обработку исключений.
©Павловская Т.А. (СПбГУ ИТМО) 41 Инкремент и декремент 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
©Павловская Т.А. (СПбГУ ИТМО) 42 Операция new Cлужит для создания нового объекта (выделение памяти в хипе + инициализация). Формат: new тип ( [ аргументы ] ) С помощью этой операции можно создавать объекты как ссылочных, так и значимых типов, например: object z = new object(); Monster Вася = new Monster(100); int i = new int(); // то же самое, что int i = 0; Для значимых типов обычно не применяется.
©Павловская Т.А. (СПбГУ ИТМО) 43 Операции отрицания - ! ~ 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 = ~a = b = ~b = c = ~c =
©Павловская Т.А. (СПбГУ ИТМО) 44 Явное преобразование типа long b = 300; int a = (int) b; // данные не теряются byte d = (byte) a; // данные теряются
©Павловская Т.А. (СПбГУ ИТМО) 45 Умножение * В озвращает результат перемножения двух операндов. Стандартная операция умножения определена для типов int, uint, long, ulong, float, double и decimal. К величинам других типов ее можно применять, если для них возможно неявное преобразование к этим типам. Тип результата операции равен «наибольшему» из типов операндов, но не менее int. Если оба операнда целочисленные или типа decimal и результат операции слишком велик для представления с помощью заданного типа, генерируется исключение System.OverflowException
©Павловская Т.А. (СПбГУ ИТМО) 46 Результаты вещественного умножения *+y-y NaN +x+z-z+0-0+-NaN -x-z+z-0+0-+NaN NaN NaN
©Павловская Т.А. (СПбГУ ИТМО) 47 Пример (умножение *, деление /, остаток %) 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 }}}
©Павловская Т.А. (СПбГУ ИТМО) 48 Операции сдвига ( >) Применяются к целочисленным операндам. Сдвигают двоичное представление первого операнда влево или вправо на количество двоичных разрядов, заданное вторым операндом. При сдвиге влево () освободившиеся биты заполняются нулями, если первый операнд беззнакового типа, и знаковым разрядом в противном случае. Стандартные операции сдвига определены для типов int, uint, long и ulong.
©Павловская Т.А. (СПбГУ ИТМО) 49 Пример using System; namespace ConsoleApplication1 { class Class1 { static void Main() { byte a = 3, b = 9; sbyte c = 9, d = -9; Console.WriteLine( a 1 ); // Результат 4 Console.WriteLine( c >> 1 ); // Результат 4 Console.WriteLine( d >> 1 ); // Результат -5 } } }
©Павловская Т.А. (СПбГУ ИТМО) 50 Операции отношения и проверки на равенство Операции отношения (, >=, ==, !=) сравнивают первый операнд со вторым. Операнды должны быть арифметического типа. Результат операции логического типа, равен 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
©Павловская Т.А. (СПбГУ ИТМО) 51 Условные логические операции && и || 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) Если первое условие истинно, второе не вычисляется
©Павловская Т.А. (СПбГУ ИТМО) 52 Условная операция операнд_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 }}}
©Павловская Т.А. (СПбГУ ИТМО) 53 Присваивание – это замена старого значения переменной на новое. Старое значение стирается бесследно. Операция может использоваться в программе как законченный оператор. переменная = выражение a = b + c; x = 1; x = x + 0.5; Правый операнд операции присваивания должен иметь неявное преобразование к типу левого операнда, например: вещественная переменная = целое выражение; Операция присваивания 1 x
©Павловская Т.А. (СПбГУ ИТМО) 54 Сложное присваивание в C# x += 0.5; соответствует x = x + 0.5; x *= 0.5; соответствует x = x * 0.5; a %= 3; соответствует a = a % 3; a
55 ©Павловская Т.А. (СПбГУ ИТМО) Ввод-вывод в C#
©Павловская Т.А. (СПбГУ ИТМО) 56 using System; namespace A { class Class1 { static void Main() { int i = 3; double y = 4.12; decimal d = 600m; string s = "Вася"; } Вывод на консоль - 1 Результат работы программы: 3 y = 4,12 d = 600 s = Вася Console.Write( i ); Console.WriteLine( " y = " + y); Console.WriteLine("d = " + d + " s = " + s );
©Павловская Т.А. (СПбГУ ИТМО) 57 using System; namespace A { class Class1 { static void Main() { int i = 3; double y = 4.12; decimal d = 600m; string s = "Вася"; } Вывод на консоль - 2 Результат работы программы: 3 y = 4,12 d = 600 s = Вася Console.Write( i ); Console.Write( " y = {0} \nd = {1}", y, d ); Console.WriteLine( " s = " + s );
©Павловская Т.А. (СПбГУ ИТМО) 58 using System; namespace A { class Class1 { static void Main() { int i = 3; double y = 4.12; decimal d = 600m; string s = "Вася"; } Вывод на консоль - 3 Результат работы программы: 3 y = 4,12 d = 600 s = Вася Console.Write( i ); Console.Write( " y = {0:F2} \nd = {1:D3}", y, d ); Console.WriteLine( " s = " + s );
©Павловская Т.А. (СПбГУ ИТМО) 59 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 y = 4,1 руб. 5 позиций под значение пользовательский формат
Формат местозаполнителя {номер[,длина][:формат]} Номер – номер элемента в списке вывода (может идти не по порядку и повторяться) Длина – количество позиций под значение. Если длина отрицательная, значение выравнивается по левому краю, иначе - по правому. Формат – строка формата для выводимого значения Примеры: {0,-6:F4} {2:X4} {1:hh} ©Павловская Т.А. (СПбГУ ИТМО) 60
Описатели формата ИмяОписаниеПримеры "C" или "c" Валю та Результат: значение валюты. Поддерживается: всеми числовыми типами данных. Описатель точности: количество цифр дробной части ("C", en-US) -> $ ("C", fr-FR) -> 123, ("C", ja-JP) -> ¥ ("C3", en-US) -> ($ ) ("C3", fr-FR) -> -123, ("C3", ja-JP) -> -¥ "D" или "d" Десят ично е числ о Результат: целочисленные цифры с необязательным отрицательным знаком. Поддерживается: только целочисленными типами данных. Описатель точности: минимальное число цифр. Описатель точности по умолчанию: минимальное необходимое число цифр ("D") -> ("D6") -> "E" или "e" Эксп онен циал ьный (науч ный) Результат: экспоненциальная нотация. Поддерживается: всеми числовыми типами данных. Описатель точности: количество цифр дробной части. Описатель точности по умолчанию: ("E", en-US) -> E ("e", fr-FR) -> 1,052033e ("e2", en-US) -> e ("E2", fr_FR) -> - 1,05E+003 ©Павловская Т.А. (СПбГУ ИТМО) 61
Описатели формата – продолжение 1 "F" или "f" Фикс ирова нная запят ая Результат: цифры целой и дробной частей с необязательным отрицательным знаком. Поддерживается: всеми числовыми типами данных. Описатель точности: количество цифр дробной части ("F", en-US) -> ("F", de-DE) -> 1234, ("F1", en-US) -> ("F1", de-DE) -> 1234, ("F4", en-US) -> ("F4", de-DE) -> -1234,5600 "G" или "g" Общи е Результат: наиболее компактная запись из двух вариантов: экспоненциального и с фиксированной запятой. Поддерживается: всеми числовыми типами данных. Описатель точности: количество значащих цифр. Описатель точности по умолчанию: определяется численным типом ("G", en-US) -> ("G", sv-SE) -> -123, ("G4", en-US) -> ("G4", sv-SE) -> 123, e-25 ("G", en-US) -> E e-25 ("G", sv-SE) -> - 1, E-25 "N" или "n" Номе р Результат: цифры целой и дробной частей, разделители групп и разделитель целой и дробной частей с необязательным отрицательным знаком. Поддерживается: всеми числовыми типами данных. Описатель точности: желаемое число знаков дробной части ("N", en-US) -> 1, ("N", ru-RU) -> 1 234, ("N", en-US) -> 1, ("N", ru-RU) -> 1 234, ("N", en-US) -> -1, ("N", ru-RU) -> ,560 ©Павловская Т.А. (СПбГУ ИТМО) 62
Описатели формата – продолжение 2 "P" или "p" Процент Результат: число, умноженное на 100 и отображаемое с символом процента. Поддерживается: всеми числовыми типами данных. Описатель точности: желаемое число знаков дробной части. 1 ("P", en-US) -> % 1 ("P", fr-FR) -> 100,00 % ("P1", en-US) -> % ("P1", fr-FR) -> -39,7 % "R" или "r" Приемо- передача Результат: строка, дающая при обратном преобразовании идентичное число. Поддерживается: Single, Double и BigInteger.SingleDouble BigInteger Описатель точности: игнорируется ("R") -> ("R") -> "X" или "x" Шестнадца теричный Результат: шестнадцатеричная строка. Поддерживается: только целочисленными типами данных. Описатель точности: число цифр в результирующей строке. 255 ("X") -> FF -1 ("x") -> ff 255 ("x4") -> 00ff -1 ("X4") -> 00FF Любой другой символ Неизвестн ый описатель Результат: порождение исключения FormatException во время выполнения. FormatException ©Павловская Т.А. (СПбГУ ИТМО) 63
©Павловская Т.А. (СПбГУ ИТМО) 64 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
©Павловская Т.А. (СПбГУ ИТМО) 65 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
©Павловская Т.А. (СПбГУ ИТМО) 66 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 в С
©Павловская Т.А. (СПбГУ ИТМО) 67 Домашнее задание Изучить темы: Виды констант в C# Понятие «тип данных»; встроенные типы С# Переменные: описание, инициализация, область действия, время жизни Операции: приоритеты, тип результата Неявные преобразования типов Простейший ввод и вывод (класс Console)