КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Условный оператор if
Операторы ветвления Операторы ветвления if и switch применяются для того чтобы в зависимости от конкретных значений исходных данных обеспечить выполнение разных последовательностей операторов. Оператор if обеспечивает передачу управления на одну из двух ветвей вычислений, а оператор switch — на одну из произвольного числа ветвей. Условный оператор if используется для разветвления процесса вычислений на два направления. Структурная схема оператора приведена на рис. 4.1.
Формат оператора: if (логическое_выражение)оператор_1; [else оператор_2;]
Сначала вычисляется логическое выражение. Если оно имеет значение true, выполняется первый оператор, иначе — второй. После этого управление передается на оператор, следующий за условным. Ветвь else может отсутствовать. ЗАМЕЧАНИЕ Операторы, входящие в условный, не должны иметь метку и не могут быть описаниями. Если в какой-либо ветви требуется выполнить несколько операторов, их необходимо заключить в блок, иначе компилятор не сможет понять, где заканчивается ветвление. Блок может содержать любые операторы, в том числе описания и другие условные операторы (но не может состоять из одних описаний). Необходимо учитывать, что переменная, описанная в блоке, вне блока не существует. Примеры условных операторов: if (а<0) b = 1; //1 if (а<b && (а>d|| a==0)) b++; else {b*=a; a=0;} //2 if (a<b) if(a<c) m=a; else m=c; else if (b<с) m=b; else m=c; //3 if (b>a) max=b; else max=a; //4 В примере 1 отсутствует ветвь else. Подобная конструкция реализует пропуск оператора, поскольку присваивание либо выполняется, либо пропускается в зависимости от выполнения условия. Если требуется проверить несколько условий, их объединяют знаками логических условных операций. Например, выражение в примере 2 будет истинно в том случае, если выполнится одновременно условие а < b и одно из условий в скобках. Если опустить внутренние скобки, будет выполнено сначала логическое И, а потом — ИЛИ.
Оператор в примере 3 вычисляет наибольшее значение из трех переменных. Обратите внимание на то, что компилятор относит часть else к ближайшему ключевому слову if. Конструкции, подобные оператору в примере 4 (вычисляется наибольшее значение из двух переменных), проще и нагляднее записывать в виде условной операции, в данном случае следующей: max = b > а? b: a: ЗАМЕЧАНИЕ Распространенная ошибка начинающих — неверная запись проверки на принадлежность диапазону. Например, чтобы проверить условие 0 < х < 1, нельзя записать его в условном операторе непосредственно, так как каждая операция отношения должна иметь два операнда. Правильный способ записи: if(0<X && х<1).... В качестве примера подсчитаем количество очков после выстрела по мишени, изображенной на рис. 4.2. Как уже говорилось, тип переменных выбирается, исходя из их назначения. Координаты выстрела нельзя представить целыми величинами, так как это приведет к потере точности результата, а счетчик очков не имеет смысла описывать как вещественный. Программа приведена в листинге 4.1. Листинг 4.1. Выстрел по мишени
using System; namespace ConsoleAppl i cati onl { class Classl { static void Main() { Console.WriteLine("Введите координату х"); string buf = Console.ReadLine(); double x = Convert.ToDouble(buf);
Console.WriteLine("Введите координату у"); buf = Console.ReadLine(); double у=double.Parse(buf);
int kol = 0: if (x*x + у*у < 1) kol=2; else if (x*x +у*у < 4) kol=1; Console.WriteLine("Результат = {0} очков", kol); } } } Даже такую простую программу можно еще упростить с помощью промежуточной переменной и записи условия в виде двух последовательных, а не вложенных, операторов if:
double temp = x*x + y*y; int kol = 0; if (temp < 4) kol = 1;
if (temp < 1) kol = 2; Console.WriteLine("Результат = {0} очков", kol): Обратите внимание на то, что в первом варианте программы второй оператор выполняется только в случае невыполнения условия в первом условном операторе, а во втором варианте оба условных оператора выполняются последовательно, один за другим. Следует избегать проверки вещественных величин на равенство, вместо этого лучше сравнивать модуль их разности с некоторым малым числом. Это связано с погрешностью представления вещественных значений в памяти:
float а, b; … if (а == b)... //не рекомендуется! if (Math.Abs(a - b) < 1e-6)... // надежно! Значение величины, с которой сравнивается модуль разности, следует выбирать в зависимости от решаемой задачи и точности участвующих в выражении переменных. Снизу эта величина ограничена определенной в классах Single и Doubl константой Epsilon (это минимально возможное значение переменной такое, что 1.0 + Epsilon!= 1.0). Оператор выбора switch Оператор switch (переключатель) предназначен для разветвления процесса вычислений на несколько направлений. Структурная схема оператора приведен на рис. 4.3.
Выполнение оператора начинается с вычисления выражения. Тип выражения чаще всего целочисленный (включая char) или строковый (В общем случае выражение может быть любого типа, для которого существует неявное преобразование к указанным, а также перечисляемого типа.). Затем управление передается первому оператору из списка, помеченному константным выражением, значение которого совпало с вычисленным. Все константные выражения должны быть неявно приводимы к типу выражения в скобках. Если совпадения не произошло, выполняются операторы, расположенные после слова default (а при его отсутствии управление передается следующему за switch оператору). Каждая ветвь переключателя должна заканчиваться явным оператором перехода, а именно оператором break, goto или return: · оператор break выполняет выход из самого внутреннего из объемлющих его операторов switch, for, while и do; · оператор goto выполняет переход на указанную после него метку, обычно это метка case одной из нижележащих ветвей оператора switch; · оператор return выполняет выход из функции, в теле которой он записан. Оператор goto обычно используют для последовательного выполнения нескольких ветвей переключателя, однако поскольку это нарушает читабельность программы, такого решения следует избегать.
В листинге 4,2 приведен пример программы, реализующей простейший калькулятор на четыре действия. Листинг 4.2. Калькулятор на четыре действия
using System; namespace ConsoleApplicationl {class Classl {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("Недопустимая операция"); } } }
Дата добавления: 2014-01-07; Просмотров: 652; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |