Bài giảng Kỹ thuật lập trình - Chương 3: Các cấu trúc điều khiển

pptx 40 trang cucquyet12 6100
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Kỹ thuật lập trình - Chương 3: Các cấu trúc điều khiển", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pptxbai_giang_ky_thuat_lap_trinh_chuong_3_cac_cau_truc_dieu_khie.pptx

Nội dung text: Bài giảng Kỹ thuật lập trình - Chương 3: Các cấu trúc điều khiển

  1. Chương 3: Các cấu trúc điều khiển 8/14/2021 1
  2. Agenda  Giới thiệu  Cấu trúc lựa chọn if  Cấu trúc lựa chọn switch  Cấu trúc lặp while, do while, for 8/14/2021 2
  3. 1. Giới thiệu  Một chương trình bao gồm nhiều câu lệnh. Thông thường, các câu lệnh được thực hiện 1 cách lần lượt theo thứ tự mà chúng được viết ra. Các câu lệnh điều khiển cho phép thay đổi trật tự nói trên.  Có 3 loại cấu trúc điều khiển cơ bản: ◦ Cấu trúc tuần tự (sequence), ◦ Cấu trúc lựa chọn (selection). ◦ Cấu trúc lặp (repetition or loop). 8/14/2021 3
  4. 1. Giới thiệu  Lệnh (statement): là một biểu thức kết thúc bởi dấu “;” ◦ Ví dụ: a++;  Khối lệnh (block): là một dãy bao gồm một hay nhiều lệnh được bao bọc bởi cặp dấu { }. ◦ Về mặt cú pháp, khối lệnh tương đương với 1 câu lệnh đơn ◦ Ví dụ: if (a<b) { temp=a; a=b; b=temp; } 8/14/2021 4
  5. 2. Cấu trúc điều khiển If (dạng 1) Cấu trúc if có 2 dạng tổng quát :  Dạng 1: if (expression) statement; ◦ expression: biểu thức luận lý (có giá trị là true hay false) ◦ statement: Câu lệnh 8/14/2021 5
  6. 2. Cấu trúc điều khiển If (dạng 1)  Ví dụ: Viết chương trình nhập vào một số thực a. In ra màn hình kết quả kiểm tra a có phải là 1 số âm hay dương? #include #include int main() { int a; cout > a; if(a>=0) cout << a << " is a positive.”; getch(); return 0; } 8/14/2021 6
  7. 2. Cấu trúc điều khiển If (Dạng 2)  Dạng 2: if (expression) statement1; else statement2; 8/14/2021 7
  8. 2. Cấu trúc điều khiển If (Dạng 2)  Ví dụ 1 : Viết chương trình nhập vào một số thực a. In ra màn hình kết quả kiểm tra a có phải là 1 số âm hay dương? #include #include int main() { int a; cout > a; if(a>=0) cout << a << " is a positive.”; else cout << a << " is a negative.”; getch(); return 0; } 8/14/2021 8
  9. 2. Cấu trúc điều khiển If (Dạng 2)  Lưu ý: ◦ Ta có thể sử dụng các câu lệnh if else lồng nhau. Trong trường hợp if else lồng nhau thì else sẽ kết hợp với if gần nhất chưa có else. ◦ Trong trường hợp câu lệnh if “bên trong” không có else thì phải viết nó trong cặp dấu {} (coi như là khối lệnh) để tránh sự kết hợp else if sai.  Ví dụ: if (n>0) if (n>0) { if (a>b) if (a>b) z=a; z=a; else else z=b; z=b; 8/14/2021) 9
  10. 2. Cấu trúc điều khiển If (Dạng 2)  Khi muốn thực hiện 1 trong n quyết định, ta có thể sử dụng toán tử if dưới dạng sau: if(expression_1) statement_1; else if (expression_2) statement_2; else if (expression_n-1) statement_n-1; else statement_n; 8/14/2021 10
  11. 2. Cấu trúc điều khiển If (Dạng 2)  Ví dụ: if (ch >= '0' && ch = '0' && ch = 'A' && ch = 'A' && ch = 'a' && ch = 'a' && ch <= 'z') cout<<“Chu thuong”; else cout<<“ktu dac biet”; } } 8/14/2021 11
  12. 2. Cấu trúc điều khiển If (Dạng 2)  Ví dụ 2: Viết chương trình nhập vào một số nguyên dương là tháng trong năm và in ra số ngày của tháng đó. Biết rằng: ◦ Tháng có 31 ngày: 1, 3, 5, 7, 8, 10, 12 ◦ Tháng có 30 ngày: 4, 6, 9, 11 ◦ Tháng có 28 hoặc 29 ngày : 2 8/14/2021 12
  13. 2. Cấu trúc điều khiển If (Dạng 2)  Ví dụ 3: Giả sử để theo dõi trình độ cán bộ ta dùng bảng mã sau: Mã Trình độ 1 Sơ cấp 2 Trung cấp 3 Cao đẳng 4 Đại học 5 Cao học 6 Phó tiến sĩ 7 Tiến sĩ ◦ Viết chương trình để từ mã và suy ra trình độ học vấn.  Ví dụ 4: Viết chương trình giải phương trình bậc 2 8/14/2021 13
  14. 3. Cấu trúc lựa chọn switch  Cấu trúc switch switch (expression) là một cấu trúc { case value_1: lựa chọn có statement_1; nhiều nhánh. [break;] Khi có nhiều sự lựa chọn thi đây case value_n: là cấu trúc phù statement_n; hợp thay vì phải [break;] dùng một chuỗi [default: lệnh if else lồng statement;] } nhau. 8/14/2021 14
  15. 3.Cấu trúc lựa chọn switch 8/14/2021 15
  16. 3. Cấu trúc lựa chọn switch Giải thích:  Trước hết chương trình se định giá trị của expression. ◦ Nếu giá trị của expression bằng value_1 thì thực hiện statement_1 rồi thoát. ◦ Nếu giá trị của expression khác value_1 thì so sánh với value_2, nếu bằng value_2 thì thực hiện statement_2 rồi thoát , so sánh tới value_n. ◦ Nếu tất cả các phép so sánh trên đều sai thì thực hiện statement của trường hợp default. 8/14/2021 16
  17. 3. Cấu trúc lựa chọn switch Lưu ý:  Biểu thức trong switch() phải có kết quả là giá trị kiểu số nguyên (int, char, long, short).  Các giá trị sau case cũng phải là kiểu số nguyên.  Không bắt buộc phải có default.  Thông thường sau mỗi câu lệnh statement có 1 câu lệnh break; Khi thực hiện lệnh tương ứng của case có giá trị bằng expression, chương trình thực hiện lệnh break để thoát ngay lập tức mà không tiếp tục kiểm tra các case tiếp theo. Ví dụ 1: Nhập vào một số nguyên và kiểm tra xem đây là 1 số chẵn hay là số lẻ. 8/14/2021 17
  18. 3. Cấu trúc lựa chọn switch #include #include void main () { int n, remainder; cout >n; remainder = (n % 2); switch(remainder) { case 0: cout << n << ” is an even."; break; case 1: cout << n << ” is an odd."; break; } } 8/14/2021 18
  19. 3. Cấu trúc lựa chọn switch  Ví dụ 2: Nhập vào 2 số nguyên và 1 phép toán. ◦ Nếu phép toán là ‘+’, ‘-‘, ‘*’ thì in ra kết qua là tổng, hiệu, tích của 2 số. ◦ Nếu phép toán là ‘/’ thì kiểm tra xem số thứ 2 có khác không hay không? Nếu khác không thì in ra thương của chúng, ngược lại thì in ra thông báo “Cannot divide by zero!”.  Ví dụ 3: Yêu cầu người thực hiện chương trình nhập vào một số nguyên dương là tháng trong năm và in ra số ngày của tháng đó. ◦ Tháng có 31 ngày: 1, 3, 5, 7, 8, 10, 12 ◦ Tháng có 30 ngày: 4, 6, 9, 11 ◦ Tháng có 28 hoặc 29 ngày : 2 ◦ Nếu nhập vào số 12 thì in ra câu thông báo “There is no month like this”. 8/14/2021 19
  20. 4. Cấu trúc lặp (Loop structures)  Cấu trúc lặp cho phép lặp đi lặp lại nhiều lần 1 câu lệnh hay 1 khối lệnh nào đó cho đến khi biểu thức điều kiện còn thỏa.  Các loại cấu trúc lặp: ◦ Cấu trúc while ◦ Cấu trúc do while ◦ Cấu trúc for 8/14/2021 20
  21. 4.1 Cấu trúc while  Cấu trúc while cho phép thực hiện statement trong khi expression vẫn còn đúng  Cú pháp while (expression) statement; 8/14/2021 21
  22. 4.1 Cấu trúc while  Lưu đồ cú pháp 8/14/2021 22
  23. 4.1 Cấu trúc while  Ví dụ 1: viết chương trình tính tổng của tất cả các số nguyên từ 1 tới n.  Ví dụ 2: viết chương trình in ra tất cả các số nguyên từ 1 tới 10.  Lưu ý: vòng lặp phải kết thúc ở một điểm nào đó, vì vậy bên trong vòng lặp phải cung cấp một phương thức nào đó để buộc trở thành sai nếu không thì chương trình sẽ lặp vô tận 8/14/2021 23
  24. 4.2 Cấu trúc do while  Cấu trúc do while dùng để lặp 1 statement trong khi expression là true. Statement luôn được thực hiện ít nhất lần do { statement; } while (condition ); 8/14/2021 24
  25. 4.2 Cấu trúc do while  Ví dụ 1: Viết đoạn chương trình in dãy số nguyên từ 1 đến 10. void main() { int counter = 1; //khởi tạo giá trị của biến counter do { cout << counter << " "; // hiển thị counter counter++; // tăng counter } while ( counter <= 10 ); // end do while cout << endl; // output a newline } 8/14/2021 25
  26. 4.2 Cấu trúc do while Kết quả sau khi chạy chương trình: 1 2 3 4 5 6 7 8 9 10 8/14/2021 26
  27. 4.2 Cấu trúc do while  Ví dụ 1: Viết đoạn chương trình in dãy số nguyên từ 1 đến 10. #include #include #include #include void main() void main () { { int i; int i; clrscr(); clrscr(); cout<<”Display one to ten: "; cout<<"Display one to ten: "; i=1; i=1; while (i<=10) do { { cout<< “ ” << i; cout << “ “ << i; i++; i+=1; } } while(i<=10); getch(); getch(); } } 8/14/2021 27
  28. 4.2 Cấu trúc do while  Ví dụ 1: Viết chương trình in các số chẵn trong đoạn từ 1 đến n.  Ví dụ 2: Viết chương trình tính tổng các số chẵn trong đoạn từ 1 đến n. 8/14/2021 28
  29. 4.3. Cấu trúc lặp for:  Chức năng chính của vòng lăp for là lặp lại một đọan lệnh nào đó đến khi nào exp2 còn mang giá trị true, vòng lặp for thường sử dụng trong những chương trình mà số lần lặp lại một đọan lệnh nào đó được biết trước. Cú pháp: for(exp1; exp2; exp3) statements; khởi tạo điều kiện dừng điều khiển lặp 8/14/2021 DTTH 29
  30. 4.3. Cấu trúc lặp for: 8/14/2021 DTTH 30
  31. 4.3. Cấu trúc lặp for: 8/14/2021 31
  32. 4.3. Cấu trúc lặp for:  Ví dụ: Viết chương trình xuất các số nguyên từ n → 1 for (int i = 10; i>= 1; i) cout << setw(4) << i;  C++ cho phép biểu thức đầu tiên trong vòng lặp for là một định nghĩa biến. 8/14/2021 32
  33. 4.3 Cấu trúc lặp for  Bất kỳ biểu thức nào trong 3 biểu thức của vòng lặp for đều có thể rỗng. Xóa tất cả các biểu thức cho chúng ta một vòng lặp vô hạn. for (;;) // vòng lặp vô hạn { statements; } for (int i=1;;i++) // vòng lặp vô hạn { statements; } for (;i<=n;i+=3) // vòng lặp vô hạn { statements; } 8/14/2021 33
  34. 4.3 Cấu trúc lặp for  Ví dụ:  for ( int i = 1; i = 1; i )  for ( int i = 7; i = 2; i -= 2 )  for ( int i = 2; i = 0; i -= 11 ) 8/14/2021 34
  35. 5.CÁC LỆNH RẼ NHÁNH VÀ LỆNH NHẢY 1. Lệnh break thường dùng trong phần case của cấu trúc switch để thoát khỏi cấu trúc switch sau khi các lệnh tương ứng của case đã được thực hiện. ◦ Trong các cấu trúc lặp, nếu muốn thoát khỏi 1 vòng lặp tức thì mà không chờ cho đến khi biểu thức điều kiện (conditional expression) của cấu trúc đuợc định trị là false, ta dùng lệnh break. ◦ Lệnh break thường liên đới với một câu lệnh if trong những truờng hợp này. Không sử dụng lệnh break bên ngoài các cấu trúc lặp như while, do while, for hay cấu trúc switch. 8/14/2021 35
  36. 5.CÁC LỆNH RẼ NHÁNH VÀ LỆNH NHẢY Ví dụ 1: Output: 1 2 3 4 8/14/2021 36
  37. 5.1 Break  Ví dụ 2: Viết chương trình tính tổng các số nguyên được nhập từ bàn phím, chương trình được kết thúc khi nhập số âm. void main() { int num,sum=0; clrscr(); while(1) { cout > num; if (num < 0) break; sum += num; } cout<<"\nSum all inputs is " << sum; getch(); } 8/14/2021 37
  38. 5.2 Lệnh “continue”  Trái ngược với lệnh “break”, lệnh “continue” dùng để bắt đầu một vòng mới của chu trình bên trong nhất chứa nó. 8/14/2021 38
  39. 5.2 Lệnh “continue” Output: 1 2 3 4 6 7 8 9 10 8/14/2021 39
  40. 5.2 Lệnh “continue” Ví dụ: một vòng lặp thực hiện đọc một số, xử lý nó nhưng bỏ qua những số âm, và dừng khi số là 0, có thể diễn giải như sau: Cách 1: Cách 2: do do { { cin >> num; cin >> num; if (num = 0) { { // process num here // process num here } } } while (num != 0); } while (num != 0); 8/14/2021 40