25/05/2018, 09:24

Cấu trúc rẽ nhánh trong lập trình C

Cấu trúc rẽ nhánh là một cấu trúc được dùng rất phổ biến trong các ngôn ngữ lập trình nói chung. Trong C, có hai dạng: dạng không đầy đủ và dạng đầy đủ. Cú pháp : if (< Biểu thức điều kiện >) ...

Cấu trúc rẽ nhánh là một cấu trúc được dùng rất phổ biến trong các ngôn ngữ lập trình nói chung. Trong C, có hai dạng: dạng không đầy đủ và dạng đầy đủ.

Cú pháp:

if (< Biểu thức điều kiện >)

<Công việc>

Lưu đồ cú pháp:

Giải thích:

<Công việc> được thể hiện bằng 1 câu lệnh hay 1 khối lệnh.

Kiểm tra Biểu thức điều kiện trước.

Nếu điều kiện đúng (!= 0) thì thực hiện câu lệnh hoặc khối lệnh liền sau điều kiện.

Nếu điều kiện sai thì bỏ qua lệnh hoặc khối lệnh liền sau điều kiện (những lệnh và khối lệnh sau đó vẫn được thực hiện bình thường vì nó không phụ thuộc vào điều kiện sau if).

Ví dụ 1:

Yêu cầu người thực hiện chương trình nhập vào một số thực a. In ra màn hình kết quả nghịch đảo của a khi a size 12{ <> } {}0.

#include <stdio.h>

#include <conio.h>

int main ()

{

float a;

printf("Nhap a = "); scanf("%f",&a);

if (a !=0 )

printf("Nghich dao cua %f la %f",a,1/a);

getch();

return 0;

}

Giải thích:

- Nếu chúng ta nhập vào a size 12{ <> } {}0 thì câu lệnh printf("Nghich dao cua %f la %f",a,1/a)được thực hiện, ngược lại câu lệnh này không được thực hiện.

- Lệnh getch() luôn luôn được thực hiện vì nó không phải là “lệnh liền sau” điều kiện if.

Ví dụ 2: Yêu cầu người chạy chương trình nhập vào giá trị của 2 số a và b, nếu a lớn hơn b thì in ra thông báo “Gia trị của a lớn hơn giá trị của b”, sau đó hiển thị giá trị cụ thể của 2 số lên màn hình.

#include <stdio.h>

#include<conio.h>

int main ()

{

int a,b;

printf("Nhap vao gia tri cua 2 so a, b!");

scanf("%d%d",&a,&b);

if (a>b)

{

printf(" Gia tri cua a lon hon gia tri cua b");

printf(" a=%d, b=%d",a,b);

}

getch();

return 0;

}

Giải thích:

Nếu chúng ta nhập vào giá trị của a lớn hơn giá trị của b thì khối lệnh:

{

printf(" Gia tri cua a lon hon gia tri cua b");

printf(" a=%d, b=%d",a,b);

}

sẽ được thực hiện, ngược lại khối lệnh này không được thực hiện.

Cú pháp:

if (< Biểu thức điều kiện >)

<Công việc 1>

else

<Công việc 2>

Lưu đồ cú pháp:

Giải thích:

Công việc 1, công việc 2 được thể hiện là 1 câu lệnh hay 1 khối lệnh.

Đầu tiên Biểu thức điều kiện được kiểm tra trước.

Nếu điều kiện đúng thì thực hiện công việc 1.

Nếu điều kiện sai thì thực hiện công việc 2.

Các lệnh phía sau công việc 2 không phụ thuộc vào điều kiện.

Ví dụ 1: Yêu cầu người thực hiện chương trình nhập vào một số thực a. In ra màn hình kết quả nghịch đảo của a khi a size 12{ <> } {}0, khi a =0 in ra thông báo “Khong the tim duoc nghich dao cua a”

#include <stdio.h>

#include <conio.h>

int main ()

{

float a;

printf("Nhap a = "); scanf("%f",&a);

if (a !=0 )

printf("Nghich dao cua %f la %f",a,1/a);

else

printf(“Khong the tim duoc nghich dao cua a”);

getch();

return 0;

}

Giải thích:

- Nếu chúng ta nhập vào a size 12{ <> } {}0 thì câu lệnh printf("Nghich dao cua %f la %f",a,1/a)được thực hiện, ngược lại câu lệnh printf(“Khong the tim duoc nghich dao cua a”) được thực hiện.

- Lệnh getch() luôn luôn được thực hiện.

Ví dụ 2: Yêu cầu người chạy chương trình nhập vào giá trị của 2 số a và b, nếu a lớn hơn b thì in ra thông báo “Gia trị của a lớn hơn giá trị của b, giá trị của 2 số”, ngược lại thì in ra màn hình câu thông báo “Giá trị của a nhỏ hơn hoặc bằng giá trị của b, giá trị của 2 số”.

#include <stdio.h>

#include<conio.h>

int main ()

{

int a, b;

printf("Nhap vao gia tri cua 2 so a va b !");

scanf("%d%d",&a,&b);

if (a>b)

{

printf(" a lon hon b”);

printf(" a=%d b=%d ",a,b);

}

else

{

printf(" a nho hon hoac bang b");

printf(" a=%d b=%d",a,b);

}

printf(" Thuc hien xong lenh if");

getch();

return 0;

}

Giải thích:

- Nếu chúng ta nhập vào 40 30  thì kết quả hiển ra trên màn hình là

a lon hon b

a=40 b=30

Thuc hien xong lenh if

- Còn nếu chúng ta nhập 40 50  thì kết quả hiển ra trên màn hình là

a nho hon hoac bang b

a=40 b=50

Thuc hien xong lenh if

Ví dụ 3: Yêu cầu người thực hiện chương trình nhập vào một số nguyên dương là tháng trong năm và in ra số ngày của tháng đó.

- Tháng có 31 ngày: 1, 3, 5, 7, 8, 10, 12

- Tháng có 30 ngày: 4, 6, 9, 10

- Tháng có 28 hoặc 29 ngày : 2

#include <stdio.h>

#include<conio.h>

int main ()

{

int thg;

printf("Nhap vao thang trong nam !");

scanf("%d",&thg);

if (thg==1||thg==3||thg==5||thg==7||thg==8||thg==10||thg==12)

printf(" Thang %d co 31 ngay ",thg);

else if (thg==4||thg==6||thg==9||thg==11)

printf(" Thang %d co 30 ngay",thg);

else if (thg==2)

printf(" Thang %d co 28 hoac 29 ngay",thg);

else printf("Khong co thang %d",thg);

printf(" Thuc hien xong lenh if");

getch();

return 0;

}

Giải thích:

- Nếu chúng ta nhập vào một trong các số 1, 3, 5, 7, 8, 10, 12 thì kết quả xuất hiện trên màn hình sẽ là

Thang <số> co 31 ngay

Thuc hien xong lenh if

- Nếu chúng ta nhập vào một trong các số 4, 6, 9, 11 thì kết quả xuất hiện trên màn hình sẽ là

Thang <số> co 30 ngay

Thuc hien xong lenh if

- Nếu chúng ta nhập vào số 2 thì kết quả xuất hiện trên màn hình sẽ là

Thang 2 co 28 hoac 29 ngay

Thuc hien xong lenh if

- Nếu chúng ta nhập vào số nhỏ hơn 0 hoặc lớn hơn 12 thì kết quả xuất hiện trên màn hình sẽ là

Khong co thang <số>

Thuc hien xong lenh if

Trong đó <số> là con số mà chúng ta đã nhập vào.

Lưu ý:

- Ta có thể sử dụng các câu lệnh if…else lồng nhau. Trong trường hợp if…else lồng nhau thì else sẽ kết hợp với if gần nhất chưa có else.

- Trong trường hợp câu lệnh if “bên trong” không có else thì phải viết nó trong cặp dấu {} (coi như là khối lệnh) để tránh sự kết hợp else if sai.

Ví dụ 1:

if ( so1>0)

if (so2 > so3)

a=so2;

else /*else của if (so2>so3) */

a=so3;

Ví dụ 2:

if (so1>0)

{

if (so2>so3) /*lệnh if này không có else*/

a=so2;

}

else /*else của if (so1>0)*/

a=so3;

0