ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 08.05.2025
Просмотров: 110
Скачиваний: 0
Лекция 3. Операторы управления
Для организации в языке C(C++) используются операторы if и switch.
3.1. Условный оператор
Оператор if имеет следующую структуру
if (условие) оператор_1; else оператор_2;
где условие - логическое выражение, переменная или константа.
Работает условный оператор следующим образом. Если условие оно не равно нулю, т.е. имеет значение истина (true), выполняется оператор_1. В противном случае, когда выражение равно нулю (ложь - false), то оператор _2. Алгоритм , который реализован в условном операторе if, представлен на рис. 3.1.
Рисунок 3.1: Алгоритм условного оператора if... else
Составным оператором языка C(C++) называется группа операторов языка, начинающаяся с символа «{» и заканчивающаяся символом «}».
{
оператор_1;
...
оператор_n;
}
Транслятор воспринимает составной оператор как одно целое.
Таким образом, если в операторе if требуется, чтобы в зависимости от значения условия выполнялся не один оператор, а несколько, то оператор if следует записывать в следующей форме.
В операторе if могут отсутствовать альтернативная ветвь else, в этом случае оператор if
можно записывать так
if (условие) оператор;
или так
if (условие)
{
оператор_1; оператор_2;
...
}
Использование оператора оператора if рассмотрим на примере решения следующих задач.
ЗАДАЧА 3.1. Написать программу решения квадратного уравнения ax2 + bx + c = 0.
Исходные данные: а, b и с.
Результаты работы программы: x1 и x2 корни квадратного уравнения или сообщение о
том, что корней нет.
Вспомогательные переменные: вещественная переменная d.
Блок схема решения задач представлена на рис. 3.2.
1 Начало
2 Ввод
a, b, c
3
d = b2 - 4ac
+ |
4 |
- |
||||||||||||
d < 0 |
||||||||||||||
6 |
||||||||||||||
−b + |
||||||||||||||
5 |
x1 = |
d |
||||||||||||
Нет |
2a |
|||||||||||||
действительных |
−b − |
|||||||||||||
x2 = |
d |
|||||||||||||
корней |
||||||||||||||
2a |
||||||||||||||
7 |
||||||||||||||
Вывод |
||||||||||||||
x1, x2 |
||||||||||||||
8 Конец
Рисунок 3.2: Блок-схема решения задачи 3.1
#include <iostream> #include <math.h> using namespace std; int main()
{float a,b,c,d,x1,x2;
//Ввод значений коэффициентов квадратного уравнения
cout<<"a=";cin>>a;
cout<<"b=";cin>>b;
cout<<"c=";cin>>c; //Вычисление дискриминанта d=b*b-4*a*c;
//Если дискриминант отрицателен, if (d<0)
//то вывод сообщения, что корней нет, cout<<"Real roots are not present"; else
{//иначе вычисление корней x1, x2 x1=(-b+sqrt(d))/2/a; x2=(-b-sqrt(d))/(2*a);
//и вывод их значений на экран cout<<"X1="<<x1<<"\t X2="<<x2<<"\n";
}
return 0;
}
ЗАДАЧА 3.2. Составить программу нахождения действительных и комплексных корней
квадратного уравнения ax2 + bx + c = 0.
Исходные данные: вещественные числа а, b и с.
Результаты работы программы: вещественные числа x1 и x2 действительные корни
квадратного уравнения, либо x1 и x2 действительная и мнимая части комплексного числа .
Вспомогательные переменные: d.
Блок схема решения задачи представлена на рис. 3.3.
Начало
1
Ввод a, b, c
2
d = b2 - 4ac
+ |
3 |
- |
||||||||||||||||||
d < 0 |
||||||||||||||||||||
6 |
||||||||||||||||||||
−b + |
||||||||||||||||||||
4 |
x1 = |
d |
||||||||||||||||||
x1 = |
−b x2= |
d |
2a |
|||||||||||||||||
−b − |
||||||||||||||||||||
2a |
2a |
x2 = |
d |
|||||||||||||||||
2a |
||||||||||||||||||||
5 |
||||||||||||||||||||
Вывод |
7 |
|||||||||||||||||||
x1+ix2 |
||||||||||||||||||||
Вывод |
||||||||||||||||||||
x1-ix2 |
||||||||||||||||||||
x1, x2 |
||||||||||||||||||||
Конец
Рисунок 3.3: Блок-схема решения задачи 3.2
#include <iostream> #include <math.h> using namespace std; int main()
{
float a,b,c,d,x1,x2; cout<<"a=";cin>>a; cout<<"b=";cin>>b; cout<<"c=";cin>>c; d=b*b-4*a*c;
//Проверка знака дискриминанта if (d<0)
{
//Если дискриминант отрицателен, то вывод сообщения cout<<"Real roots are not present \n";
//Вычисление действительной части комплексных корней x1=-b/(2*a);
//Вычисление модуля мнимой части комплексных корней x2=sqrt(fabs(d))/(2*a);
//Сообщение о комплексных корнях уравнения вида ax^2+bx+c=0 cout<<"Complex roots of equalization \n"; cout<<a<<"x^2+"<<b<<"x+"<<c<<"=0 \n";
//Вывод значений комплексных корней в // виде x1±ix2 cout<<x1<<"+"<<x2<<"i\t"; cout<<x1<<"-"<<x2<<"i\n";
}
else
{
//иначе вычисление действительных корней x1, x2 x1=(-b+sqrt(d))/2/a;
x2=(-b-sqrt(d))/(2*a); //и вывод их на экран
cout<<"Real roots of equalization \n"; cout<<a<<"x^2+"<<b<<"x+"<<c<<"=0 \n"; cout<<"X1="<<x1<<"\t X2="<<x2<<"\n";
}
return 0;
}
ЗАДАЧА 3.3. Составить программу для решения кубического уравнения ax3 + bx2 + cx + d =
0.
Кубическое уравнение имеет вид
ax3 + bx2 + cx + d = 0 |
(3.1) |
После деления на a уравнение (3.1) принимает канонический вид:
x3 + rx2 + sx +t = 0 |
(3.2) |
||||||||||||
b |
c |
d |
r |
||||||||||
где r = a , |
s |
= |
, t |
= a . |
В уравнении (3.2) |
сделаем замену |
x = y − |
и получим |
|||||
a |
3 |
||||||||||||
приведенное уравнение (3.3) |
|||||||||||||
y3 + py + q = 0 , |
(3.3) |
||||||||||||
где p = |
3s − r2 |
, |
2r3 |
rs |
. |
||||||||
3 |
q = 27 − 3 + t |
||||||||||||
Число |
действительных |
корней приведенного |
уравнения (3.3) зависит |
от знака |
|||||||||
3 |
2 |
||||||||||
дискриминанта D= p3 q2 |
(см. табл. 3.1). |
||||||||||
Таблица 3.1. Количество корней кубического уравнения |
|||||||||||
Дискриминант |
Количество |
Количество |
|||||||||
действительных корней |
комплексных корней |
||||||||||
D≥0 |
1 |
2 |
|||||||||
D<0 |
3 |
- |
|||||||||
Корни приведенного уравнения могут быть рассчитаны по формулам Кардано (3.4). |
|||||||||||
y1 = u + v |
|||||||||||
y2 |
= − u + v |
+ u − v i |
|||||||||
3 |
(3.4) |
||||||||||
2 |
2 |
||||||||||
y = − u + v |
− u − v i |
||||||||||
3 |
|||||||||||
3 |
2 |
2 |
|||||||||
где
u = 3− q2 + D ,v = 3− q2 − D .
При отрицательном дискриминанте уравнение (3.1) имеет три действительных корня, но они будут вычисляться через вспомогательные комплексные величины. Чтобы избавиться от этого, можно воспользоваться следующими формулами (3.5):
3 |
|||||||||||||||
y1=2 cos |
3 |
||||||||||||||
2 |
q |
||||||||||||||
3 |
3 |
||||||||||||||
y2=2 |
cos |
3 |
3 |
, где ρ = |
− p |
, cos(ϕ) = − |
. (3.5) |
||||||||
2ρ |
|||||||||||||||
27 |
|||||||||||||||
y4=2 |
3 |
4 |
|||||||||||||
cos |
3 |
3 |
|||||||||||||
Таким образом, при положительном дискриминанте кубического уравнения (3.3) расчет корней будем вести по формулам (3.4), а при отрицательном по формулам (3.5).После расчета корней приведенного уравнения (3.3) по формулам (3.4) или (3.5) необходимо по
формулам xk = yk − 3r , k=1,2,3 перейти к корням заданного кубического уравнения (3.1).
Блок-схема решения кубического уравнения представлена на рис. 3.12.
#include <iostream> #include <math.h> #define pi 3.14159 using namespace std; int main()
{
float a,b,c,d,D,r,s,t,p,q,ro,fi,x1,x2,x3,u,v,h,g; cout<<"a="; cin>>a;
cout<<"b="; cin>>b; cout<<"c="; cin>>c; cout<<"d="; cin>>d;
//Расчет коэффициентов канонического уравнения по формуле (3.2) r=b/a; s=c/a; t=d/a;
//Вычисление коэффициентов приведенного уравнения по формуле (3.3) p=(3*s-r*r)/3; q=2*r*r*r/27-r*s/3+t;
//Вычисление дискриминанта кубического уравнения; D=(p/3)*(p/3)*(p/3)+(q/2)*(q/2);
Начало 1
Ввод a, b, c, d
2 r=b/a s=c/a t=d/a
3
p = 3s − r2
3
q = 2r3 − rs + t
27 3
4 |
|||
ö3 |
|||
æ p |
|||
D = ç |
3 |
÷ |
|
è |
ø |
||
+æ q ö2 ç ÷ è 2 ø
Да |
5 |
D<0 |
|||||||
6 |
|||||||||
ρ = |
|||||||||
- p3 |
|||||||||
27 |
|||||||||
æ |
q ö |
||||||||
ϕ = arccos ç |
- |
÷ |
|||||||
è |
2ρ ø |
||||||||
7
x1 = 23 ρ cos(ϕ3) - r3
x2 = 23ρ cos(ϕ3 + 2π3) - r3
x3 = 23ρ cos(ϕ3 + 4π3) - r3
8
Вывод x1, x2, x3
Конец
Рисунок 3.4: Блок-схема решения задачи 3.3 if (D<0)
//Формулы (3.5)
{
ro=sqrt((float)(-p*p*p/27));
9
u= 3- q2 + D
v = 3- q2 - D x1 = u + v - r / 3
h = - u +2 v - 3r
g = u - v 3 2
10
Вывод x1, h+jg, h-jg