Top 20 # Trình Bày Cấu Trúc Rẽ Nhánh Switch / 2023 Xem Nhiều Nhất, Mới Nhất 12/2022 # Top Trend | 3mienmoloctrungvang.com

Cấu Trúc Rẽ Nhánh Switch / 2023

1. Mô tả cấu trúc rẽ nhánh switch – case.

Cấu trúc rẽ nhánh switch – case cho phép bạn lựa chọn một trong nhiều phương án có khả năng xảy ra, nó có thể dùng dể thay thế cho cấu trúc điều khiển if - else if - else mà tôi đã trình bày trong bài cấu trúc điều khiển if – else trong Java.

Vậy khi nào chúng ta nên sử dụng cấu trúc rẽ nhánh switch – case thay thế cho cấu trúc điều khiển if - else if - else? Khi mà chúng ta có số trường hợp cần xử lý lớn hơn 3 thì khi đó chúng ta nên sử dụng switch - case để dễ dàng kiểm tra và xử lý, giúp cho chương trình dễ quan sát hơn.

switch (biểu_thức) { case giá_trị_1: Lệnh 1; break; case giá_trị_2: Lệnh 2; break; ... case giá_trị_n: Lệnh n; break; [default: Lệnh 0;] }

trong đó:

Biểu_thức phải trả về kết quả là một số nguyên, chuỗi hoặc một ký tự.

Giá_trị_1, giá_trị_2,..., giá_trị_n là các biểu thức hằng, nguyên hoặc ký tự và chúng phải khác nhau.

Lệnh 1, Lệnh 2, ..., Lệnh n, Lệnh 0 là các lệnh trong thân của switch. Các bạn thấy sau mỗi lệnh này chúng ta có từ khóa break;, từ khóa này có thể có hoặc không có tùy theo từng trường hợp.

Cách thức hoạt động của switch – case như sau:

Đầu tiên, chương trình sẽ so sánh giá trị của biểu_thức với các giá trị từ giá_trị_1, giá_trị_2,..., giá_trị_n. Nếu trong các giá trị từ giá_trị_1, giá_trị_2,..., giá_trị_n có giá trị nào bằng với giá trị của biểu_thức thì chương trình sẽ bắt đầu thực hiện các lệnh tương ứng nằm trong case của giá trị đó cho đến khi gặp một lệnh break đầu tiên thì thoát ngay khỏi switch, bỏ qua các case (trường hợp) còn lại và thực hiện lệnh đầu tiên nằm ngay sau cấu trúc này. Nếu giá trị của biểu_thức không bằng với bất kỳ giá trị nào trong danh sách giá_trị_1, giá_trị_2 ... giá_trị_n thì Lệnh 0 sẽ được thực hiện nếu có thành phần default.

Lưu đồ hoạt động:

Dạng 1 là cấu trúc switch có sử dụng từ khóa default, còn dạng 2 là cấu trúc switch không sử dụng từ khóa default.

Lưu ý:

Lệnh break là để nhảy ra khỏi lệnh switch, nếu không có lệnh này cấu trúc switch sẽ duyệt cả các trường hợp phía dưới cho đến khi gặp dấu đóng switch (dấu }) (vì chưa gặp break coi như chưa ra khỏi lệnh switch).

Khi sử dụng lệnh switch có thể xảy ra nhiều giá trị trả về cho một trường hợp (một khả năng xảy ra của biểu thức).

2. Ví dụ switch đơn giản.

Chúng ta có ví dụ sau: Nhập vào một số nguyên từ 1 – 12 từ bàn phím và hiển thị ra tháng tương ứng với số đó ( nhập vào số 1 thì sẽ hiển thị ra là “Tháng 1”.

package cau_truc_switch_case; import java.util.Scanner; public class HienThiThangTuongUng { public static void main(String[] args) { int thang; Scanner scanner = new Scanner(System.in); System.out.println("Nhập vào 1 số nguyên (từ 1 đến 12): "); thang = scanner.nextInt(); switch (thang) { case 1: System.out.println("Tháng 1"); break; case 2: System.out.println("Tháng 2"); break; case 3: System.out.println("Tháng 3"); break; case 4: System.out.println("Tháng 4"); break; case 5: System.out.println("Tháng 5"); break; case 6: System.out.println("Tháng 6"); break; case 7: System.out.println("Tháng 7"); break; case 8: System.out.println("Tháng 8"); break; case 9: System.out.println("Tháng 9"); break; case 10: System.out.println("Tháng 10"); break; case 11: System.out.println("Tháng 11"); break; case 12: System.out.println("Tháng 12"); break; default: System.out.println("Số nhập vào phải nằm trong khoảng từ 1 đến 12."); } } }

Kết quả sau khi biên dịch chương trình:

Nếu bạn nhập vào tháng 14 thì chương trình sẽ hiển thị kết quả như sau:

Giải thích hoạt động của chương trình trên:

Khi chương trình được thực thi, tôi nhập vào số 4 thì chương trình sẽ nhận thấy số 4 đó ứng với giá trị tại chỉ thị case 4 nên chương trình sẽ chạy tới case 4, sau đó thực hiện lệnh bên trong case này – đó là hiển thị ra màn hình dòng thông báo “Tháng 4“.

Giả sử sau đó tôi nhập vào số 14 thì chương trình sẽ nhận thấy nó khác với các giá trị từ 1 đến 12, không ứng với bất kỳ giá trị tại chỉ thị case nào nên trường hợp mặc định (ứng với nhãn default) được làm. Vì vậy, dòng thông báo “Số nhập vào phải nằm trong khoảng từ 1 đến 12” sẽ được hiển thị.

Giả sử tôi sửa đoạn chương trình trên thành như sau:

package cau_truc_switch_case; import java.util.Scanner; public class HienThiThangTuongUng { public static void main(String[] args) { int thang; String thangTuongUng = ""; Scanner scanner = new Scanner(System.in); System.out.println("Nhập vào 1 số nguyên (từ 1 đến 12): "); thang = scanner.nextInt(); switch (thang) { case 1: thangTuongUng = "Tháng 1"; case 2: thangTuongUng = "Tháng 2"; case 3: thangTuongUng = "Tháng 3"; case 4: thangTuongUng = "Tháng 4"; case 5: thangTuongUng = "Tháng 5"; case 6: thangTuongUng = "Tháng 6"; case 7: thangTuongUng = "Tháng 7"; case 8: thangTuongUng = "Tháng 8"; break; case 9: thangTuongUng = "Tháng 9"; break; case 10: thangTuongUng = "Tháng 10"; break; case 11: thangTuongUng = "Tháng 11"; break; case 12: thangTuongUng = "Tháng 12"; break; default: System.out.println("Số nhập vào phải nằm trong khoảng từ 1 đến 12."); } System.out.println(thangTuongUng); } }

Sau khi biên dịch thì chương trình sẽ hiển thị kết quả như sau:

Các bạn thấy tôi nhập vào số 1 nhưng kết quả hiển thị ra là tháng 8. Các bạn biết vì sao không? Như tôi đã nói ở trên, ” Lệnh break là để nhảy ra khỏi lệnh switch, nếu không có lệnh này cấu trúc switch sẽ duyệt cả các trường hợp phía dưới cho đến khi gặp dấu đóng switch (dấu })“, vì vậy khi bạn nhập vào số 1 thì chương trình sẽ lần lượt gán các giá trị tháng tương ứng cho chuỗi thangTuongUng và khi chạy đến case 8 thì lúc này chuỗi thangTuongUng sẽ có giá trị là ” Tháng 8” và sau đó gặp lệnh break nên sẽ kết thúc lệnh switch này và hiển thị giá trị ” Tháng 8” ra màn hình.

3. Ví dụ switch có nhiều giá trị trả về cho một trường hợp.

Các bạn theo dõi ví dụ sau: Viết chương trình nhập vào 1 số nguyên, nếu:

Số nhập vào là 0 thì thông báo “Số 0“.

Số nhập vào là 1, 2 thì thông báo “Số nhỏ“.

Số nhập vào là 3, 4, 5 thì thông báo “Số trung bình“.

Số nhập vào lớn hơn 5 thì thông báo “Số lớn“.

Chúng ta sẽ làm ví dụ này như sau:

package cau_truc_switch_case; import java.util.Scanner; public class HienThiChuoiSoTuongUng { public static void main(String[] args) { int number; Scanner scanner = new Scanner(System.in); System.out.println("Nhập vào 1 số bất kỳ: "); number = scanner.nextInt(); switch (number) { case 0: System.out.println("Số 0"); break; case 1: case 2: System.out.println("Số nhỏ"); break; case 3: case 4: case 5: System.out.println("Số trung bình"); break; default: System.out.println("Số lớn"); } } }

Kết quả sau khi biên dịch chương trình:

Các bạn thấy trong đề bài trên chúng ta có 3 trường hợp số 3, 4, 5 cùng có kết quả chung là ” Số trung bình“, vì vậy 3 trường hợp này chỉ dùng chung một chỉ thị break. Chẳng hạn khi số nhập vào là 3: chương trình chạy tới case 3, sau đó chạy tiếp và hiển thị dòng thông báo ” Số trung bình” ra màn hình và chỉ nhảy khỏi cấu trúc switch khi gặp chỉ thị break ở dòng 26.

4. Lời kết.

Bài 7: Cấu Trúc Rẽ Nhánh Switch/Case / 2023

1. Cấu trúc switch/case

– Cú pháp:

switch(biểu thức) {     case n1:        break; case n2: break; ... default: break; }

với biểu thức là một biểu thức nguyên, các giá trị n1, n2,… là các hằng số nguyên khác nhau.

– Với đúng như cú pháp trên, cấu trúc switch/case tương đương với cấu trúc if/else như sau:

if (biểu thức == n1) else if (biểu thức == n2) ... else

2. Sự hoạt động của cấu trúc switch/case

Phần này mình sẽ nói rõ về sự hoạt động của switch/case, cũng như sẽ giải thích vì sao cần có các lệnh break, và nếu không có thì sao ?

int n = 2; switch(n) {     case 1:        printf("*n"); case 2: printf("**n"); case 3: printf("***n"); default: printf("****n"); }

Trong đoạn mã này, khác với cú pháp ở trên, mình đã cố tình bỏ đi các lệnh break, và kết quả sẽ là:

Màn hình console in ra 3 dòng tương ứng với các trường hợp case 2, case 3 và default trong chương trình. Điều đó có nghĩa là sao ? Bạn đã hình dung được cách thức hoạt động của cấu trúc switch/case chưa ?

– Đầu tiên nói đến lệnh break trước đã, đơn giản thôi, nó có chức năng là thoát khỏi khối lệnh hiện tại. Khi chương trình thực hiện lệnh break, những câu lệnh còn lại phía sau (nếu có) sẽ bị bỏ qua. Lệnh break cũng có chức năng kết thúc một vòng lặp (sẽ đề cập ở những bài viết sau).

– Và cách thức hoạt động của cấu trúc switch/case như sau: Đầu tiên giá trị của biểu thức trong ngoặc sẽ được tính, sau đó lần lượt so sánh với giá trị trong các case:

• Nếu giá trị biểu thức không trùng với bất kì giá trị nào trong các case, chương trình sẽ thực hiện các lệnh trong phần default (nếu có) rồi kết thúc cấu trúc witch.

• Nếu giá trị biểu thức trùng với giá trị của case k nào đó, chương trình sẽ thực hiện tuần tự các lệnh bắt đầu từ case k trở đi cho đến hết khối lệnh switch, bao gồm cả các case phía sau case k và trường hợp default (nếu có).

3. Một số lưu ý khi dùng switch/case

– Biểu thức sau switch phải là biểu thức có giá trị nguyên, và luôn luôn được đặt trong ngoặc.

– Tất cả các case và default phải cùng nằm trong một khối lệnh, giới hạn bởi cặp ngoặc nhọn.

– Giá trị trong các case phải là các hằng số nguyên khác nhau.

– Nếu các trường hợp khác nhau nhưng thực hiệnn cùg một lệnh thì có thể viết như sau:

switch(biểu thức) {     case n1: case n2: case n3: break; case n4: case n5: break; }

Với cấu trúc trên thì nếu biểu thức có giá trị n1, n2 hoặc n3 thì chương trình sẽ thực hiện lệnh A, tương tự nếu có giá trị n4 hoặc n5 sẽ thực hiện lệnh B.

Vậy là xong thêm một món mới nữa rồi. Cảm ơn các bạn đã theo dõi !

Chia sẻ:

Tweet

Like this:

Số lượt thích

Đang tải…

Bài 12: Câu Lệnh Rẽ Nhánh If, If…Else, Switch / 2023

Nói chung việc thực hiện chương trình là hoạt động tuần tự, tức thực hiện từng lệnh một từ câu lệnh bắt đầu của chương trình cho đến câu lệnh cuối cùng. Tuy nhiên, để việc lập trình hiệu quả hơn hầu hết các Ngôn ngữ lập trình bậc cao đều có các câu lệnh rẽ nhánh và các câu lệnh lặp cho phép thực hiện các câu lệnh của chương trình không theo trình tự tuần tự như trong văn bản.

Phần này mình sẽ trình bày các câu lệnh cho phép rẽ nhánh như vậy. Để thống nhất mỗi câu lệnh được trình bày về cú pháp (tức cách viết câu lệnh), cách sử dụng, đặc điểm, ví dụ minh hoạ và một vài điều cần chú ý khi sử dụng lệnh.

1. Câu lệnh điều kiện if và if…else

Ý nghĩa

Một câu lệnh if cho phép chương trình có thể thực hiện khối lệnh này hay khối lệnh khác phụ thuộc vào một điều kiện được viết trong câu lệnh là đúng hay sai. Nói cách khác câu lệnh if cho phép chương trình rẽ nhánh (chỉ thực hiện 1 trong 2 nhánh).

Cú pháp

if (điều kiện) { khối lệnh 1; } else { khối lệnh 2; } if(điều kiện) { khối lệnh 1; }

Trong cú pháp trên câu lệnh if có hai dạng: có else và không có else. điều kiện là một biểu thức lôgic tức nó có giá trị đúng (khác 0) hoặc sai (bằng 0). Khi chương trình thực hiện câu lệnh if nó sẽ tính biểu thức điều kiện.

Nếu điều kiện đúng chương trình sẽ tiếp tục thực hiện các lệnh trong khối lệnh 1, ngược lại nếu điều kiện sai chương trình sẽ thực hiện khối lệnh 2 (nếu có else) hoặc không làm gì (nếu không có else).

Đặc điểm

Đặc điểm chung của các câu lệnh có cấu trúc là bản thân nó chứa các câu lệnh khác. Điều này cho phép các câu lệnh if có thể lồng nhau.

Nếu nhiều câu lệnh if (có else và không else) lồng nhau việc hiểu if và else nào đi với nhau cần phải chú ý. Qui tắc là else sẽ đi với if gần nó nhất mà chưa được ghép cặp với else khác.

Ví dụ câu lệnh:

else c = b;

là tương đương với

{ else c = b; }

Ví dụ minh hoạ:

VD1: Viết chương trình tính năm nhuận bằng C++. Năm thứ n là nhuận nếu nó chia hết cho 4, nhưng không chia hết cho 100 hoặc chia hết 400. Chú ý: một số nguyên a là chia hết cho b nếu phần dư của phép chia bằng 0, tức a%b == 0.

void main() { int year; cout << “year = ” ; cout << year << “la nam nhuan” ; }else{ cout << year << “la nam khong nhuan” ; } }

VD2: Viết chương trình C++ để giải phương trình bậc 2 ax2 + bx + c = 0 (a ≠ 0).

void main() { float a, b, c; float x1, x2; cout << “Nhap a, b, c:n” ; delta = b*b – 4*a*c ; if (delta < 0){ cout << “Vô nghiệmn” ; } else if (delta==0) { cout<<“Có nghiệm kép:” << -b/(2*a) << ‘n’; } else { x1 = (-b+sqrt(delta))/(2*a); x2 = (-b-sqrt(delta))/(2*a); cout << “nghiem 1 = ” << x1 << ” và nghiem 2 = ” << x2 ; } }

C++ quan niệm “đúng” là một giá trị khác 0 bất kỳ và “sai” là giá trị 0 nên thay vì viết if (x != 0) hoặc if (x == 0) ta có thể viết gọn thành if (x) hoặc if (!x) vì nếu (x != 0) đúng thì ta có x ≠ 0 và vì x ≠ 0 nên (x) cũng đúng. Ngược lại nếu (x) đúng thì x ≠ 0, từ đó (x != 0) cũng đúng. Tương tự ta dễ dàng thấy được (x == 0) là tương đương với (!x).

2. Câu lệnh Switch trong C++

Ý nghĩa

Câu lệnh if cho ta khả năng được lựa chọn một trong hai nhánh để thực hiện, do đó nếu sử dụng nhiều lệnh if lồng nhau sẽ cung cấp khả năng được rẽ theo nhiều nhánh. Tuy nhiên trong trường hợp như vậy chương trình sẽ rất khó đọc, do vậy C++ còn cung cấp một câu lệnh cấu trúc khác cho phép chương trình có thể chọn một trong nhiều nhánh để thực hiện, đó là câu lệnh switch.

Cú pháp

switch (biểu thức điều khiển) { case biểu_thức_1: khối lệnh 1 ; break; case biểu_thức_2: khối lệnh 2 ; break; case ..................: ............... ; break; case biểu_thức_n: khối lệnh n ; break; default: khối lệnh n+1; }

Biểu thức điều khiển được sử dụng trong một lệnh switch phải có kiểu là integer hoặc liệt kê, hoặc là một trong các kiểu lớp trong đó lớp có một hàm biến đổi đơn tới một kiểu integer hoặc kiểu liệt kê.

Bạn có thể có bất kỳ số lệnh case nào trong một switch. Mỗi case được theo sau bởi giá trị để được so sánh và một dấu hai chấm.

biểu_thức_n, là biểu thức hằng, cho một case phải cùng kiểu dữ liệu với biến trong switch, và nó phải là hằng số.

Khi biến được chuyển tới cùng giá trị với một case nào đó, lệnh theo sau case đó sẽ thực thi tới khi gặp lệnh break.

Khi gặp lệnh break, switch kết thúc, và dòng điều khiển nhảy tới dòng lệnh tiếp theo của lệnh switch đó.

Không nhất thiết mỗi case cần phải chứa một lệnh break. Nếu không có lệnh break nào xuất hiện, dòng điều khiển sẽ không tới được case tiếp theo cho tới khi bắt gặp một lệnh break.

Một lệnh switch có thể có một case mặc định tùy chọn, và phải xuất hiện ở cuối cùng của lệnh switch. Case mặc định này có thể được sử dụng để thực hiện một nhiệm vụ khi không có case nào là đúng (true). Trong trường hợp case mặc định này thì không cần lệnh break.

Cách thực hiện

Để thực hiện câu lệnh switch đầu tiên chương trình tính giá trị của biểu thức điều khiển (btđk), sau đó so sánh kết quả của btđk với giá trị của các biểu_thức_i bên dưới lần lượt từ biểu thức đầu tiên (thứ nhất) cho đến biểu thức cuối cùng (thứ n), nếu giá trị của btđk bằng giá trị của biểu thức thứ i đầu tiên nào đó thì chương trình sẽ thực hiện dãy lệnh thứ i và tiếp tục thực hiện tất cả dãy lệnh còn lại (từ dãy lệnh thứ i+1) cho đến hết (gặp dấu ngoặc đóng } của lệnh switch). Nếu quá trình so sánh không gặp biểu thức (nhánh case) nào bằng với giá trị của btđk thì chương trình thực hiện dãy lệnh trong default và tiếp tục cho đến hết (sau default có thể còn những nhánh case khác).

Trường hợp câu lệnh switch không có nhánh default và btđk không khớp với bất cứ nhánh case nào thì chương trình không làm gì, coi như đã thực hiện xong lệnh switch. Nếu muốn lệnh switch chỉ thực hiện nhánh thứ i (khi btđk = biểu_thức_i) mà không phải thực hiện thêm các lệnh còn lại thì cuối dãy lệnh thứ i thông thường ta đặt thêm lệnh break; đây là lệnh cho phép thoát ra khỏi một lệnh cấu trúc bất kỳ.

VD1 : Viết chương trình C++ nhập 2 số a và b vào từ bàn phím. Nhập kí tự thể hiện một trong bốn phép toán: cộng, trừ, nhân, chia. In ra kết quả thực hiện phép toán đó trên 2 số a, b.

void main() { float a, b, c ; char dau ; cout << "Hãy nhập 2 số a, b: " ; cout << "và dấu phép toán: " ; switch (dau) { case '+': c = a + b ; break ; case '−': c = a - b ; break ; case 'x': case '.': case '*': c = a * b ; break ; case ':': case '/': c = a / b ; break ; } cout << setiosflags(ios::showpoint) << setprecision(4) ; cout << "Kết quả là: " << c ; }

Trong chương trình trên ta chấp nhận các kí tự x, ., * thể hiện cho phép toán nhân và :, / thể hiện phép toán chia.

int main() { int chuSo; printf(“Nhap chu so: “); scanf(“%d”, & chuSo); switch (chuSo) { case 0: printf(“Khong”); break; case 1: printf(“Mot”); break; case 2: printf(“Hai”); break; case 3: printf(“Ba”); break; case 4: printf(“Bon”); break; case 5: printf(“Nam”); break; case 6: printf(“Sau”); break; case 7: printf(“Bay”); break; case 8: printf(“Tam”); break; case 9: printf(“Chin”); break; default: printf(“Khong phai chu so!”); } return 0; }

Bài 4. Cấu Trúc Rẽ Nhánh (If) / 2023

Cấu trúc rẽ nhánh (câu lệnh if)

Cấu trúc này được dùng khi một lệnh hay một khối lệnh chỉ được thực hiện khi một điều kiện nào đó thoả mãn.

Cú pháp:

– Cấu trúc if đơn:

if (bieu thuc dieu kien) { khối lệnh;... }

– Cấu trúc if - else:

if (bieu thuc dieu kien) { Khối lệnh 1;...; } else { Khối lệnh 2;...; }

– Cấu trúc if rẽ nhiều nhánh: Sau else có thể là một câu lệnh if khác.

– Cấu trúc if lồng nhau: trong trường hợp khối lệnh chính là cấu trúc if khác.

Ví dụ 1:

+ Yêu cầu: Nhập vào 3 số nguyên. In ra màn hình số lớn nhất, nhỏ nhất.

+ Code: 

using namespace std; int main() { int a, b, c; cout<<“n Nhap 3 so: “; cout<<“n a = “; cout<<“n b = “; cout<<“n c = “; int max = a; if (max<b) max = b; if (max<c) max = c; cout<<“n Max: “<<max; int min = a; cout<<“n Min: “<<min; return 0; }

Ví dụ 2:

+ Yêu cầu: Giải phương trình bậc nhất 1 ẩn ax + b = 0, với a, b nhập vào từ bàn phím. Tìm nghiệm thực?

+ Code:

using namespace std; int main() { float a, b; cout<<“n Nhap he so: “; cout<<“n a = “; cout<<“n b = “; if (a==0) if (b==0) cout<<“n Phuong trinh vo so nghiem”; else cout<<“n Phuong trinh vo nghiem”; else { float x = -b/a; cout<<“n Phuong trinh co 1 nghiem x = “<<x; } return 0; }

Ví dụ 3:

+ Yêu cầu: Giải và biện luận nghiệm thực của phương trình bậc 2 một ẩn ax^2 + bx +c = 0, với a, b, c nhập vào từ bàn phím.

+ Code:

using namespace std; int main() { float a, b, c; cout<<“n Nhap he so: “; cout<<“n a = “; cout<<“n b = “; cout<<“n c = “; if (a==0) if (b==0) if (c==0) cout<<“n Phuong trinh vo so nghiem”; else cout<<“n Phuong trinh vo nghiem”; else { float x = -c/b; cout<<“n Phuong trinh co 1 nghiem x= “<<x; } else { float delta = b*b-4*a*c; if(delta<0) cout<<“n Phuong trinh vo nghiem”; if(delta=0) cout<<“n Phuong trinh co nghiem kep, x1=x2= “<<-b/(2*a); { float x1 = (-b-(float)sqrt(delta))/(2*a); float x2 = (-b+(float)sqrt(delta))/(2*a); cout<<“n Phuong trinh co 2 nghiem, x1 = “<<x1<<“; x2 = “<<x2; } } return 0; }

Ví dụ 4:

+ Yêu cầu: Tính điểm cho sinh viên:

– Nhập vào điểm: điểm toán rời rạc (3 tín chỉ); điểm lập trình (4 tín chỉ); điểm cơ sở dữ liệu (3 tín chỉ)

– Tính điểm tổng kết.

– In kết quả điểm chữ (A,B,C,D,F) của điểm toán rời rạc.

+ Code:

using namespace std; int main() { float dTRR, dLT, dCSDL; cout<<“n Nhap diem: “; cout<<“n Diem toan roi rac: “; cout<<“n Diem lap trinh: “; cout<<“n Diem co so du lieu: “; float dTK dTK = (dTRR*3+dLT*4+dCSDL*3)/10; cout<<“n Diem tong ket: “<<dTK; char dChu; if(dTRR<4) dChu = ‘F’; else if (dTRR<5.5) dChu = ‘D’; else if (dTRR<7.0) dChu = ‘C’; else if (dTRR<8.5) dChu = ‘B’; else dChu = ‘A’; cout<<“n Diem chu: “<<dChu; return 0; }