Помощничек
Главная | Обратная связь


Археология
Архитектура
Астрономия
Аудит
Биология
Ботаника
Бухгалтерский учёт
Войное дело
Генетика
География
Геология
Дизайн
Искусство
История
Кино
Кулинария
Культура
Литература
Математика
Медицина
Металлургия
Мифология
Музыка
Психология
Религия
Спорт
Строительство
Техника
Транспорт
Туризм
Усадьба
Физика
Фотография
Химия
Экология
Электричество
Электроника
Энергетика

Вторым оператором выбора является switch. Он позволяет делать выбор одной из множества альтернатив.

Логические операции

Применимы только к значениям типа bool

Логическая операция Значение
& И
I ИЛИ
^ Исключающее ИЛИ
&& Сокращенное И
II Сокращенное ИЛИ
! НЕ

 

 

Таблица истинности логических операций

р q p&q pIq p^q !p
true false false true true false
false true false true true true
true true true true false false

 

 

При использовании обычной логической операции всегда вы­числяются оба операнда.

В случае же сокращенной версии второй операнд вычисляет­ся только при необходимости.

 

 

if (a >50 || b >= c)

Если (a > 50) - истина, то второй операнд не вычис­ля­ется,поэтому b или c могут быть неинициализированы.

В следующем примере требуется обычная логическая операция:

if (a >50 | b >= ++c)

Оператор ветвления с двумя ветвями (if-else)

if (условие)

оператор_1;

Else

оператор_2;

 
 

 
 

 

 


if ( a >50 && b >= c)

{

c = a + b ;

}

Else

{ // составной оператор

c = a - b ;

a = a - 1 ;

}

 

Оператор if-else-if

Полный формат оператора IF:

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

оператор_1;

elseif ( выражение_2 )

оператор_2;

...

elseif ( выражение_K )

оператор_K;

else оператор_N;

 
 

 


Эквивалентный оператор if

 

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

оператор_1;

Else

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

оператор_2;

Else

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

оператор_3;

else

if ( выражение_4 )

оператор_4;

...

Else

if ( выражение_K )

оператор_K;

Else

оператор_N;

 

 

// Определение наименьшего множителя,

// состоящего из одной цифры.

int num = 11;

if ( (num % 2) == 0 )

Console.WriteLine ("Наименьший множитель числа " +

num + " равен 2.");

else if ( (num % 3) == 0 )

Console.WriteLine ("Наименьший множитель числа " +

num + " равен 3.");

else if ( (num % 5) == 0 )

Console.WriteLine ("Наименьший множитель числа " +

num + " равен 5.");

else if ( (num % 7) ==0 )

Console.WriteLine ("Наименьший множитель числа " +

num + " равен 7.");

Else

Console.WriteLine(num + " не делится на 2, 3, 5 или 7.");

Логическая операция ?

условие ? выражение_для_true : выражение_для_false

int val; val=…;

absval = val < 0 ? -val : val;// absval =абсолютное значение val.

 
 


Эквивалентно:

if (val < 0)

absval = -val;

Else

absval = val;

Console.Write ("Максимальное значение = " + a > b ? a : b );

 

ü Логическая операция не является оператором, она может использоваться в выражении.

ü Вставить оператор if в выражение невозможно.

ü Логическая операция возвращает значение.

ü Не нужно промежуточное значение для хранения результата.

Оператор switch

Вторым оператором выбора является switch. Он позволяет делать выбор одной из множества альтернатив.

Выход по break:

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

{

case константа1:

последовательность_операторов

break;

case константа2:

последовательность_операторов

break;

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

последовательность_операторов

break;

default:

последовательность_операторов

break;

}

Элемент выражение оператора switch должен иметь целочисленный тип (byte, char, short, int, long)или тип string.

 

 

 

 

case-последовательности чаще всего оканчиваются инструкцией break, но возможны также операторы goto и return. Пример: goto case 2;

Пример 1.

uint i;

string str;

. . .

str = Console.ReadLine();// ввести с клавиатуры

i = uint.Parse(str);// преобразовать изstringвint

Switch (i)

{

case 0:

Console.WriteLine ("i равно нулю.");

break;

case 1:

Console.WriteLine ("i равно единице.");

break;

case 2:

Console.WriteLine ("i равно двум.");

break;

default:

Console.WriteLine ("i равно или больше трех.");

break;

}

Пример 2.

char ch;

. . .

Switch(ch)

{

case 'A':

Console.WriteLine("ch содержит A");

break;

case 'B':

Console.WriteLine("ch содержит В");

break;

}

Если необходимо выполнить один блок операторов для нескольких условий, то case с этими условиями записываются подряд. Так как у этих case-блоков нет тела, то и оператор break так же не требуется.

//Выдать по введенному дню недели или имени

//дня сообщение о характере дня

static void Main(string[] args)

{

string day, msg="";

day = Console.ReadLine();

Switch (day)

{

case "6":

case "7":

case "Суббота":

case "Воскресенье": msg = "Выходной"; break;

default: msg = "Рабочий"; break;

}

Console.WriteLine(msg);

}

Вложенные операторы switch

 

 


Задача 1. Разработать приложение, определяющее фальшивую монету. Пользователь вводит веса трех монет. Известно, что среди монет может быть одна фальшивая. Фальшивая монета всегда легче настоящей. Определить есть ли фальшивая монеты, и какая монета (номер) является фальшивой.

 

using System;

 

class Program

{

static void Main(string[] args)

{

int a, b, c; // Веса монет

 

// Вводим веса трех монет

Console.Write("Введите вес первой монеты : ");

a = int.Parse(Console.ReadLine());

 

Console.Write("Введите вес второй монеты : ");

b = int.Parse(Console.ReadLine());

 

Console.Write("Введите вес третьей монеты : ");

c = int.Parse(Console.ReadLine());

 

// Ищем первую фальшивую монету

if (a < b)

Console.WriteLine("Первая монета фальшивая");

else if (b < a)

Console.WriteLine("Вторая монета фальшивая");

else if (c < a)

Console.WriteLine("Третья монета фальшивая");

else

Console.WriteLine("Фальшивых монет нет");

 

Console.ReadLine(); // Задержим окно

}

}

 

Задача 2. Разработать приложение, определяющее фальшивую монету. Пользователь вводит веса трех монет. Известно, что среди монет может быть 0, 1 или 2 фальшивые. Фальшивая монета всегда легче настоящей. Известно также, что хотя бы одна монета является настоящей. Определить есть ли фальшивые монеты, и какие монеты являются фальшивыми.

 

. . .

// Ищем все фальшивые монеты

 

if (a == b && a == c && c == b)

Console.WriteLine("Фальшивых монет нет");

else

{

if (a < b || a < c)

Console.WriteLine("Первая монета фальшивая");

 

if (b < a || b < c)

Console.WriteLine("Вторая монета фальшивая");

 

if (c < a || c < b)

Console.WriteLine("Третья монета фальшивая");

}

 

. . .

 

Альтернативный вариант (строка str + операция ?)

 

using System;

 

class Program

{

static void Main(string[] args)

{

int a, b, c; // Веса монет

string str = "";

 

// Вводим веса трех монет

Console.Write("Введите вес первой монеты : ");

a = int.Parse(Console.ReadLine());

 

Console.Write("Введите вес второй монеты : ");

b = int.Parse(Console.ReadLine());

 

Console.Write("Введите вес третьей монеты : ");

c = int.Parse(Console.ReadLine());

Console.WriteLine();

 

// Ищем все фальшивые монеты

if (a < b || a < c)

str = "Первая монета фальшивая. ";

 

if (b < a || b < c)

str = str + "Вторая монета фальшивая. ";

 

if (c < a || c < b)

str = str + "Третья монета фальшивая.";

 

Console.WriteLine(str == "" ? "Фальшивых монет нет" : str);

 

Console.ReadLine(); // Задержим окно

}

}

 

 

К задаче 1. Вес фальшивой монеты может быть как больше, так и меньше веса нефальшивой.

 

. . .

 

if (a == b && b == c && a == c)

Console.WriteLine("Фальшивых монеток нет");

else if (b == c)

Console.WriteLine("Первая монетка фальшивая");

else if (a == c)

Console.WriteLine("Вторая монетка фальшивая");

else

Console.WriteLine("Третья монетка фальшивая");

. . .

 




©2015 studopedya.ru Все права принадлежат авторам размещенных материалов.