Bài giảng Nhập môn lập trình - Chương 3: Lệnh rẽ nhánh/lựa chọn - Ngô Hữu Dũng

Nội dung

Nhập môn lập trình - Rẽ nhánh

 Rẽ nhánh/lựa chọn

 Lệnh if.else

 Lệnh switch.case

If statement – Câu lệnh if

3 Nhập môn lập trình - Rẽ nhánh

 Nếu Điều kiện đúng thì

 Thực hiện Lệnh

pdf40 trang | Chia sẻ: phuongt97 | Lượt xem: 302 | Lượt tải: 0download
Bạn đang xem trước 20 trang nội dung tài liệu Bài giảng Nhập môn lập trình - Chương 3: Lệnh rẽ nhánh/lựa chọn - Ngô Hữu Dũng, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Nhập môn lập trình Lệnh rẽ nhánh/lựa chọn TS. Ngô Hữu Dũng TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP THÀNH PHỐ HỒ CHÍ MINH Nội dung Nhập môn lập trình - Rẽ nhánh  Rẽ nhánh/lựa chọn  Lệnh if..else  Lệnh switch..case 2 Statement(s) Statement(s) true false Condition Statement(s) Case 1 Expression Statement(s) Case 2 Statement(s) Default Statement(s) Case 3 If statement – Câu lệnh if Nhập môn lập trình - Rẽ nhánh3  Nếu Điều kiện đúng thì  Thực hiện Lệnh  pseudocode IF (Condition) THEN Statement(s); ENDIF; 1. // if syntax 2. if (Condition) 3. { 4. Statements; 5. ... 6. } Statement(s) true Condition false Khối lệnh - Block Nhập môn lập trình - Rẽ nhánh4  Khối lệnh: Gồm nhiều câu lệnh  Cần đặt giữa dấu {}  Cách gọi khác: Lệnh phức, lệnh ghép  Ví dụ: 1. if (Condition) 2. { 3. Statement 1; 4. Statement 2; 5. Statement 3; 6. Statement 4; 7. } Statement 1 Statement 2 Statement 3 Statement 4 true Condition false ifelse statement – Câu lệnh ifelse Nhập môn lập trình - Rẽ nhánh5 Statement(s) Statement(s) true false Condition 1. // if else syntax 2. if (Condition) 3. { 4. Statement(s); 5. ... 6. } 7. else 8. { 9. Statement(s); 10. ... 11.}  pseudocode IF (Condition) THEN Statement(s); ELSE Statement(s); ENDIF; Toán tử điều kiện Nhập môn lập trình - Rẽ nhánh6 1. // C code 2. if (Điều kiện) 3. Lệnh 1; 4. else 5. Lệnh 2; 1. // Conditional ternary operator (?) 2. (Điều kiện) ? Lệnh 1 : Lệnh 2; Lệnh 1 Lệnh 2 true false Điều kiện Lệnh ifelse ifelse Nhập môn lập trình - Rẽ nhánh7  Kiểm tra nhiều trường hợp 1. if (Condition 1) 2. { 3. Statement(s); 4. } 5. else if(Condition 2) 6. { 7. Statement(s); 8. ... 9. } 10.... 11.else 12.{ 13. Statement(s); 14. ... 15.} Statement(s) true false Condition 1 Condition 2 Statement(s) true false Statement(s) Condition 3 Statement(s) true false Ví dụ minh hoạ if Nhập môn lập trình - Rẽ nhánh8  Trị tuyệt đối  Nếu a < 0  a = -a  Xuất a 1. if (a < 0) 2. a = -a; 3. printf("%d", a); a = -a true a < 0 false Print a Ví dụ minh hoạ if else Nhập môn lập trình - Rẽ nhánh9  Kiểm tra chẵn lẻ  Nếu a chia chẵn cho 2 thì  Xuất a chẵn  Ngược lại thì  Xuất: a lẻ  pseudocode IF (a % 2 == 0) THEN Print a even; ELSE Print a odd; ENDIF; a chẵn a lẻ true false a%2==0 1. // C code 2. if (a % 2 == 0) 3. printf("a chan"); 4. else 5. printf("a le"); (a%2==0) ? printf("a chan") : printf("a le"); Ví dụ minh hoạ if else if Nhập môn lập trình - Rẽ nhánh10  Kiểm tra âm dương  Nếu a < 0  a âm  Ngược lại Nếu a > 0  a dương  Ngược lại  a bằng 0 1. if (a < 0) 2. printf("a am"); 3. else if(a > 0) 4. printf("a duong"); 5. else 6. printf("a bang 0"); a âm true false a < 0 a > 0 a dương true false a bằng 0 Ví dụ minh hoạ - Khối lệnh - Block Nhập môn lập trình - Rẽ nhánh11  Tìm max max = a Xuất a max max = b Xuất b max true false a > b 1. if (a > b) 2. { 3. max = a; 4. printf("a max"); 5. } 6. else 7. { 8. max = b; 9. printf("b max"); 10.} Lồng nhau – Nested if Nhập môn lập trình - Rẽ nhánh12  Một câu lệnh có thể nằm bên trong một câu lệnh khác  Các cấu trúc if được xem như một câu lệnh đơn  if  ifelse  Ví dụ 1. if(a % 2 == 0) 2. if(a < 0) 3. printf("a chan va am"); 4. else if(a > 0) 5. printf("a chan va duong"); 6. else 7. printf("a bang 0"); 8. else 9. if(a == 0) 10. printf("a bang 0"); 11. else{ 12. printf("a le "); 13. if (a < 0) printf("va am"); 14. else 15. printf("va duong"); 16. } Lỗi thường gặp Nhập môn lập trình - Rẽ nhánh13  Lỗi trong chương trình sau  Chấm phẩy ở dòng 2  Điều kiện sau else ở dòng 5  Dòng 8 và 9 cần nằm trong khối lệnh  Thêm {} 1. // Giai Phuong trinh ax + b = 0 2. if(a == 0); // “;” !? 3. if(b == 0) 4. printf("PT vo so nghiem"); 5. else (b != 0) // !? 6. printf("PT vo nghiem"); 7. else 8. x = -b/a; 9. printf("x = %d", x); // !? switch case statement Nhập môn lập trình - Rẽ nhánh14 1. // switch case syntax 2. switch(Expression) 3. { 4. case Value1: 5. Statement(s); 6. break; 7. case Value2: 8. Statement(s); 9. break; 10. case Value3: 11. Statement(s); 12. break; 13. ... 14. default : 15. Statement(s); 16.} Statement(s) Case 1 Expression Statement(s) Case 2 Statement(s) Default Statement(s) Case 3 Nhận xét Nhập môn lập trình - Rẽ nhánh15 1. switch(Biểu thức) 2. { 3. case : 4. Lệnh 1; 5. break; 6. case : 7. Lệnh 2; 8. break; 9. case : 10. Lệnh 3; 11. break; 12. ... 13. default : 14. Lệnh n; 15.}  Chia thành nhiều trường hợp để xử lý  Biểu thức có giá trị kiểu số nguyên  Giá trị là một số nguyên cụ thể  Các giá trị không được trùng nhau  Mỗi trường hợp kết thúc bằng lệnh break  Có thể khuyết phần default Ví dụ minh hoạ Nhập môn lập trình - Rẽ nhánh16 Xuất “khong” true false a = 0 a = 1 Xuất “mot” true false Xuất “Khong doc duoc” a = 9 Xuất “chin” true false 1. // Đọc số 2. switch(a) 3. { 4. case 0: 5. printf("khong"); 6. break; 7. case 1: 8. printf("mot"); 9. break; 10. ... 11. case 9: 12. printf("chin"); 13. break; 14. default : 15. printf("khong doc duoc"); 16.} Ví dụ minh hoạ - Khuyết default Nhập môn lập trình - Rẽ nhánh17 Xuất “khong” true false a%10= 0 a%10= 1 Xuất “mot” true false a%10= 2 Xuất “hai” true false a%10= 9 Xuất “chin” true 1. // Đọc số 2. switch(a%10) 3. { 4. case 0: 5. printf("khong"); 6. break; 7. case 1: 8. printf("mot"); 9. break; 10. case 2: 11. printf("hai"); 12. break; 13. ... 14. case 9: 15. printf("chin"); 16.} Ví dụ minh hoạ - Khuyết break !? Nhập môn lập trình - Rẽ nhánh18 true false a%10= 0 a%10= 2 true false a%10= 8 Xuất “chan” true false Xuất “le” 1. // Chẵn lẻ 2. switch(a%10) 3. { 4. case 0: 5. case 2: 6. case 4: 7. case 6: 8. case 8: 9. printf("chan"); 10. break; 11. default : 12. printf("le"); 13.} Ví dụ minh hoạ - Lồng nhau Nhập môn lập trình - Rẽ nhánh19 1. // Đọc tháng 2. switch(thang/10) // Số hàng chục 3. { 4. case 1: 5. printf("Thang muoi "); 6. switch(thang%10) // Số hàng đơn vị 7. { 8. case 1: printf("mot."); break; 9. case 2: printf("hai."); break; 10. } 11. break; 12. case 0: 13. switch(thang){ 14. case 1: printf("Thang mot."); break; 15. ... 16. } 17.} Lỗi thường gặp Nhập môn lập trình - Rẽ nhánh20 1. switch(a); // “;” !? 2. { 3. case 1.2: // “1.2” !? 4. printf("1.2"); break; 5. case >0: // “>0” !? 6. printf(">0"); break; 7. case 2: 8. printf("hai"); // Thiếu break;!? 9. case 3: 10. printf("ba"); break; 11. case 2: // Trùng “2” 12. printf("trung"); break; 13. default // Thiếu “:” 14. printf("bon"); 15.} if vs. switch Nhập môn lập trình - Rẽ nhánh21  Switch kiểm tra các giá trị số nguyên  If kiểm tra kết quả đúng/sai (True/False)  Toán tử so sánh,  Toán tử luận lý  Giá trị bằng 0: False  Giá trị khác 0: True 1. switch(a%2) 2. { 3. case 0: 4. printf("chan"); 5. break; 6. case 1: 7. printf("le"); 8. } 1. if (a>=10 && a<100) 2. printf("a:[10..99]"); 3. if (a) 4. printf("a khac 0"); 5. if (!a) 6. printf("a = 0"); 7. if (a>0) 8. printf("a > 0"); 9. if (!(a>0)) 10. printf("a <= 0"); Tiền xử lý và lệnh rẽ nhánh Nhập môn lập trình - Rẽ nhánh 1. #include 2. #define MAX(A, B) (A > B ? A : B) 3. // preprocessor 4. int largest(int a, int b, int c) 5. { 6. int result; 7. result = MAX(a, b); 8. result = MAX(result, c); 9. return result; 10. } 11. void main() 12. { 13. printf("%d ", MAX(1,4)); 14. printf("%d ", largest(7,3,8)); 15. } 22 Bài tập 3.1 – Kiểm tra số Nhập một số nguyên bất kỳ. Hãy kiểm tra xem số ấy có tính chất như thế nào?  Là số dương, âm hay bằng không?  Là số chẵn hay lẻ?  Có phải là số có 2 chữ số hay không? Ví dụ: Nhập vào số 9, xuất ra màn hình: “Ban vua nhap so duong, so le, va khong phai la so co hai chu so.” Gợi ý: Sử dụng lệnh if để kiểm tra từng điều kiện Nhập môn lập trình - Rẽ nhánh23 Tham khảo 3.1 – Kiểm tra số Nhập môn lập trình - Rẽ nhánh24 1. #include 2. int main() 3. { 4. int soNguyen; 5. printf("Nhap mot so nguyen: "); 6. scanf("%d", &soNguyen); 7. printf("Ban vua nhap so "); 8. if (soNguyen > 0) 9. printf("duong"); 10. else if (soNguyen < 0) 11. printf("am"); 12. else 13. printf("khong"); 14. if (soNguyen % 2 == 0) 15. ... Bài tập 3.2 – Đổi ký tự Nhập một ký tự. Nếu là chữ thường thì đổi sang chữ hoa, ngược lại đổi sang chữ thường, nếu không phải là chữ thì thông báo: “Khong phai chu”. Ví dụ: Nhập vào ký tự ‘a’, xuất ký tự ‘A’ Gợi ý:  Ký tự ‘a’ có mã 97, các ký tự ‘b’, ‘c’ sau đó tăng dần  Ký tự “A” có mã 65, các ký tự ‘B’, ‘C’ có mã tăng dần  Kiểm tra ký tự thường  if(kyTu >= ‘a’ && kyTu <=‘z’) // hoặc if (islower(kyTu))  Chuyển sang ký tự thường  kyTu = kyTu – ‘A’ + ‘a’; // hoặc kyTu = tolower(kyTu); Nhập môn lập trình - Rẽ nhánh25 Tham khảo 3.2 – Đổi ký tự Nhập môn lập trình - Rẽ nhánh26 1. #include 2. int main() 3. { 4. char kyTu; 5. printf("Nhap mot ky tu: "); 6. scanf("%c", &kyTu); 7. if (kyTu>='a' && kyTu <= 'z'){ 8. kyTu = kyTu - 'a' + 'A'; 9. printf("Chuyen sang chu hoa: %c", kyTu); 10. }else if (kyTu >= 'A' && kyTu <= 'Z'){ 11. kyTu = kyTu - 'A' + 'a'; 12. printf("Chuyen sang chu thuong: %c", kyTu); 13. }else 14. printf("Khong phai chu"); 15. ... Bài tập 3.3 – Phương trình bậc nhất Giải phương trình bậc nhất ax + b = 0. Gợi ý: Nhập giá trị cho a và b  Kiểm tra các trường hợp  a = 0  b = 0  PT có vô số nghiệm  b ≠ 0  PT vô nghiệm  a ≠ 0  PT có nghiệm x = -b/a Nhập môn lập trình - Rẽ nhánh27 Tham khảo 3.3 – Phương trình bậc nhất Nhập môn lập trình - Rẽ nhánh28 1. #include 2. int main() 3. { 4. float a, b, x; 5. // Nhập a, b 6. if (a == 0) 7. if (b == 0) 8. printf("PT vo so nghiem"); 9. else 10. printf("PT vo nghiem"); 11. else{ 12. x = -b/a; 13. printf("PT co Nghiem x = %f", x); 14. } 15. ... Bài tập 3.4 – Phương trình bậc hai Giải phương trình bậc hai ax2 + bx + c = 0. Gợi ý:  Kiểm tra các trường hợp  a = 0  Giải phương trình bậc nhất bx + c = 0  a ≠ 0  Tính Delta  Kiểm tra Delta  Delta > 0: Hai nghiệm  Delta = 0: Nghiệm kép  Delta < 0: Vô nghiệm Nhập môn lập trình - Rẽ nhánh29 Tham khảo 3.4 – Phương trình bậc hai Nhập môn lập trình - Rẽ nhánh30 1. #include 2. int main() 3. { 4. float a, b, c, Delta, x; 5. // Nhập a, b, c 6. if (a == 0) 7. // Giải phương trình bx + c = 0 8. else{ 9. Delta = b*b – 4*a*c; 10. if (Delta < 0) 11. printf("PT vo nghiem"); 12. else if (Delta > 0) 13. ... 14. } 15. ... Bài tập 3.5 – Tìm max Nhập vào 4 số, tìm số có giá trị lớn nhất. Ví dụ: Nhập 5, 9, 1, 8 max = 9 Gợi ý: Cho max giá trị ban đầu, lần lượt kiểm tra max với các số  Tạm cho max = a  Nếu max < b  max = b  Nếu max < c  max = c  Nếu max < d  max = d Nhập môn lập trình - Rẽ nhánh31 Tham khảo 3.5 – Tìm max Nhập môn lập trình - Rẽ nhánh32 1. #include 2. int main() 3. { 4. float a, b, c, d, max; 5. // Nhập a, b, c, d 6. max = a; 7. if (max < b) 8. max = b; 9. if (max < c) 10. max = c; 11. ... Bài tập 3.6 – Sắp xếp Nhập vào 4 số, hãy sắp xếp giá trị của 4 số theo thứ tự tăng dần. Ví dụ: Nhập vào 5, 9, 1, 8 xuất ra 1, 5, 8, 9. Gợi ý:  Cần hoán vị (x, y): tam = x; x = y; y = tam;  Tìm min (a, b, c, d)  Nếu a>b: hoán vị (a, b); nếu a>c: hoán vị (a, c); nếu a>d: hoán vị (a, d)  Tìm min (b, c, d)  Nếu b>c: hoán vị (b, c); nếu b>d: hoán vị (b, d)  Tìm min (c, d)  Nếu c > d: hoán vị (c, d) Nhập môn lập trình - Rẽ nhánh33 Tham khảo 3.6 – Sắp xếp Nhập môn lập trình - Rẽ nhánh34 1. #include 2. int main() 3. { 4. float a, b, c, d, tam; 5. // Nhập a, b, c, d 6. 7. if (a > b){ 8. tam = a; a = b; b = tam; 9. } 10. if (a > c){ 11. tam = a; a = c; c = tam; 12. } 13. if (a > d){ 14. tam = a; a = d; d = tam; 15. } 16. if (b > c){ 17. ... Bài tập 3.7 – Xếp loại Viết chương trình nhập điểm trung bình và xếp loại sinh viên theo tiêu chí sau:  9 <= ĐTB: Xuất sắc  8 <= ĐTB < 9: Giỏi  7 <= ĐTB < 8: Khá  5 <= ĐTB < 7: Trung bình  5 > ĐTB: Yếu  Gợi ý:  Kiểm tra các trường hợp dùng if else if else Nhập môn lập trình - Rẽ nhánh35 1. if (DTB >= 9) 2. printf("Xuat sac"); 3. else if (DTB >= 8) 4. printf("Gioi"); 5. else if (DTB >= 7) 6. printf("Kha"); 7. ... Tham khảo 3.7 – Xếp loại Nhập môn lập trình - Rẽ nhánh36 1. #include 2. int main() 3. { 4. float DTB; 5. // Nhập DTB 6. 7. if (DTB >=0 && DTB <=10){ 8. if (DTB >= 9) 9. printf("Xuat sac"); 10. else if (DTB >= 8) 11. printf("Gioi"); 12. ... 13. }else 14. printf("Nhap khong dung"); 15. ... Bài tập 3.8 – Tiền taxi Tính tiền đi taxi từ số km nhập vào. Biết:  1 km đầu giá 15000đ  Từ km thứ 2 đến km thứ 5 giá 13500đ  Từ km thứ 6 trở đi giá 11000đ  Nếu trên 120km được giảm 10% tổng tiền.  Gợi ý  Mỗi km có giá khác nhau, ví dụ số km là 3 thì số tiền gồm giá 1 km đầu và giá của 2 km sau đó: 15000 x 1 + 13500 x 2  Tính tiền theo các công thức khác nhau cho các trường hợp số km khác nhau Nhập môn lập trình - Rẽ nhánh37 Bài tập 3.9 – Tam giác Nhập vào 3 số, kiểm tra đó có phải là ba cạnh của tam giác hay không không? Nếu là tam giác thì đó là tam giác đều, tam giác cân, tam giác vuông hay tam giác thường? Ví dụ: Nhập vào 3, 4, 7: Xuất: “3, 4, 7 khong phai ba canh cua tam giac” Nhập vào 3, 4, 5: Xuất: “3, 4, 5 la ba canh tam giac vuong” Gợi ý:  Điều kiện tam giác: Tổng hai cạnh bất kỳ lớn hơn cạnh còn lại  a + b > c && b + c > a && a + c > b  Kiểm tra loại tam giác theo tính chất của từng loại Nhập môn lập trình - Rẽ nhánh38 Bài tập 3.10 – Thời gian Nhập môn lập trình - Rẽ nhánh39  Nhập vào 3 số nguyên tương ứng với giờ phút giây của một đồng hồ điện tử.  Kiểm tra xem 3 số có thoả mãn điều kiện giờ phút giây?  Giờ: [0..23], Phút: [0..59], Giây: [0..59]  Nếu thoả mãn điều kiện trên: Hãy cho biết sau một giây, thời gian sẽ hiện thị như thế nào?  Gợi ý: Số giây tăng lên một, có thể xảy ra các trường hợp:  Nếu số giây tăng đến 60: giây sẽ trở về 0 và tăng phút.  Nếu số phút tăng đến 60: phút sẽ trở về 0 và tăng giờ.  Nếu số giờ tăng đến 24: giờ sẽ trở về 0 (sang ngày mới). Bài tập 3.11 – Đọc số Nhập môn lập trình - Rẽ nhánh40 Nhập vào một số nguyên có 3 chữ số,  Kiểm tra xem số nguyên ấy có đúng 3 chữ số hay không?  Nếu đúng 3 chữ số: Xuất ra màn hình dạng chữ. Ví dụ:  Nhập vào số 36, xuất: “Khong phai so co ba chu so”  Nhập vào số 365, xuất: “Ba tram sau muoi lam”.  Nhập vào số 305, xuất: “Ba tram le nam”. Gợi ý:  Tính số hàng trăm, hàng chục và hàng đơn vị, hai cách:  tram = so/100; chuc = (so/10)%10; donVi = so%10;  t = so; donVi = t%10; t/=10; chuc = t%10; t/=10; tram=t%10;  Lần lượt xuất các số hàng trăm, chục, đơn vị dùng switch

Các file đính kèm theo tài liệu này:

  • pdfbai_giang_nhap_mon_lap_trinh_chuong_3_lenh_re_nhanhlua_chon.pdf