Lập trình C Aptech - Bài 7: Điều kiện
Mục tiêu:
Kết thúc bài học này, bạn có thể:
Giải thích về Cấu trúc lựa chọn
Câu lệnh if
Câu lệnh if – else
Câu lệnh với nhiều lệnh if
Câu lệnh if lồng nhau
Câu lệnh switch
2; 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: Ví dụ về kết quả thực thi chương trình : 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. 7.2.5 Câu lệnh ‘switch’: Câu lệnh switch cho phép ta đưa ra quyết định có nhiều cách lựa chọn, nó kiểm tra giá trị của một biểu thức trên một danh sách các hằng số nguyên hoặc kí tự. Khi nó tìm thấy một giá trị trong danh sách trùng với giá trị của biểu thức điều kiện, các câu lệnh gắn với giá trị đó sẽ được thực hiện. Cú pháp tổng quát của lệnh switch như sau: Lệnh switch kiểm tra giá trị của một biểu thức dựa vào một danh sách các hằng số nguyên (integer) hoặc ký tự (character). Khi một sự so sánh khớp được tìm thấy, các câu lệnh kết hợp với hằng này sẽ được thực thi. Cú pháp tổng quát của lệnh switch như sau: switch (biểu_thức) { case hằng_1: chuỗi_câu_lệnh; break; case hằng_2: chuỗi_câu_lệnh; break; case hằng_3: chuỗi_câu_lệnh; break; default: chuỗi_câu_lệnh; } Ở đó, switch, case và default là các từ khoá, chuỗi_câu_lệnh có thể là lệnh đơn hoặc lệnh ghép và không cần đặt trong cặp dấu ngoặc. Biểu_thức theo sau từ khóa switch phải được đặt trong dấu ngoặc ( ), và toàn bộ phần thân của lệnh switch phải được đặt trong cặp ngoặc xoắn nhọn { }. Kiểu dữ liệu kết quả của biểu_thức và kiểu dữ liệu của các hằng theo sau từ khoá case phải đồng nhất. Chú ý, hằng số sau nhãn case (hằng theo sau case) chỉ có thể là một hằng số nguyên hoặc hằng ký tự. Nó cũng có thể là các hằng biểu thức – nghĩa là những biểu thức không chứa bất kỳ một tên biến nào. Tất cả các nhãn giá trị của case phải khác nhau. Trong câu lệnh switch, biểu thức được xác định giá trị, giá trị của nó được so sánh với từng giá trị gắn với từng case theo thứ tự đã chỉ ra. Nếu một giá trị trong một case trùng với giá trị của biểu thức, các lệnh gắn với case đó sẽ được thực hiện. Lệnh break (sẽ nói ở phần sau) cho phép thoát ra khỏi switch. Nếu không dùng lệnh break, các câu lệnh gắn với case bên dưới sẽ được thực hiện không kể giá trị của nó có trùng với giá trị của biểu thức điều kiện hay không. Chương trình cứ tiếp tục thực hiện như vậy cho đến khi gặp một lệnh break. Chính vì thế, lệnh break được coi là lệnh quan trọng nhất khi dùng switch. Trong lệnh switch, biểu_thức được định giá trị, và giá trị đó được so sánh với các nhãn case theo thứ tự đã đưa ra. Nếu một nhãn so khớp với giá trị của biểu thức, các lệnh kết hợp với nhãn case đó sẽ được thực thi. Lệnh break (được thảo luận ở phần sau) chỉ định thoát ngay khỏi lệnh switch. Nếu lệnh break không được dùng, các câu lệnh trong các nhãn case theo sau cũng được thực thi bất chấp giá trị case đó có thoả hay không. Sự thực thi sẽ tiếp tục cho đến khi gặp một lệnh break. Vì vậy, break được xem là một lệnh quan trọng khi sử dụng lệnh switch. Các câu lệnh gắn với default sẽ được thực hiện nếu không có case nào thỏa mãn. Lệnh default là tùy chọn. Nếu không có lệnh default và không có case nào thỏa mãn, không có hành động nào được thực hiện. Có thể thay đổi thứ tự của case và default. Các câu lệnh được kết hợp với từ khoá default sẽ được thực thi, nếu không có một nhãn case nào thoả. Lệnh default là một tuỳ chọn (không bắt buộc). Nếu không có lệnh default, và giá trị của biểu thức không so khớp với bất kỳ giá trị nhãn case nào, thì không hành động nào được thực hiện. Thứ tự của các nhãn case và default có thể thay đổi. Xét một ví dụ. Ví dụ 7.10: #include main () { char ch; clrscr (); printf(“\nEnter a lower cased alphabet (a - z): ”); scanf(“%c”, &ch); if (ch ‘z’) printf(“\nCharacter not a lower cased alphabet”); else switch (ch) { case ‘a’: case ‘e’: case ‘i’: case ‘o’: case ‘u’: printf(“\nCharacter is a vowel”); break; case ‘z’: printf (“\nLast Alphabet (z) was entered”); break; default: printf(“\nCharacter is a consonant”); break; } } Chương trình trên nhận vào một kí tự ở dạng chữ thường và hiển thị thông báo kí tự đó là nguyên âm, là chữ z hay là một phụ âm. Nếu nó không phải ba loại ở trên, chương trình hiển thị thông báo “Character not a lower cased alphabet”. Chương trình sẽ nhận một ký tự thường từ bàn phím và hiển thị nó như là một nguyên âm, hoặc là ký tự cuối cùng, hoặc là một ký tự bất kỳ khác. Nếu bất kỳ một phím nào khác, không phải là một ký tự thường được nhập vào, thông báo “Character not a lower cased alphabet” được hiển thị. Nên sử dụng lệnh break trong cả case cuối cùng hoặc default mặc dù về mặt logic là không cần thiết. Nhưng điều đó rất có ích nếu sau này chúng ta đưa thêm case vào cuối. Nên sử dụng từ khoá break, thậm chí sau case cuối cùng hoặc default tuy rằng điều này không cần thiết. Điều này hữu ích khi một case mới được thêm vào cuối. Dưới đây là một ví dụ, ở đó biểu thức của switch là một biến kiểu số nguyên và giá trị của mỗi nhãn case là một số nguyên. Ví dụ 7.11: /* Integer constants as case labels */ #include void main() { int basic; printf(“\n Please enter your basic: ”); scanf(“%d”, &basic); switch (basic) { case 200: printf(“\n Bonus is dollar %d\n”, 50); break; case 300: printf(“\n Bonus is dollar %d\n”, 125); break; case 400: printf(“\n Bonus is dollar %d\n”, 140); break; case 500: printf(“\n Bonus is dollar %d\n”, 175); break; default: printf(“\n Invalid entry”); break; } } Từ ví dụ trên, lệnh switch rất thuận lợi khi chúng ta muốn kiểm tra một biểu thức dựa trên một danh sách giá trị riêng biệt. Nhưng nó không thể dùng để kiểm tra một giá trị có nằm trong một miền nào đó hay không. Ví dụ, không thể dùng switch để kiểm tra xem basic có nằm trong khoảng từ 200 đến 300 hay không, để từ đó xác định mức tiền thưởng. Trong những trường hợp như vậy, ta phải sử dụng if-else. Từ ví dụ trên, rõ ràng là lệnh switch hữu dụng nếu biểu thức so khớp với một trong các nhãn case. Nhưng nó không thể được sử dụng để kiểm tra một giá trị thuộc một miền xác định hay không. Ví dụ, không thể kiểm tra nếu giá trị của basic nằm trong khoảng 200 và 300 để xác định tiền thưởng (bonus). Trong những trường hợp như vậy, chúng ta phải sử dụng chuỗi lệnh if-else. Tóm tắt bài học Các lệnh điều kiện cho phép chúng ta thay đổi hướng thực thiluồng thực hiện của chương trình. C hỗ trợ hai dạng câu lệnh lựa chọn : if và switch. Sau đây là một vài câu lệnh điều kiện: Lệnh if – khi một điều kiện được kiểm tra; nếu kết quả là true, các câu lệnh theo sau nó sẽ được thực thi và sau đó thực hiện lệnh tiếp theo trong chương trình chính. Ngược lại, nếu kết quả là false, sẽ thực hiện ngay lệnh tiếp theo trong chương trình chính. Lệnh if … else – khi một điều kiện được kiểm tra; nếu kết quả là true, các câu lệnh theo sau if được thực thi. Nếu kết quả là false, thì các lệnh theo sau else được thực thi. Các lệnh if lồng nhau là lệnh if bên trong một lệnh if khác. Lệnh switch là một lệnh đặc biệt cho phép chọn nhiều hướng thi hành. Lệnh này kiểm tra một biểu thức có khớp với một trong số các giá trị hằng xác định và rẽ nhánh chương trình một các phù hợpLệnh switch cho phép đưa ra quyết định có nhiều lựa chọn, nó kiểm tra giá trị của biểu thức điều kiện trong một danh sách các hằng. Nếu có, chương trình chuyển đến phần đó để thực hiện.. Kiểm tra tiến độ học tập Các lệnh ………… cho phép chúng ta thay đổi hướng luồng thực hiện của chương trình. A. Điều kiện B. Vòng lặp C. Tuần tự D. Tất cả đều sai Lệnh else là một tuỳ chọn. (Đúng / Sai) ………… là lệnh if được đặt bên trong một lệnh if hoặc else. A. Nhiều lệnh if B. Lệnh if lồng nhau C. Lệnh if đảo D. Tất cả đều sai Lệnh …………là một lệnh cho phép chọn nhiều hướng thi hành. Lệnh này kiểm tra giá trị của một biểu thức dựa vào một danh sách các hằng số nguyên hoặc hằng ký tự. A. Tuần tự B. if C. switch D. Tất cả đều sai if (biểu_thức) câu_lệnh1; else câu_lệnh2; Câu lệnh nào sẽ được thực thi khi giá trị của biểu_thức là false? A. câu_lệnh1 B. câu_lệnh2 Bài tập tự làm Viết chương trình nhập vào hai số a và b, và kiểm tra xem a có chia hết cho b hay không. Viết chương trình nhập vào hai số và kiểm tra xem tích của hai số này bằng hay lớn hơn 1000. Viết chương trình nhập vào hai số. Tính hiệu của hai số này. Nếu hiệu số này bằng với một trong hai số đã nhập thì hiển thị thông tin: Hiệu bằng giá tri Nếu hiệu không bằng với một trong hai giá trị đã nhập, hiển thị thông tin: Hiệu không bằng bất kỳ giá trị nào đã được nhập Công ty Montek đưa ra các mức trợ cấp cho nhân viên ứng với từng loại nhân viên như sau: Loại nhân viên Mức trợ cấp A 300 B 250 Những loại khác 100 Tính lương cuối tháng của nhân viên (Mức lương và loại nhân viên được nhập từ người dùng). Viết chương trình xếp loại sinh viên theo các qui luật dưới đây: Nếu điểm => 75 - Loại A Nếu 60 <= điểm < 75 - Loại B Nếu 45 <= điểm < 60 - Loại C Nếu 35 <= điểm < 45 - Loại D Nếu điểm < 35 - Loại E
File đính kèm:
- Lập trình C Aptech - Bài 7 Điều kiện.doc