Применение операторов: тернарный оператор 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Применение операторов: тернарный оператор



 

Тернарный оператор? относится к числу самых примечательных в С#. Он представляет собой условный оператор и часто используется вместо определ`нных видов конструкций if-then-else. Ниже приведена общая форма этого оператора:

 

<выражение1>? <выражение2>: <выражение3>;

 

Здесь выражение1 должно относиться к типу bool а выражение2 и выражениеЗ — к одному и тому же типу. Обратим внимание на применение двоеточия и его местоположение в операторе «?».Значение выражения «?» определяется следующим образом. Сначала вычисляется выражение1. Если оно истинно, то вычисляется выражение2, а полученный результат определяет значение всего выражения «?» в целом. Если же выражение1 оказывается ложным, то вычисляется выражениеЗ, и его значение становится общим для всего выражения «?»:

 

int b, c;

c = -4;

b = c >= 0? c: c*c; // b = 16

 

Присваивать переменной результат выполнения оператора «?» совсем не обязательно. Например, значение, которое даёт оператор «?», можно использовать в качестве аргумента при вызове метода. А если все выражения в операторе? относятся к типу bool, то такой оператор может заменить собой условное выражение в цикле или операторе if. Давайте рассмотрим пример использования тернарного оператора:

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace LC_Console

{

class Program

{

static void Main(string[] args)

{

int result;

// Реализуем функцию модуля числа

for (int i = 5; i >= -5; i--)

{

result = i >= 0? i: -i;

Console.Write("{0}\t", result);

}

Console.WriteLine("\n\n");

// Выбор четных чисел

for (int i = 0; i < 10; i++)

{

if (i % 2 == 0? true: false)

Console.Write("{0}\t",i);

}

Console.WriteLine("Для продолжения нажмите любую клавишу... ");

Console.ReadKey();

}

}

}

/* Выведет:

* 5 4 3 2 1 0 1 2 3 4 5

*

*

* 0 2 4 5 8

* Для продолжение нажмите любую клавишу...

*/

Применение операторов: «if» и «switch»

Применение операторов: «if» и «switch»

 

Условные операторы

 

Условные операторы позволяют управлять потоком выполнения программы, чтобы не выполнялась каждая строка кода, как она следует в программе. Рассмотрим все условные операторы языка C#:

Оператор if

 

Для организации условного ветвления язык С# унаследовал от С и С++ конструкцию if-else. Ее синтаксис должен быть интуитивно понятен для любого, кто программировал на процедурных языках:

 

if (условие)

{

оператор (операторы)

} else { оператор (операторы) }

 

Если по каждому из условий нужно выполнить более одного оператора, эти операторы должны быть объединены в блок с помощью фигурных скобок {...}. Это также касается других конструкций С#, в которых операторы могут быть объединены в блок — таких как циклы for и while.

Стоит обратить внимание, что в отличие от языков С и С++, в С# условный оператор if может работать только с булевскими выражениями, но не с произвольными значениями вроде -1 и 0.

В операторе if могут применяться сложные выражения, и он может содержать операторы else, обеспечивая выполнение более сложных проверок. Синтаксис похож на применяемый в аналогичных ситуациях в языках С (С++) и Java. При построении сложных выражений в С# используется вполне ожидаемый набор логических операторов.

 

Рассмотрим следующий пример, демонстрирующий использование оператора if:

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace LC_Console

{

class Program

{

static void Main()

{

string myStr;

Console.WriteLine("Введите строку: ");

myStr = Console.ReadLine();

if (myStr.Length < 5)

Console.WriteLine("\nВ данной строке меньше 5 символов");

else if ((myStr.Length > 5) && (myStr.Length <= 12))

Console.WriteLine("\nВ данной строке {0} символов",myStr.Length);

else Console.WriteLine("\nВ данной строке больше 12 символов");

Console.WriteLine("Для продолжения нажмите любую клавишу... ");

Console.ReadKey();

}

}

}

/* Выведет:

* Введите строку:

*:7

* В этой строке 7 символов

* Для продолжение нажмите любую клавишу...

*/

 

Как видно, количество else if, добавляемых к единственному if, не ограничено. Один момент, который следует отметить касательно if: фигурные скобки применять не обязательно, если в условной ветви присутствует только один оператор, как показано в исходном примере.

 

Оператор switch

 

Вторым оператором выбора в С# является оператор switch, который обеспечивает много направленное ветвление программы. Следовательно, этот оператор позволяет сделать выбор среди нескольких альтернативных вариантов дальнейшего выполнения программы. Несмотря на то, что много направленная проверка может быть организована с помощью последовательного ряда вложенных операторов if, во многих случаях более эффективным оказывается применение оператора switch. Этот оператор действует следующим образом. Значение выражения последовательно сравнивается с константами выбора из заданного списка. Как только будет обнаружено совпадение с одним из условий выбора, выполняется последовательность операторов, связанных с этим условием. Ниже приведена общая форма оператора switch:

 

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

{

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

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

break;

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

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

break;

case <константаЗ>:

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

break;

 

...

 

default:

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

break;

}

 

Хотя оператор switch-case-break должен быть знаком программистам на С и С++, в С# он немного безопаснее, чем его эквивалент С++. В частности, он запрещает "сквозные" условия почти во всех случаях. Это значит, что если часть case вызывается в начале блока, то фрагменты кода за последующими частями case не могут быть выполнены, если только не используется явно оператор goto для перехода к ним. Компилятор обеспечивает это ограничение за счёт того, что требует, чтобы за каждой частью case следовал оператор break, в противном случае он выдает ошибку.

Важно отметить, что заданное выражение в операторе switch должно быть целочисленного типа (char, byte, short или int), перечислимого или же строкового. А выражения других типов, например с плавающей точкой, в операторе switch не допускаются. Зачастую выражение, управляющее оператором switch, просто сводится к одной переменной. Кроме того, константы выбора должны иметь тип, совместимый с типом выражения. В одном операторе switch не допускается наличие двух одинаковых по значению констант выбора.

 

Рассмотрим пример использования оператора switch:

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace LC_Console

{

class Program

{

static void Main(string[] args)

{

Console.WriteLine("Введите число (1, 2 или 3):");

string myLanguage = Console.ReadLine();

sw1(myLanguage);

Console.WriteLine("Для продолжения нажмите любую клавишу... ");

Console.ReadKey();

 

}

// Данный метод выводит выбор пользователя

static void sw1(string s)

{

switch (s)

{

case "1":

Console.WriteLine("Вы ввели число: 1");

break;

case "2":

Console.WriteLine("Вы ввели число: 2");

break;

case "3":

Console.WriteLine("Вы ввели число: 3");

break;

default:

Console.WriteLine("Вы ввели число не из диапазона");

break;

}

}

}

}

/* Выведет:

* Введите число (1, 2 или 3):

*:2

* Вы ввели число: 2

* Для продолжение нажмите любую клавишу...

*/

Применение операторов: «for» и «while»

Применение операторов: «for» и «while»

 

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

 

В С# имеются четыре различных вида циклов (for, while, do-while и foreach), позволяющие выполнять блок кода повторно до тех пор, пока удовлетворяется определенное условие. В этой статье мы познакомимся с циклами for и while.

Цикл for

Цикл for в С# предоставляет механизм итерации, в котором определённое условие проверяется перед выполнением каждой итерации. Синтаксис этого оператора показан ниже:

for (<инициализатор>; <условие>; <итератор>)

{

// Код цикла выполняющийся при каждой итерации

// Оператор или операторы

}

 

Здесь: инициализатор ― это выражение, вычисляемое перед первым выполнением тела цикла (обычно инициализация локальной переменной в качестве счетчика цикла). Инициализация, как правило, представлена оператором присваивания, задающим первоначальное значение переменной, которая выполняет роль счетчика и управляет циклом;

Условие― это выражение, проверяемое перед каждой новой итерацией цикла (должно возвращать true, чтобы была выполнена следующая итерация).

Итератор ― выражение, вычисляемое после каждой итерации (обычно приращение значения счетчика цикла).

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

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

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace LC_Console

{

class Program

{

// Данный метод выводит таблицу умножения

// размерностью b x b

static void tab(byte b)

{

Console.WriteLine("Таблица умножения {0} x {0}\n", b);

// Этот цикл проходит по строкам

for (int i = 1; i <= b; i++)

{

// Этот цикл проходит по столбцам

for (int j = 1; j <= b; j++)

Console.Write("{0}\t", j * i);

Console.WriteLine();

}

Console.WriteLine();

}

 

static void Main(string[] args)

{

tab(8);

// Применение нескольких переменных управления циклом

for (byte i = 0, j = 20; i <= j; i += 5, j -= 5)

Console.WriteLine("i = {0}, j = {1}", i, j);

Console.WriteLine();

// Использование условного выражения в цикле

bool b = false;

for (byte i = 1, j = 100;!b; i++, j--)

if (i < Math.Sqrt(j))

Console.WriteLine("Число {0} меньше квадратного корня из {1}", i, j);

else b = true;

// Отсутствие части цикла

int k = 0;

for (; k < 10;)

{

k++;

Console.Write(k);

}

Console.WriteLine("\n");

// Цикл без тела

int sum = 0;

for (int i = 1; i <= 10; sum += ++i);

Console.WriteLine("Значение суммы: {0}", sum);

Console.WriteLine("Для продолжения нажмите любую клавишу... ");

Console.ReadKey();

}

}

}

 

Рис. 2. 1. Результат работы кода выше

 

Цикл while

Подобно for, while также является циклом с предварительной проверкой. Синтаксис его аналогичен, но циклы while включают только одно выражение в качестве условия:

 

while (<условие>)

{

// Код выполняющийся пока активно условие

// Оператор или операторы

}

Здесь оператор — это единственный оператор или же блок операторов, а условие означает конкретное условие управления циклом и может быть любым логическим выражением. В этом цикле оператор выполняется до тех пор, пока условие истинно. Как только условие становится ложным, управление программой передаётся строке кода, следующей непосредственно после цикла.

Как и в цикле for, в цикле while проверяется условное выражение, указываемое в самом начале цикла. Это означает, что код в теле цикла может вообще не выполняться, а также избавляет от необходимости выполнять отдельную проверку перед самим циклом. Пример:

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace LC_Console

{

class Program

{

static void Main(string[] args)

{

// Пример возведения числа в несколько степеней

byte l = 2, i = 0;

int result = 1;

 

while (i < 10)

{

i++;

result *= l;

Console.WriteLine("{0} в степени {1} равно {2}", l, i, result);

}

Console.WriteLine("Для продолжения нажмите любую клавишу... ");

Console.ReadKey();

}

}

}

 

Рис. 3. 1. Результат работы кода выше



Поделиться:


Последнее изменение этой страницы: 2016-08-15; просмотров: 934; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.149.213.209 (0.069 с.)