Вложенные структуры условных операторов
Структура называется вложенной, если после служебного слова else или при истинности логического выражения вновь используются условные операторы. Число вложений может быть произвольным. При этом справедливо следующее правило: служебное слово else всегда относится к ближайшему выше слову if.
Пример. Вычислить значение у по одной из трех ветвей:
При решении данной задачи возможны два варианта программирования:
1) без вложенной структуры;
2) с вложенной структурой.
Ниже рассмотрены оба варианта решения задачи.
Вариант 1 (с использованием вложенной структуры)
Начало |
x |
x≥1 |
y= |
y |
Конец |
x>0 |
y= |
y= |
Программа
#include "stdafx.h"
#include<math.h>
int main()
{
float a,x, y;
printf("Введите число х= ");
scanf("%f",&x);
if (x>=1)
y = sqrt(x)/2;
else
if(x>0){a=1.0/3; y=pow(x,a);}
else {a=1.0/4; y=pow(x,a)/4;}
printf("y=%6.2f",y);
return 0;}
Вариант 2 (без использования вложенной структуры)
Схема алгоритма Программа
Начало |
X |
x≥1 |
y= |
y |
Конец |
0<x<1 |
y= |
x≤0 |
y= |
#include "stdafx.h"
#include<math.h>
int main()
{
float a,x,y;
printf("Введите число x=" );
scanf("%f",&x);
if (х>=1)
у = sqrt(x)/2;
if ((x>0)&&(x<1))
{ a= 1.0/3;
y =pow(x,a)/2;
}
if(x<=0)
{a= 1.0/4;
y=pow(x,a)/4;
}
printf("y=%6.2f",y);
return 0;
}
Оператор выбора
При многократном вложении условных операторов программная конструкция становится громоздкой и ее трудно понять. Считается, что число вложений не должно превышать двух-трех. При большем числе вложений рекомендуется использовать оператор выбора switch-case.
Общий вид записи оператора
switch <селектор>
{
сase константа выбора 1: оператор 1; break;
…………………………………………………
сase константа выбора n: оператор n; break;
default: оператор n+1;
}
Селектор - это выражение целого или символьного типа.
Константы выбора - возможные значения селектора.
default – осуществляет обработку непредусмотренного значения селектора. Наличие этой метки в операторе switch необязательно.
Работа оператора
По вычисленному значению селектора выбирается для исполнения case-оператор, содержащий константу выбора, равную значению селектора. После выполнения выбранного case-оператора управление передается на конец оператора case. Следующим в программе выполняется оператор, стоящий за оператором выбора switch.
Пример 1. Написать оператор выбора для вычисления величины y по формулам:
Оператор выбора имеет следующую запись:
switch (n)
{
case 1: у =х; break;
case 2: case 3: у = 2 * sqrt(abs(x)); break;
case 4: у = ехр(х); break;
default: printf("значение для n указано не верно\n");
}
Графическая интерпретация оператора
В схемах алгоритма оператору switch соответствует структура ВЫБОР.
Для приведенного выше примера 1 эта структура выглядит следующим образом:
n=4 |
Анализ селектора n |
y=x |
n=1 |
y= |
y= |
n=2 или n=3 |
Замечание. Если в строке выбора необходимо записать несколько операторов, то их заключают в операторные скобки {...}.
Пример 2. Вычислить значение у.
Если значение х не принадлежит рассматриваемым промежуткам, то вывести на экран соответствующее сообщение.
В задаче переменная х является вещественной и не может использоваться в качестве селектора оператора case. Введем новую переменную целого типа n, которой присваивается целая часть значения х. Тогда программа решения данной задачи с использованием оператора выбора может быть составлена следующим образом.
#include "stdafx.h"
#include<math.h>
int main()
{
float х, у;
int n;
printf("Введите число х= ");
scanf("%f",&x);
if( (х<1) || (x>=5))
printf("x не принадлежит рассматриваемой области\n");
else
{ n = x;
Switch (n)
{
case 1:y =sin(x); break;
case 2:у = exp(-x); break;
case 3:y =log(x); break;
case 4:у = tan(x); break;
default: printf(" такого решения нет \n");
break;
}
if ((n==1)||(n==2)||(n==3)||(n==4)) printf("y=%6.2f", y);
}
return 0;
}
Контрольные задания
1)Записать на языке С++ логические выражения
а)
б)
в)переменная х находится вне интервала [а, b];
г) все точки на плоскости находятся выше оси абсцисс;
д) все точки на плоскости находятся либо в первом, либо в третьем квадрантах;
е) все точки на плоскости лежат выше прямой у = 1 +х.
2) Начертить на плоскости область, в которой логическое выражение имеет значение TRUE
а) (х>= 0) && (у>= 0) && (у <= х) || (у <= -1);
б) (х*х +у*у <= 1) && (у>= 0) && !(y <x);
в) (у>= х) && (y>= -х);
г) (у <= 2) && (x <- 2) || (х*у <0);
д) (х*у>= 0) && (у <= х) && (x <1) && (y>-1);
е) (х*х + у*у <= 4) &&(y>= х*х).
3) Записать на языке С++ логические выражения, принимающие значение TRUE для точек, принадлежащих заштрихованной области (рисунок 1).
а) б)
в) г)
д) е)
Рисунок 1.
4) Записать на языке С++ логические выражения, расставить действия и вычислить при: i = 5, j = 2, к=2, а = TRUE, b = FALSE
а)
б)
в)
г)
д)
е)