Студопедия

КАТЕГОРИИ:


Архитектура-(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




Оператори розгалуження

Вирази, блоки

 

Будь-який вираз, що завершується крапкою з комою, розглядається як оператор. Окремим випадком виразу є порожній оператор “;”

 

Приклади:

i++; // виконується операція інкремента

а *= b + c; // виконується множення з привласненням

fun(i, k); // виконується виклик функції

while(true); // цикл з порожнього оператора (нескінченний)

Блок - це послідовність описів і операторів, що виділяються фігурними дужками.

 

 

Для програмування розгалужених обчислювальних процесів використовуються оператори if і switch, які залежно від конкретних значень початкових даних забезпечують виконання різних послідовностей операторів. Оператор if забезпечує передачу управління на одну з двох гілок обчислень, а оператор switch - на одну з довільного числа гілок.

 

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

 

if (логическое_выражение) оператор_1 [ else оператор_2 ]

 

Спочатку обчислюється логічний вираз. Якщо він має значення true, виконується перший оператор, інакше - другий. Після цього управління передається на оператора, наступного за умовним. Гілка else може бути відсутньою. Якщо в якій-небудь гілці потрібно виконати декілька операторів, їх необхідно укласти в блок, інакше компілятор не зможе зрозуміти, де закінчується розгалуження. Блок може містити будь-яких операторів, зокрема описи і інших умовних операторів (але не може складатися з одних описів). Необхідно враховувати, що змінна, описана в блоці, поза блоком не існує.

 

Приклади умовних операторів:

if (a< 0) b = 1; // 1

if (a< b && (a > d || a= = 0)) b++; else{ b*=a; a = 0;} // 2
if (а<b) if (а < с) m = a; else m = c;

else if (b < c) m = b; else m = c; // 3

if (b> 0) max = b; else max = a; // 4

 

У прикладі 1 відсутня гілка else. Подібна конструкція реалізує пропуск оператора, оскільки привласнення або виконується, або пропускається залежно від виконання умови.

Якщо потрібно перевірити декілька умов, їх об'єднують знаками логічних умовних операцій. Наприклад, вираз в прикладі 2 буде істинний в тому випадку, якщо виконається одночасно умова a<b і одна з умов в дужках. Якщо опустити внутрішні дужки, буде виконано спочатку логічне І потім- АБО. У 3 прикладі обчислюється найменше значення з трьох змінних. У прикладі 4 обчислюється найбільше значення з двох змінних. В даному випадку простіше і наочніше використовувати наступну умовну операцію:

 

max = a > b? a: b

 

Як приклад підрахуємо кількість очок після пострілу по мішені, зображеній на рис. 4.1.

 

Рис. 4.1. Мішень

 

Тип змінних вибирається, виходячи з їх призначення. Координати пострілу не можна представити цілими величинами, оскільки це приведе до втрати точності результату, а лічильник очок не має сенсу описувати як дійсний. Програма приведена в лістингу 4.1.

 

Лістінг 4.1. Постріл по мішені

 

using System;

namespace ConsoleApplicationl

{

class Classl

{

static void Main()

{

double x, y, temp;

int kol;

 

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

x = Convert.ToDouble(Console.ReadLine());

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

y = Convert.ToDouble(Console.ReadLine());

 

temp = x * x + y * y;

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) // надійно

 

4.2.1. Умовний оператор switch

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

 

switch (вираз)

{

case константний_вираз_1: [ список_операторів_1 ]

case константний_вираз_2: [ список_операторів_2 ]

...

case константний_вираз_n: [ список_операторів_n ]

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

}

 

Виконання оператора починається з обчислення виразу. Тип виразу найчастіше цілочисельний (включаючи char) або рядковий. Потім управління передається першому операторові із списку, поміченому константним виразом, значення якого збіглося з обчисленим.

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

Після оператора case наявність блоку не обов'язкова. Кожен блок (гілка перемикача) повинен закінчуватись явним оператором break, goto або return:

§ оператор break виконує вихід з оператора switch;

§ оператор goto виконує перехід на вказану після нього мітку;

§ оператор return виконує вихід з функції, в тілі якої він записаний.

У лістингу 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("Недопустимая операция");

}

}

}

Хоча наявність гілки default і не обов'язкова, рекомендується завжди обробляти випадок, коли значення виразу не збігається ні з однією з констант. Це полегшує пошук помилок при відладці програми.

У лістингу 4.3. приведений приклад використання оператора переходу goto.

Лістинг 4.3. Використання оператра goto

 

using System;

class SwitchTest

{

static void Main()

{

Console.WriteLine(" Введіть 1, 2 або 3 ");

string s = Console.ReadLine();

int n = int.Parse(s);

int cost = 0;

switch(n)

{

case 1:

cost += 25;

break;

case 2:

cost += 25;

goto case 1;

case 3:

cost += 50;

goto case 1;

default:

Console.WriteLine("Натиснута не та клавіша");

break;

}

if (cost!= 0)

Console.WriteLine("Значення: {0}", cost);

else

Console.WriteLine("Натиснута не та клавіша");

 

}}

 

При значенні змінної n = 2, cost = 50;

В лістингу 4.4 показаний приклад без використання операторів переходу.

 

Лістинг 4.4.

using System;

class SwitchTest

{

static void Main()

{

Console.WriteLine(" Введіть число ");

string s = Console.ReadLine();

int n = int.Parse(s);

switch(n)

{

case 1:

case 2:

case 3:

Console.WriteLine("Введено 1, 2, або 3");

break;

default:

Console.WriteLine("Натиснута не та клавіша");

break;

}

}

}

 

При n > 0 і n < 4 буде повідомлення “Введене 1, 2, або 3”.

 




Поделиться с друзьями:


Дата добавления: 2014-12-27; Просмотров: 1517; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.037 сек.