Файл: Лекция №3 Операторы управления С++.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 08.05.2025

Просмотров: 28

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
...
}
if (условие)
{
оператор_1; оператор_2;
...
}
else
{
оператор_1; оператор_2;

Лекция 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. Количество корней кубического уравнения

 

Дискриминант

 

 

Количество

Количество

 

 

 

 

 

действительных корней

комплексных корней

 

 

 

 

 

 

 

 

 

 

 

 

 

 

D0

 

 

 

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 = 3q2 + D ,v = 3q2 D .

При отрицательном дискриминанте уравнение (3.1) имеет три действительных корня, но они будут вычисляться через вспомогательные комплексные величины. Чтобы избавиться от этого, можно воспользоваться следующими формулами (3.5):

 

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y1=2 cos

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

q

 

 

3

 

 

 

 

 

 

 

 

 

3

 

 

 

 

 

 

 

 

 

 

 

 

 

y2=2

cos

3

 

 

3

, где ρ =

p

 

, cos(ϕ) = −

 

. (3.5)

 

 

 

 

 

 

 

 

 

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