Организация разветвлений. Разветвления в цикле
Разветвление – это структура, содержащая две ветви, из которых в зависимости от условия будет выполнена только одна. Разветвления организуются при помощи условного оператора if (см. п. 1.7.1): if (выражение) { Операторы1; } [Else { Операторы2; }] ... Если выражение имеет значение true, то выполняются Операторы1, и происходит переход к оператору, следующему за if. Если выражение имеет значение false, то выполняются Операторы2, расположенные после else, и далее выполняется оператор, следующий за условным. Если вторая ветвь отсутствует (такая структура называется обход), то во втором случае никаких действий не производится и сразу выполняется оператор, следующий за условным. Если блок (операторы, заключенные в скобки {}) состоит из одного оператора и не содержит описаний переменных, то скобки можно не использовать. Далее приводятся примеры программ с использованием разветвлений, разветвлений в цикле и множественного выбора (см. п. 1.7.5). Пример 2.15. Составить программу для решения квадратного уравнения ax2+bx+c = 0. Квадратное уравнение имеет решение, если дискриминант d = b2 – 4ac не является отрицательным. Т.е. после ввода коэффициентов a, b и c нужно вычислить d и проверить условие d < 0. Если это условие выполняется, то нужно вывести сообщение «Уравнение не имеет решения». Если условие не выполняется (d > =0), нужно вычислить и напечатать корни (возможность совпадения корней игнорируется). double a, b, c, d, x1, x2; Console.WriteLine(" Введите a"); a = double.Parse(Console.ReadLine()); Console.WriteLine(" Введите b"); b = double.Parse(Console.ReadLine()); Console.WriteLine(" Введите c"); c = double.Parse(Console.ReadLine()); d = b * b - 4 * a * c; if (d < 0) Console.WriteLine(" Уравнение не имеет решения"); else { x1 = (-b + Math.Sqrt(d)) / (2 * a); x2 = (-b - Math.Sqrt(d)) / (2 * a); Console.WriteLine(" {0: f4} {1: f4}", x1, x2); } Console.ReadKey(); Пример 2.16. Вывести большее из двух чисел. double x, y, u; Console.WriteLine(" Введите x"); x = double.Parse(Console.ReadLine()); Console.WriteLine(" Введите y"); y = double.Parse(Console.ReadLine()); u = x; if (y > u) u = y; Console.WriteLine(u); Console.ReadKey(); Пример 2.17. Найти максимальное из трех чисел. double x, y, z, u; Console.WriteLine(" Введите x"); x = double.Parse(Console.ReadLine()); Console.WriteLine(" Введите y"); y = double.Parse(Console.ReadLine()); Console.WriteLine(" Введите z"); z = double.Parse(Console.ReadLine()); u = x; if (y > u) u = y; if (z > u) u = z; Console.WriteLine(u); Console.ReadKey();
Пример 2.18. Определить, лежит ли точка с координатами x, y внутри или вне круга радиусом r с центром вначале координат. string inside = " точка внутри круга"; string outside = " точка вне круга"; double x, y, r; Console.WriteLine(" Введите x"); x = double.Parse(Console.ReadLine()); Console.WriteLine(" Введите y"); y = double.Parse(Console.ReadLine()); Console.WriteLine(" Введите r"); r = double.Parse(Console.ReadLine()); if (x * x + y * y < = r * r) Console.WriteLine(inside); else Console.WriteLine(outside); Console.ReadKey(); Здесь использованы символьные константы inside и outside для размещения соответствующей символьной информации, которая выводится в качестве результата. Второй вариант программы для решения этой задачи составлен с использованием логической переменной, в которую помещается результат (true, если точка внутри круга, false - в противоположном случае). double x, y, r; bool l = false; Console.WriteLine(" Введите x"); x = double.Parse(Console.ReadLine()); Console.WriteLine(" Введите y"); y = double.Parse(Console.ReadLine()); Console.WriteLine(" Введите r"); r = double.Parse(Console.ReadLine()); if (x * x + y * y < = r * r) l =! l; Console.WriteLine(l); Console.ReadKey(); В операторе if логической переменной l присваивается значение true: выполняется операция отрицания (оператор!), если условие выполняется, т.е. точка лежит внутри круга.. Подробнее о логических операциях см. п. 1.5 Пример 2.19. Определить, лежит ли точка с координатами x, y внутри или вне квадрата, вершинами которого являются точки с координатами (1, 1), (–1, 1), (1, –1), (–1, –1). Точка лежит внутри квадрата, если одновременно выполняются условия | x |< 1 и | y |< 1. Результат будем получать в логической переменной (см. пример 2.18).
double x, y; bool l = false; Console.WriteLine(" Введите x"); x = double.Parse(Console.ReadLine()); Console.WriteLine(" Введите y"); y = double.Parse(Console.ReadLine()); if (Math.Abs(x) < = 1 & & Math.Abs(y) < = 1) l =! l; Console.WriteLine(l); Console.ReadKey(); В операторе if логической переменной l присваивается значение true: выполняется логическая операция «И» (оператор & &), если условие выполняется, т.е. точка лежит внутри квадрата. Подробнее см. п. 1.5. Пример 2.20. Определить, лежит ли точка с координатами x, y внутри или вне треугольника с вершинами в точках (0, –1), (0, 1), (1, 0). Точка принадлежит треугольнику, если одновременно выполняются два условия x > = 0 и x+|y| < = 1.
double x, y; bool l = false; Console.WriteLine(" Введите x"); x = double.Parse(Console.ReadLine()); Console.WriteLine(" Введите y"); y = double.Parse(Console.ReadLine()); if (x > = 0 & & Math.Abs(y) + x < = 1) l =! l; Console.WriteLine(l); Пример 2.21. Вводя координаты n точек x, y. Определить, сколько из них попадет в круг радиусом r с центром в начале координат. double x, y, r; int i, n, k; Console.WriteLine(" Введите количество точек"); n = int.Parse(Console.ReadLine()); Console.WriteLine(" Введите радиус"); r = double.Parse(Console.ReadLine()); k = 0; for (i = 1; i < = n; i++)//вместо i = i + 1 { Console.WriteLine(" Введите x"); x = double.Parse(Console.ReadLine()); Console.WriteLine(" Введите y"); y = double.Parse(Console.ReadLine()); if (x*x + y*y < = r*r) k++; } Console.WriteLine(" В круг попало {0} точек из {1} ", k, n); Console.ReadKey(); Пример 2.22. Ввести координаты точки x, y. Вычислить по выбору радиус-вектор точки, площадь прямоугольника с вершинами в точках (0, 0), (x, 0), (0, y), (x, y) или длину окружности с центром в начале координат, проходящей через точку x, y. Для выбора варианта вычислений используем оператор switch. Вариант вычислений будем задавать цифрой 1, 2 или 3. double x, y, r; int k = 0; Console.WriteLine(" Введите x"); x = double.Parse(Console.ReadLine()); Console.WriteLine(" Введите y"); y = double.Parse(Console.ReadLine()); Console.WriteLine(" Признак: 1 = радиус - вектор, 2 = площадь Console.Write(" Введите признак 1, 2 или 3: "); k = int.Parse(Console.ReadLine()); switch (k) { case 1: r = Math.Sqrt(x * x + y * y); Console.WriteLine(" радиус вектор {0: f}", r); Console.ReadLine(); break; case 2: r = x * y; Console.WriteLine(" площадьпрямоугольника{0: f}", r); Console.ReadKey(); break; case 3: r = 2*Math.PI*Math.Sqrt(x * x + y * y); Console.WriteLine(" длина окружности {0: f}", r); Console.ReadKey(); break; default: Console.WriteLine(" Неверный выбор. Выберите 1, 2 или 3."); Console.ReadKey(); break; }
Вопросы для самопроверки 1. Что такое разветвление? Какой оператор используется для организации разветвлений? 2. Обход и его реализация на языке C#. 3. Множественный выбор и его реализация на языке C#. 4. Логические переменные, логические операторы, логические выражения и их использование в программах.
|