Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Laboratornyy_praktikum_Programmirovanie_na_C

.pdf
Скачиваний:
42
Добавлен:
02.02.2015
Размер:
1.93 Mб
Скачать

Вход

 

 

 

 

 

Выход

7

0

&

 

 

 

7

 

 

0

 

 

6

 

 

 

 

6

0

 

 

 

 

5

 

 

 

 

 

5

4

0

>=1

0

 

 

4

3

 

 

3

 

 

0

 

 

 

 

 

 

 

 

2

0

 

0

 

 

2

 

 

0

>=1

0

1

 

 

 

 

0

1

 

 

 

 

 

 

0

 

&

0

 

0

0

0

 

 

 

 

 

 

0

 

 

 

 

0

 

 

 

 

 

 

0

=1

0

 

 

 

 

0

 

0

 

 

 

Рисунок 3.3. Синтетическая логическая схема побитного преобразования числа

Покажите результаты работы преподавателю, закройте Visual Studio, а затем

уд л т с со д нны м о р мя р боты ф йлы п пк в папке

D:\Program\VS.

Вопросы к под ото к :

1.Что такое логические операторы и операторы отношения?

2.Какие операторы отношения используются с логическими типами?

3.Какие операторы отношения используются с числовыми типами?

4.Что такое поразрядные логические операторы?

5.Как определить отрицательное число?

6.Как определить нечѐтность числа?

51

ЛАБОРАТОРНАЯ РАБОТА 4. УСЛОВНЫЕ ОПЕРАТОРЫ

Цель работы: Научиться использовать условные операторы и операторы выбора. Программы работы записать (вклеить распечатку) с пояснениями в лабораторный журнал.

4.1.ОПЕРАТОРЫ БЕЗУСЛОВНОГО ПЕРЕХОДА

Вязыке C# присутствует оператор безусловного перехода goto, который можно использовать только в случае необходимости. Оператор передаѐт управление строке, метка которой указана после goto. Метка представляет собой идентификатор, оканчивающийся двоеточием. Также можно переходить на блоки case оператора выбора switch. Оператор goto можно использовать для выхода из вложенных циклов. При переходе на операторы, находящиеся выше, может образоваться цикл, в том числе бесконечный. При переходе на операторы, расположенные ниже, возможен пропуск операторов. Найдите в справке и рассмотрите примеры к оператору goto.

4.2.ОПЕРАТОРЫ УСЛОВИЯ

Пример программы P04_1 первой лабораторной работы, в которую добавлена проверка диапазона. Условие задачи можно выразить выражением:

sin( x) при 0 x 1 y

Ошибка! иначе

using System; class P04_1

{

static void Main(string[] args)

{

Console.Write("Введите число в диапазоне 0..1: "); Double x = Convert.ToDouble(Console.ReadLine()); if (x >= 0.0 && x <= 1.0)

Console.WriteLine("{0:N}", Math.Abs(Math.Sin(x)));

else

Console.WriteLine("Вне диапазона!"); Console.ReadKey(true);

}

}

Как видно из программы, были добавлены операторы if()/else, которые определяют ветвление алгоритма, и в случае выполнения условия выполняется оператор после if(), иначе – после else (Рис.1). Логическое выражение (условие) записывается в скобках после оператора if. Оператор else не является обязательным, при его отсутствии выполняются операторы блока if, если условие выполняется, или иначе управление передаѐтся операторам, следующим за блоком if. Условный

52

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

x

false

true

 

0≥ x≥1

Рисунок 1. Блок-схема программы с ветвлением

Условные операторы могут быть вложены друг в друга. Если в качестве условия if рассматриваются отрезки числовой прямой, то условия можно построить так, чтобы получить наиболее эффективный код. Например, существует алгоритм, имеющий разные выражения вычисления результата, если аргумент находится в различных диапазонах. Задано следующее выражение:

x2

y sin( x)

1x

при x 1 при 1 x 1

при x 1

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

–1

1

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

53

x, лежащие в диапазоне от –∞ до –1, то для вложенных операторов останется диапазон от –1 до +∞. Следующий условный оператор может отсечь область от +1 до +∞. Останется отрезок от –1 до +1 включительно, поэтому дополнительных проверок выполнять не требуется.

Можно использовать условия по ходу следования в выражении:

using System; class P04_2

{

static void Main()

{

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

double y, x = double.Parse(Console.ReadLine()); if (x < -1)

y = Math.Pow(x, 2.0); else if (-1 <= x && x <= 1)

y = Math.Sin(x);

else

y = 1.0 / x; Console.WriteLine("y = "+y);

Console.Write("Нажмите любую клавишу для завершения..."); Console.ReadKey(true);

}

}

Заметьте, что нет оператора, сразу производящего два сравнения

–1 ≤ x ≤ 1, это выражение разделяется на два, объединѐнные оператором && (И): – 1 ≤ x && x ≤ 1. Оператор if, следующий за else, является вложенным, такую конструкцию называют многоступенчатой. Вложенные операторы позволяют разделить ветвление алгоритма более чем на два потока (в данном случае три). В данном примере эффективнее отсечь условиями крайние области:

using System; class P04_2

{

static void Main()

{

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

double y, x = double.Parse(Console.ReadLine()); if (x < -1)

y = Math.Pow(x, 2.0); else if (x > 1)

y = 1.0 / x;

else

y = Math.Sin(x); Console.WriteLine("y = "+y);

Console.Write("Нажмите любую клавишу для завершения...");

54

Console.ReadKey(true);

}

}

4.3.ВНУТРИСТРОКОВЫЙ УСЛОВНЫЙ ОПЕРАТОР

Вслучаях, когда необходим выбор значений внутри выражения из двух вариантов в зависимости от выполнения условия, в C# применяют тернарный оператор «? :» (соответствующий конструкции if–then–else). Формат его записи следующий:

Выражение1 ? Выражение2 : Выражение3;

Вслучае истинного значения Выражения1 типа bool выражение принимает значение Выражение2, иначе – Выражения3.

Пример: присвоить переменной z большее из двух значений x или y.

using System; class P04_3

{

static void Main()

{

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

int x = int.Parse(Console.ReadLine()); Console.Write("Введите y: ");

int y = int.Parse(Console.ReadLine()); int z = x > y ? x : y;

Console.WriteLine("Максимальное значение: " + z); Console.Write("Нажмите любую клавишу для завершения..."); Console.ReadKey(true);

}

}

В выражении, вычисляющем значение z, используется тернарный оператор. Сначала вычисляется сравнение x > y (до ?), если выражение истинно, то переменной z присваивается значение x, иначе – значение y. Таким образом z присваивается максимальное из значений.

4.4. ОПЕРАТОР ВЫБОРА

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

if (условие)

55

оператор; else if (условие)

оператор; else if (условие)

оператор; else if (условие)

оператор;

...

else

оператор;

Конструкция switch:

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

{

case константа1: операторы; break;

case константа2: операторы; break;

case константа3: case константа4:

операторы; break;

//...

default:

операторы; break;

}

Константы после служебного слова case не должны повторяться в текущем операторе switch. Каждый блок операторов заканчивается словом break или goto. Оператор goto может передать управление указанному блоку case. Если ни одна из констант блоков case не соответствует значению выражения switch, то выполняется блок операторов default. Если блока default нет, то управление передаѐтся операторам, следующим после блока swith. Если в блоке case нет операторов, то его действие «проваливается» к следующему (допустимо только для пустых блоков), в таком случае один набор операторов используется для списка значений. Ниже, в программе P04_4 приведѐн пример выбора действия в зависимости от нажатой клавиши:

using System; class P04_4

{

static void Main()

{

Console.WriteLine("Нажмите клавишу управления курсором:");

56

ConsoleKeyInfo key;

key = Console.ReadKey(true); switch (key.Key)

{

case ConsoleKey.UpArrow:

Console.WriteLine("Вы нажали стрелку вверх!"); break;

case ConsoleKey.DownArrow:

Console.WriteLine("Вы нажали стрелку вниз!"); break;

case ConsoleKey.LeftArrow:

Console.WriteLine("Вы нажали стрелку влево!"); break;

case ConsoleKey.RightArrow:

Console.WriteLine("Вы нажали стрелку вправо!"); break;

case ConsoleKey.Home: case ConsoleKey.End:

Console.WriteLine("Начало/конец строки"); break;

case ConsoleKey.PageDown: case ConsoleKey.PageUp:

Console.WriteLine("Листать постранично..."); break;

default:

Console.WriteLine("Вы нажали другую клавишу :)"); break;

}

Console.Write("Нажмите любую клавишу для завершения..."); Console.ReadKey(true);

}

}

4.5. ПРОГРАММИРОВАНИЕ

4.5.1. Задача. Ветвление вычисления

Для следующих значений x = –5; 3 (программу P04_5 запускать дважды, вводя каждый раз нужное значение x), вводимых с клавиатуры, вычислить следующее выражение:

x2 при x 0 y

1

иначе

x

З д чу р ш ть д умя способ м – с помощью классического оператора if() и оператора ?.

57

4.5.2. Задача. Вложенные условия

Напишите программу P04_6, которая считает и выводит на экран стоимость заказа печати фотографий. Пользователь должен ввести с клавиатуры номер размера фотографий 1 – 9×12; 2 – 12×15; 3 – 18×24, а затем количество. Если количество фотографий более или равно 20, то предоставляется 10% скидка, если более 50 – 15%. Стоимость одной фотографии каждого размера задать в виде константы.

4.5.3.Задача. Максимум и минимум

Впрограмме P04_7 определить и вывести на экран максимальное и минимальное из трѐх введенных с клавиатуры вещественных чисел.

4.5.4.Задача. Операторы выбора

Составить программу P04_8, выводящую на экран текущее время года в зависимости от номера текущего месяца. Использовать оператор выбора.

Покажите результаты работы преподавателю, закройте Visual Studio, а затем

уд л т с со д нны м о р мя р боты ф йлы п пк в папке

D:\Program\VS.

Вопросы к под ото к :

1.Как работает оператор безусловного перехода?

2.Что такое оператор условия?

3.Как оператор условия отображается в блок-схеме?

4.Что такое оператор условного перехода?

5.Как можно в условном операторе одновременно использовать несколько условий?

6.Что такое тернарный оператор?

7.Как работает и для чего используется оператор выбора?

58

ЛАБОРАТОРНАЯ РАБОТА 5. ЦИКЛЫ

Цель работы: Разобраться в структуре и алгоритме работы массивов. Программы работы записать (вклеить распечатку) с пояснениями в лабораторный журнал. Проекты создавать в папке D:\Program\VS.

5.1.ПОНЯТИЕ И ОРГАНИЗАЦИЯ ЦИКЛА

Цкл (лат. cyclus ← др.-греч. κύκλος окружность) – разновидность управляющей конструкции в высокоуровневых языках программирования, предназначенная для организации многократного исполнения набора инструкций. Также циклом может называться любая многократно исполняемая последовательность инструкций, организованная любым способом (например, с помощью условного перехода). Т.е. цикл – повторяемая несколько раз структура кода. Цикл возникает при передаче управления операторам, расположенным в программе ДО текущего. В языках высокого уровня для удобства написания существует несколько вариантов операторов цикла, но при рассмотрении результатов компиляции в машинных кодах, они сводятся к оператору JMP (jump – прыжок, операторам безусловного и условного перехода). Ниже приведѐн пример бесконечного цикла:

using System; class P05_1

{

static void Main()

{

Start: Console.Write("123"); goto Start;

}

}

Приведенная программа выполняется в вечном цикле, остановить еѐ может внешнее воздействие – закрытие окна программы или нажатие клавиш прерывания консольной программы Ctrl+C (Ctrl+Break). В программе P05_1 задана метка Start, затем производится вывод строки на консоль и переход на метку Start.

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

Условие выхода из цикла обычно построено на операторах сравнения, в которых участвует некая переменная, используемая в качестве критерия окончания или продолжения итераций, такая переменная называется счѐтчиком цикла. Для выполнения цикла сначала счѐтчик цикла должен быть инициализирован – присвоено некое начальное значение, в теле цикла счѐтчик цикла претерпевает изменения, обычно операции приращения. Внутри тела цикла могут быть дополнительные

59

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

а

б

 

 

 

 

в

 

 

 

 

г

 

Рисунок 5.1. Блок-схемы операторов цикла

На рисунке 5.1 приведены блок-схемы различных циклических конструкций: а) вечного цикла б) наиболее часто используемого цикла с предусловием

в) цикла с постусловием г) цикла, построенного из операторов условия и оператора перехода, с

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

Для уяснения механизма рассмотрите пример программы с циклом, построенном на условном операторе и операторе перехода:

using System; class P05_2

{

static void Main()

{

int i = 0; //Инициализация счётчика цикла Start: //начало тела цикла

if (i <= 9)

{

Console.WriteLine(i);

i++; //приращение счётчика цикла goto Start;

}

}

}

60

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]