Программирование >>  Обработка исключительных ситуаций 

1 ... 20 21 22 [ 23 ] 24 25 26 ... 142


-f ( temp < 1 ) kol = 2; Tonsole.WriteLineC- Результат

{0} очков , kol );

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

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

- oat а. Ь; ... * С а == b ) . -f ( Math.AbsCa

b) < ie-6 )

не рекомендуется! надежно!

Значение величины, с которой сравнивается модуль разности, следует выбирать з зависимости от решаемой задачи и точности участвующих в выражении переменных. Снизу эта величина ограничена определенной в классах Single и Double константой Epsilon (это минимально возможное значение переменной такое, что 1.0 + Epsilon != 1.0).

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

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

switch

Выражение

case 1 case 2

Операторы 1 Операторы 2

default

> Операторы п

Операторы

Рис. 4.3. Структурная схема оператора switch

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

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

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

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

case п



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

Все константные выражения должны быть неявно приводимы к типу выражен] в скобках. Если совпадения не произошло, выполняются операторы, расположе ные после слова default (а при его отсутствии управление передается следующе? за switch оператору).

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

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

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

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

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

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

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

namespace ConsoleAppli cation! : class Classl

{ static void Main() i

string buf; double а. b. res,

Corisole. Writpi jne Введите первый операнв: ): buf = Console ReadLineC): a = double. Parsef buf i;

Console.WriieLineC Введите знак операции ); char op - (char)Console.ReadO: Console.ReaciLmec);

Console.WriteLineC Введите второй операнд: ). buf = Console.ReadLineO; b = double.ParseC buf );

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



bool ok = true: switch (op) I i

+ 1

case case case case default

res res res res res

b: b:

break: break; break: break:

a a a a

double.NaN: ok

false: break:

if (ok) Console.WriteLineC Результат. + res ): else Console WriteLineC Недопустимая операция

СОВЕТ

Хотя наличие ветви default и не обязательно, рекомендуется всегда обрабатывать случай, когда значение выражения не совпадает ни с одной из констант. Это облег чает поиск ошибок при отладке программы.

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

Операторы цикла

Операторы цикла используются для вычислений, повторяющихся многократно. В С# имеется четыре вида циклов: цикл с предусловием whi 1е, цикл с постусловием repeat, цикл с параметром for и цикл перебора foreach. Каждый из них состоит из определенной последовательности операторов.

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

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

Прочерка условия продолжения цикла выполняется на каждой итерации либо до ела цикла (тогда говорят о цикле с предусловием, схема которого показана на : пс. 4.4, а), либо после тела цикла (цикл с постусловием, рис. 4.4, 6). Разница между ними состоит в том. что тело цикла с постусловием всегда выполняется хотя бы один раз, после чего проверяется, надо ли его выполнять еще раз. Проверка необходимости выполнения цикла с предусловием делается до тела цикла, поэтому возможно, что он не выполнится ни разу.



1 ... 20 21 22 [ 23 ] 24 25 26 ... 142

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика