Bài đăng nổi bật


Câu lệnh if cho phép ta lựa chọn thực hiện một hành động nào đó hay không. Câu lệnh if – else cho phép ta lựa chọn thực hiện giữa hai hành động. C cho phép ta có thể đưa ra nhiều lựa chọn hơn. Chúng ta mở rộng cấu trúc if – else bằng cách thêm vào cấu trúc else – if để thực hiện điều đó. Nghĩa là mệnh đề else trong một câu lệnh if – else lại chứa một câu lệnh if – else khác. Do đó nhiều điều kiện hơn được kiểm tra và tạo ra nhiều lựa chọn hơn.
Cú pháp tổng quát trong trường hợp này như sau:
if (biểu thức) câu_lệnh;
else
         if (biểu thức) câu_lệnh;
         ……
         else câu_lệnh;
Cấu trúc này gọi là if–else–if ladder hay if-else-if staircase.
Cách canh lề (lùi vào trong) như trên giúp ta nhìn chương trình một cách dễ dàng khi có một hoặc hai lệnh if. Tuy nhiên khi có nhiều lệnh if hơn cách viết đó dễ gây ra nhầm lẫn vì nhiều câu lệnh sẽ phải lùi vào quá sâu. Vì vậy, lệnh if-else-if thường được canh lề theo dạng:
                   if (biểu thức)
                            câu_lệnh;
                   else if (biểu thức)
                            câu_lệnh;
                   else if (biểu thức)
                            câu_lệnh;
                   ……….
                   else
                            câu_lệnh;
Các điều kiện được kiểm tra từ trên xuống dưới. Khi có một điều kiện nào đó là true, các câu lệnh gắn với nó sẽ được thực hiện và các lệnh còn lại sẽ được bỏ qua. Nếu không có điều kiện nào là true, các câu lệnh gắn với else cuối cùng sẽ được thực hiện. Nếu mệnh đề else đó không tồn tại, sẽ không có lệnh nào được thực hiện do tất cả các điều kiện đều false.

Ví dụ dưới đây nhận một số từ người dùng. Nếu số đó có giá trị từ 1 đến 3, chương trình sẽ in ra số đó, ngược lại chương trình in ra thông báo “Invalid choice”.
Ví dụ:
#include <stdio.h>
int main() {
int x;
         x = 0;
         clrscr();

         printf(“Enter Choice (1 - 3): “);
         scanf(“%d”, &x);

         if (x == 1)
                   printf(“\nChoice is 1”);
         else if ( x == 2)
                   printf(“\nChoice is 2”);
         else if ( x == 3)
                   printf(“\nChoice is 3”);
         else
                   printf(“\nInvalid Choice: Invalid Choice”);
}
Trong chương trình trên,
Nếu x = 1, hiển thị dòng chữ “Choice is 1”.
Nếu x = 2, hiển thị dòng chữ  Choice is 2”.
Nếu x = 3, hiển thị dòng chữ “Choice is 3” được hiển thị.
Nếu x là bất kỳ một số nào khác 1, 2, hoặc 3, “Invalid Choice” được hiển thị.
Nếu chúng ta muốn thực hiện nhiều hơn một lệnh sau mỗi câu lệnh if hay else, ta phải đặt các câu lệnh đó vào trong cặp dấu ngoặc nhọn {}. Các câu lệnh đó tạo thành một nhóm gọi là lệnh phức hay một khối lệnh.
if (result >= 45) {
         printf("Passed\n");
printf("Congratulations\n");
} else {
printf("Failed\n");
printf("Good luck next time\n");

}
Các cấu trúc  if lồng nhau
Một cấu trúc if lồng nhau là một lệnh if được đặt bên trong một lệnh if hoặc else khác. Trong C, lệnh else luôn gắn với lệnh if không có else gần nó nhất, và nằm trong cùng một khối lệnh với nó. Ví dụ:
         if (biểu thức–1)
         {
                   if (biểu thức–2)
                            câu_lệnh1;
                   if (biểu thức–3)
                            câu_lệnh2;
                   else
                            câu_lệnh3;                 /* với if (biểu thức–3) */
         }
         else
                   câu_lệnh4;                 /* với if (biểu thức–1) */
Trong đoạn lệnh minh họa ở trên, nếu giá trị của biểu thức-1 là true thì lệnh if thứ hai sẽ được kiểm tra. Nếu biểu thức-2 là true thì lệnh câu_lệnh1 sẽ được thực hiện. Nếu biểu thứu-3 là true, câu_lệnh2 sẽ được thực hiện nếu không câu_lệnh3 được thực hiện. Nếu biểu thức-1 là false thì câu_lệnh4 được thực hiện.
Vì lệnh else trong cấu trúc else-if là không bắt buộc, nên có thể có một cấu trúc khác như dạng dưới đây:
         if (điều kiện-1)
                   if (điều kiện-2)
                            câu_lệnh1;
                   else
                            câu_lệnh2;
         câu lệnh kế tiếp;
Trong đoạn mã trên, nếu điều kiện-1 là true, chương trình sẽ chuyển đến thực hiện lệnh if thứ hai và điều kiện-2 được kiểm tra. Nếu điều kiện đó là true, câu_lệnh1 được thực hiện, nếu không câu_lệnh2 được thực hiện, sau đó chương trình thực hiện những lệnh trong câu lệnh kế tiếp. Nếu điều kiện-1 là false, chương trình sẽ chuyển đến thực hiện những lệnh trong câu lệnh kế tiếp.

Ví dụ, marks1 và marks2 là điểm hai môn học của một sinh viên. Điểm marks2 sẽ được cộng thêm 5 điểm nếu nó nhỏ hơn 50 và marks1 lớn hơn 50. Nếu marks2 lớn hơn hoặc bằng 50 thì sinh viên đạt loại ‘A’. Điều này có thể được biểu diễn bởi đoạn if có cấu trúc như sau:
         if (marks1 > 50 && marks2 < 50)
                   marks2 = marks2 + 5;
         if (marks2 >= 50)
                   grade = ‘A’;
Một số người đưa ra đoạn code như sau:
         if (marks1 > 50)
                   if (marks2 < 50)
                            marks2 = marks2 + 5;
                   else
                            grade = ‘A’;
Trong đoạn lệnh này, ‘A’ được gán cho biến grace chỉ khi marks1 lớn hơn 50 và marks2 lớn hơn hoặc bằng 50. Nhưng theo như yêu cầu của bài toán, bíến grace được gán giá trị ‘A’ sau khi thưc hiện việc kiểm tra để cộng điểm và kiểm tra giá trị của marks2. Hơn nữa, giá trị của biến grace không phụ thuộc vào marks1.
Ví dụ:
#include <stdio.h>
void main() {
         int x, y;
         x = y = 0;
         clrscr();
         printf(“Enter Choice (1 - 3): ” );
         scanf(“%d”, &x);
         if(x == 1) {
                   printf(“\nEnter value for y (1 - 5): ”);
                   scanf (“%d”, &y);
                   if (y <= 5)
                            printf(“\nThe value for y is: %d”, y);
                   else
                            printf(“\nThe value of y exceeds 5”);
         } else
                   printf (“\nChoice entered was not 1”);
}
Trong chương trình trên, nếu giá trị của x được nhập là 1, người dùng được yêu cầu nhập tiếp giá trị của y. Ngược lại, dòng chữ “Choice entered was not 1” được hiển thị. Lệnh if đầu tiên có lồng một if  trong đó để hiển thị giá trị của y nếu người dùng nhập vào một giá trị nhỏ hơn 5 cho y, hoặc ngược lại sẽ hiển thị dòng chữ “The value of y exceeds 5”.
Ví dụ: Minh hoa if lồng nhau
Một công ty sản xuất 3 loại sản phẩm có tên gọi: văn phòng phẩm cho máy tính (computer stationery), đĩa cứng (fixed disks) và máy tính (computer).
Sản phẩm                                             
Computer Stationery                            1
Fixed Disks                                            2
Computers                                             3
Công ty có chính sách giảm giá như sau:
Sản phẩm                                     Giá trị đặt hàng                           Tỷ lệ giảm giá
Computer Stationery                   $500/- hoặc hơn                                   12%
Computer Stationery                   $300/- hoặc hơn                                   8%
Computer Stationery                   dưới $300/-                                   2%
Fixed Disks                                   $2000/- hoặc hơn                        10%
Fixed Disks                                   $1500/- hoặc hơn                        5%
Computers                                    $5000/- hoặc hơn                        10%
Computer                             $2500/- hoặc hơn                        5%
Dưới đây là chương trình tính giảm giá.
#include <stdio.h>
void main() {
         int productcode;
         float orderamount, rate = 0.0;
         printf(“\nPlease enter the product code: ” );
        
         scanf(“%d”, &productcode);
         printf(“Please enter the order amount: ”);
         scanf(“%f”, &orderamount);

         if (productcode == 1) {
                   if (orderamount >= 500)  rate = 0.12;
else if (orderamount >= 300)  rate = 0.08;
else  rate = 0.02;
} else if (productcode == 2) {
                   if (orderamount >= 2000) rate = 0.10;
else if (orderamount >= 1500) rate = 0.05;
         } else if (productcode == 3) {
                   if (orderamount >= 5000) rate = 0.10;
else if (orderamount >= 2500) rate = 0.05;
         }                                            
                  
         orderamount -= orderamount * rate;
         printf( “The net order amount is % .2f \n”, orderamount);
}
Kết quả của chương trình được minh hoạ như sau:
         Please enter the product code: 3
         Please enter the order amount: 6000
         The net order amount is 5400
Ở trên, else sau cùng trong chuỗi các else-if không cần kiểm tra bất kỳ điều kiện nào. Ví dụ, nếu mã sản phẩm được nhập vào là 1 và giá trị đặt hàng nhỏ hơn $300, thì không cần phải kiểm tra điều kiện, vì tất cả các khả năng đã được kiểm soát.
Kết quả thực thi chương trình với mã sản phẩm là 3 và giá trị đặt hàng là $6000 được trình bày ở trên.
Sửa đổi chương trình trên để chú ý đến trường hợp dữ liệu nhập là một mã sản phẩm không hợp lệ. Điều này có thể dễ dàng đạt được bằng cách thêm một lệnh else vào chuỗi lệnh if dùng kiểm tra mã sản phẩm. Nếu gặp một mã sản phẩm không hợp lệ, chương trình phải kết thúc mà không cần tính giá trị thực của đơn đặt hàng.

Post a Comment

أحدث أقدم