Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Основы алгоритмизации и объектно-ориентированного программирования




Учебное пособие

 

Москва Издательский Дом МИСиС 2011

Аннотация

Рассматриваются вопросы программирования на базе платформы Microsoft.NET Framework. Дается описание современного языка объектно-ориентированного программирования C# в объеме необходимом для иллюстрации основных понятий объектно-ориентированного программирования. Рассматриваются базовые структуры алгоритмов, типовые алгоритмы работы с массивами, основные приемы программирования, базирующиеся на объектном подходе

Предназначено для изучения основ алгоритмизации и начального знакомства с объектно-ориентированным программированием на языке C# студентами 1-го семестра, обучающихся по направлению «Прикладная математика» 231300 (бакалавр), а также для студентов 1-го и 2-го семестров бакалавриата других направлений и для самостоятельного изучения.

Оглавление

Введение

1. Основы языка C#

1.1 Переменные. Типы данных

1.2 Литералы

1.3 Операторы объявления. Инициализация переменных

1.4. Математические операторы. Выражения

1.5. Логические операторы. Выражения

1.6. Перечисление

1.7. Основные операторы

1.8. Ввод-вывод

1.9. Структура программы

2. Реализация простейших алгоритмов на языке C#.

2.1. Организация циклов

Вопросы для самопроверки

Задание для самостоятельного выполнения

2.2 Организация разветвлений. Разветвления в цикле

Вопросы для самопроверки

Задание для самостоятельного выполнения

2.3. Составление программ для обработки потока данных

Вопросы для самопроверки

Задание для самостоятельного выполнения

3. Массивы. Типовые алгоритмы обработки массивов

3.1. Одномерные массивы и алгоритмы их обработки

3.2. Работа с массивами как с объектами

Вопросы для самопроверки

Задание для самостоятельного выполнения

3.3. Работа с матрицами

Вопросы для самопроверки

Задание для самостоятельного выполнения

4. Структуры и классы

4.1. Использование структур

Вопросы для самопроверки

Задание для самостоятельного выполнения

4.2. Использование Конструктора и других методов при работе со структурами

Вопросы для самопроверки

Задание для самостоятельного выполнения

4.3. Использование классов

Вопросы для самопроверки

Задание для самостоятельного выполнения

5. Методы

5.1 Общие положения. Способы передачи параметров

5.2. Использование массивов в качестве параметров

5.3.Использование делегата для передачи метода в качестве параметра в другой метод

Вопросы для самопроверки

Задание для самостоятельного выполнения

6. Работа с текстовыми строками

Вопросы для самопроверки

Задание для самостоятельного выполнения

7. Файлы данных (Пространство имен System.IO)

Вопросы для самопроверки

Задание для самостоятельного выполнения

8. Разработка приложений
с графическим интерфейсом пользователя Windows. Экранные формы

Вопросы для самопроверки

Задание для самостоятельного выполнения

9. Среда разработки

9.1. Создание нового проекта

9.2. Сохранение проекта

9.3. Открытие существующего проекта

9.4. Использование интегрированной среды разработки Visual C#

Приложение 1. Платформа Microsoft.NET Framework,

Приложение 2. Таблицы встроенных типов

Приложение 3. Региональные стандарты

Список л итературы

Предисловие

Современное развитие общества предполагает широкое использование компьютерных технологий в различных сферах деятельности.

Умение использовать разнообразные возможности, предоставляемые компьютером, обеспечивают конкурентоспособность специалиста.

Настоящее пособие предназначено для приобретения компетенций в области алгоритмизации задач и разработки приложений на базе объектно-ориентированного подхода с использованием современного языка C#. C# — объектно-ориентированный язык, предназначенный для разработки приложений, выполняемых в среде.NET Framework. Приобретаемые при изучении данного пособия навыки являются необходимым этапом для дальнейшего овладения возможностями, предоставляемыми платформой Microsoft.NET Framework.

Пособие содержит большое количество примеров, облегчающих восприятие и освоение материала, и заданий для самостоятельного выполнения различной степени сложности, что позволит оценивать уровень освоения указанных умений и навыков как минимальный, средний или повышенный.

Введение

Язык C# (произноситсяСи шарп) – современный язык объектно-ориентированного программирования, предназначенный для разработки программ и систем программ на базе платформы Microsoft.NET Framework. Этот язык ориентирован как на создание обычных автономных приложений Microsoft Windows, допускающих в том числе взаимодействие со стандартными приложениями Windows, так и на разработку Web-приложений. Важнейшим компонентом платформы.NET Framework является обширная библиотека классов, существенно облегчающая разработку программ. В Приложении 1 приводятся подробные сведения о составе платформы.NET Framework и предоставляемых ею возможностях.

Объектно-ориентированное программирование базируется на понятиях: объект, класс, структура, поля, методы, свойства, события, которые будут вводиться, использоваться и углубляться при решении все более сложных задач.

Объектно-ориентированное программирование по сравнению с традиционными алгоритмическими языками существенно расширяет возможности и облегчает разработку сложных программных систем в большой степени благодаря наличию упомянутой выше библиотеке классов, при использовании которой отпадает необходимость в написании кодов многих типовых алгоритмов.

При решении научно-технических задач алгоритмическая составляющая является весьма существенной. В настоящем пособии вопросам алгоритмизации и изучению базовых приемов программирования уделяется значительное внимание. Параллельно рассматриваются и используются и объектные свойства языка и на наглядных примерах демонстрируются предоставляемые ими новые возможности.

Для разработки программ на языке C# на компьютере должно быть установлено средство разработки, в котором содержатся необходимые инструменты разработки, такие как, редактор кода, компиляторы и другие (подробнее в Приложении 1). В данном пособии для выполнения примеров используется средство разработки Microsoft Visual C# 2008 Express Edition (Microsoft Visual C# 2008, экспресс-выпуск)

Для выполнения программ, написанных на языке C#, на компьютере должен быть установлен пакет.NET Framework (подробнее в Приложении 1).

Прежде чем перейти к систематическому изложению средств языка, рассмотрим простейший пример программы написанной на языке C#.

 

Пример. Переменной r присвоить значение 3 и вывести значение r на экран (консоль, Console).

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

int r = 3;

Console.WriteLine(r);

Console.ReadKey();

}

}

}

Создание и реализация даже самой простой программы (кода) осуществляется в рамках проекта (Project). Поэтому вначале необходимо создать проект. Для создания нового проекта необходимо войти в Visual C#, экспресс-выпуск и в меню Файл выбрать Создать проект. Появится диалоговое окно Создать проект (см. рис.).

 

 

 

В рамках проекта создадим Консольное приложение. Консолью называется окно операционной системы, в котором отображаются вводимые с клавиатуры данные и появляются выводимые результаты. Консоль – это средство взаимодействия пользователя с Консольным приложением, содержащим код (программу). Для создания консольного приложения необходимо в появившемся окне (см. рис.) выбрать шаблон Консольное приложение и нажать OK.

Вашему Приложению автоматически присвоится имя «ConsoleApplication1» (при желании это имя можно заменить на любое другое). Появляется окно Редактора кода. В окне Редактора кода появится вкладка Program.cs с панелью кода – областью для ввода или редактирования кода. В этой области автоматически создается шаблон программы – код класса Program.

Замечание. Чтение последнего отрывка нужно совмещать с выполнением описанных действий на компьютере, что позволит снять возникающие при чтении вопросы.

Во внутренних фигурных скобках остается вписать операторы, которые должны быть выполнены этой программой. Каждый оператор заканчивается точкой с запятой.

int r = 3;

Сonsole.WriteLine(r);

Console.ReadKey();

При наборе уже одной или нескольких первых букв выпадает список, из которого Вам предлагается выбрать возможный в данном контексте нужный элемент кода, например, имя переменной. Далее нужно щелкнуть по нему 2 раза или нажать клавишу Enter, и элемент кода появится в заданном месте программы.

Первый оператор (присваивания) задает тип (в данном примере int – целый) и значение переменной r. Второй – выводит на экран (консоль) значение r. В соответствии с этим опеатором на экране появляется окно и в него выводится значение (в данном примере 3). Третий оператор помещен здесь, чтобы задержать результат на экране, пока не будет нажата какая-либо клавиша. В противном случае результат очень быстро исчезнет с экрана. Убедитесь в этом сами. Выполнить программу можно, нажав клавишу F5 (или Ctrl/F5, см. п. 9).

Вообще в написанном консольном приложении из предлагаемого шаблона кода необходимыми являются только следующие строки.

 

using System;

class Program

static void Main(string[] args)

 

Первая строка – директива using - разрешает использование типов, которые содержатся в пространстве имен. Здесь в пространстве имен System библиотеки классов.NET Framework. Пространство имен System содержит фундаментальные и базовые классы. В данном примере директива using обеспечивает доступ к структуре int и классу Console.

Вторая строка объявляет класс с именем Program с помощью ключевого слова class (классу может быть задано любое имя). Содержимое класса – метод (методы) класса – задается в фигурных скобках.

В последней строке объявляется метод Main. Стандартное содержимое скобок может быть опущено, т.е. эта строка может иметь вид

 

static void Main()

 

Таким образом, программа для нашего примера может выглядеть так

 

using System;

class Program

{

static void Main()

{

int r = 3;//инициализация переменной

Console.WriteLine(r);

Console.ReadKey();

}

}

Замечание. Текст, расположенный в строке после // является комментарием и при выполнении программы игнорируется.

Здесь в классе Program определен один метод static void Main (смысл терминов static и void будет пояснен позже, см. п. 5). Метод Main должен быть обязательно в любой программе. Именно методу Main передается управление при запуске приложения.

Метод – это оформленная специальным образом последовательность инструкций (операторов) для выполнения каких-либо действий над объектами (переменными). (Более строгое и развернутое определение дается в п. 5.) Выполнение этих инструкций начинается после вызова метода из другого метода указанием его имени и необходимых аргументов (последнее не относится к методу Main). Метод является некоторым аналогом процедур (функций) в алгоритмических языках.

Метод Main имеет особый статус. Он является точкой входа каждого приложения C# и вызывается при запуске программы. Остальные методы вызываются из метода Main или других методов.

Если метод описан в классе, к которому принадлежит и Main, то для его вызова можно указать только имя и аргументы в круглых скобках или пустые круглые скобки, если аргументов нет. Если метод принадлежит другому классу, то для его вызова нужно указать имя класса (или имя экземпляра класса) и после точки имя метода, далее круглые скобки. В скобках указать аргументы метода, если они есть или пустые скобки, если аргументов у метода нет. См., например, вызов методов Console.WriteLine(r) и Console.ReadKey() класса Console в предыдущем примере.

В библиотеке имеется большое число готовых методов, сгруппированных в классы по своему назначению. Например, класс Math предоставляет константы и статические методы (термин статические поясним позже) для вычисления тригонометрических, логарифмических и других общих математических функций. Так для вычисления cos(x) необходимо указать класс и после точки метод: Math.сos(x), см. также примеры программ ниже.

 

1. Основы языка C#

1.1 Переменные. Типы данных

 

C# имеет две разновидности типов: типы значений и ссылочные типы. Переменные, основанные на типах значений, содержат непосредственно значения. Переменные ссылочных типов сохраняют ссылки (адреса в специально выделенной памяти) на фактические данные. Таким образом, в переменной может храниться или значение, или объектная ссылка.

Для обозначения переменных используются идентификаторы: сочетание букв, цифр и знака подчеркивания, начинающееся с буквы.

В C# переменные объявляются с определенным типом данных.

Тип данных определяет место для хранения переменной, расположение, в котором будет выделена память для переменной во время выполнения программы, способ представления значения переменной в памяти, множество допустимых значений, а также набор операций, которые можно выполнять с этими данными.

Так как все переменные в C# являются объектами тех или иных классов или структур, то к сведениям, хранимым в типе, также относиться базовый тип, которому он наследует и содержащиеся в нем члены (методы, поля, события и т. д.).

В программах настоящего пособия будем использовать только переменные типа int (принимающие целые значения), double (вещественные значения), string (строка символов), char (отдельный символ) и bool (принимающие значения true (истина) или false (ложь)).

Переменные типа int, double, char, и bool являются экземплярами структур и относятся к типам значений. Переменная типа string является экземпляром класса и относится к ссылочным типам, то есть переменная содержит адрес ячейки памяти, где размещается строка. К ссылочным типам относятся также массивы (см. п. 3).

Более полное перечисление элементарных (встроенных) типов, к которым относятся и упомянутые выше типы, и характеристики типов см. в Приложении 2.

 

Значения и объектные ссылки.

Значение — это двоичное представление данных, тип данных предоставляет способ представления значения переменной в памяти.

Значения переменных целых типов представляются в памяти как двоичные числа, полученные непосредственно переводом из десятичной системы счисления в двоичную систему счисления (это представление полностью справедливо лишь для положительных чисел). Целые числа в памяти представляются точно, и при выполнении операций с целыми числами никаких ошибок не возникает.

Идея представления в памяти вещественных чисел (конкретные способы могут варьироваться) заключается в следующем. Сначала число приводится к нормализованному виду, когда целая часть числа равна 0, первая цифра после запятой является значащей, а положение запятой в числе определяется значением показателя степени 10. Например, число 0,086 в нормализованной форме имеет вид 0.86×10-1, число 123,45 - 0.12345×10-3. При этом цифры, расположенные в нормализованной записи после точки, называются мантиссой, а показатель степени 10 - это порядок. В памяти отдельно представляется мантисса и отдельно - порядок. При этом количество бит, предназначенных для мантиссы, определяет точность представления, а количество бит, предназначенных для порядка, определяет диапазон представляемых чисел. Если количество цифр в двоичном представлении мантиссы превышает количество отведенных под нее разрядов, то последние двоичные цифры теряются и число оказывается представленным в памяти приближенно. Кроме того, при выполнении арифметических операций ошибки могут накапливаться. Таким образом, в общем случае вещественные числа в памяти представляются приближенно и их сравнение на точное равенство невозможно. Так, например, равенство 0.2 + 0.2 + 0.2 + 0.2 + 0.2 = 1 может не выполняться, если левая часть его вычисляется на компьютере (cм. Пример 2.6). Обычно вещественные переменные используются для обозначения величин, полученных в результате измерений, которые всегда имеют некоторую погрешность, либо полученных в результате вычислений.

Символы всегда представлены 16-разрядными кодами Unicode (Юникод). Подробнее о символьных данных и операциях с ними см. п. 6.

Логические переменные могут иметь значение true либо false.

Объектная ссылка – адрес памяти. При создании объекта память для него выделяется в управляемой куче – специальной области памяти, переменная хранит только ссылку на расположение объекта.

 

1.2 Литералы

Литералы используются в тексте программы для обозначения числовых значений, строк символов или логических констант. Другими словами литерал представляет собой постоянное значение, у которого нет имени.

Целочисленные литералы состоят из цифр от 0 до 9 со знаком +, - или без знака. Например, 25 – 7 553.

Литералы с плавающей точкой могут быть записаны в виде целой и дробной частей, разделенных точкой (целая часть может отсутствовать, если она равна 0, если дробная часть равна 0, то после точки должен быть записан 0) или в экспоненциальной форме (вместо основания степени 10 используется e или E). Например, 8.1.23 3.0 – 5.3 E–1 5e4.

Строковые литералы используются для представления текстовых строк. Это строка символов, заключенная в кавычки. Например, “Город Москва” “Результаты вычислений”.

С помощью символа \ (обратный слеш) можно указать некоторые специальные и управляющие символы. Последовательность \ и следующего за ним символа называется управляющей последовательностью. Например, наличие в строке последовательности \n означает переход на новую строку, \t – горизонтальная табуляция, \\ - обратный слеш (\), \” - двойная кавычка и т.п.

Символьные литералы используются для представления одиночных символов (заключаются в одинарные кавычки). Например,

char chars = ‘X’;

Литералы для представления логических значений: true, false.

Ключевое слово null является литералом, представляющим пустую ссылку, которая не ссылается ни на один объект.

1.3. Операторы объявления. Инициализация переменных

Оператор объявления представляет новую переменную или константу. При объявлении указывается тип и при необходимости переменной может быть присвоено значение. Для константы указание значения обязательно. В языке C# инициализация переменной (т.е. присвоение ей начального значения) является обязательным условием. Начальное значение может быть задано с помощью оператора присваивания при объявлении переменной (см. Пример во Введении), а также в процессе выполнения программы. Если инициализация переменной осуществляется при ее объявлении, то вначале указывается тип данных, затем имя переменной, далее оператор присваивания в виде знака равенства и, наконец, литерал соответствующего типа. Для инициализации одной переменной может быть также использована другая, инициализированная ранее переменная:

int x = 0;

int y = x;

int z;

z = y;

Допустима также запись

int x, y, z;

x = y = z = 1;

Здесь нескольким переменным присваивается одно и то же значение. Присваивание происходит справа налево: сначала z присваивается значение 1, затем y присваивается значение z и далее в x пересылается значение y.

Можно также вначале объявить тип переменной, а затем инициализировать ее отдельным оператором. Например,

int x;

x = 0;

Объявление типа и инициализацию переменной можно выполнить непосредственно при первом использовании переменной в программе, см., например, программу Примера 3.4.

В виде констант задаются неизменяемые в программе величины. Например, если объявлена константа g

Const double g = 15.5;

то значение g не может быть изменено в программе.

1.4. Математические операторы. Выражения

В общем случае слева от оператора присваивания (знака =) располагается переменная, справа – выражение, значение которой будет присвоено переменной левой части. (Пока речь будет идти только о числовых переменных и выражениях, значениями которых является числовое значение.) Простейшим выражением является простая переменная или литерал.

Выражение может содержать математические операторы: сложения +, вычитания –, умножения *, деления / и вычисления остатка при целочисленном делении % (операция возведения в степень в языке C# отсутствует) и операнды, над которыми эти операции выполняются. Операндами могут быть литералы, переменные и обращения к методам, результатом которых является одно значение. Если в выражении несколько операторов, то они выполняют действия в соответствии со следующими приоритетами: операторы умножения и деления *, /, % (выполняются по порядку слева направо), операторы сложения и вычитания +, –. Если операндом какой-либо операции является обращение к функции (методу), то сначала выполняется это обращение, чтобы получить в качестве операнда числовое значение. В качестве примера вычислим

y = 6 + Cos(x) + x * x

и выведем результат на экран.

using System;

namespace ConsoleApplication1

{

class Program

{

static void Main()

{

double x = 2.3;

double y;

y = 6 + Math.Cos(x) + x * x;

Console.WriteLine(y);

Console.ReadKey();

}

}

}

Порядок вычисления выражения в программе будет следующим:

1. Вычисляется Cos(x) обращением к методу Cos(x)класса Math. (Обозначим результат через p1).

2. Вычисляется 6 + p1 (Обозначим результат этой операции через p2).

3. Вычисляется x * x (Обозначим результат этой операции через p3).

4. Вычисляется p2 + p3. Результат этой операции помещается в y.

В выражении могут присутствовать операнды разных типов. В приведенном примере первый операнд – литерал целого типа. Остальные операнды – типа double. Тип результата каждой операции зависит от типа операндов, участвующих в операции. Тип результата последней операции определяет тип результата вычисления выражения.

Определение типа результата операции осуществляется в соответствии со следующими правилами:

1. Если оба операнда целые (типа int), результат будет иметь тот же тип (int). В соответствии с этим при делении целого на целое получается целое число. Остаток от деления теряется.

2. Если один из операндов вещественный (тип double), то результат будет вещественный (double). Второй операнд при необходимости автоматически преобразуется к типу double.

 

Замечание. Для часто встречающегося в программах оператора, изменяющего значение переменной типа int на 1, например,

i = i + 1; или i = i – 1;

можно использовать более короткую запись

i ++; (инкремент) или i ––; (декремент)

(см., например, программы Примеров 2.7, 2.13 и др.).

Другие возможности сокращенной записи операторов здесь не рассматриваются.

 

 

Приведение и преобразование типов в С#

В C# можно выполнять следующие виды преобразований:

Неявные преобразования. Не требуют специального синтаксиса, поскольку преобразование безопасно для типов и данные не теряются.




Поделиться с друзьями:


Дата добавления: 2014-12-07; Просмотров: 826; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.097 сек.