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

ppt 51 trang phuongnguyen 2271
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Cơ sở lập trình - Chương 3: 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:

  • pptbai_giang_co_so_lap_trinh_chuong_2_cau_truc_dieu_khien.ppt

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

  1. * Lệnh 1; Lệnh 2; TUẦN TỰ Lệnh 3; . RẼ NHÁNH CÓ if ĐIỀU KIỆN if else LỰA CHỌN switch case for LẶP while do while 2
  2. * Tuâǹ tự thực thi tiêń trinh,̀ môĩ lênḥ được thực thi theo môṭ chuôĩ từ trên xuông,́ xong lênḥ naỳ rôì chuyên̉ xuônǵ lênḥ kê ́ tiêp.́ 3
  3. void main() { int a, b, tong, hieu, tich; float thuong; cout >a; cout >b; tong = a + b; hieu = a - b; tich = a * b; thuong = (float)a / b; //Ép kiểu cout<<"Tong: " <<tong; cout<<"Hieu: “<<hieu; cout<<"Tich: “<<tich; 4 cout<<"Thuong: “<<thuong; }
  4. * *Cấu trúc rẽ nhánh chỉ cho máy tính chọn thực hiện một dãy lệnh nào đó dựa vào kết quả của một điều kiện (biểu thức quan hệ hay biểu thức so sánh) *Gồm 2 dạng: Chỉ xét trường hợp đúng if (biêủ thức điêù kiên)̣ { ̣ ; } Nêú biêủ thức điêù kiêṇ cho kêt́ qua ̉ true thi ̀ thực hiêṇ khôí lênḥ bên trong if. 5
  5. Vi ́ du:̣ Viết chương trình nhập vào một số nguyên từ 1 đến 10, nếu nhập sai thì thông báo void main() { int k; cout >k; if (k 10) { cout<<"So vua nhap khong hop le"; } } 6
  6. Xét cả hai trường hợp đúng và sai: if (biêủ thức điêù kiên)̣ { ; } else { ; } Nêú biêủ thức điêù kiêṇ cho kêt́ qua ̉ true thi ̀ thực hiêṇ khôí lênḥ 1, ngược laị thi ̀ cho thực hiêṇ khôí lênḥ thứ 2 7
  7. Ví dụ 1: Nhập vào số nguyên a và b, nếu a là bội số của b thì in thông báo “a là bội số của b”, ngược lại in “a khong la boi so cua b” cout >a; cout >b; if(a%b==0) else { { cout<<“a la boi so cua b“; cout<<“a khong la boi so cua b“; 8 } }
  8. Cài đặt void main() { int a, b; cout >a; cout >b; if(a%b= =0) { cout<<“a la boi so cua b”; } else { cout<<“a khong la boi so cua b”; } } 9
  9. Vi ́ du ̣ 2: Giaỉ va ̀ biêṇ luâṇ phương trinh:̀ ax+b=0 10
  10. void main() { float a, b; cout >a; cout >b; if (a == 0) { if (b == 0) { cout<<"Phuong trinh vo so nghiem”; } else { cout<<"Phuong trinh vo nghiem”; } } else { cout<<"Phuong trinh co nghiem x = “<< -b / a; } 11 }
  11. * int a=9, b=6; a++; a=a+b ; a=a+( b); if(a%2==0) cout<<"Gia tri cua a la chan”; cout<<"Tong cua a va b la: " <<(a + b); 12
  12. int a=7, b=8; a++; a=a+b ; b; a ; a = ( a)+( b); if(a%2 != 0) cout<<"a la so le”; else cout<<"a la so chan”; cout<<"Gia tri cua a: " <<a; 13
  13. * 1. Nhâp̣ vaò hai sô ́ nguyên a, b. In ra maǹ hinh̀ gia ́ tri ̣ lớn nhât.́ 2. Cho ba sô ́ a, b, c đoc̣ vaò từ baǹ phim.́ Haỹ tim̀ gia ́ tri ̣ lớn nhât́ cuả ba sô ́ trên va ̀ in ra kêt́ qua.̉ 3. Cho ba sô ́ a, b, c đoc̣ vaò từ baǹ phim.́ Haỹ in ra maǹ hinh̀ theo thứ tự tăng dâǹ cać sô.́ (Chi ̉ được dung̀ thêm hai biêń phu).̣ 4. Viêt́ chương trinh̀ nhâp̣ vaò môṭ sô ́ nguyên n gôm̀ ba chữ sô.́ Xuât́ ra maǹ hinh̀ chữ sô ́ lớn nhât́ ở vi ̣ tri ́ nao?̀ Vi ́ du:̣ n=291. Chữ sô ́ lớn nhât́ năm̀ ở hang̀ chuc̣ (chữ số 9). 14
  14. 5. Viêt́ chương trinh̀ nhâp̣ vaò sô ́ nguyên n gôm̀ ba chữ sô.́ Xuât́ ra maǹ hinh̀ theo thứ tự tăng dâǹ cuả cać chữ sô.́ Vi ́ du:̣ n=291. Xuât́ ra 129. 6. Nhâp̣ vaò ngay,̀ thang,́ năm. Kiêm̉ tra xem ngay,̀ thang,́ năm đo ́ co ́ hợp lê ̣ hay không? In kêt́ qua ̉ ra maǹ hinh.̀ 7. Nhâp̣ vaò giờ, phut,́ giây. Kiêm̉ tra xem giờ, phut,́ giây đo ́ co ́ hợp lê ̣ hay không? In kêt́ qua ̉ ra maǹ hinh.̀ 8. Viêt́ chương trinh̀ nhâp̣ vaò ngay,̀ thang,́ năm hợp lê.̣ Cho biêt́ năm naỳ co ́ phaỉ la ̀ năm nhuâṇ hay không? In kêt́ qua ̉ ra maǹ hinh.̀ 9. Viêt́ chương trinh̀ tinh́ diêṇ tich́ va ̀ chu vi cać hinh:̀ tam giac,́ hinh̀ vuông, hinh̀ chữ nhâṭ va ̀ hinh̀ troǹ với những thông tin câǹ được nhâp̣ từ baǹ phim.́ 15
  15. 10. Viêt́ chương trinh̀ tinh́ tiêǹ cước TAXI. Biêt́ răng:̀ km đâù tiên la ̀ 13000đ. Mỗi km tiếp theo la ̀ 12000đ. Nêú lớn hơn 30km thi ̀ môĩ km thêm se ̃ la ̀ 11000đ. Haỹ nhâp̣ sô ́ km sau đo ́ in ra sô ́ tiêǹ phaỉ tra.̉ 11. Nhâp̣ vaò 3 sô ́ nguyên dương. Kiêm̉ tra xem 3 sô ́ đo ́ co ́ lâp̣ thanh̀ tam giać không? Nêú co ́ haỹ cho biêt́ tam giać đo ́ thuôc̣ loaị nao?̀ (Cân, vuông, đêu,̀ ). 12. Viêt́ chương trinh̀ nhâp̣ vaò sô ́ nguyên dương n. Kiêm̉ tra xem n co ́ phaỉ la ̀ sô ́ chinh́ phương hay không? (sô ́ chinh́ phương la ̀ sô ́ khi lâý căn bậc 2 co ́ kêt́ qua ̉ la ̀ nguyên). 16
  16. * switch (biêủ thức) case n1: Trường hợp giá trị biểu thức cać câu lênḥ ; bằng n1 break ; case n2: Trường hợp giá trị biểu thức cać câu lênḥ ; bằng n2 break ; case nk: ̣ ; break ; [default: cać câu lênh]̣ Các trường hợp còn lại  17
  17. Với: *ni la ̀ cać hăng̀ sô ́ nguyên hoặc ky ́ tự. *Phu ̣ thuôc̣ vaò gia ́ tri ̣ cuả biêủ thức viêt́ sau switch, nêu:́ *Gia ́ tri ̣ naỳ = ni thi ̀ thực hiêṇ câu lênḥ sau case ni. *Khi gia ́ tri ̣ biêủ thức không thoả tât́ ca ̉ cać ni thi ̀ thực hiêṇ câu lênḥ sau default nêú co,́ hoăc̣ thoat́ khoỉ câu lênḥ switch. *Khi chương trinh̀ đa ̃ thực hiêṇ xong câu lênḥ cuả case ni naò đo ́ thi ̀ no ́ se ̃ thực hiêṇ luôn cać lênḥ thuôc̣ case bên dưới no ́ ma ̀ không xet́ laị điêù kiêṇ (do cać ni được xem như cać nhan)̃ Vi ̀ vây,̣ đê ̉ chương trinh̀ thoat́ khoỉ lênḥ switch sau khi thực hiêṇ xong môṭ trường hợp, ta dung̀ lênḥ break. 18
  18. Ví dụ: Nhập vào số nguyên n có giá trị từ 1 đến 5. In cách đọc của số đó ra màn hình. void main() { int n; cout >n; switch (n) { case 1: cout<<"So mot”; break; case 2: cout<<"So hai"; break; case 3: cout<<"So ba”; break; case 4: cout<<"So bon”; break; case 5: cout<<"So nam”; break; default : cout<<"Khong doc duoc"; } 19 }
  19. * 13. Viết chương trình nhập vào 1 số nguyên dương gồm 3 chữ số, in ra cách đọc của số này 14. Viết chương trình nhập vào ngày tháng năm, kiểm tra xem ngày tháng năm có hợp lệ không? In kết quả kiểm tra ra màn hình 20
  20. * for ( ; ; ) { ;̣ } * Khởi gán: Dùng để khởi gán giá trị ban đầu cho vòng lặp * Điều kiện lặp: Dùng để kiểm tra điều kiện trước khi thực hiện vòng lặp * Cập nhật: Dùng để cập nhật vòng lặp (tăng hoặc giảm chỉ số lặp) Bât́ ky ̀ biêủ thức naò trong 3 biêủ thức noí trên đêù co ́ thê ̉ vănǵ nhưng phaỉ giữ dâú châḿ phâỷ (;) 22
  21. *Bước 1: Khởi gań *Bước 2: Kiêm̉ tra điêù kiêṇ ― Nêú điều kiện bằng true thi ̀ cho thực hiêṇ cać lênḥ cuả vong̀ lăp,̣ thực hiêṇ cập nhật vòng lặp. Quay trở laị bước 2. ― Ngược laị thoat́ khoỉ lăp.̣ 24
  22. Vi ́ du:̣ In ra maǹ hinh̀ 10 dòng chữ “Xin chao” 25
  23. void main() { for (int dong = 1; dong <= 10; dong++) cout<<"Xin chao“<<endl; } 26
  24. *Vi ́ du:̣ Tinh́ tông:̉ , với n>0 27
  25. * ́ while ( ) lênh/̣ khôí lênh;̣   Lưu y:́ Cach́ hoaṭ đông̣ cuả while giônǵ for 28
  26. Vi ́ du:̣ In ra maǹ hinh̀ 10 dòng chữ “Xin chao” void main() { int dong = 1; while(dong <= 10) { cout<<"Xin chao“<<endl; dong++; } } 29
  27. * do { ; ; } while (điều kiện); 30
  28. *  Thực hiêṇ khôí lênḥ cho đêń khi biêủ thức co ́ gia ́ tri ̣ băng̀ false.  Cấu trúc lặp do while thường dùng cho trường hợp nhập có kiểm tra điều kiện 31
  29. Vi ́ du:̣ Nhập vào một số nguyên dương, nếu nhập sai thì thông báo lỗi và yêu cầu nhập lại. void main() { int n; do{ cout >n; if (n <= 0) cout<<"Nhap sai, hay nhap lai!“<<endl; } while (n <= 0); cout<<"Ban da nhap dung, ket thuc chuong trinh”; } 32
  30.  Ngược lại với cấu trúc lặp for và while (kiêm̉ tra điêù kiêṇ trước khi thực hiêṇ lăp),̣ vong̀ lăp̣ do while thực hiêṇ lênḥ lăp̣ rôì mới kiêm̉ tra điêù kiên.̣ Do đo ́ vong̀ lăp̣ do while thực hiêṇ lênḥ it́ nhât́ môṭ lân.̀ 33
  31. * * Lệnh break: thoát khỏi các cấu trúc switch, while, for, do while chứa nó gần nhất (đang chứa break) tại thời điểm break được gọi thi hành mà không cần kiểm tra kết quả của biểu thức điều kiện. * Tuy nhiên, cần phân biệt với lệnh return là lệnh trả về từ hàm, nghĩa là thoát khỏi hàm đang thi hành, nên cũng giúp thoát luôn khỏi tất cả các vòng lặp. 34
  32. * Lệnh continue: được sử dụng trong các vòng lặp như while, for, do while. Khi lệnh continue được gọi thì chương trình sẽ quay trở về đầu vòng lặp để bắt đầu lần lặp mới (có kiểm tra điều kiện lặp để xác định có lặp tiếp hay không). Nếu có các lệnh còn lại (cùng trong vòng lặp) đặt sau continue sẽ không được thực hiện. Nói tóm lại, lệnh continue dùng để bỏ qua một lần lặp nào đó nếu thỏa điều kiện. 35
  33. Ví dụ: Cho phép người dùng nhập liên tục số nguyên dương, nếu nhập số nguyên âm thì dừng void main() { int n; while (true) { cout >n; if (n <= 0) { cout<<"Ket thuc vong lap”; break; } } 36 }
  34. Vi ́ du:̣ In ra maǹ hinh̀ gia ́ tri ̣ từ 10 đêń 20 trừ đi sô ́ 13 va ̀ sô ́ 17. void main() { for (int k = 10; k <= 20; k++) { cout<<k<<“\t"; if (k == 13 || k == 17) continue; } } 37
  35. * int a=18; for(int i = 1; i <= a; i++) if(a%i == 0) cout<<i <<“\t”; for(int i = 0; i < 5; i++) { for(int j = 0; j <= i; j++) cout<<j<<“\t”; cout<<endl; } 38
  36. int i = 10, s = 0; while(i > 0) { if(i%2 == 0) s+=i; else if(i > 5) s+=2*i; i ; } cout<<“s = ” <<s; 39
  37. int a = 18, i = 1; do{ if(a%i == 0) cout<<i<<“\t”; i++; } while(i <= a); 40
  38. int a = 11, b = 16, i = a; while( i < b ) { if(i%2 == 0) { cout<<i<<"\t"; break; } i++; } 41
  39. int a = 10, s = 0, i = 0; while( i < a ) { i++; if (i % 2 == 0) continue; else s=s+i; } cout<<"s = " <<s; 42
  40. int i = 1, s = 0; while(true) { s = s + i++; if (i % 2) i = i + 2; else i = i + 1; if (i > 20) break; } cout<<"s = " <<s; 43
  41. 15. Viêt́ chương trinh̀ nhâp̣ sô ́ nguyên dương n. Liêṭ kê n sô ́ nguyên tô ́ đâù tiên. 16. Viêt́ chương trinh̀ nhâp̣ vaò hai sô ́ nguyên dương a va ̀ b. Tim̀ ước sô ́ chung lớn nhât́ va ̀ bôị sô ́ chung nho ̉ nhât́ cuả a va ̀ b. 17. Viêt́ chương trinh̀ nhâp̣ vaò môṭ sô ́ nguyên n gôm̀ tôí đa 10 chữ sô ́ (4 bytes). In ra maǹ hinh̀ gia ́ tri ̣ nhi ̣ phân cuả sô ́ trên. (Hướng dân:̃ chia lâý dư cho 2 va ̀ xuât́ theo thứ tự ngược lai).̣ 18. Viêt́ chương trinh̀ đêḿ sô ́ ước sô ́ cuả sô ́ nguyên dương N. Vi ́ du:̣ N=12 sô ́ ước sô ́ cuả 12 la ̀ 6 44
  42. 19. Môṭ sô ́ hoaǹ thiêṇ la ̀ môṭ sô ́ co ́ tông̉ cać ước sô ́ cuả no ́ (không kê ̉ no)́ băng̀ chinh́ no.́ Haỹ liêṭ kê cać sô ́ hoaǹ thiêṇ nho ̉ hơn 30000. Vi ́ du:̣ sô ́ 6 la ̀ sô ́ hoaǹ thiêṇ vi ̀ tông̉ cać ước sô ́ la ̀ 1+2+3 = 6. 20. Nhâp̣ vaò ngay,̀ thang,́ năm. Cho biêt́ đo ́ la ̀ ngaỳ thứ mâý trong năm. 21. In ra daỹ sô ́ Fibonaci * f1 = f0 =1; * f = f + f ; (n>1) n n-1 n-2­ 45
  43. * *Xác định xem chương trình có sử dụng những biến nào; *Giá trị ban đầu của mỗi biến; *Những biến nào sẽ bị thay đổi trong quá trình chạy chương trình thì lập thành bảng có dạng sau: Bước (hoặc lần Kết quả trả về lặp hoặc dòng Biến 1 Biến 2 Biến k (hoặc in ra lệnh thực hiện) màn hình) 0 Giá trị 0 Giá trị 0 Giá trị 0 1 Giá trị 1 Giá trị 1 Giá trị 1 2 Giá trị 2 Giá trị 2 Giá trị 2  Lưu ý từng lệnh và xét kỹ giá trị của biểu thức điều kiện 46 trong đoạn chương trình
  44. * *Dùng để xác định lỗi logic (lỗi giải thuật) trong chương trình. Măc̣ du ̀ chương trinh̀ không coǹ lôĩ nhưng khi chaỵ chương trinh̀ vâñ ra kêt́ qua ̉ sai, những lôĩ đo ́ co ́ thê ̉ la:̀ *Dung̀ châḿ phâỷ sau: if, else, for, while mà chưa thực hiêṇ lênh;̣ *Không dùng cặp dấu ngoặc ({}) để bao khối lệnh; *Khai baó sai kiêủ dữ liêu,̣ không ép kiểu dữ liệu; *Chia cho 0; *Không co ́ điêù kiêṇ dừng (điêù kiêṇ dừng sai); *Phân tich́ giải thuâṭ thiêú (chưa vet́ hêt́ cać trường hợp) hoăc̣ sai; 47
  45. *Bước 1: Đặt dấu nháy vào vị trí bắt đầu cần kiểm tra lỗi 48
  46. *Bước 2: Nhấn phím Ctrl + F10 49
  47. *Quan sát vị trí dấu mũi tên trên cửa sổ viết code để xác định dòng lệnh đang thực hiện. *Cửa sổ Locals (View\ Debug Windows\ Variables hoặc nhấn phím Alt+4) sẽ thể hiện tên (name), giá trị (value) và kiểu (type) của các biến cục bộ trong đoạn chương trình. *Cửa sổ Watch (View\ Debug Windows\ Watch hoặc nhấn Alt+3) cũng có thể quan sát chi tiết biến tương tự như cửa sổ Locals, nhưng chỉ thể hiện những biến nào mà ta nhập tên biến tương ứng vào cửa sổ này. 50
  48. *Bước 3: Nhấn phím F10 để thực hiện lệnh kế tiếp (hoặc hàm kế tiếp). Nếu muốn xem lệnh thực hiện bên trong của hàm thì nhấn phím F11 (nếu lệnh là lời gọi thực hiện hàm – lưu ý: không nên nhấn phím F11 khi thực hiện các hàm thư viện (ví dụ: cin, cout) 51