Организация разветвлений. Разветвления в цикле
Разветвление – это структура, содержащая две ветви, из которых в зависимости от условия будет выполнена только одна. Разветвления организуются при помощи условного оператора 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 = площадь
прямоугольника, 3 - длина окружности");
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. Логические переменные, логические операторы, логические выражения и их использование в программах.
Дата добавления: 2015-02-07; просмотров: 3681;