Điều kiện trong C – các cấu trúc điều kiện if/else, switch case
- 07-01-2023
- Toanngo92
- 0 Comments
Các yếu tố lập trình được thảo luận cho đến bây giờ đã giúp viết hầu hết các chương trình.
Tuy nhiên, một vấn đề lớn gắn liền với các chương trình này là khi được thực thi, chúng luôn thực hiện cùng một chuỗi hành động, theo cùng một cách, chính xác một lần. Trong khi lập trình, chúng ta chỉ cần thực hiện một hành động nhất định nếu một số tiêu chí nhất định được đáp ứng (lựa chọn) một cách thường xuyên.
Mục lục
Khái niệm câu lệnh điều kiện
Câu lệnh điều kiện/lựa chọn cho phép chúng ta thay đổi luồng chạy của chương trình. Dựa trên một điều kiện, một câu lệnh hoặc một chuỗi các câu lệnh thực hiện các hành động thay thế.
Hầu hết các ngôn ngữ lập trình đều sử dụng câu lệnh if để đưa ra quyết định. Một trong những Khái niệm C cơ bản nhất của khoa học máy tính là nếu một điều kiện nào đó true (đúng), máy tính sẽ được hướng dẫn thực hiện một hành động; và nếu điều kiện là false (sai), thì nó được chuyển sang làm một việc khác.
Ví dụ các bước thực thi nhận diện một số là chẵn hay lẻ như sau:
- Chấp nhận một con số nhập vào từ bàn phím
- Tìm số dư khi chia số đó cho 2
- Nếu phần dư bằng 0, số đó là Chẵn
- Nếu phần dư khác 0, số đó là Lẻ
- In ra kết quả số là số sẵn hay số lẻ tùy theo kết quả kiểm tra
Bước thứ hai kiểm tra xem số chia cho hai có dư bằng 0 hay không. Trong trường hợp đó, chúng ta thực hiện một số hành động nhất định hiển thị số đó dưới dạng số chẵn. Nếu nó không đưa ra số dư bằng 0, một quá trình hành động khác sẽ được thực hiện để hiển thị số là số lẻ.
Mã giả:
BEGIN
INPUT A
IF (A MOD 2 = 0)
DISPLAY "So"+A+"la so chan"
ELSE
DISPLAY "So"+A+"la so le"
ENDIF
END
Ngôn ngữ C hỗ trợ hai loại câu lệnh điều kiện:
- Câu lệnh if
- Câu lệnh switch
Câu lệnh if
Câu lệnh if cho phép đưa ra quyết định bằng cách kiểm tra một điều kiện nhất định là đúng hay sai. Các điều kiện như vậy liên quan đến các toán tử so sánh và logic được nói trong bài Các toán tử và biểu thức trong C
Cú pháp tổng quát:
if(expression){
// todo
}
Biểu thức phải luôn được đặt trong dấu ngoặc đơn. Câu lệnh sau từ khóa if là điều kiện (hoặc biểu thức) cần kiểm tra. Điều này được theo sau bởi một câu lệnh hoặc một tập hợp các câu lệnh, chỉ được thực hiện nếu điều kiện (hoặc biểu thức) được đánh giá là đúng.
Ví dụ mô phỏng sử dụng if để kiểm tra số có phải là số chẵn không:
#include <stdio.h>
void examplecondition(){
int num , res ;
printf("Enter a number :");
scanf("%d",&num);
res = num % 2;
printf("%d",res == 0);
if (res == 0)
printf("Then number is Even");
}
int main()
{
examplecondition();
return 0;
}
Lưu ý trong ví dụ trên rằng khối câu lệnh theo sau câu lệnh if được đặt trong dấu ngoặc nhọn {}. Hãy nhớ rằng nếu các cấu trúc có nhiều hơn một câu lệnh theo sau nó, thì các câu lệnh phải được coi như một khối và phải được đặt trong dấu ngoặc nhọn. Nếu dấu ngoặc nhọn không được đặt trong trường hợp trên sẽ gặp vấn đề như ví dụ bên dưới:
#include <stdio.h>
void examplecondition(){
int num , res ;
printf("Enter a number :");
scanf("%d",&num);
res = num % 2;
if (res == 0)
printf("The number");
printf(" %d ",num);
printf("is even");
printf("\n");
}
void examplecondition2(){
int num , res ;
printf("Enter a number :");
scanf("%d",&num);
res = num % 2;
if (res == 0){
printf("The number");
printf(" %d ",num);
printf("is even");
printf("\n");
}
}
int main()
{
examplecondition();
examplecondition2();
return 0;
}
Câu lệnh ‘if…else’
Ở phần trước chúng ta đã nghiên cứu dạng đơn giản nhất của câu lệnh if, nó cho phép chúng ta lựa chọn thực hiện một câu lệnh hoặc một khối câu lệnh hoặc bỏ qua chúng. C cũng cho phép chúng ta chọn giữa hai câu lệnh bằng cách sử dụng cấu trúc if-else.
Cú pháp tổng quát:
if (expression){
statement-1;
}
else{
// else is optional
statement-2;
}
Biểu thức được đánh giá: nếu là đúng (khác không), câu lệnh-1 Được thực thi. Nếu nó sai (không) thì câu lệnh~2 được thực hiện. Các câu lệnh sau if và else có thể đơn giản hoặc phức tạp. Thụt lề là không bắt buộc nhưng đó là phong cách lập trình tốt. Nó chỉ ra nhanh những câu lệnh mà việc thực thi của chúng phụ thuộc vào một điều kiện kiểm tra.
Ví dụ:
#include <stdio.h>
void examplecondition2ifelse(){
int num , res ;
printf("Enter a number :");
scanf("%d",&num);
res = num % 2;
if (res == 0)
{
printf("Then number is Even");
}
else{
printf("The number is Odd");
}
}
int main()
{
examplecondition2ifelse();
return 0;
}
Một ví dụ khác chuyển đổi một ký tự chữ hoa thành ký tự chữ thường. Nếu ký tự s không phải là chữ in hoa, nó sẽ được in mà không thay đổi. Chương trình sử dụng cấu trúc : if-else để kiểm tra xem một chữ cái có phải là chữ hoa hay không và sau đó chọn giữa các tùy chọn có sẵn.
#include <stdio.h>
int main()
{
char c;
printf("Input character:");
c = getchar();
if(c >= 'A' && c <= 'Z'){
printf("\nYour character %c is uppercase",c);
}else{
printf("\nYour character %c is uppercase the uppercase is: %c", c , c + 'A' - 'a');
}
return 0;
}
Câu lệnh nhiều điều kiện (multi choice) ‘if – else if … else’
Câu lệnh if cho phép chúng ta chọn có thực hiện một số hành động hay không. Câu lệnh if-else cho phép chúng ta chọn giữa hai hành động. C cũng cung cấp cho chúng tôi nhiều hơn hai sự lựa chọn. Chúng ta có thể mở rộng cấu trúc if-else bằng other để phù hợp với thực tế này. Nghĩa là, phần khác của câu lệnh if-else bao gồm một câu lệnh if-else khác. Điều này cho phép kiểm tra nhiều điều kiện và do đó đưa ra một số lựa chọn.
Cú pháp tổng quát:
if (expression) {
statement;
}
else if (expression){
statement;
}
else if (expression){
statement;
}
else{
statement;
}
Cấu trúc này còn được gọi là if-else-if ladder hoặc if-else-if staircase (bậc thang).
Các điều kiện được đánh giá từ trên xuống dưới. Ngay khi tìm thấy điều kiện đúng, câu lệnh liên quan đến nó sẽ được thực thi và phần còn lại của bậc thang sẽ bị bỏ qua. Nếu không có điều kiện nào đúng, thì điều kiện cuối cùng hoặc else sẽ được thực hiện. Nếu không có phần cuối cùng hoặc else, thì không có hành động nào diễn ra nếu tất cả các điều kiện khác là sai.
Ví dụ multi choice if:
#include <stdio.h>
void examplecondition4multichoiceif(){
int x;
x = 0;
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");
}
int main()
{
examplecondition4multichoiceif();
return 0;
}
Câu lệnh if lồng nhau (nested if)
Một if lồng nhau là một câu lệnh if, được đặt trong một câu lệnh if hoặc else khác. Trong C, một câu lệnh khác luôn đề cập đến câu lệnh if gần nhất nằm trong cùng một khối với câu lệnh khác và chưa được liên kết với câu lệnh if.
Ví dụ cú pháp:
if (expression-1){
if (expression-2){
statement-1;
}
if (expression-3){
statement-2;
}
else{
statement-3; /* with if(expression-3) */
}
}
else{
statement-4; /* with if(expression-1) */
}
Trong phân đoạn trên, điều khiển đến câu lệnh if thứ hai nếu giá trị của expression-1 là đúng, Nếu expression-2 là đúng thì statement-1 được thực thi. statement-2 được thực hiện khi expression-3 đúng, nếu không thì statement-3 được thực hiện. Nếu expression-1 trả kết quả về 0 (false) thì statement-4 được thực hiện.
Ví dụ nested if trong ngôn ngữ C:
#include <stdio.h>
void examplecondition5nestedif(){
int x, y;
x = y = 0;
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");
}
int main()
{
examplecondition5nestedif();
return 0;
}
Theo tiêu chuẩn ANSI, phải hỗ trợ ít nhất 15 cấp độ lồng nhau. Tuy nhiên, hầu hết các trình biên dịch cho phép nhiều hơn thế.
Câu lệnh ‘switch’
Câu lệnh chuyển đổi là một công cụ ra quyết định đa chiều, kiểm tra giá trị của một biểu thức dựa trên danh sách các hằng số nguyên hoặc ký tự. Khi tìm thấy một giá trị khớp, các câu lệnh liên quan đến hằng số đó sẽ được thực thi.
Cú pháp tổng quát:
switch(expression){
// todo here
case 'constant1':
// statement sequence
break;
case 'constant2':
// statement sequence
break;
case 'constant3':
// statement sequence
break;
default:
// statement sequence
break;
}
Trong đó, switch, case và default là các từ khóa và một chuỗi câu lệnh có thể là câu lệnh đơn hoặc câu lệnh ghép, không cần đặt trong ngoặc đơn. Biểu thức theo sau switch phải được đặt trong dấu ngoặc đơn và phần thân của công tắc phải được đặt trong dấu ngoặc nhọn {} kiểu dữ liệu của biểu thức cần ước tính và kiểu dữ liệu của hằng số trường hợp được chỉ định phải khớp. Trong ngôn ngữ C, giá trị trong hằng số trong case (case label) chỉ có thể là một số nguyên hoặc một hằng số ký tự. Nó cũng có thể là biểu thức hằng miễn là biểu thức không chứa bất kỳ tên biến nào. Tất cả các nhãn trường hợp (case label) phải khác nhau.
Tóm lại, lưu ý: ngôn ngữ C chỉ có thể sử dụng switch case với dữ liệu integer hoặc char.
Trong câu lệnh switch, biểu thức được đánh giá và giá trị được so sánh với các nhãn trường hợp theo thứ tự nhất định. Nếu nhãn khớp với giá trị của biểu thức, câu lệnh được đề cập đối với nhãn trường hợp đó sẽ được thực thi. Câu lệnh break (thảo luận sau) đảm bảo thoát ngay lập tức khỏi câu lệnh switch. Nếu dấu ngắt không được sử dụng, các câu lệnh trong các nhãn trường hợp sau cũng được thực thi bất kể giá trị trường hợp đó có được thỏa mãn hay không. Quá trình thực hiện này sẽ tiếp tục cho đến khi gặp câu lệnh break. Do đó, break được cho là một trong những câu lệnh quan trọng nhất khi sử dụng câu lệnh switch.
Các câu lệnh được viết bên trong nhãn default sẽ được thực thi, nếu không có trường hợp nào khác được thỏa mãn. Câu lệnh default là tùy chọn. Nếu nó không xuất hiện và giá trị của biểu thức không khớp với bất kỳ trường hợp nào, thì sẽ không có hành động nào được thực hiện. Các nhãn trường hợp và giá trị default có thể viết theo bất kỳ thứ tự nào, miễn là tuân thủ cấu trúc cùng cấp và nằm trong switch.
Ví dụ switch case:
#include <stdio.h>
void exampleconditionswitchcase(){
char ch;
printf ("\nEnter a lower cased alphabet (a - z) : ");
scanf("%c", &ch);
if (ch < 'a' || 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;
}
}
int main()
{
exampleconditionswitchcase();
return 0;
}
Bài tập
1. Viết chương trình nhận hai số a, b và kiểm tra xem có a chia hết cho b không
2. Viết chương trình nhập vào 2 số và kiểm tra tích của 2 số đó có bằng hoặc lớn hơn 1000 hay không.
3. White a chương trình nhận 2 số. Tính toán sự khác biệt giữa hai giá trị.
Nếu chênh lệch bằng 0 bất kỳ giá trị nào đã nhập, thì hiển thị thông báo sau:
Chênh lệch bằng giá trị <số giá trị đã nhập>
Nếu chênh lệch không bằng với bất kỳ giá trị nào đã nhập, hãy hiển thị thông báo sau:
Chênh lệch không bằng với bất kỳ giá trị nào đã nhập
4. Công ty Tech888 có phụ cấp cho nhân viên tùy theo cấp bậc như sau:
Xếp hạng | Phụ cấp |
A | 500000 |
B | 450000 |
Khác | 0 |
Tính lương cuối tháng. (Chấp nhận Mức lương và Điểm từ người dùng).
Khi in ra màn hình, in lương theo cấu trúc:
"luong cua nhan su la 5500000 VND"
5. Viết chương trình đánh giá điểm của một sinh viên theo bảng xếp hạng sau:
Điểm | Xếp hạng |
>=75 | A |
>60 <= điểm < 75 | B |
>50 <= điểm < 60 | C |
>30 <= điểm < 50 | D |
điểm <= 30 | E |
5. Viết chương trình như sau
Một học sinh dự thi 3 môn. Mỗi tinh hoàn trong số 100 điểm. Điểm trung bình của mỗi học sinh phải được tính toán và xếp hạng như bảng:
Điểm | Xếp hạng |
>=75 | A |
>60 <= điểm < 75 | B |
>50 <= điểm < 60 | C |
>30 <= điểm < 50 | D |
điểm <= 30 | E |
6. Viết chương trình như sau
Khai báo hai biến x và y. Gán giá trị cho các biến này. Số x chỉ được in nếu nó nhỏ hơn 2000 hoặc lớn hơn 3000 và số y chỉ được in nếu nó nằm trong khoảng từ 100 đến 500.
7. Viết chương trình như sau
Người dùng nhập một chữ cái trong bảng chữ cái và chương trình của bạn sẽ hiển thị ngôn ngữ hoặc gói tương ứng có sẵn. Một số đầu vào và đầu ra mẫu được đưa ra dưới đây
Input | Output |
C hoặc c | C/C++ |
P hoặc p | PHP |
J hoặc j | JAVASCRIPT |
H hoặc h | HTML |
A hoặc a | Android |
Các kí tự còn lại | ngon ngu khong phu hop |
8. Viết chương trình nhập vào giá trị trong ba biến và in giá trị cao nhất & nhỏ nhất trong 3 biến.
9. Viết chươg trình tìm x trong phương trình bậc 2 với a,b,c do người dùng nhập vào