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

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

В качестве примера подсчитаем количество очков после выстрела по мишени, изображенной на рис. 5.2.

Рис. 2


Рис. 5.2. Мишень

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

Листинг 5.1. Выстрел по мишени

using System;

namespace ConsoleApplication1

{   class Class1

    {   static void Main()

        {           

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

            string buf = Console.ReadLine();

            double x = Convert.ToDouble( buf );

 

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

            buf = Console.ReadLine();

            double y = double.Parse( buf );

 

            int kol = 0;

            if      ( x * x + y * y < 1 ) kol = 2;

            else if ( x * x + y * y < 4 ) kol = 1;

            Console.WriteLine( "Результат = {0} очков", kol );

        }

    }

}

 

Оператор выбора switch

Оператор switch (переключатель) предназначен для разветвления процесса вычислений на несколько направлений.

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

switch ( выражение ){

    case константное_выражение_1: [ список_операторов_1 ]

    case константное_выражение_2: [ список_операторов_2 ]

    ...

    case константное_выражение_n: [ список_операторов_n ]

    [ default: операторы ]

}

 

Выполнение оператора начинается с вычисления выражения. Тип выражения чаще всего целочисленный (включая char) или строковый. Затем управление передается первому оператору из списка, помеченному константным выражением, значение которого совпало с вычисленным. Если совпадения не произошло, выполняются операторы, расположенные после слова default, а при его отсутствии управление передается следующему за switch оператору.

Каждая ветвь переключателя должна заканчиваться явным оператором перехода, а именно одним из операторов break, goto или return:

                    оператор break выполняет выход из самого внутреннего из объемлющих его операторов switch, for, while и do;

                    оператор goto выполняет переход на указанную после него метку, обычно это метка case одной из нижележащих ветвей оператора switch;

                    оператор return выполняет выход из функции, в теле которой он записан.

В листинге 5.2 приведен пример программы, реализующей простейший калькулятор на четыре действия.

Листинг 5.2. Калькулятор на четыре действия

using System;

namespace ConsoleApplication1

{   class Class1

    {   static void Main()

        {

            string buf;

            double a, b, res;

 

            Console.WriteLine( "Введите первый операнд:" );

            buf = Console.ReadLine();

            a = double.Parse( buf );

            

            Console.WriteLine( "Введите знак операции" );

            char op = (char)Console.Read();

            Console.ReadLine();

            

            Console.WriteLine( "Введите второй операнд:" );

            buf = Console.ReadLine();

            b = double.Parse( buf );

 

            bool ok = true;

            switch (op)

            {

                case '+' : res = a + b; break;

                case '-' : res = a - b; break;

                case '*' : res = a * b; break;

                case '/' : res = a / b; break;

                default  : res = double.NaN; ok = false; break;

            }

            if (ok) Console.WriteLine( "Результат: " + res );

            else    Console.WriteLine( "Недопустимая операция" );

        }

    }

}

 

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

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

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

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

Проверка условияпродолжения цикла выполняется на каждой итерации либо до тела цикла (тогда говорят о цикле с предусловием), либо после тела цикла (цикл с постусловием).

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

Цикл завершается, если условие его продолжения не выполняется. Возможно принудительное завершение как текущей итерации, так и цикла в целом. Для этого служат операторы break, continue, return и goto. Передавать управление извне внутрь цикла запрещается.

Цикл с предусловием while

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

while ( выражение ) оператор

 

Выражение должно быть логического типа. Например, это может быть операция отношения. Если результат вычисления выражения равен true, выполняется простой или составной оператор. Эти действия повторяются до того момента, пока результатом выражения не станет значение false. После окончания цикла управление передается на следующий за ним оператор.

Выражение вычисляется перед каждой итерацией цикла. Если при первой проверке выражение равно false, цикл не выполнится ни разу.

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

Рис. 2


Назовем начальное значение аргумента Xn, конечное значение аргумента — Xk, шаг изменения аргумента — dX и параметр t. Все величины вещественные. Программа должна выводить таблицу, состоящую из двух столбцов: значений аргумента и соответствующих им значений функции.

Текст программы приведен в листинге 6.1.

Листинг 6.1. Таблица значений функции, полученных с использованием цикла while

using System;

namespace ConsoleApplication1

{   class Class1

    {   static void Main()

        {

            double Xn = -2, Xk = 12, dX = 2, t = 2, y;

            Console.WriteLine( "|   x    |    y   |" ); // заголовок таблицы

 

            double x = Xn;                                 

            while ( x <= Xk )                               

            {

                y = t;                                         

                if ( x >= 0 && x < 10 ) y = t * x;             

                if ( x >= 10 )          y = 2 * t;             

                Console.WriteLine( "| {0,6} | {1,6} |", x, y );

                x += dX;                                       

            }

        }

    }

}

 

Цикл с постусловием do

Цикл с постусловием реализует структурную схему, приведенную на рис. 6.1, б, и имеет вид:

do оператор while выражение;

 

Сначала выполняется простой или составной оператор, образующий тело цикла, а затем вычисляется выражение (оно должно иметь тип bool). Если выражение истинно, тело цикла выполняется еще раз, и проверка повторяется. Цикл завершается, когда выражение станет равным false или в теле цикла будет выполнен какой-либо оператор передачи управления.

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

Листинг 6.2. Проверка ввода

using System;

namespace ConsoleApplication1

{   class Class1

    {   static void Main()

        {

            char answer;

            do

            {

                Console.WriteLine( "Купи слоника, а?" );

                answer = (char) Console.Read();

                Console.ReadLine();

            } while ( answer != 'y' );

        }

    }

}

 

Цикл с параметром for

Цикл с параметром имеет следующий формат:

for ( инициализация; выражение; модификации ) оператор;

 

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

for ( int i = 0, j = 20; ...

int k, m;

for ( k = 1, m = 0; ...

 

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

Выражение типа bool определяет условие выполнения цикла: если его результат равен true, цикл выполняется.

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

for ( int i = 0, j = 20; i < 5 && j > 10; i++, j-- )

 

Простой или составной оператор представляет собой тело цикла. Любая из частей оператора for может быть опущена (но точки с запятой надо оставить на своих местах!).

Для примера вычислим сумму чисел от 1 до 100:

int s = 0;

for ( int i = 1; i <= 100; i++ ) s += i;

 

В листинге 6.3 приведена программа, выводящая таблицу значений функции из листинга 6.1.

Листинг 6.3. Таблица значений функции, полученных с использованием цикла for

using System;

namespace ConsoleApplication1

{   class Class1

    {   static void Main()

        {

            double Xn = -2, Xk = 12, dX = 2, t = 2, y;

            Console.WriteLine( "|   x    |    y   |";   // заголовок таблицы

 

            for ( double x = Xn; x <= Xk; x += dX )         

            {

                y = t;                                      

                if ( x >= 0 && x < 10 ) y = t * x;          

                if ( x >= 10 )          y = 2 * t;          

                Console.WriteLine( "| {0,6} | {1,6} |", x, y );

            }

        }

    }

}

 

Любой цикл while может быть приведен к эквивалентному ему циклу for и наоборот. Например, два следующих цикла эквивалентны:

Цикл for:

for ( b1; b2; b3 ) оператор;

 

Цикл while:

b1;

while ( b2 )

{

    оператор;

    b3

}

 

Цикл перебора foreach

Цикл foreach используется для просмотра всех объектов из некоторой группы данных, например, массива, списка или другого контейнера. Он будет рассмотрен в разделе «Оператор foreach».

 

Операторы передачи управления

В С# есть пять операторов, изменяющих естественный порядок выполнения вычислений:

                    оператор безусловного перехода goto;

                    оператор выхода из цикла break;

                    оператор перехода к следующей итерации цикла continue;

                    оператор возврата из функции return;

                    оператор генерации исключения throw.

Эти операторы могут передать управление в пределах блока, в котором они использованы, и за его пределы. Передавать управление внутрь другого блока запрещается.

Оператор goto

Оператор безусловного перехода goto используется в одной из трех форм:

goto метка;

goto case константное_выражение;

goto default;

 

В теле той же функции должна присутствовать ровно одна конструкция вида:

метка: оператор;

 

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

Вторая и третья формы оператора goto используются в теле оператора выбора switch. Оператор goto case константное_выражение передает управление на соответствующую константному выражению ветвь, а оператор goto default — на ветвь default.

Оператор break

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

Для примера рассмотрим программу вычисления значения функции Сh x (гиперболический косинус) с точностью с помощью бесконечного ряда Тейлора по формуле:

Рис. 3


Этот ряд сходится при |x| < ∞. Для достижения заданной точности требуется суммировать члены ряда, абсолютная величина которых больше eps. Для сходящегося ряда модуль члена ряда Cn при увеличении n стремится к нулю. При некотором n неравенство |Cn| ≥  eps перестает выполняться, и вычисления прекращаются.

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

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