Введение в программирование на языке C#
.pdfУрФУ Кафедра «Автоматизированные электрические системы»
ВведениевпрограммированиенаязыкеС#
Методические указания по дисциплине «Информатика» и для студентов дневной формы обучения специальностей
140 203 - Релейная защита и автоматизация электроэнергетических систем
140 204 - Электрические станции,
140 205 - Электроэнергетические системы и сети,
Екатеринбург 2011
УДК 004. 43
Составитель: О.М.Котов Научный редактор - профессор, доктор техн. наук В.П.Обоскалов
ВВЕДЕНИЕ В ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ С#: Методические указа-
ния / О.М.Котов. Екатеринбург: УрФУ, 2011. 26 с.
В методических указаниях приведены рекомендации по подготовке программ на языке C# в среде Microsoft Visual Studio 2008 в формате консольного приложения. Демонстрируются примеры управления стандартными устройствами ввода – вывода, типовые приёмы обработки числовой информации. Итоговый раздел содержит материал, способствующий выполнению курсовой работы.
Подготовлено кафедрой "Автоматизированные электрические системы"
Подписано в печать |
Заказ |
Формат 60 84 1/16 |
|
Бумага типографская |
|
Офсетная печать |
Усл.п.л. |
Уч.-изд. л. |
|
Тираж |
Цена "С" |
УрФУ 620002, г. Екатеринбург, ул. Мира, 19
ЗАО "Наука-Сервис" 620002, г. Екатеринбург, ул. Мира, 19
© УрФУ, 2011
2
Введение
Среда программирования Microsoft Visual Studio предназначена для разработки программных продуктов для платформы .NET Framework на целом спектре языков программирования, таких, как C++, VisualBasic, Jscript и других. Но наиболее органично возможности и преимущества новой платформы использует специально созданный для неё язык C#.
Несомненными достоинствами языка C# являются следующие:
Простота и лаконичность: много чего выброшено, но мало добавлено по сравнению с ближайшим «родственником» - языком С++;
Надёжность: программы, написанные на этом языке (в формате безопасного кода) выполняются достаточно устойчиво и безопасны для операционной системы;
Единообразие технологий разработки различных видов приложений:
язык полностью объектно- и компонентно-ориентированный.
Цель настоящего лабораторного цикла – практическое освоение технологии программирования в наиболее простом формате консольного приложения с минимальным использованием объектов. По этой причине будут использованы не все инструменты среды. Продолжение освоения технологий объектного и компонентно - ориентированного программирования состоится в рамках лабораторного практикума в дисциплине «Современные языки программирования».
Приложение консольного типа - это программа, которая запускается в окне «Командная строка», а для ввода с клавиатуры и вывода на экран использует мето-
ды класса System.Console.
I.Первая программа
Цель работы: изучение основных инструментов среды, подготовка и запуск простейшей программы, знакомство со встроенной справочной системой
Запуск среды и изучение элементов рабочего стола
С помощью ярлыка
расположенного на рабочем столе запустите среду Visual Studio. В начальном состоянии - без открытых файлов, без панелей инструментов и вспомогательных окон среда выглядит предельно просто :
Рисунок 1. Начальное состояние среды Visual С#
3
ЗАДАНИЕ 1. Добейтесь соответствия рабочего стола виду, изображённому на рисунке 1. Поместите в отчет эскиз окна и нанести на него команды, составляющие меню Файл, Правка, Вид, Окно с пояснениями об их предназначении.
Стандартными элементами управления приложениями, кроме меню, являются панели инструментов и дополнительные окна.
ЗАДАНИЕ 2. Добейтесь соответствия рабочего стола Вашего рабочего места виду, изображённому на рисунке 2. Поместите в отчет эскиз окна. Установите, какие панели инструментов присутствуют на рабочем столе. Добавьте на эскизе комментарий к каждому элементу управления.
Рисунок 2. Среда Visual Studio с минимальным набором элементов управления
Подготовка первого проекта
Организационно любая программная разработка в среде Visual Studio представляет собой иерархическую структуру следующего вида:
Описание в файле *.csproj |
Решение |
Описание в файле *.sln |
|
||
|
|
|
Проект1 |
|
|
Проект2 |
|
|
проектN |
|
|
|
|
|
… |
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Каталоги и файлы проекта1 |
Каталоги и файлы проекта2 |
|
Каталоги и файлы проектаN |
Рисунок 3. Структура решения с проектами на языке C#
При этом в проект могут объединяться файлы с исходным кодом и ресурсами, а также другие исходные данные (например, ссылки). Решение может объединять модули, написанные на разных языках программирования. Во всех последующих примерах решение будет содержать единственный проект.
Для создания нового проекта в меню Файл выполняется команда Создать и подкоманда Проект (рисунок 4). Из имеющихся в системе шаблонов следует выбрать Консольное приложение, настроить необходимые параметры в полях
Имя (проекта), Расположение, Имя решения, а затем нажать клавишу ОК.
4
Рисунок 4. Окно для создания нового проекта После нажатия кнопки ОК среда создаст заготовку для проекта (Рисунок 4).
При этом в рабочем каталоге среды создаётся Новая папка с пустым содержимым.
Рисунок 5. Заготовка для первого проекта
ЗАДАНИЕ 3:
Для того, чтобы локализовать проекты разных студентов, работающих на одном компьютере класса, каждое новое решение (и проект, разумеется) следует сохранять в отдельном каталоге своей личной папки. Личная папка должна нахо-
5
диться на рабочем диске в каталоге группы. Откройте на рабочем диске личную папку и создайте в ней каталог Работа1.
Создайте Решение1, состоящее из одного проекта на языке C#. Установите, какие пункты меню появились в среде . Отразите это в отчёте,
добавив к каждому вновь появившемуся пункту меню комментарий о его предназначении.
В результате структура и содержимое папки Работа1 должны соответствовать рисунку 6.
Рисунок 6. Файловая структура решения в приложении Проводник
ЗАДАНИЕ 4: Добейтесь соответствия структуры и содержимого папки Работа1 и рисунка 6 и продемонстрируйте результат преподавателю.
Вотчёте:
1.Изобразите структуру и состав рабочих папок в виде эскиза.
2.Прокомментируйте форматы и назначение сгенерированных системой файлов.
3.Определите размер файла-сборки (*.exe) .
ЗАДАНИЕ 5: Выполните модификацию заготовки в соответствии с рисунком 7, запустите её на выполнение с помощью соответствующих команд меню Отладка.
Вотчёте:
1.Проверьте и прокомментируйте особенности различных вариантов запуска.
2.Установите, какие файлы появились в рабочих каталогах решения после различных вариантов компоновки и запуска приложения.
Рисунок 7. Первая программа Небольшая коррекция Первой программы позволяет сделать приветствие адресным:
6
using System;
class ПерваяПрограмма
{
static void Main()
{
Console.WriteLine("Представьтесь!"); string s= Console.ReadLine();
Console.WriteLine("Здравствуйте, "+s+" !" );
}
}
Выполните коррекцию исходного модуля, проверьте полученный вариант в работе. В отчёте укажите размер файла-сборки.
ЗАДАНИЕ 6. С помощью внутреннего справочника среды (вызывается клавишей F1) заполните (в отчёте) таблицу по наиболее используемым методам класса
Console:
Имя метода |
Назначение |
Входные аргументы |
Возвращаемое значение |
ReadLine()
Read()
Write()
ЗАДАНИЕ 7(индивидуальное): Используя в качестве заготовки адресное приветствие, выполните один из вариантов его модификации (по указанию преподавателя):
1.В зависимости от того, введено ли одно имя, или имя с отчеством, сформируйте различные варианты обращения. Например, «Привет, <имя> !» и «Здравствуйте, <имя отчество> !».
2.В зависимости от введенного имени добавьте комплимент типа: «<имя>, ты сегодня на редкость сосредоточен !» ( для мужского имени), и «<имя>, прекрасно выглядишь! ». Считать, что женские имена оканчиваются на «а» или «я».
3.Перед выводом на экран разбейте полученное с клавиатуры имя заданным количеством пробелов после каждой буквы.
4.Перед выводом на экран разбейте полученное с клавиатуры имя заданным количеством дефисов после каждой буквы.
5.Посчитайте количество букв в имени и выведите это значение на экран.
6.Посчитайте количество гласных букв в имени и выведите это значение на эк-
ран.
7.Посчитайте количество согласных букв в имени и выведите это значение на экран.
8.Выведите на экран полученное с клавиатуры имя заглавными буквами.
9.Посчитайте сумму кодов в заданном имени и выведите это значение на экран.
10.Перед выводом на экран полученное с клавиатуры имя разверните в обратном порядке.
11.Разработайте программу простой аутентификации, используя в качестве пароля:
-количество букв имени;
-количество гласных букв имени;
-количество согласных букв имени;
7
-код первой буквы имени;
-код последней буквы имени.
Вотчете после обязательных пунктов (указаны в тексте методической разработки) приведите код программы индивидуального задания с необходимыми пояснениями, а также эскиз консольного окна при её выполнении.
II. Исследование встроенных типов
Цель работы: изучение возможностей встроенных типов данных
Введение
Как известно, встроенные (или примитивные) типы для размещения числовых данных (а также типы char и bool) являются производными от системных классов Object и ValueType и являются значащими. Объединяет их тот факт, что содержимое в объектах этих типов имеется в единственном числе (скаляр). В то же время, встроенный тип string, также являясь производным от Object, относится к ссылочным типам, так как в общем случае, объект – строка содержит множество кодов тех либо иных символов (вектор). В любом случае в объекте встроенных типов имеется возможность использовать унаследованные элементы базовых классов.
ЗАДАНИЕ 1: Объясните в отчёте (с помощью встроенной справочной системы) назначение, тип и порядок использования методов GetType() и ToString(), а также полей MinValue и MaxValue.
ЗАДАНИЕ 2: Для трёх указанных преподавателем типов разработайте пример использования элементов базовых классов Object и ValueType (с выводом значений на консольный экран), и заполните соответствующие строки таблицы (в отчёте). Пример продемонстрируйте преподавателю, поместите в отчёт его код и эскиз консольного окна.
№ |
Тип |
Размер |
Назначение |
Диапазон |
Системное |
|
|
|
(бит) |
|
изменения |
название |
|
1 |
sbyte |
|
|
|
|
|
2 |
byte |
|
|
|
|
|
3 |
short |
|
|
|
|
|
4 |
ushort |
|
|
|
|
|
5 |
char |
|
|
|
|
|
6 |
int |
|
|
|
|
|
7 |
uint |
|
|
|
|
|
8 |
long |
|
|
|
|
|
9 |
ulong |
|
|
|
|
|
10 |
float |
|
|
|
|
|
11 |
double |
|
|
|
|
|
12 |
decimal |
|
|
|
|
|
Встроенные типы для работы с датой и временем
Тип DateTime относится к простым (примитивным) типам и предназначен для хранения даты и времени в достаточно широком диапазоне. Для работы с времен-
8
ными интервалами обычно используется встроенный тип TimeSpan. И тот и другой тип относится к пространству имён System.
ЗАДАНИЕ 3: Для типов DateTime и TimeSpan разработайте пример, позволяющий заполнить следующую таблицу (в отчёт). Пример демонстрируется преподавателю и вместе с эскизом экрана также помещается в отчёт.
№ |
Тип |
Назначение |
Диапазон изменения |
|
1 |
DateTime |
|
|
|
|
TimeSpan |
|
|
|
Пример DateTime1 демонстрирует некоторые возможности обсуждаемых типов.
using System;
using C = System.Console; class DateTime1
{
static void Main()
{
DateTime
d1 = new DateTime(2009, 1, 1),
d2 = DateTime.Now;
TimeSpan interval = d2 - d1;
C.WriteLine("Сегодня {0:d} день года",interval.Days);
}
}
ЗАДАНИЕ 4: Запустите пример DataTime1 на выполнение, в отчёте прокомментируйте использование:
Конструктора класса DateTime,
Свойства класса DateTime,
Операции класса TimeSpan,
Свойства класса TimeSpan.
ЗАДАНИЕ 5: Модифицируйте пример так, чтобы точку отсчёта можно было задавать с клавиатуры, а значение интервала получать (по указанию преподавателя) в:
часах,
секундах,
миллисекундах,
тиках.
Рассчитайте в указанной единице измерения сколько времени прошло, например, со дня Вашего зачисления в университет.
Работу модифицированного варианта продемонстрируйте преподавателю, листинг и эскиз консольного окна поместите в отчёт.
Исследование быстродействия процессора на операциях с плавающими типами данных
В примере DateTime2 определяется время, которое процессор затратит на выполнение некоторого количества операций с данными типа float.
9
using System;
using C = System.Console; class DateTime2
{ static void Main()
{float[] mass = new float[10000000]; Random gen = new Random();
float Сумма=0;
for (int i=0;i<mass.Length;i++)mass[i]=gen.Next(10)/10f; DateTime d1 = DateTime.Now;
for (int i = 0; i < mass.Length; i++) Сумма += mass[i]; DateTime d2 = DateTime.Now;
TimeSpan interval = d2 - d1;
C.WriteLine("Сумма элементов массива {0}" , Сумма); C.WriteLine("Время обработки {0:d} тиков",interval.Ticks);
}
}
ЗАДАНИЕ 6: Ознакомьтесь с листингом, запустите на выполнение. Опытным путём подберите такое количество элементов массива, чтобы интервал выполнения был > 100 000, но < 1 000 000 тиков (1тик = 100 нсек). Зафиксируйте это значение в отчёте.
ЗАДАНИЕ 7: Для заданного преподавателем вида обработки массива:
1.Расчёт среднеарифметического значения;
2.Определение среднегеометрического значения;
3.Расчёт дисперсии;
4.Расчёт среднеквадратичного отклонения;
5.Поиск наибольшего значения;
6.Поиск наименьшего значения;
7.Поиск заданного количества наибольших значений;
8.Поиск заданного количества наименьших значений;
9.Поиск значения с наибольшим отклонением от среднеарифметического;
10.Поиск значения с наименьшим отклонением от среднеарифметического;
11.Сумма элементов с чётными индексами;
12.Сумма элементов с нечётными индексами;
13.Количество элементов со значениями больше среднеарифметического;
14.Количество элементов со значениями меньше среднеарифметического;
15.Количество элементов со значениями больше среднегеометрического;
16.Количество элементов со значениями меньше среднегеометрического;
и количества элементов массива, найденного при выполнении ЗАДАНИЯ5, раз-
работайте программу для заполнения следующей таблицы:
Тип эле- |
Количество |
Количество опера- |
Продолжитель- |
Приблизитель- |
|
ментов |
элементов мас- |
ций с плавающими |
ность |
выполне- |
ная производи- |
массива |
сива |
данными |
ния |
операции, |
тельность про- |
|
|
|
(тиков) |
|
цессора, флопс |
float |
|
|
|
|
|
double |
|
|
|
|
|
decimal |
|
|
|
|
|
10