IV.2.
Cấu trúc rẽ nhánh
Chúng ta hãy xem lại chương trình trong ví dụ 2 trên, điều gì xảy ra nếu dữ liệu
không thoả mãn, tức là khi bạn nhập 3 số a,b,c từ bàn phím nhưng chúng không thoả mãn
là số đo 3 cạnh một tam giác trong khi chương trình của chúng ta vẫn cứ tính và in diện
tích.
Gi¸o tr×nh tin häc c¬ së II - N
gôn ngữ
C
43
Rõ ràng là có hai khả năng:
− Nếu a,b,c thoả mãn là 3 cạnh tam giác thì tính chu vi, diện tích và in kết quả
− Ngược lại phải thông báo dữ liệu không phù hợp
Như vậy cần phải có một sự lựa một trong hai nhánh tuỳ vào điều kiện a,b,c có là ba
cạnh một tam giác hay không. Điều này gọi là rẽ nhánh, và C cung cấp cho chúng ta một
cấu trúc điều khiển rẽ nhánh if.
¾
Cú pháp
dạng đủ
if (bt_E)
S1;
else
S2;
hoặc dạng khuyết
if (bt_E)
S1;
Trong cú pháp trên S1, S2 chỉ là 1 lệnh, là biểu thức điều kiện của if
Sự hoạt động của cấu trúc if:
Trước hết biểu thức điều kiện được tính, có hai khả năng:
→ Nếu giá trị của là ‘đúng’ (!=0) thì S1 được thực hiện và ra khỏi cấu trúc if.
→ Ngược lại nếu là ‘sai’ thì
- với dạng đầy đủ : thực hiện S2 rồi kết thúc if
- với dạng khuyết : kết thúc cấu trúc if
Gi¸o tr×nh tin häc c¬ së II - N
gôn ngữ
C
44
Ví dụ 2.1: chương trình nhập hai số nguyên a, b từ bàn phím, in số lớn nhất ra màn hình.
#include
#include
void main() {
int a,b;
printf(“\nNhap so thu nhat : “);
scanf(“%d”, &a);
printf(“\nNhap so thu hai : “);
scanf(“%d”, &b);
if (a>b)
printf(‘\nSo lon nhat la %d”, a);
else
printf(‘\nSo lon nhat la %d”, b);
getch();
}
Ví dụ 2.2: Viết chương trình theo ví dụ 1.2 với yêu cầu nếu a,b,c thỏa mãn là 3 cạnh một
tam giác thì tính và in chu vi, diện tích, nếu không thoả mãn thì in thông báo ra màn hình.
Giải: Chúng ta biết 3 số a, b, c là 3 cạnh một tam giác nếu nó thoả mãn tính chất tổng hai
cạnh lớn hơn cạnh thứ ba. Theo cách tính từ ví dụ 1.2 chúng ta có chương trình:
#include
#include
#include
void main()
{ float a,b,c, p,q,s;
printf("Nhap so do 3 canh cua tam giac ");
printf("\na = "); scanf("%f", &a);
printf("\nb = "); scanf("%f", &b);
printf("\nc = "); scanf("%f", &c);
if(a+b>c)&&(a+c>b)&&(b+c>a)
{
p = a+b+c; q = p/2;
s = sqrt(q*(q-a)*(q-b)*(q-c));
printf(" \n\nChu vi la %5.1f,\
dien tich la %5.2f ",p,s);
}
else
printf(“\nBa so da cho la ba canh tam giac”);
getch();}
Gi¸o tr×nh tin häc c¬ së II - N
gôn ngữ
C
45
Lưu ý: Cấu trúc if cũng như các cấu trúc khác của ngôn ngữ C, chúng có thể lồng nhau,
tức là chúng có thể chứa các cấu trúc điều khiển khác.
Ví dụ 2.3: Chương trình giải phương trình bậc 2: ax
2
+ bx + c = 0, với các hệ số a, b, c là
các số thực nhập từ bàn phím.
Giải: Để tìm nghiệm của phương trình bậc 2 một ẩn ta thực hiện theo các bước sau:
Nhập a,b,c từ bàn phím
Tính delta = b
2
+ 4*a*c
Nếu delta = 0 (phương trình có nghiệm kép x)
à
tính nghiệm x = -b/(2*a).
Ngược lại
à
Nếu delta > 0 (phương trình có 2 nghiệm x1,x2 )
− x1 = (-b - sqrt(delta))/(2*a)
− x1 = (-b + sqrt(delta))/(2*a)
à
Ngược lại (delta < 0)
− phương trình không có thực
Chương trình giải phương trình bậc 2
#include
#include
#include
void main(){
float a,b,c, delta, x1,x2;
printf("\nNhap cac he so a,b,c : ");
scanf("%f%f%f",&a,&b,&c);
delta = b*b-4*a*c;
if(delta==0)
printf("\nPhuong trinh co nghiem kep \
x = %5.2f", -b/(2*a));
else
if(delta > 0)
{ x1 =(-b-sqrt(delta))/(2*a);
x2 =(-b+sqrt(delta))/(2*a);
printf("\nPhuong trinh cos 2 nghiem phan biet\
\n x1= %5.2f \n x2= %5.2f",x1,x2);
Gi¸o tr×nh tin häc c¬ së II - N
gôn ngữ
C
46
}
else
printf("\nPhuong trinh khong co nghiem thuc");
}
Chia sẻ với bạn bè của bạn: |