Опубликован: 28.04.2014 | Доступ: свободный | Студентов: 987 / 89 | Длительность: 01:30:00
Специальности: Программист
Лекция 6:

Основы программирования. Типы данных, переменные, операторы

< Лекция 1 || Лекция 6: 123456

Составной оператор. Блок

Группа операторов, заключенная в фигурные скобки, рассматривается как один оператор – составной оператор. Составной оператор – важная синтаксическая конструкция. В ряде случаев, по синтаксису конструкции требуется, чтобы в ней присутствовал ровно один оператор, а по смыслу требуется выполнения группы операторов. В этом случае группа объединяется в единый составной оператор.

Если в группе, объединяемой скобками, присутствуют объявления переменных, то такую группу принято называть блоком.

Оператор выбора if – then – else

В жизни, как витязю на распутье, часто приходится делать выбор. Без выбора нельзя обойтись и в программах. Во всех языках программирования есть оператор выбора, называемый оператором if, или if – then – else (если – то – иначе), позволяющий сделать альтернативный выбор, - выбор из двух возможностей.

В языке C# этот оператор имеет следующий синтаксис:

if (<выражение булевского типа>)
 <оператор А>
else
 <оператор B>

Семантика выполнения этого оператора следующая. Вычисляется значение булевского выражения. Если значение выражения равно true (истина), то выполняется оператор А, в противном случае – оператор В.

Существует краткая форма этого оператора, когда ветвь else опускается. Тогда, когда выражение ложно ничего не делается и оператор if заканчивает работу.

По синтаксису ifветвь и else - ветвь содержат только один оператор. Понятно, что этот оператор может быть составным, тогда выполняется группа операторов, заключенная в фигурные скобки, но синтаксически воспринимаемая как один оператор.

Несмотря на кажущуюся простоту семантики этого оператора, разобраться в его работе может быть достаточно сложно. Дело в том, что на оператор А и оператор В не накладывается никаких ограничений. Как сказано, это может быть группа операторов, каждый из операторов группы может быть сложным оператором – оператором if или оператором цикла.

Рассмотрим пример использования оператора if в классической задаче нахождения корней квадратного уравнения. В нашем проекте Lesson3 есть метод TestIf, решающий эту задачу. Приведу текст этого метода:

//объявление и ввод исходных данных
double a, b, c;
Console.WriteLine("Введите коэффициенты квадратного уравнения - a, b, c");
a = double.Parse(Console.ReadLine());
b = double.Parse(Console.ReadLine());
c = double.Parse(Console.ReadLine());

Выполнение метода начинается с объявления исходных данных и их ввода с консоли. Обратите внимание, знакомый нам метод ReadLine читает с консоли строку текста, представляющую число. Прежде чем это значение присвоить переменной типа double, метод Parse класса double преобразует эту строку в число типа double.

//объявление результатов - корней квадратного уравнения
double x1, x2;

Объявляются результаты без инициализации. Значения этих переменных появятся в результате вычислений.

//объявление с инициализацией внутренней (вспомогательной) переменной
double discriminant = b * b - 4 * a * c;

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

//Вычисления
if (discriminant > 0)
{
     x1 = (-b + Math.Sqrt(discriminant)) / (2 * a);
     x2 = (-b - Math.Sqrt(discriminant)) / (2 * a);
}
else
     if (discriminant == 0)
        x1 = x2 = -b / (2 * a);
     else
        x1 = x2 = double.NaN;

Вычисления практически сводятся к выполнению одного оператора – оператора if. Ветвь if этого оператора содержит составной оператор, содержащий группу из двух операторов присваивания. Ветвь else содержит один оператор, - но это в свою очередь оператор выбора if. Обратите внимание, ветвь else этого оператора работает, когда квадратное уравнение не имеет вещественных корней. В данном случае корни получают специальное значение NaN (Not a Number – Это Не (вещественное) Число).

 Console.WriteLine("x1 = " + x1 + "  x2 = " + x2);

Последний оператор метода выводит результаты на консоль.

< Лекция 1 || Лекция 6: 123456
Дмитрий Лубченков
Дмитрий Лубченков
Николай Молдован
Николай Молдован