Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика ответы.docx
Скачиваний:
56
Добавлен:
10.05.2015
Размер:
270.28 Кб
Скачать

6) Операторы перехода:зззззззззззззз

э

Операторов перехода, позволяющих прервать естественный порядок выполнения операторов блока, в языке C# несколько.

6.1. Оператор goto:

Сразу нужно отметить, что использование этого оператора не рекомендуется. В принципе он допустим, так как достался языку C# в наследство от языка C. Однако, его использование не соответствует структурному стилю программирования, и делает запутанной логику программы. Оператор goto имеет три варианта записи.

А) goto метка; Б) goto case константное_выражение; В) goto default;

Первый вариант основан на следующем соображении. Все операторы языка C# могут иметь метку - уникальный идентификатор, предшествующий оператору и отделённый от него символом двоеточия. Передача управления помеченному оператору – это классическое использование оператора goto. Два других варианта используются внутри оператора switch. Они обеспечивают передачу управления в case-ветвь или default-ветвь.

6.2. Операторы break и continue:

Хорошим стилем программирования считается, когда используются "переходы вперёд" (но не назад), позволяющие при выполнении некоторого условия выйти из цикла, из оператора ветвления, из блока. Для этой цели можно использовать оператор goto, но лучше применять специально предназначенные для этих целей операторы break и continue.

Оператор break может стоять в теле цикла или завершать case-ветвь в операторе switch. Пример его использования в операторе switch уже демонстрировался. При выполнении оператора break в теле цикла завершается выполнение самого внутреннего цикла. В теле цикла, чаще всего, оператор break помещается в одну из ветвей оператора if, проверяющего условие преждевременного завершения цикла. Пример:

do  { ... Console.Write("Завершаем работу? (Y,N)"); temp = Console.ReadLine(); otv = char.Parse(temp); if (otv = = 'Y' || otv = = 'y') break; ... }while(...);

Оператор continue используется только в теле цикла. В отличие от оператора break, завершающего внутренний цикл, continue осуществляет переход к следующему шагу цикла. Пример – вычисление значений функции на интервале от -10 до +10:

for (int i = -10; i < 11; i++) {  if (i > -4 && i < 4) continue; y= Math.Sqrt(i * i - 9); Console.WriteLine("Значение функции = {0} при значении аргумента {1}", y, i); }

Здесь переход к следующему шагу цикла без вычислений необходим потому, что на отрезке [-3, 3] значение функции не существует.

6.3. Оператор return:

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

8) Операторы выбора: if и switch

4.1. Оператор if:

Синтаксис оператора:

If (выражение_1) оператор_1 else if (выражение_2) оператор_2 ... else if (выражение_K) оператор_K else оператор_N

Выражения в круглых скобках должны быть булевого типа. Точнее, при вычислениях выражения должны давать значения true или false. Вспомним, что арифметический тип не имеет явных или неявных преобразований к булевому типу. Каждый из операторов может быть любым оператором – в частности, блоком или другим if-оператором. Поэтому возможна и такая конструкция:

if (выражение_1) if (выражение_2) if (выражение_3) ...

Ветви else и if, позволяющие организовать выбор из многих возможностей, могут отсутствовать. Может отсутствовать заключительная else-ветвь. Выполняется тот оператор, который записан после выражения, имеющего истинное значение. Проверка истинности выражений выполняется в порядке их написания. Если все выражения ложны, то выполняется оператор после else. Пример записи оператора:

if (k % 7 = = 0) {  Console.WriteLine("Число делится на 7 нацело"); } else Console.WriteLine("Число не делится на 7");

4.2. Оператор switch:

Важным случаем выбора из нескольких вариантов является ситуация, при которой выбор варианта определяется значениями некоторого выражения. Такой выбор можно описать и оператором if, но тогда выражение придётся повторять в каждом условии. Более наглядным такой выбор можно сделать с помощью оператора switch. Вот его синтаксис:

switch (выражение) { case константное_выражение_1: операторы_1 оператор_перехода_1 ... case константное_выражение_K: операторы_K оператор_перехода_K default: операторы_N оператор_перехода_N }

Конструкция не очень строгая. Ветвь default может отсутствовать. Так же могут отсутствовать операторы перехода (если программисту так надо). А вот константные выражения в case должны иметь тот же тип, что и switch-выражение.

Из-за нестрогости конструкции семантика оператора switch чуть-чуть запутана. Вначале вычисляется значение switch-выражения. Затем оно поочерёдно в порядке следования case сравнивается на совпадение с константными выражениями. Как только достигнуто совпадение, выполняется соответствующая последовательность операторов case-ветви. Поскольку последний оператор этой последовательности является оператором перехода (чаще всего это оператор break), то обычно он завершает выполнение оператора switch. При его отсутствии управление "проваливается" в следующую case-ветвь. Если значение switch-выражения не совпадает ни с одним константным выражением, то выполняется последовательность операторов ветви default, если, конечно, она есть. Пример записи оператора:

switch (variant) { case 1: Console.Write("Сторона А = "); temp = Console.ReadLine(); a = Convert.ToDouble(temp); Console.Write("Сторона B = "); temp = Console.ReadLine(); b = Convert.ToDouble(temp); Console.WriteLine("Площадь прямоугольника = "+a*b); break; case 2: Console.Write("Сторона А = "); temp = Console.ReadLine(); a = Convert.ToDouble(temp); Console.Write("Высота H = "); temp = Console.ReadLine(); h = Convert.ToDouble(temp); Console.WriteLine("Площадь треугольниика = "+ a * h / 2); break; . . . . . . . . . . . . . . . . . . . . default: Console.WriteLine("Выбор неверен "); break; }

(надо еще что-то добавить =))