Операторы языка C

Формат документа: docx
Размер документа: 0.03 Мб




Прямая ссылка будет доступна
примерно через: 45 сек.



  • Сообщить о нарушении / Abuse
    Все документы на сайте взяты из открытых источников, которые размещаются пользователями. Приносим свои глубочайшие извинения, если Ваш документ был опубликован без Вашего на то согласия.


Операторы языка C#
Состав операторов языка C#, их синтаксис и семантика во многом унаследованы от языка С++. Как и положено, потомок частично дополнил состав, переопределил синтаксис и семантику отдельных операторов, постарался улучшить характеристики языка в интересах программиста.
1) Оператор присваивания:
В предыдущей статье Операции языка c# я уже использовал этот оператор, построенный на основе операции присваивания. Его структуру можно описать так:
Переменная (объект) = Выражение;
Например, полную поверхность цилиндра можно вычислить с помощью оператора:
Volume = Math.Atan(1.0) * 4 * Radius * (Radius + Vysota);
В качестве переменной может выступать идентификатор любого типа, предварительно объявленный в программе как переменная (идентификатор может иметь и другой смысл, например, быть именем функции). Выражение может быть составлено с помощью различных операций (в примере использованы знаки + и *), явно заданных чисел (в примере – число 4), других идентификаторов переменных (в примере – Radius и Vysota), вызовов методов (в примере – Math.Atan). Обязательно только одно: типы переменной и выражения должны быть согласованы. В нашем примере это значит, что переменная Volume должна быть объявлена как переменная типа double. Оператор присваивания обязательно заканчивается знаком «точка с запятой».
2) Вызов метода:
Структура вызова метода описывается так:
Область нахождения метода.имя метода
Область нахождения метода – это та область программы, где описан этот метод. В качестве области может выступать пространство имён или имя класса. В предыдущем примере использована запись вызова метода Atan, который является компонентом класса Math (мы ещё поговорим подробнее о методах этого класса в следующих статьях). Имя метода записывается через точку после области нахождения. В свою очередь, область нахождения сама может быть составлена из нескольких имён, также разделённых точками. Например, вызов метода ввода строки с клавиатуры записывается так:
System.Console.ReadLine();
Вызов метода (вызов функции) для исполнения может использоваться в программе в двух смыслах. Если вызов записан в составе выражения, то вызов метода выступает в виде операнда. Результат выполнения метода сразу же используется при вычислении выражения. Если же метод выполняет какие-либо действия, но не формирует непосредственно используемого результата, то он описывается в виде оператора. Такая запись завершается знаком «точка с запятой». Например:
S = System.Console.ReadLine(); // вызов используется как операнд Console.WriteLine(“Привет посетителям сайта SkillCoding.com!”); // вызов записан как оператор
3) Блок или составной оператор:
Блок (составной оператор) воспринимается компилятором как один оператор. Используется там, где по смыслу должен быть именно единичный оператор. Блок описывается с помощью фигурных скобок. Один или несколько любых операторов можно заключить в фигурные скобки – получится составной оператор. Структура этого оператора:
{оператор_1{...{оператор_N{}
Обратите внимание: составной оператор не заканчивается знаком «точка с запятой». В состав одного блока могут включаться другие блоки. Пример записи блока:
{int i, j;string s;s = Console.ReadLine();i = (int)s[0];Console.WriteLine(" " + i);j = (int)s[1];Console.WriteLine(" " + j);if (i = = 53) Console.WriteLine(" " +(i & 15));}
4) Операторы ветвления:
Для выбора одной из нескольких возможностей в языке C# имеются две конструкции – if и switch. Первую из них обычно называют альтернативным выбором, вторую - разбором случаев.
4.1. Оператор if:
Синтаксис оператора:
If (выражение_1) оператор_1else if (выражение_2) оператор_2...else if (выражение_K) оператор_Kelse оператор_N
Выражения в круглых скобках должны быть булевого типа. Точнее, при вычислениях выражения должны давать значения true или false. Вспомним, что арифметический тип не имеет явных или неявных преобразований к булевому типу. Каждый из операторов может быть любым оператором – в частности, блоком или другим if-оператором. Поэтому возможна и такая конструкция:
if (выражение_1) if (выражение_2) if (выражение_3) ...
Ветви else и if, позволяющие организовать выбор из многих возможностей, могут отсутствовать. Может отсутствовать заключительная else-ветвь. Выполняется тот оператор, который записан после выражения, имеющего истинное значение. Проверка истинности выражений выполняется в порядке их написания. Если все выражения ложны, то выполняется оператор после else. Пример записи оператора:
if (k % 7 = = 0){ Console.WriteLine("Число делится на 7 нацело");}else Console.WriteLine("Число не делится на 7");
4.2. Оператор switch:
Важным случаем выбора из нескольких вариантов является ситуация, при которой выбор варианта определяется значениями некоторого выражения. Такой выбор можно описать и оператором if, но тогда выражение придётся повторять в каждом условии. Более наглядным такой выбор можно сделать с помощью оператора switch. Вот его синтаксис:
switch (выражение){case константное_выражение_1: операторы_1 оператор_перехода_1...case константное_выражение_K: операторы_K оператор_перехода_Kdefault: операторы_N оператор_перехода_N}
Конструкция не очень строгая. Ветвь default может отсутствовать. Так же могут отсутствовать операторы перехода (если программисту так надо). А вот константные выражения в case должны иметь тот же тип, что и switch-выражение.
Из-за нестрогости конструкции семантика оператора switch чуть-чуть запутана. Вначале вычисляется значение switch-выражения. Затем оно поочерёдно в порядке следования case сравнивается на совпадение с константными выражениями. Как только достигнуто совпадение, выполняется соответствующая последовательность операторов case-ветви. Поскольку последний оператор этой последовательности является оператором перехода (чаще всего это оператор break), то обычно он завершает выполнение оператора switch. При его отсутствии управление "проваливается" в следующую case-ветвь. Если значение switch-выражения не совпадает ни с одним константным выражением, то выполняется последовательность операторов ветви default, если, конечно, она есть. Пример записи оператора:
switch (variant){case 1: Console.Write("Сторона А = ");temp = Console.ReadLine();a = Convert.ToDouble(temp);Console.Write("Сторона B = ");temp = Console.ReadLine();b = Convert.ToDouble(temp);Console.WriteLine("Площадь прямоугольника = "+a*b);break;case 2: Console.Write("Сторона А = ");temp = Console.ReadLine();a = Convert.ToDouble(temp);Console.Write("Высота H = ");temp = Console.ReadLine();h = Convert.ToDouble(temp);Console.WriteLine("Площадь треугольниика = "+ a * h / 2);break;. . . . . . . . . . . . . . . . . . . .default: Console.WriteLine("Выбор неверен ");break;}
5) Операторы цикла:
5.1. Оператор for:
Синтаксис оператора:
for (инициализаторы; условие; список_выражений) оператор
Оператор, стоящий после круглой закрывающей скобки, задаёт тело цикла. В большинстве случаев телом цикла является блок, но может быть и любой одиночный оператор. Сколько раз будет выполняться тело цикла, зависит от трёх управляющих элементов, заданных в скобках. Инициализаторы задают начальное значение одной или нескольких переменных, часто называемых счётчиками или просто переменными цикла. В большинстве случаев цикл for имеет один счётчик, но иногда бывает полезно иметь несколько счётчиков. Значение условия определяет, должен продолжаться цикл или должен завершиться. Если значение условия true, то цикл продолжается. Если false, то цикл завершается. Список выражений, записанный через запятую, показывает, как меняются счётчики цикла на каждом шаге выполнения.
Выполнение начинается с выполнения инициализаторов. Затем проверяется условие. Если условие цикла истинно, то выполняется тело цикла, затем изменяются значения счётчиков и снова проверяется условие. Как только условие становится ложным, цикл завершает свою работу. В цикле for тело цикла может ни разу не выполняться, если условие цикла ложно после инициализации, а может происходить зацикливание, если условие всегда остаётся истинным. В нормальной ситуации тело цикла выполняется конечное число раз. Счётчики цикла зачастую объявляются непосредственно в инициализаторе и, соответственно, являются переменными, локализованными в цикле, так что после завершения цикла они перестают существовать. Пример записи оператора – вычисление факториала натурального числа:
for (int i = 1, r = 1; i <= n; i++){ r = r*i;}
5.2. Оператор while:
Цикл while является универсальным видом цикла, включаемым во все языки программирования. Тело цикла выполняется до тех пор, пока остаётся истинным выражение while. В языке C# у этого вида цикла две модификации – с проверкой условия в начале (цикл с предусловием) и в конце цикла (цикл с постусловием). Первая модификация имеет следующий синтаксис:
while (выражение) оператор
Эта модификация соответствует стратегии: "сначала проверь, а потом делай". В результате проверки может оказаться, что и делать ничего не нужно. Тело такого цикла может ни разу не выполняться. Конечно же, возможно и зацикливание. В нормальной ситуации каждое выполнение тела цикла – это очередной шаг к завершению цикла. С помощью этого вида цикла факториал вычисляется так:
i = 1;r = 1;while (i <= n){r = r * i;i++;}
Цикл, проверяющий условие завершения в конце, соответствует стратегии: "сначала делай, а потом проверь". Вот синтаксис этой модификации:
doоператорwhile(выражение);
Тело такого цикла выполняется, по меньшей мере, один раз. Пример записи цикла:
i = 1;r = 1;do{r = r * i;i++;}while (i <= n)
5.3. Оператор foreach:
Новым видом цикла, не унаследованным от С++, является цикл foreach, удобный при работе с массивами. Рассмотрим его подробно в другой моей статье при изучении массивов Массивы в c#.
6) Операторы перехода:
Операторов перехода, позволяющих прервать естественный порядок выполнения операторов блока, в языке C# несколько.
6.1. Оператор goto:
Сразу нужно отметить, что использование этого оператора не рекомендуется. В принципе он допустим, так как достался языку C# в наследство от языка C. Однако, его использование не соответствует структурному стилю программирования, и делает запутанной логику программы. Оператор goto имеет три варианта записи.
А) goto метка;Б) goto case константное_выражение;В) goto default;
Первый вариант основан на следующем соображении. Все операторы языка C# могут иметь метку - уникальный идентификатор, предшествующий оператору и отделённый от него символом двоеточия. Передача управления помеченному оператору – это классическое использование оператора goto. Два других варианта используются внутри оператора switch. Они обеспечивают передачу управления в case-ветвь или default-ветвь.
6.2. Операторы break и continue:
Хорошим стилем программирования считается, когда используются "переходы вперёд" (но не назад), позволяющие при выполнении некоторого условия выйти из цикла, из оператора ветвления, из блока. Для этой цели можно использовать оператор goto, но лучше применять специально предназначенные для этих целей операторы break и continue.
Оператор break может стоять в теле цикла или завершать case-ветвь в операторе switch. Пример его использования в операторе switch уже демонстрировался. При выполнении оператора break в теле цикла завершается выполнение самого внутреннего цикла. В теле цикла, чаще всего, оператор break помещается в одну из ветвей оператора if, проверяющего условие преждевременного завершения цикла. Пример:
do { ...Console.Write("Завершаем работу? (Y,N)");temp = Console.ReadLine();otv = char.Parse(temp);if (otv = = 'Y' || otv = = 'y') break;...}while(...);
Оператор continue используется только в теле цикла. В отличие от оператора break, завершающего внутренний цикл, continue осуществляет переход к следующему шагу цикла. Пример – вычисление значений функции на интервале от -10 до +10:
for (int i = -10; i < 11; i++){ if (i > -4 && i < 4) continue;y= Math.Sqrt(i * i - 9);Console.WriteLine("Значение функции = {0} при значении аргумента {1}", y, i);}
Здесь переход к следующему шагу цикла без вычислений необходим потому, что на отрезке [-3, 3] значение функции не существует.
6.3. Оператор return:
Ещё одним оператором, относящимся к группе операторов перехода, является оператор return, позволяющий завершить выполнение метода (процедуры или функции). Его мы рассмотрим позднее в другой отдельной статье.
X