Главная страница
Навигация по странице:

  • 3.1.Операторы следования

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

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

  • Пример 1 Пример 2

  • Пример 3 Пример 4

  • Оператор выбора switch

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

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

  • Лекция. Лекция 3. Операторы языка C#


    Скачать 339.25 Kb.
    НазваниеОператоры языка C#
    АнкорЛекция
    Дата11.10.2021
    Размер339.25 Kb.
    Формат файлаdocx
    Имя файлаЛекция 3.docx
    ТипГлава
    #245481
    страница1 из 3
      1   2   3

    Глава 3

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

    Программа на языке C# состоит из последовательности операторов, каждый из которых определяет законченное описание некоторого действия и заканчивается точкой с запятой. Все операторы можно разделить на четыре группы: операторы следования, операторы ветвления, операторы цикла и операторы перехода.

    3.1.Операторы следования

    Операторы следования выполняются в естественном порядке : начиная с первого до последнего. Любое выражение , завершающееся точкой с запятой , можно рассматривать как оператор следования. Например:

    ++i; //оператор инкремента

    x+=y; // оператор сложения с присваиванием

    Console.WriteLine(x); //вызов метода

    x= Math.Pow(a,b)+a*b; //вычисление сложного выражения

    Составной оператор или блок представляет собой последовательность операторов, заключенных в фигурные скобки {}. Блок обладает собственной областью видимости : объявленные внутри блока имена доступны только внутри данного блока или блоков, выраженных в него. Составные операторы применяются в случае , когда правила языка предусматривают наличие только одного оператора , а логика программы требует несколько операторов. Например , тело цикла whileдолжно состоять только из одного оператора. Если заключить несколько операторов в фигурные скобки , то получится блок, который будет рассматриваться компилятором как единый оператор.

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

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

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

    Условный оператор if используется для разветвления процесса обработки данных на два направления. Он может иметь одну из форм :сокращенную или полную.

    Форма сокращенного оператора if:

    if (B) S;

    где B-логическое выражение, истинность которого проверяется; S-оператор: простой или составной.

    При выполнении сокращенной формы оператора if сначала вычисляется выражение B , затем проводится анализ его результата: если B истинно, то выполняется оператор S; если B ложно, то оператор S пропускается. Таким образом , с помощью сокращенной формы оператора if можно либо выполнить оператор S , либо пропустить его.

    Форма полного оператора if:

    if (B) s1; else s2;

    где B- логическое выражение, истинность которого проверяется; S1,S2- оператор: простой или составной.

    При выполнении полной формы оператора if сначала вычисляется значение выражения B , затем анализируется его результат : если B истинно, то выполняется оператор S1 , а оператор S2 пропускается; если B ложно, то выполняется оператор S2 , а S1 –пропускается. Таким образом, с помощью полной формы оператора if можно выбрать одно из двух альтернативных действий процесса обработки данных.

    Рассмотрим несколько примеров записи условного оператора if:

    // Сокращенная форма с простым оператором

    if(a>0) x=y;

    //Сокращенная форма с составным оператором

    if(++i>0) {x=y; y=2*z;}

    //Полная форма с простым оператором

    if (a>0|| b<0)x=y; else x=z ;

    //Полная форма с составными операторами

    if (i!=j-1) {x=0; y=1;} {x=1; y:=0;}

    Операторы S1 и S2 могут также являться операторами if . Такие операторы называют вложенными. При этом ключевое слово связывается с ближайшим предыдущем словом if , которое еще не связано ни с одним else . Рассмотрим несколько примеров алгоритмов с использованием вложенных условных операторов. Уровни вложенности обозначены фигурными скобками.

    Пример 1


    Пример 2



    Пример 3



    Пример 4


    Замечание. Так как оператор if допускает наличие только одного оператора действий, то можно записать его без использования блока{} , например, так:

    if (x<0) y=0; else y=1;

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

    if (x<0)

    {

    y=0;

    }

    else

    {

    y=1;

    }

    Далее будем придерживаться данного правила не только для оператора if , но и для других операторов.

    Рассмотрим несколько примеров использования оператора if.

    Пример 1

    Найдем наибольшее значение из двух вещественных чисел:

    static void Main()

    {

    Console.Write(“x=”);

    double x= double.Parse(Console.ReadLine());

    Console.Write(“y=”);

    double y= double.Parse(Console.ReadLine());

    double max;

    if (x>y)

    {

    max= x;

    }

    else

    {

    max = y;

    }

    Console.WriteLine(“max={0},max);

    }

    Результат работы программы:

    x y max

    0 0 0

    1 -1 1

    -2 2 2

    Задания.

    1.Объясните,почему в данном примере не требуется инициализация переменной max.

    2.Измените программу так, чтобы вычислялось наименьшее значение из двух вещественных чисел.

    Замечание. Напомним, что вычислить максимум из двух чисел можно с помощью тернарной операции, а также с помощью метода Max из стандартной библиотеки C# Math, обратившись к данному методу следующим образом Math.Max(x,y).

    Пример 2. Найдем наибольшее значение из трех вещественных чисел:

    Static void Main()

    {

    Console.Write(“x=”);

    double x = double.Parse(Console.ReadLine());

    Console.Write(“y=”);

    double y = double.Parse(Console.ReadLine());

    Console.Write(“z=”);

    double z= double.Parse(Console.ReadLine());

    double max;

    if (x > y && x > z)

    {

    max = x;

    }

    else

    {

    if (y >z)

    {

    max = y;

    }

    else

    {

    max= z;

    }

    }

    Console.WriteLine(“max ={0},max);

    }

    Результат работы программы:

    x y z max

    0 0 0 0

    1 -1 2 2

    -2 12 2 12

    4 -1 -3 4

    Задания

    1. Измените программу так, чтобы вычислялось наименьшее значение из трех вещественных чисел.

    2.Решите данную задачу, используя методы Math.Max(x,y)/Math.Min(x,y).

    Оператор выбора switch

    Оператор выбора switch предназначен для разветвления процесса вычислений по нескольким направлениям. Формат оператора:

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

    {

    case <константное _выражение_1>:

    [<оператор 1>];<оператор перехода>;

    case <константное _выражение_2>:

    [<оператор 2>];<оператор перехода>;



    case <константное _выражение_n>:

    [<оператор n>];<оператор перехода>;

    [default:<оператор >;]

    }

    Замечание. Операторы, записанные в квадратных скобках, являются необязательными элементами в операторе switch. Если они отсутствуют, то могут отсутствовать и соответствующие им операторы перехода.

    Выражение, стоящее за ключевым словом switch, должно иметь арифметический, символьный, строковый тип или тип указатель. Все константные выражения должные иметь тип, соответствующий или допускающий неявное преобразование к типу выражения, стоящего внутри скобок switch. Ключевое слово case и расположенное после него константное выражение называют также меткой case.

    Выполнение оператора начинается с вычисления выражения, расположенного за ключевым словом switch. Полученный результат сравнивается с меткой case. Если результат выражения соответствует метке case, то выполняется оператор, стоящий после этой метки , за которым обязательно должен следовать оператор перехода :break, goto и т.д. В случае отсутствия оператора перехода компилятор выдаст сообщении об ошибке. При использовании оператора break происходит выход из switch и управление передает оператору , следующему за switch . Если же используется оператор goto, то управление передается оператору, помеченному меткой, стоящего после goto.

    Замечания. Оператор перехода goto лучше использовать для перехода по меткам внутри switch , и не использовать его для выхода из оператора switch.

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

    Пример. По заданному виду арифметической операции (сложение, вычитание, умножение и деление) и двум операндам вывести на экран результат применения данной операции к операндам.

    static void Main()

    {
    Console.Write(“OPER=”);

    char oper = char.Parse(Console.ReadLine());

    Console.Write(“A=”);

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

    Console.Write(“B=”);

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

    bool ok= true;

    double res=0 ;

    switch(oper)

    {

    case ‘+’:

    res= a+b;

    break;//1

    case ‘=’:

    res = a-b;

    break;

    case ‘*’:

    res= a*b;

    break;

    case ‘:’:

    if (b !=0)// 2

    {

    res= a/b;

    break;

    }

    else

    {

    goto default;

    }

    default:

    ok= false;

    break;

    }

    if (ok)

    {

    Console.WriteLine(“{0} {1} {2}={3}”, a, oper, b res);

    }

    else

    {

    Console.WriteLine(“error”);

    }

    }

    Результат выполнения программы:

    oper x y res

    + 4 5 9

    : 4 0 error

    % 4 3 error

    Задания.

    1. Замените в строке 1 оператор на оператор и посмотрите, что произойдет, если в качестве операции ввести «+».

    2. В условном операторе (см.строку 2) уберите ветку и посмотрите, что произойдет. Дайте этому объяснение.

    3. Решите поставленную задачу с использованием вложенных операторов.

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

    switch (oper)

    {



    case ‘:’ : case ‘/’: //перечисление меток

    if (b!=0)

    {

    res=a/b;

    break;

    }

    else

    {

    goto default;

    }



    }

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

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

    Цикл с предусловием while

    Оператор цикла while организует выполнение одного оператора(простого или составного) неизвестное заранее число раз. Формат цикла while :

    while(B) S ;

    где B-выражение, истинность которого проверяется(условие завершения цикла); S-тело цикла (простой или составной оператор).

    Перед каждым выполнением тела цикла анализируется значение выражения :, если оно истинно, то выполняется тело цикла, и управление передается на повторную проверку условия; если значение ложно- цикл завершается и управление передается на оператор, следующий за оператором

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

    В качестве иллюстрации выполнения циклаwhile рассмотрим программу вывода на экран целых чисел из интервала от 1 до n.

    static void Main()

    {

    Console.Write(“N=”);

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

    int i = 1;

    while (i<=n) //пока i меньше или равно n

    {

    // Выводим i на экран, затем увеличиваем его на 1

    Console.Write(“{0}”, i++); //1

    }

    }

    Результат работы программы:

    n ответ

    10  1 2 3 4 5 6 7 8 9 10

    Задания.

    1.Измените программу так, чтобы : числа выводились в обратном порядке; выводились только нечетные числа(без использования оператора if).

    2.Подумайте, что произойдет, если в строке 1 команду i++,заменить на команду ++i, и почему.

    3.Подумайте, что произойдет , если в строке 1 команду i++ , заменить просто на i , и почему.

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

    Оператор цикла dowhile также организует выполнение одного оператора(простого или составного) неизвестное значение заранее число раз. Однако в отличие от цикла while условие завершения цикла проверяется после выполнения тела цикла. Формат цикла do while:

    do S while(B);

    где B-выражение, истинность которого проверяется(условие завершения цикла); S-тело цикла (простой или составной оператор).

    Сначала выполняется оператор S , а затем анализируется значение выражения B : если оно истинно, то управление передается оператору S , если ложно- цикл завершается и управление передается на оператор, следующий за условием B . Так как условие B проверяется после выполнения тела цикла, то в любом случае тело цикла выполнится хотя бы один раз.

    В операторе , dowhile так же как и в операторе while , возможна ситуация зацикливания в случае, если условие B всегда будет оставаться истинным.

    В качестве иллюстрации выполнения цикла dowhile рассмотрим программу вывода на экран целых чисел интервала от 1 до n.

    static void Main()

    {

    Console.Write(“N=”);

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

    int i=1;

    do

    //Выводим i на экран, затем увеличиваем его на 1

    Console.Write(“{0}”,i++);

    while (I <=n);

    }

    Задания. Измените программу так, чтобы:

    1. числа выводились в обратном порядке;

    2. выводились только четные числа(без использования оператора if).

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

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

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

    Инициализация используется для объявления и (или) присвоения начального значения величине , используемой в цикле в качестве параметра (счетчика).Областью действия переменной, объявленной в части инициализации цикла, является цикл вложенные блоки. Инициализация выполняется один раз в начале исполнения цикла.

    Выражение определяет условие выполнения цикла: если его результатом является истина, цикл выполняется. Истинность выражения проверяется перед каждым выполнением тела цикла, таким образом , цикл с параметром реализован как цикл с предусловием.

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

    Оператор (простой или составной) представляет собой тело цикла.

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

    В качестве иллюстрации выполнения цикла for рассмотрим программу вывода на экран целых чисел из интервала от 1 до n.

    static void Main()

    {

    Console.Write(“N=”);

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

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

    {

    Console.Write(“{0},}”, i);

    }

    }

    Задания. Измените программу так, чтобы

    1) решалась поставленная задача, а блок модификации оказался пустым;

    2) выводились квадраты чисел;

    3.4 Вложенные циклы

    Циклы могу быть простыми или вложенными (квадратные циклы, циклы к цикле). Вложенными могут быть циклы любых типов:while, dowhile, for. Каждый внутренний цикл должен быть полностью вложен во все внешние циклы. «Пересечения» циклов не допускается.

    Рассмотри пример использования вложенных циклов, который позволит вывести на экран числа следующим образом:
    2 2 2 2 2

    2 2 2 2 2

    2 2 2 2 2

    2 2 2 2 2

    static void Main()

    {

    for (int i=1; i <=4; ++i) // внешний цикл отвечает за

    // количество выводимых строк

    {

    // Внутренний цикл отвечает за количество чисел,

    //выводимых в строке

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

    {

    Console.Write(“2”);

    }

    Console.WriteLine();

    }

    }

    Задания. 1.Измените программу так, чтобы таблица содержала n строк и m столбцов (значения n и m вводятся с клавиатуры).

    2. Измените программу так, чтобы на экран выводилась прямоугольная таблица, в которой n строк, m столбцов, а каждый элемент таблицы равнялся сумме номера строки и номера столбца.

    Замечание. В языке C# существует еще один оператор цикла foreach. Данный оператор мы рассмотрим , когда приступим к изучение одномерных массивов.
      1   2   3


    написать администратору сайта