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

  • Оператор безусловного перехода goto

  • Оператор выхода break

  • Оператор перехода к следующей итерации цикла continue

  • 3.6. Примеры решения практических задач

  • Указание по решению задачи

  • II способ

  • Указания по решению задачи

  • Задание

  • Указания к решению задачи

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


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

    3.5. Операторы перехода

    В C# есть несколько операторов, изменяющих естественный порядок выполнения команд: оператор безусловного перехода goto, оператор выхода break, оператор перехода к следующей итерации цикла continue, оператор возврата из метода return и оператор генерации исключения throw.

    Оператор безусловного перехода goto

    Оператор безусловного перехода имеет формат:

    goto <метка>;

    В теле того же метода должна присутствовать ровно одна конструкция вида:

    <метка>: <оператор>;

    Оператор goto передает управление оператору с меткой. Рассмотрим пример использования оператора goto :

    static void Main ()

    {

    float x;

    label: Console.WriteLine(“x=”); // оператор, помеченный меткой

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

    if (x!=0)

    {

    Console.WriteLine(“y({0}={1}”, x, 1 /x);

    }

    else

    {

    Console.WriteLine(“функция не определена”);

    goto ladel; //передача управление метке Label

    }

    }

    Следует учитывать, что использование оператора goto затрудняет чтение больших по объему программ, поэтому использовать метки нужно в крайних случаях. Например, в операторе switch.

    Оператор выхода break

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

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

    Оператор перехода к следующей итерации цикла continue

    Оператор перехода к следующей итерации цикла continue пропускает все операторы, оставшиеся до конца тела цикла, и передает управление на начало следующей итерации (повторение тела цикла). Рассмотрим оператор continue на примере.

    static void Main ()

    {

    Console.WriteLine(“n=”);

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

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

    {

    if (I % 2 == 0)

    {

    continue;

    }

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

    }

    }

    Замечание. В языке C# существует еще два оператора перехода- return и throw . Оператор return мы рассмотрим, когда приступим к изучению методов. Оператор throw используется при обработке исключений во время выполнения программы. Изучение оператора throw выходит за рамки данного пособия.

    3.6. Примеры решения практических задач

    1. Для произвольных значений аргументов вычислить значение функции, заданной следующим образом: . Если в некоторой точке вычислить значение функции окажется невозможно, то вывести на экран сообщение «функция не определена».

    Указание по решению задачи. Данную задачу можно решить двумя способами.

    I способ. Заданная функция не определена в том случае, когда:

    знаменатель первого слагаемого равен нулю x=0 x=0

    Или или или

    Покоренное выражение второго слагаемого x+1<0 x<-1

    отрицательное

    В остальных случаях функция определена.

    using System;

    namespace Example

    {

    class Program

    {

    static void Main()

    {

    Console.Write(“x=”);

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

    // Проверяем условие неопределенности функции y(x)

    if (x == 0| | x < -1)

    {

    Console.WriteLine(“Функция не определена”);

    }

    else

    {

    double y=1/ x+ Math.Sqrt(x+1);

    Console.WriteLine(“y({0:f2}) = {1:f2}”, x, y);

    }

    }

    }

    }

    II способ. Заданная функция определена в том случае, когда:

    знаменатель первого слагаемого не равен нулю x≠0 x≠0

    и и и

    подкоренное выражение второго слагаемого x+1≥0 x≥-1

    неотрицательно

    В остальных случаях функция не определена.

    using System;

    namespace Example

    {

    class Program

    {

    static void Main()

    {

    Console.Write(“x=”);

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

    if (x !=0 && x >= -1) // проверяем условие

    //определенности функции y(x)

    {

    double y =1 / x + Math.Sqrt(x+1);

    Console.WriteLine(“y({0:f2}) – {1:f2}”, x, y);

    }

    else

    {

    Console.WriteLine(“Функция не определена”);

    }

    }

    }

    }

    Обе программы дадут нам следующий результат:

    x Сообщение на экране

    0 функция не определена

    2,5 y(2,50) = 2,27

    -2 функция не определена

    -1 y(-1,00) = -1,00

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

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

    y(x)=

    Указания по решению задачи. Вся числовая прямая Ox разбивается на три непересекающихся интервала, (-∞;0),[0;1), [1;+∞).

    На каждом интервале функция задается своею ветвью. Заданная точка x может попасть только в один из указанных интервалов. Чтобы определить, в какой из интервалов попала точка, воспользуемся следующим алгоритмом. Если x<0, то x попадает в первый интервал, и функцию высчитываем по первой ветви, после чего проверка заканчивается. Если это условие ложно, то истинно условие x≥0, и для того чтобы точка попала во второй интервал достаточно, чтобы выполнялось условие x<1. Если выполняется это условие, то точка x попадает во второй интервал, и мы определяем функцию по второй ветви, после чего заканчиваем вычисления. В противном случае, точка может принадлежать только третьему интервалу, поэтому дополнительная проверка не проводится, а сразу вычисляем функцию по третьей ветви. Приведенный алгоритм можно реализовать с помощью вложенных операторов if.

    using System;

    namespace Example

    {

    class Program

    {

    static void Main()

    {

    Console.Write(“x=”);

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

    double y;

    if (x<0) //проверяем условие первой ветви

    {

    y=Math.Pow(Math.Pow(x,3)+1, 2);

    }

    else

    {

    if(x<1) //проверяем условие второй ветви

    {

    y=0;

    }

    else

    {

    y= Math.Abs(x * x - 5 * x + 1);

    }

    }

    Console.WriteLine(“y({0:f2}) = {1:f2}”, x, y);

    }

    }

    }

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

    X Сообщение на экране

    -2 y(-2,00)=49,00

    0 y(0,00)=0,00

    1,5 y(1,50)=4,25

    Задание. Измените программу так, чтобы при выводе результата x всегда выводился с точностью один знак после запятой, а y с точностью три знака после запятой.

    3. Дана точка на плоскости с координатами (x,y). Составить программу, которая выдает одно из сообщений «Да», «Нет», «На границе» в зависимости от того, лежит ли точка внутри заштрихованной области, вне заштрихованной области или на ее границе.

    Указания к решению задачи. Всю плоскость можно разбить на три непересекающихся множества точек ─множество точек, лежащих внутри области; ─множество точек, лежащих вне области; ─множество точек, образующих границу области. Точка с координатами (x,y) может принадлежать только одному из указанных множеств можно проводить по аналогии с алгоритмом, приведенном в примере 2. Однако множества; значительно труднее описать математически, чем интервалы в примере 2. Поэтому для непосредственной проверки выбираются те два множества, которые наиболее просто описать математически. Обычно труднее всего описать точки границы области. Например для области, показанной на рис.3.1 множества задаются следующим образом:

    : ;

    : ;

    : ;



    Рис.3.1

    Для области, приведенной на рис.3.2, множества задаются следующим образом:

    : <10 и <5;

    : >10 или >5;

    :( <= 10 и y=5) или ( <= 10 и y =-5) или ( <5 и x=10) или ( <5 и x=-10).

    Таким образом, для рис.3.2 описать множества значительно сложно. Следует отметить, что для множества необходимо выполнять проверку на равенство, что очень тяжело сделать для вещественных чисел из-за ошибок, связанных с округлением.

    using System;

    namespace Example

    {

    class Program

    {

    static void Main()

    {

    Console.Write(“x=”);

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

    Console.Write(“y=”);

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

    const int r = 10;

    if (x*x + y*y < r*r)

    {

    Console.WriteLine(“да”);

    }

    else

    {

    if (x*x + y*y > r*r)

    {

    Console.WriteLine(“нет”);

    }

    else

    {

    Console.WriteLine(“на границе”);

    }

    }

    }

    }

    }

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

    x y сообщение на экране

    0 0 да

    10 0 на границе

    -12 13 нет

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

    const int r =10;

    double n = Math.Sqrt(x*x + y*y);

    if (n
    {

    Console.WriteLine(“да”);

    }

    else

    {

    if (n > r)

    {

    Console.WriteLine(“нет”);

    }

    else

    {

    Console.WriteLine(“на границе”);

    }

    }



    Рис.3.2

    using System;

    namespace Example

    {

    class Program

    {

    static void Main()

    {

    Console.Write(“x=”);

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

    Console.Write(“y=”);

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

    const int sizeX = 10;

    const int sizeY= 5;

    if (Math.Abs(x) < sizeX && Math.Abs(y) < sizeY)

    {

    Console.WriteLine(“да”);

    }

    else

    {

    if (Math.Abs(x) > sizeX | | Math.Abs(y) > sizeY)

    {

    Console.WriteLine(“нет”);

    }

    else

    {

    Console.WriteLine(“на границе ”);

    }

    }

    }

    }

    }

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

    x y сообщение на экране

    0 0 да

    10 5 на границе

    -12 13 нет

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



    4.Написать программу, которая выводит на экран квадраты всех четных чисел из диапазона от A до B (A и B целые числа, при этом A≤B ).

    Указания по решению задачи. Из диапазона целых чисел от A до B необходимо выбрать только четные числа. Напомним, что четные называются числа, которые делятся на два без остатка. Кроме того, четные числа представляют собой упорядоченную последовательность, в которой каждое число отличается от предыдущего на 2. Решить эту задачу с помощью каждого оператора цикла.

    using System;

    namespace Example

    {

    class Program

    {

    static void Main()

    {

    Console.Write(“a=”);

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

    Console.Write(“b=”);

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

    int i;

    Console.Write(“FOR:”);

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

    a = (a % 2 == 0) ? a : a + 1;

    for (i = a; 1<=b; i += 2 )

    {

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

    }

    Console.Write(“\nDO: ”);

    i = a;

    do

    {

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

    i += 2;

    }

    while(i <= b);

    }

    }

    }

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

    a b сообщение на экране

    -11 11 FOR: 100 64 36 16 4 0 4 16 36 64 100

    WHILE: 100 64 36 16 4 0 4 16 36 64 100

    DO: 100 64 36 16 4 0 4 16 36 64 100

    Задание. Измените программу так , чтобы она выводила на экран только нечетные числа из диапазона от A до B (A и B целые числа, при этом A ≤ B ).

    5. Постройте таблицу значений функции y(x)=

    для x € [a, b] с шагом h.

    Указания по решению задачи. Перебираем числа из отрезка от A до B с шагом h. Для каждого числа из отрезка вычисляем значение функции y(x).

    using System;

    namespace Example

    class Program

    {

    static void Main()

    {

    Console.Write(“a=”);

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

    Console.Write(“b=”);

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

    Console.Write(“h=”);

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

    doubley;

    int i=1;

    Console.WriteLine(“{0,3} {1,5}”, “#”, “x”, “f(x)”);

    for (double x = a; x <= b; x += h, i++)

    {

    if (x < 0)

    {

    y= Math.Pow(Math.Pow(x,3) + 1, 2);

    }

    else

    {

    if (x< 1)

    {

    y = 0;

    }

    else

    {

    y= Math.Abs(x * x – 5 * x + 1);

    }

    }

    Console.WriteLine(“{0,3} (1,5:f2) (2,5:f2)”, i, x, y);

    }

    }

    }

    }

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

    # x f(x)

    1 -1,00 0,00

    2 -0,50 0,77

    3 0,00 0,00

    4 0,50 0,00

    5 1,00 3,00

    6 1,50 4,25

    7 2,00 5,00

    Задание. Изменить программу так, чтобы она строила таблицу значений для функции, заданной следующим образом: y(x)= . Если значение в точке не определено, тона экран должно выводиться соответствующее сообщение.
    1   2   3


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