Операции отношения и проверки на равенство — КиберПедия 

Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...

Операции отношения и проверки на равенство

2019-12-21 328
Операции отношения и проверки на равенство 0.00 из 5.00 0 оценок
Заказать работу

Операции отношения (<, <=, >, >=, = =,! =) сравнивают первый операнд со вторым Операнды должны быть арифметического типа. Результат операции — логического типа, равен true или false. Обратите внимание на то, что операции сравнения на равенство и неравенство имеют меньший приоритет, чем остальные операции сравнения.

Очень интересно формируется результат операций отношения для особых случаев вещественных значений. Например, если один из операндов равен NaN, результатом для всех операций, кроме!=, будет false (для операции!- результат равен true).

Поразрядные логические операции

Поразрядные логические операции (&, |, ^) применяются к целочисленным операндам и работают с их двоичным кодом. При выполнении операций операнды сопоставляются побитно (первый бит первого операнда с первым битом второго, второй бит первого операнда со вторым битом второго и т. д.). Стандартные операции определены для типов int, uint, long и ulong.

При поразрядной конъюнкции, или поразрядном И (операция обозначается &), бит ре­зультата равен 1 только тогда, когда соответствующие биты обоих операндов равны 1.

При поразрядной дизъюнкции, или поразрядном ИЛИ (операция обозначается |), бит результата равен 1 тогда, когда соответствующий бит хотя бы одного из операндов равен 1.

При поразрядном исключающем ИЛИ (операция обозначается ^) бит результата равен 1 только тогда, когда соответствующий бит только одного из операндов равен 1.

Пример применения поразрядных логических операций

using System;

namespace ConsoleApplicationl

{ class Classl

{ static void Main() {

Console.WriteLine(6 & 5); // Результат 4

Console.WriteLine(6 | 5); // Результат 7

Console.WriteLineC 6 ^ 5); / Результат 3 } } }

Условные логические операции

Условные логические операции И (&&) и ИЛИ (||) чаще всего используются с операндами логического типа. Результатом логической операции является true или false. Операции вычисляются по сокращенной схеме.

Результат операции логическое И имеет значение true, только если оба операнда имеют значение true.

Результат операции логическое ИЛИ имеет значение true, если хотя бы один из операндов имеет значение true.

Тернарная (условная) операция

Условная операция (?:) — тернарная, то есть имеет три операнда. Ее формат:

операнд1? операнд2: операнд3

Пример применения тернарной операции

using System;

namespace ConsoleApplicationl

{ class Classl

{ static void Main()

{ int a = 11, b = 4;

int max = b > a? b: a;

Console.WriteLine(max); // Результат 11

} } }

Другой пример применения условной операции: требуется, чтобы некоторая целая величина увеличивалась на 1, если ее значение не превышает n, а иначе принимала значение 1. Это удобно реализовать следующим образом: i = (i < n)? i + 1: 1;

Операции присваивания

Операции присваивания (=, +=, -=, *= и т. д.) задают новое значение переменной. Эти операции могут использоваться в программе как законченные операторы. Механизм выполнения операции присваивания такой: вычисляется выражение и его результат заносится в память по адресу, который определяется именем переменной, находящейся слева от знака операции. То, что ранее хранилось в этой области памяти, естественно, теряется.

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

а = b + с / 2;

b = а;

а = b;

х = 1;

х+ = 0.5;

Обратите внимание: b=а и а=b— это совершенно разные действия!

Присваивание — это передача данных «налево».

Результатом операции присваивания является значение, записанное в левый операнд. Тип результата совпадает с типом левого операнда.

В сложных операциях присваивания (+=, *=, /= и т. п.) при вычислении выражения, стоящего в правой части, используется значение из левой части. Например, при сложении с присваиванием ко второму операнду прибавляется первый, и результат записывается в первый операнд, то есть выражение а += b является более компактной записью выражения а = а + b.

Результатом операции сложного присваивания является значение, записанное в левый операнд.

Операции присваивания выполняются справа налево, в отличие от большинства других операций (а = b = с означает а = (b=c)).

14

Функции для консольного ввода и вывода в языке C# существенно отличаются от аналогичных функций языка С++. Таких функций 4, и все они являются членами класса Console. ФункцииWriteLine иWrite обеспечивают вывод на экран и отличаются тем, что функцияWriteLine после вывода обеспечивает перевод вывода на новую строку на экране, а функцияWrite такой перевод не выполняет. Для ввода применяются функцииReadLine иReadKey. ФункцияReadLine обеспечивает ввод строки. Если содержимое строки является числом, то требуется преобразование строки в число. Такое преобразование выполняет функцияParse, которая записывается после точки после имени типа данных. Для обратного перевода в строку текста применяется функцияToString. ФункцияReadKey позволяет ввести код нажатой клавиши, и она часто применяется для останова экрана пользователя после вывода на экран. Если эту функцию не записать, то экран быстро исчезнет, не дав возможности посмотреть, что было выведено. Ниже приведен пример.

double a, c; // Объявление переменных
int b;  
Console.WriteLine("Введите число"); // С переходом на новую строку
a = double.Parse(Console.ReadLine()); // Ввод с преобразованием

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

b = int.Parse(Console.ReadLine()); // Ввод с преобразованием
c = a + b;  

Console.WriteLine("Сумма {0} и {1} = {2}", a, b, c);

Console.ReadKey(); // Останов экрана

Вкавычках в круглых скобках записывается поясняющий текст и задается формат вывода. Для указания формата применяются пары фигурных скобок, в которых записываются целые числа, указывающие на порядок вывода переменных, имена которых записаны после кавычек. Отсчет начинается от нуля.

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

Всписке переменных для вывода можно применять арифметические выражения. Например, строку вывода из примера выше можно записать и так (в примере выше без использования переменной c):

Console.WriteLine("Сумма {0} и {1} = {2}", a, b, a + b);

Если требуется ввести числа и любые другие элементы в одной строке, в том числе и разнотипные (тип данных var будет описан ниже):

Чернов Э. А. - 16 - Лекции по языку C# v 2.3

var str =Console.ReadLine();

var result = str.Split(new[ ] {' ',';'});foreach(vara inresult)

Console.Write("{0} ", a);

Метод Split позволяет разбить введенную строку на отдельные элементы. Конструкцияnew[ ] указывает, что будет сформирован массив, количество элементов которого заранее неизвестно. В фигурных скобках в апострофах указывается символ, являющийся разграничителем между отдельными элементами во вводимой строке. Этот разграничитель может быть не один. В примере в качестве разграничителей заданы пробел и точка с запятой. Такая запись позволяет использовать любой из указанных разграничителей в любой последовательности, как отдельно, так и совместно. Переменнаяstr является неявно типизированной. Тип данныхvar позволяет объявлять переменные, которые могут быть любого типа. Но особый интерес представляют таблицы, которые состоят из массивов строк. В этом случае переменной типаvar является объект класса, которым является отдельная строка, а собственно таблица является массивом строк.

15

Все математические функции реализованы как методы класса Math, основные из которых представлены в таблице 4.1

Таблица 4.1 – Основные поля и методы класса Math

Имя метода Описание Пояснения
Abs Модуль |x|, записывается как Abs(x)
Acos Арккосинус Acos(double x), угол задается в радианах
Asin Арксинус Asin(double x)
Atan Арктангенс Atan(double x)
Atan2 Арктангенс Atan2(double x,double y) –угол, тангенс которого есть результат деления y на х
BigMul Произведение BigMul(int x,int y)
Celling Округление до большего целого Celling(double x)
Cos Косинус Cos(double x)
Cosh Гиперболический косинус Cosh(double x)
DivRem Деление и остаток DivRem(x,y,rem)
E Число е 2,71828182845905
Exp Экспонента Exp(x)
Floor Округление до меньшего целого Floor(double x)
IEEERemainder Остаток от деления IEEERemainder(double x, double y)
Log Натуральный логарифм Log(x)
Log10 Десятичный логарифм Log10(x)
Max Максимум из 2-х чисел Max(x,y)

Продолжение таблицы 4.1

Имя метода Описание Пояснения
Min Минимум из 2-х чисел Min(x,y)
PI Значение числа пи 3,14159265358979
Pow Возведение в степень Pow(x,y) – x в степени y
Round Округление Round(3.1)=3 Round(3.8)=4
Sign Знак числа  
Sin Синус Sin(double x)
Sinh Гиперболический синус Sinh(double x)
Sqrt Квадратный корень Sqrt(x)
Tan Тангенс Tan(double x)
Tanh Гиперболический тангенс Tanh(double x)

16

Любое выражение, завершающееся точкой с запятой, рассматривается как опера-тор, выполнение которого заключается в вычислении выражения. Частным слу­чаем выражения является пустой оператор; (он используется, когда по синтак­сису оператор требуется, а по смыслу - нет). Примеры:

i++; // выполняется операция инкремента

a *= b + с; // выполняется умножение с присваиванием

fun(i, k); // выполняется вызов функции

while(true); // цикл из пустого оператора (бесконечный)

Блок или составной оператор, - это последовательность описаний и операторов,

заключенная в фигурные скобки. Блок воспринимается компилятором как один

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

а алгоритм - нескольких. Блок может содержать один оператор или быть пустым.

Операторы ветвления

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

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

Условный оператор if используется для разветвления процесса вычислений на два направления.

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

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

Сначала вычисляется логическое выражение. Если оно имеет значение true, вы­полняется первый оператор, иначе — второй. После этого управление передается на оператор, следующий за условным. Ветвь else может отсутствовать.

ПРИМЕЧАНИЕ

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

Сначала вычисляется логическое выражение. Если оно имеет значение true, вы­полняется первый оператор, иначе — второй. После этого управление передается на оператор, следующий за условным. Ветвь else может отсутствовать.

ПРИМЕЧАНИЕ

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

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

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

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

{

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

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

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

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

}

Выполнение оператора начинается с вычисления выражения. Тип выражения чаще всего целочисленный (включая 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 приведен пример программы, реализующей простейший кальку­лятор на четыре действия.

bool ok = true;

double res, a, b;

char op = '-';

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;

}

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

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

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

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

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

Параметром цикла называется переменная, которая используется при проверке условия продолжения цикла и принудительно изменяется на каждой итерации, причем, как правило, на одну и ту же величину. Если параметр цикла целочис­ленный, он называется счетчиком цикла. Количество повторений такого цикла можно определить заранее. Параметр есть не у всякого цикла. В так называемом итеративном цикле условие продолжения содержит переменные, значения ко­торых изменяются в цикле по рекуррентным формулам1.

Цикл завершается, если условие его продолжения не выполняется. Возможно принудительное завершение как текущей итерации, так и цикла в целом. Для этого служат операторы break, continue, return и goto (см. раздел «Операторы передачи управления», с. 83). Передавать управление извне внутрь цикла запре­щается (при этом возникает ошибка компиляции).

Формат оператора прост: while (выражение) оператор

Выражение должно быть логического типа. Например, это может быть операция от­ношения или просто логическая переменная. Если результат вычисления выраже­ния равен true, выполняется простой или составной оператор (блок). Эти действия повторяются до того момента, пока результатом выражения не станет значение false. После окончания цикла управление передается на следующий за ним оператор.

Выражение вычисляется перед каждой итерацией цикла. Если при первой про­верке выражение равно false, цикл не выполнится ни разу.

Цикл с постусловием do

Цикл с постусловием реализует структурную схему, приведенную на рис. 4.4, б, и имеет вид

do оператор while выражение;

Сначала выполняется простой или составной оператор, образующий тело цикла, а затем вычисляется выражение (оно должно иметь тип bool). Если выражение истинно, тело цикла выполняется еще раз и проверка повторяется. Цикл завер­шается, когда выражение станет равным false или в теле цикла будет выполнен какой-либо оператор передачи управления.

Этот вид цикла применяется в тех случаях, когда тело цикла необходимо обя­зательно выполнить хотя бы один раз, например, если в цикле вводятся данные и выполняется их проверка. Если же такой необходимости нет, предпочтитель-нее пользоваться циклом с предусловием.

Пример программы, выполняющей проверку ввода, приведен в листинге 4.5.

Цикл с параметром for

Цикл с параметром имеет следующий формат:

for (инициализация; выражение; модификации) оператор;

Инициализация служит для объявления величин, используемых в цикле, и при­своения им начальных значений. В этой части можно записать несколько опера­торов, разделенных запятой, например:

for (int i = 0, j = 20;...

int k, m;

for (k = 1, m = 0;...

Областью действия переменных, объявленных в части инициализации цикла, яв­ляется цикл. Инициализация выполняется один раз в начале исполнения цикла. Выражение типа bool определяет условие выполнения цикла: если его результат равен true, цикл выполняется. Цикл с параметром реализован как цикл с преду­словием.

Модификации выполняются после каждой итерации цикла и служат обычно для изменения параметров цикла. В части модификаций можно записать несколько операторов через запятую, например:

for (int i = 0, j = 20; i < 5 && j > 10; i++, j--)...

Простой или составной оператор представляет собой тело цикла. Любая из час­тей оператора for может быть опущена (но точки с запятой надо оставить на сво­их местах!). Для примера вычислим сумму чисел от 1 до 100:

int s = 0;

for (int i = 1; i <- 100; i++)

s += i;

Цикл foreach используется для просмотра всех объектов из некоторой группы данных, например массива, списка или другого контейнера. Он будет рассмот­рен, когда у нас появится в нем необходимость, а именно в разделе «Оператор foreach» (см. с. 136).

Рекомендации по выбору оператора цикла

Операторы цикла взаимозаменяемы, но можно привести некоторые рекоменда­ции по выбору наилучшего в каждом конкретном случае.

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


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

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой...

Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...

Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...

Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.065 с.