Cách giải phương trình bậc 2 thì chúng ta đã được học ở lớp dưới rồi phải không nào ? Vậy giải phương trình bậc 2 trong C/C++ thì sẽ như thế nào ? Hôm nay chúng ta sẽ cùng tìm hiểu.
Cách giải phương trình bậc 2
Phương trình bậc 2 là phương trình có dạng: ax² +bx + c = 0. (a≠0) (1)
Ở các lớp dưới ta đã có phương pháp giải bằng cách tính delta:
- Đầu tiên tính delta = b² – 4ac
- Nếu delta < 0 thì kết luận vô nghiệm
- Nếu delta = 0 thì có nghiệm kép
- Nếu delta > 0 thì sẽ có 2 nghiệm phân biệt
Ý tưởng
- Dùng một vòng
do while
để nhập a, b, c nếu a = 0, thì nhập lại. - Chúng ta dùng hàm
sqrt()
trong thư viện math.h để tính căn delta hoặc tính căn không dùng hàmsqrt()
tại đây. - Chúng ta tạo hàm
giaiPT
trả về kiểuint
chính là số nghiệm của phương trình (1). - Chúng ta sẽ đưa tham chiếu 2 biến x1 , x2 vào hàm
giaiPT
để gán giá trị hai nghiệm. - Nếu pt (1) vô nghiện thì
giaiPT
sẽ trả về 0 , đồng thời gán x1 = x2 =0 . - Nếu pt (1) có nghiệm kép thì
giaiPT
sẽ trả về 1 , đồng thời gán x1 = x2 = -b/2a . - Nếu pt (1) có 2 nghiệm thì
giaiPT
sẽ trả về 2 , gán x1 = (-b+√delta ) / 2a x = (-b-√delta ) / 2a .
Code C
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include
#include
int
giaiPT
(
float
a
,
float
b
,
float
c
,
float
&x1, float &x2){
float delta = b*b – 4*a*c;
if
(
delta
<
0
)
{
x1
=
x2
=
0.0
;
return
0
;
}
else
if
(
delta
==
0
)
{
x1
=
x2
=
–
b
/
(
2
*
a
)
;
return
1
;
}
else
{
delta
=
sqrt
(
delta
)
;
x1
=
(
–
b
+
delta
)
/
(
2
*
a
)
;
x2
=
(
–
b
–
delta
)
/
(
2
*
a
)
;
return
2
;
}
}
int
main
(
)
{
float
a
,
b
,
c
;
float
x1
,
x2
;
do
{
printf
(
“Nhap a (a!=0): “
)
;
scanf
(
“%f”
,
&a);
printf
(
“Nhap b: “
)
;
scanf
(
“%f”
,
&b);
printf
(
“Nhap c: “
)
;
scanf
(
“%f”
,
&c);
}
while
(
!
a
)
;
// Nếu a=0 thì nhập lại
int
numNo
=
giaiPT
(
a
,
b
,
c
,
x1
,
x2
)
;
if
(
numNo
==
0
)
{
printf
(
“Phuong trinh da cho vo nghiem”
)
;
}
else
if
(
numNo
==
1
)
{
printf
(
“Phuong trinh da cho co nghiem kep x=%.4f”
,
x1
)
;
}
else
{
printf
(
“Phuong trinh da cho co hai nghiem phan biet\nx1=%.4f \nx2=%.4f”
,
x1
,
x2
)
;
}
}
0
1
2
3
4
5
6
7
Nhap a (a!=0): 3
Nhap b: -5
Nhap c: 2
Phuong trinh da cho co hai nghiem phan biet
x1=1.0000
x2=0.6667
Code C++
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include
#include
using
namespace
std
;
int
giaiPT
(
float
a
,
float
b
,
float
c
,
float
&x1, float &x2){
float delta = b*b – 4*a*c;
if
(
delta
<
0
)
{
x1
=
x2
=
0.0
;
return
0
;
}
else
if
(
delta
==
0
)
{
x1
=
x2
=
–
b
/
(
2
*
a
)
;
return
1
;
}
else
{
delta
=
sqrt
(
delta
)
;
x1
=
(
–
b
+
delta
)
/
(
2
*
a
)
;
x2
=
(
–
b
–
delta
)
/
(
2
*
a
)
;
return
2
;
}
}
int
main
(
)
{
float
a
,
b
,
c
;
float
x1
,
x2
;
do
{
cout
<
<
“Nhap a (a!=0): “
;
cin
>
>
a
;
cout
<
<
“Nhap b: “
;
cin
>
>
b
;
cout
<
<
“Nhap c: “
;
cin
>
>
c
;
}
while
(
!
a
)
;
int
numNo
=
giaiPT
(
a
,
b
,
c
,
x1
,
x2
)
;
if
(
numNo
==
0
)
{
cout
<
<
“Phuong trinh da cho vo nghiem”
;
}
else
if
(
numNo
==
1
)
{
cout
<
<
“Phuong trinh da cho co nghiem kep x=%.4f”
<
<
x1
;
}
else
{
cout
<
<
“Phuong trinh da cho co hai nghiem phan biet”
<
<
endl
;
cout
<
<
“x1=”
<
<
x1
<
<
endl
;
cout
<
<
“x2=”
<
<
x2
<
<
endl
;
}
}
0
1
2
3
4
5
6
7
Nhap a (a!=0): 3
Nhap b: -5
Nhap c: 2
Phuong trinh da cho co hai nghiem phan biet
x1=1
x2=0.666667
Bài học của mình đến đây là kết thúc.
C – Bài tập 1.9: Giải biện luận phương trình bậc 2
Phiên bản web: https://braniumacademy.net/2020/08/21/giaivabienluanphuongtrinhbac2/
=============================================================================
Hướng dẫn giải biện luận phương trình bậc hai trong ngôn ngữ lập trình C. Học lập trình C cơ bản và nâng cao trên kênh thân triệu. thân triệu channellet’s grow together!
Trả lời