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

Автор работы: Пользователь скрыл имя, 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 Кб (Скачать документ)

 

В листинге 11.3 продемонстрировано применение элементов класса Array при работе с одномерным массивом.

Листинг 11.3. Использование методов класса Array с одномерным массивом

using System;

namespace ConsoleApplication1

{    class Class1

    {   static void Main()

        {

            int[] a =  { 24, 50, 18, 3, 16, -7, 9, -1 };

 

            PrintArray( "Исходный массив:", a );

            Console.WriteLine( Array.IndexOf( a, 18 ) );

 

            Array.Sort(a);

            PrintArray( "Упорядоченный массив:", a );

            Console.WriteLine( Array.BinarySearch( a, 1 8) );

        }

 

        public static void PrintArray( string header, int[] a )

        {

            Console.WriteLine( header );

            for ( int i = 0; i < a.Length; ++i )

                Console.Write( "\t" + a[i] );

            Console.WriteLine();

        }

    }

}

 

Методы Sort, IndexOf и BinarySearch являются статическими, поэтому к ним обращаются через имя класса, а не экземпляра, и передают в них имя массива. Двоичный поиск можно применять только для упорядоченных массивов. В классе Class1 описан вспомогательный статический метод PrintArray, предназначенный для вывода массива на экран.

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

Исходный массив:

        24      50      18      3       16      -7      9       -1

2

Упорядоченный массив:

        -7      -1      3       9       16      18      24      50

5

 

Оператор foreach

Оператор foreach применяется для перебора элементов в специальным образом организованной группе данных. Массив является именно такой группой. Удобство этого вида цикла заключается в том, что нам не требуется определять количество элементов в группе и выполнять их перебор по индексу: мы просто указываем на необходимость перебрать все элементы группы. Синтаксис оператора:

foreach ( тип имя in выражение ) тело_цикла

 

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

Например, пусть задан массив:

int[] a =  { 24, 50, 18, 3, 16, -7, 9, -1 };

 

Вывод этого массива на экран с помощью оператора foreach выглядит следующим образом:

foreach ( int x in a ) Console.WriteLine( x );

 

Этот оператор выполняется так: на каждом проходе цикла очередной элемент массива присваивается переменной х и с ней производятся действия, записанные в теле цикла.

В листинге 11.4 решается та же задача, что и в листинге 11.1, но с использованием цикла foreach. Обратите внимание, насколько понятнее стала программа.

Листинг 11.4. Работа с одномерным массивом с использованием цикла foreach

using System;

namespace ConsoleApplication1

{   class Class1

    {   static void Main()

        {

            int[] a = { 3, 12, 5, -9, 8, -4 };

 

            Console.WriteLine( "Исходный массив:" );

            foreach ( int elem in a )

                Console.Write( "\t" + elem );

            Console.WriteLine();

 

            long sum = 0;              // cумма отрицательных элементов

            int  num = 0;              // количество отрицательных элементов

            foreach ( int elem in a )

                if ( elem < 0 )

                {

                    sum += elem;

                    ++num;

                }

 

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

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

 

            int max = a[0];            // максимальный элемент

            foreach ( int elem in a )

                if ( elem > max ) max = elem;

 

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

        }

    }

}

 

Массивы объектов

При создании массива, состоящего из элементов ссылочного типа, память выделяется только под ссылки на элементы, а сами элементы необходимо разместить в хипе явным образом. В качестве примера создадим массив из объектов некоторого класса Monster:

using System;

namespace ConsoleApplication1

{

    class Monster { ... }

   

    class Class1

    {   static void Main()

        {

            Random rnd = new Random();

            const int n = 5;

            Monster[] stado = new Monster[n];                   // 1

            for ( int i = 0; i < n; ++i )                       // 2

            {

                stado[i] = new Monster( rnd.Next( 1, 100 ),

                                        rnd.Next( 1, 200 ),

                                       "Crazy" + i.ToString() );

            }

            foreach ( Monster x in stado ) x.Passport();        // 3

        }

    }

}

 

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

Monster Crazy0   health = 18 ammo = 94

Monster Crazy1   health = 85 ammo = 75

Monster Crazy2   health = 13 ammo = 6

Monster Crazy3   health = 51 ammo = 104

Monster Crazy4   health = 68 ammo = 114

 


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

 

Символы и строки

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

Символы

Символьный тип char предназначен для хранения символов в кодировке Unicode. Символьный тип относится к встроенным типам данных C# и соответствует стандартному классу Char библиотеки .NET из пространства имен System. В этом классе определены статические методы, позволяющие задать вид и категорию символа, а также преобразовать символ в верхний или нижний регистр и в число. Некоторые методы приведены в таблице 12.1, с остальными можно ознакомиться по учебнику.

Таблица 12.1. Некоторые методы класса System.Char Метод

Описание

GetNumericValue

Возвращает числовое значение символа, если он является цифрой, и –1 в противном случае

IsControl

Возвращает true, если символ является управляющим

IsDigit

Возвращает true, если символ является десятичной цифрой

IsLetter

Возвращает true, если символ является буквой

IsLower

Возвращает true, если символ задан в нижнем регистре

IsUpper

Возвращает true, если символ записан в верхнем регистре

IsWhiteSpace

Возвращает true, если символ является пробельным (пробел, перевод строки и возврат каретки)

Parse

Преобразует строку в символ (строка должна состоять из одного символа)

ToLower

Преобразует символ в нижний регистр

MaxValue, MinValue

Возвращают символы с максимальным и минимальным кодами (эти символы не имеют видимого представления)

 

В листинге 12.1 продемонстрировано использование этих методов.

Листинг 12.1. Использование методов класса System.Char

using System;

namespace ConsoleApplication1

{  class Class1

   {  static void Main()

     {

        try

        {

           char b = 'B', c = '\x63', d = '\u0032';                      // 1

           Console.WriteLine( "{0}  {1}  {2}", b, c, d );

           Console.WriteLine( "{0}  {1}  {2}",

                char.ToLower(b), char.ToUpper(c), char.GetNumericValue(d) );

 

           char a;

           do                                                           // 2

           {

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

               a = char.Parse( Console.ReadLine() );

               Console.WriteLine( "Введен символ {0}, его код – {1}",

                                   a, (int)a );

               if (char.IsLetter(a))      Console.WriteLine("Буква");

               if (char.IsUpper(a))       Console.WriteLine("Верхний рег.");

               if (char.IsLower(a))       Console.WriteLine("Нижний рег.");

               if (char.IsControl(a))     Console.WriteLine("Управляющий");

               if (char.IsNumber(a))      Console.WriteLine("Число");

               if (char.IsPunctuation(a)) Console.WriteLine("Разделитель");

           } while (a != 'q');

       }

       catch

       {

           Console.WriteLine( "Возникло исключение" );

           return;

       }

    }

  }

}

 

Массивы символов

Массив символов, как и массив любого иного типа, построен на основе базового класса Array. Применение этих методов позволяет эффективно решать некоторые задачи. Простой пример приведен в листинге 12.2.

Листинг 12.2. Работа с массивом символов

using System;

namespace ConsoleApplication1

{   class Class1

    {   static void Main()

        {

            char[] a = { 'm', 'a', 's', 's', 'i', 'v' };                // 1

            char[] b = "а роза упала на лапу азора".ToCharArray();      // 2

               

            PrintArray( "Исходный массив а:", a );

 

            int pos = Array.IndexOf( a, 'm' );

            a[pos] = 'M';

            PrintArray( "Измененный массив а:", a );

 

            PrintArray( "Исходный массив b:", b );

            Array.Reverse( b );

            PrintArray( "Измененный массив b:", b );

        }

 

        public static void PrintArray( string header, Array a )

        {

            Console.WriteLine( header );

            foreach ( object x in a ) Console.Write( x );

            Console.WriteLine( "\n" );

        }

    }

}

 

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

Исходный массив а:

massiv

 Измененный массив а:

Massiv

 Исходный массив b:

а роза упала на лапу азора

 Измененный массив b:

ароза упал ан алапу азор а

 

Строки типа string

Тип string, предназначенный для работы со строками символов в кодировке Unicode, является встроенным типом C#. Ему соответствует базовый класс System.String библиотеки .NET.

Создать строку можно несколькими способами:

string s;                       // инициализация отложена

string t = "qqq";               // инициализация строковым литералом

string u = new string(' ', 20); // конструктор создает строку из 20 пробелов

char[] a = { '0', '0', '0' };   // массив для инициализации строки

string v = new string( a );     // создание из массива символов

 

Для строк определены следующие операции:

                    присваивание (=);

                    проверка на равенство (==);

                    проверка на неравенство (!=);

                    обращение по индексу ([]);

                    сцепление (конкатенация) строк (+).

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

Обращаться к отдельному элементу строки по индексу можно только для получения значения, но не для его изменения. Это связано с тем, что строки типа string относятся к так называемым неизменяемым типам данных. Методы, изменяющие содержимое строки, на самом деле создают новую копию строки. Неиспользуемые «старые» копии автоматически удаляются сборщиком мусора.

В классе System.String предусмотрено множество методов, полей и свойств, позволяющих выполнять со строками практически любые действия. Некоторые элементы класса приведены в таблице 12.2, с остальными можно ознакомитсья по учебнику.

Таблица 12.2. Некоторые элементы класса System.String Название

Вид

Описание

Compare

Статический метод

Сравнение двух строк в лексикографическом (алфавитном) порядке. Разные реализации метода позволяют сравнивать строки и подстроки с учетом и без учета регистра и особенностей национального представления дат и т. д.

Concat

Статический метод

Конкатенация строк. Метод допускает сцепление произвольного числа строк

Copy

Статический метод

Создание копии строки

Format

Статический метод

Форматирование в соответствии с заданными спецификаторами формата (см. далее)

IndexOf, IndexOfAny, LastIndexOf, LastIndexOfAny

Методы

Определение индексов первого и последнего вхождения заданной подстроки или любого символа из заданного набора

Insert

Метод

Вставка подстроки в заданную позицию

Join

Статический метод

Слияние массива строк в единую строку. Между элементами массива вставляются разделители (см. далее)

Length

Свойство

Длина строки (количество символов)

Split

Метод

Разделение строки на элементы, используя заданные разделители. Результаты помещаются в массив строк

Substring

Метод

Выделение подстроки, начиная с заданной позиции

ToCharArray

Метод

Преобразование строки в массив символов

ToLower, ToUpper

Методы

Преобразование символов строки к нижнему или верхнему регистру

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