Программирование

Автор работы: Пользователь скрыл имя, 28 Марта 2012 в 11:49, курс лекций

Описание

Лекции по дисциплине "Программирование"

Содержание

Лекция 1. Состав языка Типы данных Переменные и операции

Лекция 2. Линейные программы

Лекция 3. Простейшие операторы. Операторы ветвления

Лекция 4. Операторы цикла и передачи управления

Лекция 5. Обработка исключительных ситуаций

Лекция 6. Классы: основные понятия Описание класса

Лекция 7. Параметры методов

Лекция 8. Конструкторы и свойства

Лекция 9. . Массивы

Лекция 10. Символы и строки

Лекция 11 Дополнительные возможности методов. Индексаторы

Лекция 12. Операции класса. Деструкторы

Лекция 13. Наследование классов

Лекция 14. Интерфейсы

Лекция 15. Стандартные интерфейсы .NET

Лекция 16. Структуры и перечисления

Лекция 17. Делегаты

Лекция 18. События

Работа состоит из  1 файл

Лекции C#.doc

— 847.00 Кб (Скачать документ)

вещественная_переменная := целое_выражение;

 

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

В сложных операциях присваивания ( +=, *=, /= и т п.) при вычислении выражения, стоящего в правой части, используется значение из левой части. Например, при сложении с присваиванием ко второму операнду прибавляется первый, и результат записывается в первый операнд, то есть выражение a += b является более компактной записью выражения a = a + b.

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

Операции присваивания правоассоциативны, то есть выполняются справа налево, в отличие от большинства других операций (a = b = c означает a = (b = c)).

 

Лекция 2. Линейные программы

 

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

Простейший ввод-вывод

Любая программа при вводе исходных данных и выводе результатов взаимодействует с внешними устройствами. Совокупность стандартных устройств ввода и вывода, то есть клавиатуры и экрана, называется консолью. В языке C# нет операторов ввода и вывода. Вместо них для обмена с внешними устройствами применяются стандартные объекты. Для работы с консолью в C# применяется класс Console, определенный в пространстве имен System. Методы этого класса Write и WriteLine уже использовались в листинге 3.1. Поговорим о них подробнее, для чего внесем некоторые изменения в этот листинг. Результаты этих изменений представлены в листинге 3.2.

Листинг 3.2. Методы вывода

using System;

namespace ConsoleApplication1

{    class Class1

    {    static void Main()

        {

            int     i = 3;

            double  y = 4.12;

            decimal d = 600m;

            string  s = "Вася";

 

            Console.WriteLine( "i = " + i );                   // 1

            Console.WriteLine( "y = {0} \nd = {1}", y, d );    // 2

            Console.WriteLine( "s = " + s );                   // 3

        }

    }

}

 

Результат работы программы:

i = 3

y = 4,12

d = 600

s = Вася

 

До сих пор мы использовали метод WriteLine для вывода значений переменных и литералов различных встроенных типов. Это возможно благодаря тому, что в классе Console существует несколько вариантов методов с именами Write и WriteLine, предназначенных для вывода значений различных типов.

Методы с одинаковыми именами, но разными параметрами называются перегруженными. Компилятор определяет, какой из методов вызван, по типу передаваемых в него величин. Методы вывода в классе Console перегружены для всех встроенных типов данных, кроме того, предусмотрены варианты форматного вывода.

Листинг 3.9 содержит два наиболее употребительных варианта вызова методов вывода. Если метод WriteLine вызван с одним параметром, он может быть любого встроенного типа. Нам же требуется вывести в каждой строке не одну, а две величины, поэтому прежде чем передавать их для вывода, их требуется «склеить» в одну строку с помощью операции +.

Перед объединением строки с числом надо преобразовать число из его внутренней формы представления в последовательность символов, то есть в строку. Преобразование в строку определено во всех стандартных классах C# — для этого служит метод ToString(). В данном случае он выполняется неявно.

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

Из управляющих последовательностей чаще всего используются символы перевода строки (\n) и горизонтальной табуляции (\t).

Рассмотрим простейшие способы ввода с клавиатуры. В классе Console определены методы ввода строки и отдельного символа, но нет методов, которые позволяют непосредственно считывать с клавиатуры числа. Ввод числовых данных выполняется в два этапа:

                    Символы, представляющие собой число, вводятся с клавиатуры в строковую переменную.

                    Выполняется преобразование из строки в переменную соответствующего типа.

Преобразование можно выполнить либо с помощью специального класса Convert, определенного в пространстве имен System, либо с помощью метода Parse, имеющегося в каждом стандартном арифметическом классе. В листинге 3.3 используются оба способа.

Листинг 3.3. Методы ввода

using System;

namespace ConsoleApplication1

{    class Class1

    {    static void Main()

        {

            Console.WriteLine( "Введите строку" );

            string s = Console.ReadLine();                  // 1

            Console.WriteLine( "s = " + s );

           

            Console.WriteLine( "Введите символ" );

            char c = (char)Console.Read();                  // 2

            Console.ReadLine();                             // 3

            Console.WriteLine( "c = " + c );

       

            string buf;        // строка – буфер для ввода чисел

 

            Console.WriteLine( "Введите целое число" );

            buf = Console.ReadLine();

            int i = Convert.ToInt32( buf );                 // 4

            Console.WriteLine( i );

 

            Console.WriteLine( "Введите вещественное число" );

            buf = Console.ReadLine();

            double x = Convert.ToDouble( buf );             // 5

            Console.WriteLine( x );

 

            Console.WriteLine( "Введите вещественное число" );

            buf = Console.ReadLine();

            double y = double.Parse( buf );                 // 6

            Console.WriteLine( y );

 

            Console.WriteLine( "Введите вещественное число" );

            buf = Console.ReadLine();

            decimal z = decimal.Parse( buf );               // 7

            Console.WriteLine( z );

        }

    }

}

 

Ввод строки выполняется в операторе 1. Длина строки не ограничена, ввод выполняется до символа перевода строки.

Ввод символа выполняется с помощью метода Read, который считывает один символ из входного потока (оператор 2). Метод возвращает значение типа int, представляющее собой код символа, или –1, если символов во входном потоке нет (например, пользователь нажал клавишу Enter). Поскольку нам требуется не int, а char, а неявного преобразования от int к char не существует, приходится применить операцию явного преобразования типа.

Оператор 3 считывает остаток строки и никуда его не передает. Это необходимо потому, что ввод данных выполняется через буфер — специальную область оперативной памяти. Фактически данные сначала заносятся в буфер, а затем считываются оттуда процедурами ввода. Занесение в буфер выполняется по нажатию клавиши Enter вместе с ее кодом. Метод Read, в отличие от ReadLine, не очищает буфер, поэтому следующий после него ввод будет выполняться с того места, на котором закончился предыдущий.

В операторах 4 и 5 используются методы класса Convert, в операторах 6 и 7 — методы Parse классов Double и Decimal библиотеки .NET, которые используются здесь через имена типов С# double и decimal.

Ввод-вывод в файлы

Часто бывает удобно заранее подготовить исходные данные в текстовом файле и считывать их в программе. Вывод из программы тоже бывает полезно выполнить не на экран, а в текстовый файл. Работа с файлами подробно рассматривается позже, а сейчас приведем лишь образцы для использования в программах. В листинге 3.4 приведена версия программы из листинга 3.2, выполняющая вывод не на экран, а в текстовый файл с именем output.txt. Файл создается в том же каталоге, что и исполняемый файл программы, по умолчанию — ...\ConsoleApplication1\bin\Debug.

 

Листинг 3.4. Вывод в текстовый файл

using System;

using System.IO;                                                     // 1

namespace ConsoleApplication1

{    class Class1

    {    static void Main()

        {

            StreamWriter f = new StreamWriter( "output.txt" );       // 2

            int     i = 3;

            double  y = 4.12;

            decimal d = 600m;

            string  s = "Вася";

 

            f.WriteLine( "i = " + i );                               // 3

            f.WriteLine( "y = {0} \nd = {1}", y, d );                // 4

            f.WriteLine( "s = " + s );                               // 5

 

            f.Close();                                               // 6

        }

    }

}

 

Для того чтобы использовать в программе файлы, необходимо:

                    Подключить пространство имен, в котором описываются стандартные классы для работы с файлами (оператор 1).

                    Объявить файловую переменную и связать ее с файлом на диске (оператор 2).

                    Выполнить операции ввода-вывода (операторы 3–5).

                    Закрыть файл (оператор 6).

Ввод данных из файла выполняется аналогично. В листинге 3.5 приведена программа, аналогичная листингу 3.3, но ввод выполняется из файла с именем input.txt, расположенного в каталоге D:\C#. Текстовый файл можно создать с помощью любого текстового редактора, удобно использовать Visual Studio.NET.

Листинг 3.5. Ввод из текстового файла

using System;

using System.IO;

namespace ConsoleApplication1

{    class Class1

    {    static void Main()

        {

            StreamReader f = new StreamReader( "d:\\C#\\input.txt" );

            string s = f.ReadLine();

            Console.WriteLine( "s = " + s );

           

            char  c = (char)f.Read();

            f.ReadLine();

            Console.WriteLine( "c = " + c );

       

            string buf;

            buf = f.ReadLine();

            int i = Convert.ToInt32( buf );

            Console.WriteLine( i );

 

            buf = f.ReadLine();

            double x = Convert.ToDouble( buf );

            Console.WriteLine( x );

 

            buf = f.ReadLine();

            double y = double.Parse( buf );

            Console.WriteLine( y );

 

            buf = f.ReadLine();

            decimal z = decimal.Parse( buf );

            Console.WriteLine( z );

            f.Close();

        }

    }

}

 

Математические функции — класс Math

В выражениях часто используются математические функции, например, синус или возведение в степень. Они реализованы в классе Math, определенном в пространстве имен System. Описание методов и полей класса приведено в таблице 3.8.

Таблица 3.8. Основные поля и статические методы класса Math

Имя

Описание

Результат

Пояснения

Abs

Модуль

Перегружен

|x| записывается как Abs(x)

Acos

Арккосинус

double

Acos(doublex)

Asin

Арксинус

double

Asin(doublex)

Atan

Арктангенс

double

Atan(doublex)

Atan2

Арктангенс

double

Atan2(doublex, doubley) — угол, тангенс которого есть результат деления y на x

BigMul

Произведение

long

BigMul(intx, inty)

Ceiling

Округление до большего целого

double

Ceiling(doubleх)

Cos

Косинус

double

Сos(doublex)

Cosh

Гиперболический косинус

double

Cosh(doublex)

DivRem

Деление и остаток

Перегружен

DivRem(x, y, rem)

E

База натурального логарифма (число е)

double

2,71828182845905

Exp

Экспонента

double

e записывается как Exp(x)

Floor

Округление до меньшего целого

double

Floor(doubleх)

IEEERemainder

Остаток от деления

double

IEEERemainder(doublex, doubley)

Log

Натуральный логарифм

double

logex записывается как Log(x)

Log10

Десятичный логарифм

double

log10x записывается как Log10(x)

Max

Максимум из двух чисел

Перегружен

Max(x, y)

Min

Минимум из двух чисел

Перегружен

Min(x, y)

PI

Значение числа PI

double

3,14159265358979

Pow

Возведение в степень

double

x записывается как Pow(x, y)

Round

Округление

Перегружен

Round(3.1) даст в результате 3 Round(3.8) даст в результате 4

Sign

Знак числа

int

Аргументы перегружены

Sin

Синус

double

Sin(doublex)

Sinh

Гиперболический синус

double

Sinh(doublex)

Sqrt

Квадратный корень

double

xx записывается как Sqrt(x)

Tan

Тангенс

double

Tan(doublex)

Tanh

Гиперболический тангенс

double

Tanh(doublex)

 

В листинге 3.6 приведен пример применения двух методов класса Math. Остальные методы используются аналогично.

Листинг 3.6. Применение методов класса Math

using System;

namespace ConsoleApplication1

{    class Class1

    {    static void Main()

        {

            Console.Write( "Введите х: " );

            string buf = Console.ReadLine();

            double x = double.Parse( buf );

            Console.WriteLine( "Значение sin: " + Math.Sin(x) );

 

            Console.Write( "Введите y: " );

            buf = Console.ReadLine();

            double y = double.Parse( buf );

            Console.WriteLine( "Максимум : " + Math.Max(x, y) );

        }

    }

 


Лекция 3. Простейшие операторы. Операторы ветвления

 

Выражения, блоки и пустые операторы

Любое выражение, завершающееся точкой с запятой, рассматривается как оператор, выполнение которого заключается в вычислении выражения. Частным случаем выражения является пустой оператор; (он используется, когда по синтаксису оператор требуется, а по смыслу — нет). Примеры:

i++;               // выполняется операция инкремента

a *= b + c;        // выполняется умножение с присваиванием

fun( i, k );       // выполняется вызов функции

while( true );     // цикл из пустого оператора (бесконечный)

 

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

Условный оператор if

Условный оператор if используется для разветвления процесса вычислений на два направления.

Формат оператора:

if ( логическое_выражение ) оператор_1; [ else оператор_2; ]

 

Сначала вычисляется логическое выражение. Если оно имеет значение true, выполняется первый оператор, иначе — второй. После этого управление передается на оператор, следующий за условным. Ветвь else может отсутствовать.

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

Примеры условных операторов:

if ( a < 0 ) b = 1;                                                  // 1

if ( a < b && ( a > d || a == 0 ) ) b++; else { b *= a; a = 0; }     // 2

if ( a < b ) if ( a < c ) m = a; else m = c;

else         if ( b < c ) m = b; else m = c;                         // 3

if ( b > a ) max = b; else max = a;                                  // 4

 

Если требуется проверить несколько условий, их объединяют знаками логических условных операций. Например, выражение в примере 2 будет истинно в том случае, если выполнится одновременно условие a < b и одно из условий в скобках. Оператор в примере 3 вычисляет наибольшее значение из трех переменных. Обратите внимание, что компилятор относит часть else к ближайшему ключевому слову if.

Информация о работе Программирование