- •Министерство образования и науки Республики Казахстан
- •В.Л. Никифоров алгоритмизация и основы программирования
- •Тема 1 простые операторы языка программирования c#
- •Цель первой темы
- •1.2 Теоретические сведения
- •1.3 Пример выполнения задания на лабораторную работу
- •1.4 Домашнее задание на лабораторную работу (одз)
- •1.5 Индивидуальные задания для срс
- •Тема 2 сложные операторы языка программирования c#
- •2.1 Цель второй темы
- •2.2 Теоретические сведения
- •1.6 Контрольные вопросы для защиты отчета на срсп
- •2.3 Пример выполнения задания на лабораторную работу
- •2.4 Домашнее задание на лабораторную работу
- •2.5 Индивидуальные задания для срс
- •2.6 Контрольные вопросы для защиты отчета на срсп
- •Тема 3 одномерные массивы в языке c#
- •3.1 Цель третьей темы
- •3.2 Теоретические сведения
- •3.3 Пример выполнения задания на лабораторную работу
- •3.4 Домашнее задание на лабораторную работу
- •3.5 Индивидуальные задания для срс
- •3.6 Контрольные вопросы для защиты отчета на срсп
- •Тема 4 использование функций – методов языка c#
- •4.1 Цель четвертой темы
- •4.2 Теоретические сведения
- •4.3 Пример выполнения задания на лабораторную работу
- •4.4 Домашнее задание на лабораторную работу
- •4.5 Индивидуальные задания для срс
- •4.6 Контрольные вопросы для защиты отчета на срсп
- •5 Многомерные массивы в языке c#
- •5.1 Цель пятой темы
- •5.2 Теоретические сведения
- •5.3 Пример выполнения задания на лабораторную работу
- •5.4 Домашнее задание на лабораторную работу
- •5.5 Индивидуальные задания для срс
- •5.6 Контрольные вопросы для защиты отчета на срсп
- •6 Алгоритмы обхода графов
- •6.1 Цель шестой темы
- •6.2 Теоретические сведения
- •6.3 Пример выполнения задания на лабораторную работу
- •6.4 Домашнее задание на лабораторную работу
- •6.5 Индивидуальные задания для срс
- •6.6 Контрольные вопросы для защиты отчета на срсп
- •7.1. Основная литература
- •7.2 Дополнительная литература
Тема 1 простые операторы языка программирования c#
Цель первой темы
Знакомство с основами среды Visual Studio.NET и приобретение практических навыков по созданию консольных приложений. Освоение программирования на языке C# с использованием простые операторы.
1.2 Теоретические сведения
1.2.1 Введение
Язык C# является наиболее известной новинкой в области языков программирования. Это первый язык программирования, созданный в 21-м веке. Язык признан международным сообществом. В июне 2006 года Европейской ассоциацией по стандартизации принята уже четвертая версия стандарта этого языка: Standard ECMA-334 C# Language Specifications, 4-th edition.
Руководителем группы, создающей язык C#, является сотрудник Microsoft Андреас Хейлсберг. Он был известен в мире программистов задолго до того, как пришел в Microsoft. Хейлсберг входил в число ведущих разработчиков одной из самых популярных визуальных сред программирования Delphi.
Можно отметить следующие основные достоинства языка C#:
– язык C# создавался и развивается параллельно с каркасом Framework .Net и в полной мере учитывает все его возможности;
– язык C# является полностью объектно-ориентированным языком;
– благодаря каркасу Framework .Net, ставшему надстройкой над операционной системой, программисты языка C# получают преимущества работы с виртуальной машиной;
– Framework .Net поддерживает разнообразие типов приложений на языке C#;
– реализация, сочетающая построение надежного и эффективного кода, является немаловажным фактором, способствующим успеху языка C#.
1.2.2 Система типов языка C#
Стандарт языка C# включает следующий набор фундаментальных типов:
– логический тип (bool);
– символьный тип (char);
– целые типы. Целые типы могут быть одного из трех размеров - short, int, long, сопровождаемые описателем signed или unsigned, который указывает, как интерпретируется значение - со знаком или без оного;
– вещественные типы. Эти типы также могут быть одного из трех размеров - float, double, long double;
– тип void, используемый для указания на отсутствие информации.
Язык позволяет конструировать типы:
– указатели (например, int* - типизированный указатель на переменную типа int);
– ссылки (например, double& - типизированная ссылка на переменную типа double);
– массивы (например, char[] - массив элементов типа char).
Язык позволяет конструировать пользовательские типы:
– перечислимые типы (enum) для представления значений из конкретного множества;
– структуры (struct);
– классы (class).
Описание основных типов языка C# приведено в таблице 1.1
Таблица 1.1 Основные типы данных языка C#
Имя типа |
Системный тип |
Значения |
Размер |
bool |
System.Boolean |
true, false |
8 бит |
sbyte |
System.SByte |
[-128, 127] |
Знаковое, 8-бит |
byte |
System.Byte |
[0, 255] |
Беззнаковое, 8-бит |
short |
System.Short |
[-32768, 32767] |
Знаковое, 16-бит |
ushort |
System.UShort |
[0, 65535] |
Беззнаковое, 16-бит |
int |
System.Int32 |
|
Знаковое, 32-бит |
uint |
System.UInt32 |
|
Беззнаковое, 32-бит |
long |
System.Int64 |
|
Знаковое, 64-бит |
ulong |
System.UInt64 |
|
Беззнаковое, 64-бит |
float |
System.Single |
|
7 цифр |
double |
System.Double |
|
15-16 цифр |
decimal |
System.Decimal |
|
28-29 значащих цифр |
char |
System.Char |
[U+0000, U+ffff] |
16-бит Unicode символ |
string |
System.String |
Строка из символов Unicode |
|
1.2.3 Выражения
Выражения строятся из операндов – констант, переменных, функций объединенных знаками операций и скобками. При вычислении выражения определяется его значение и тип. Эти характеристики выражения однозначно определяются значениями и типами операндов, входящих в выражение, и правилами вычисления выражения. Правила задаются:
– приоритетом операций ( для операций одного приоритета порядок применения – слева направо или справа налево);
– преобразование типов операндов и выбор реализации для перегруженных операций;
– тип и значение результата выполнения операции над заданными значениями операндов определенного типа.
Приоритет и порядок выполнения операций приведен в таблице 1.2
Таблица 1.2 Приоритет и порядок выполнения некоторых операций в C#
Приоритет |
Категория |
Операции |
Порядок |
0 |
Первичные |
x.y, f(x), a[x], x++, x--, new |
|
1 |
Унарные |
+, -, !, ++x, --x, (T)x |
|
2 |
Мультипликативные |
*, /, % |
|
3 |
Аддитивные |
+, - |
|
4 |
Сдвиг |
<< ,>> |
|
5 |
Отношения, проверка типов |
<, >, <=, >=, is, as |
|
6 |
Эквивалентность |
==, != |
|
7 |
Логическое И (AND) |
& |
|
8 |
Логическое ИЛИ (OR) |
| |
|
9 |
Условное логическое И |
&& |
|
10 |
Условное логическое ИЛИ |
|| |
|
11 |
Условное выражение |
? : |
|
12 |
Присваивание |
=, *=, /=, %=, +=, -= |
|
Любое выражение, взятое в скобки, получает высший приоритет и должно быть вычислено, прежде чем к нему будут применимы какие-либо операции. Скобки позволяют изменить стандартный порядок вычисления выражения и установить порядок, необходимый для вычисления в данном конкретном случае. В сложных выражениях скобки полезно расставлять даже в том случае, если стандартный порядок совпадает с требуемым, поскольку наличие "лишних" скобок зачастую увеличивает наглядность записи выражения.
1.2.4 Преобразование типов
Операция кастинга - приведения операндов к одному типу. В ходе вычисления выражения может возникать необходимость выполнения преобразования типов операндов. По возможности эти преобразования выполняются автоматически, неявно для программиста. Но неявные преобразования ограничены, поскольку могут быть только безопасными. Когда же нужно выполнить опасное преобразование, программист должен задать его явно. Одна из возможностей явного задания преобразования типа состоит в применении операции приведения к типу, называемой также кастингом. Это унарная операция со следующим синтаксисом:
(тип) выражение;
Здесь в скобках указывается тип, к которому следует привести выражение, стоящее за скобками. Нужно понимать, что не всегда существует явное приведение типа источника к типу цели. Операция кастинга применима только для приведения типов внутри арифметического типа. С ее помощью один арифметический подтип можно привести к другому подтипу, но нельзя, например, целочисленные типы привести к логическому типу bool.
Рассмотрим примеры приведения типа:
byte b1 = 1, b2 = 2, b3;
//b3 = b1 + b2;
b3 = (byte)(b1 + b2);
В этом примере необходимо сложить две переменные типа byte и, казалось бы, никакого приведении типов выполнять не нужно, результат будет также иметь тип byte, согласованный с левой частью оператора присваивания. Однако это не так по той простой причине, что отсутствует операция сложения над короткими числами. Реализация сложения начинается с типа int. Поэтому перед выполнением сложения оба операнда неявно преобразуются к типу int, результат сложения будет иметь тип int, и при попытке присвоить значение выражения переменной типа byte возникнет ошибка периода компиляции. По этой причине оператор во второй строке кода закомментирован. Программист должен явно привести выражение к типу byte, что и демонстрирует третья строка кода, в которой использована операция приведения к типу.
В следующем фрагменте кода демонстрируется еще один пример приведения типа:
int i1, i2;
i1 = -40;
i2 = (int)(1.8 * i1) + 32;
Результат умножения имеет тип double по типу первого операнда. Перед тем как выполнять сложение, результат приводится к типу int. После приведения типа для первого слагаемого (int)(1.8 * i1) сложение будет выполняться над целыми числами, результат будет иметь тип int, и не потребуется никаких преобразований для присвоения полученного значения переменной i2. Если убрать приведение типа в этом операторе, то возникнет ошибка на этапе компиляции.
