Bài giảng Lập trình C# - Bài 5: Các cấu trúc điều khiển - Lê Viết Mẫn

pdf 31 trang cucquyet12 3560
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình C# - Bài 5: Các cấu trúc điều khiển - Lê Viết Mẫ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:

  • pdfbai_giang_lap_trinh_c_bai_5_cac_cau_truc_dieu_khien_le_viet.pdf

Nội dung text: Bài giảng Lập trình C# - Bài 5: Các cấu trúc điều khiển - Lê Viết Mẫn

  1. Các cấu trúc điều khiển (phần 2) v 1.0 - 10/2012 Lê Viết Mẫn - lvman@hce.edu.vn 1 Các cấu trúc điều khiển 2 Monday, September 9, 13
  2. chúng ta đã học Tuần tự Rẽ nhánh Câu lệnh if, switch Lê Viết Mẫn - lvman@hce.edu.vn 2 Các cấu trúc điều khiển 2 Monday, September 9, 13
  3. chúng ta sẽ học Lặp Câu lệnh for, while, do Lê Viết Mẫn - lvman@hce.edu.vn 3 Các cấu trúc điều khiển 2 Monday, September 9, 13
  4. Iteration structures Lệnh lặp : for, while, do Lê Viết Mẫn - lvman@hce.edu.vn 4 Các cấu trúc điều khiển 2 Monday, September 9, 13
  5. for for (statement_1; condition; statement_2) ! statement_3 statement_1 false • Có thể bỏ qua các thành phần trong vòng condition lặp for statement_2 true • statement_1 được dùng để khởi tạo và chỉ được thực hiện 1 lần statement_3 • condition là biểu thức kiểm tra điều kiện lặp lại • statement_3 là một lệnh đơn hoặc lệnh kép mà ta muốn được thực hiện nhiều lần • statement_2 được dùng để cập nhật / thay đổi giá trị của condition Lê Viết Mẫn - lvman@hce.edu.vn 5 Các cấu trúc điều khiển 2 Monday, September 9, 13
  6. for for (statement_1; condition; statement_2) ! statement_3 statement_1 false condition In ra các số từ 0 đến 9, mỗi số trên một dòng statement_2 true for (int i = 0; i < 10; i++) statement_3 Console.WriteLine(i); Lê Viết Mẫn - lvman@hce.edu.vn 6 Các cấu trúc điều khiển 2 Monday, September 9, 13
  7. Ví dụ int i, j; for (i = 0; i < 10; i++) Console.WriteLine(i); // in ra tu 0 - 9 for (i = 0; i < 10; i += 2) Console.WriteLine(i); // in cac so 0, 2, 4, 6, 8 for (i = 0, j = 0; i < 10 && j < 5; i += 2, j++) // toán tử dấu phẩy Console.WriteLine(“{0}\t{1}”, i, j); for (int i = 0; i < 100; i++) // phạm vi của biến i là trong vòng lặp Console.WriteLine(i); Lê Viết Mẫn - lvman@hce.edu.vn 7 Các cấu trúc điều khiển 2 Monday, September 9, 13
  8. Chú ý • Lỗi. Biến i vượt quá phạm vi for (int i = 0; i = 0) Console.Write("i is big\n"); • Không có lỗi vì biến i được khai báo bên ngoài int i; for (i = 0; i = 0) Console.Write("i is big\n"); • Biến i thứ hai là một biến mới for (int i = 0; i < 10; i++) Console.WriteLine(i); for (int i = 0; i < 20; i++) Console.WriteLine(i); Lê Viết Mẫn - lvman@hce.edu.vn 8 Các cấu trúc điều khiển 2 Monday, September 9, 13
  9. Ví dụ - tính giai thừa Viết chương trình tính n! (n giai thừa) ⎧ 1 n = 0 n! = ⎨ ⎩ 1* 2 * * n n ≥ 1 Lê Viết Mẫn - lvman@hce.edu.vn 9 Các cấu trúc điều khiển 2 Monday, September 9, 13
  10. using System; namespace Factorial { class Program { static void Main(string[] args) { int product = 1; int n; Console.Write("CALCULATE FACTORIAL OF A NUMBER\n\n"); Console.Write("Enter a number : "); n = int.Parse(Console.ReadLine()); for (int i = 2; i <= n; i++) // Tai thoi diem nay product = 1 * 2 * * (i-1) = (i-1)! product = product * i; Console.WriteLine("Factorial of {0} is {1}", n, product); Console.ReadKey(); } } } Lê Viết Mẫn - lvman@hce.edu.vn 10 Các cấu trúc điều khiển 2 Monday, September 9, 13
  11. For lồng nhau float windChillIndex; Console.WriteLine("TABLE OF WIND-CHILL INDICES"); Console.Write("degrees F:"); for (int j = 5; j >= -6; j ) Console.Write("{0,5}",10*j); // tieu de cot Console.Write("\n\n"); for (int i = 0; i = -6; j ) { if (i <= 4) windChillIndex = j; else if (i <= 45) windChillIndex = (float)(91.4f - (10.45f + 6.69 * Math.Sqrt(i) - 0.447 * i) * (91.4f - j) / 22); else windChillIndex = 1.6f * j - 55; Console.Write("{0,5}", Math.Floor(windChillIndex + 0.5)); } Console.WriteLine(); } Console.ReadKey(); Lê Viết Mẫn - lvman@hce.edu.vn 11 Các cấu trúc điều khiển 2 Monday, September 9, 13
  12. Kết quả TABLE OF WIND-CHILL INDICES degrees F: 50 40 30 20 10 0 -10 -20 -30 -40 -50 -60 0 mph: 5 4 3 2 1 0 -1 -2 -3 -4 -5 -6 5 mph: 5 4 3 2 1 0 -1 -2 -3 -4 -5 -6 10 mph: 5 4 3 2 1 0 -1 -2 -3 -4 -5 -6 15 mph: 5 4 3 2 1 0 -1 -2 -3 -4 -5 -6 20 mph: 5 4 3 2 1 0 -1 -2 -3 -4 -5 -6 25 mph: 0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 30 mph: -3 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -16 35 mph: -7 -8 -9 -10 -11 -13 -14 -15 -16 -17 -18 -19 40 mph: -10 -11 -12 -13 -15 -16 -17 -18 -19 -20 -22 -23 45 mph: -13 -14 -15 -16 -17 -19 -20 -21 -22 -24 -25 -26 50 mph: -15 -16 -18 -19 -20 -21 -23 -24 -25 -26 -28 -29 Lê Viết Mẫn - lvman@hce.edu.vn 12 Các cấu trúc điều khiển 2 Monday, September 9, 13
  13. Ví dụ • Viết chương trình in ra bảng tính nhân dạng sau : MULTIPLICATION TABLE 1 2 3 4 12 2 4 6 8 24 3 6 9 12 36 . . . . . . . . . . . . . . . 12 24 36 48 144 Lê Viết Mẫn - lvman@hce.edu.vn 13 Các cấu trúc điều khiển 2 Monday, September 9, 13
  14. while Trong khi điều kiện còn hiệu lực (true) thì tiếp tục làm việc này while (condition) ! statement; false condition • Điều kiện được đặt ở đầu vòng lặp true • statement có thể không được thực hiện lần nào statement • statement phải chứa câu lệnh làm thay đổi condition In ra các số từ 0 đến 9, mỗi số trên một dòng int n = 0; int n = 0; while (n < 10) while (n < 10) Console.WriteLine(n++); { Console.WriteLine(n); n = n + 1; } Lê Viết Mẫn - lvman@hce.edu.vn 14 Các cấu trúc điều khiển 2 Monday, September 9, 13
  15. Ví dụ In ngược các số từ 100 đến 1, mỗi số trên một dòng int n = 100; while (n > 0) Console.WriteLine(n ); Nhận vào ngày tháng năm, nếu ngày tháng nhập vào không hợp lệ thì yêu cầu nhập lại getDate(m, d, y); while (!isLegalDate(m, d, y)) { Console.Write("Not a valid date, try again.\n\n"); getDate(m, d, y); } Lê Viết Mẫn - lvman@hce.edu.vn 15 Các cấu trúc điều khiển 2 Monday, September 9, 13
  16. do Chạy cái gì đó trong khi điều kiện đang còn hiệu lực (true) do { statement !statement; } while (condition); true condition • Điều kiện được đặt ở cuối vòng lặp • statement được thực hiện ít nhất một lần false • statement phải chứa câu lệnh làm thay đổi condition In ra các số từ 0 đến 9, mỗi số trên một dòng int n = 0; do { Console.WriteLine(n++); }while (n < 10); Lê Viết Mẫn - lvman@hce.edu.vn 16 Các cấu trúc điều khiển 2 Monday, September 9, 13
  17. Ví dụ Đếm số chữ số của một số int numberOfDigits = 0; int rest = number; do { rest = rest / 10; numberOfDigits++; } while (rest != 0); Lê Viết Mẫn - lvman@hce.edu.vn 17 Các cấu trúc điều khiển 2 Monday, September 9, 13
  18. So sánh Câu lệnh for while do Lưu đồ Số lần lặp Xác định Không xác định Không xác định Số lần lặp tối thiểu 0 0 1 Lê Viết Mẫn - lvman@hce.edu.vn 18 Các cấu trúc điều khiển 2 Monday, September 9, 13
  19. Ngắt vòng lặp • Lệnh break; • kết thúc vòng lặp chứa lệnh này (chương trình tiếp tục với các câu lệnh sau vòng lặp này) • Lệnh continue; • bỏ qua các lệnh còn lại trong vòng lặp • tiếp tục với bước lặp tiếp theo • Lệnh for : thực hiện bước cập nhật rồi kiểm tra • Lệnh while và do : thực hiện bước kiểm tra • Lệnh Environment.Exit(int); • Thoát khỏi chương trình Lê Viết Mẫn - lvman@hce.edu.vn 19 Các cấu trúc điều khiển 2 Monday, September 9, 13
  20. Ví dụ - ngắt vòng lặp Sắp xếp lại mảng sao cho, giá trị ở phần đầu lớn hơn v, phần sau nhỏ hơn v for (;;) { while (a[++i] v); if (j 0; n ) { if (n==5) continue; Console.Write("{0}, ", n); } Lê Viết Mẫn - lvman@hce.edu.vn 20 Các cấu trúc điều khiển 2 Monday, September 9, 13
  21. Ví dụ 1 - máy tính Viết chương trình cho phép thực hiện các phép tính cộng, trừ, nhân, chia cho hai số được nhập vào từ bàn phím. Chương trình sẽ lặp lại việc tính toán này cho đến khi người sử dụng bấm ký tự E hoặc e (Exit). Lê Viết Mẫn - lvman@hce.edu.vn 21 Các cấu trúc điều khiển 2 Monday, September 9, 13
  22. doubleleft; doubleright; char o p ; while (true) { Console.Write("A\tadd\n"); Console.Write("S\tsubtract\n"); Console.Write("M\tmultiply\n"); Console.Write("D\tdivide\n"); Console.Write("E\texit\n"); Console.Write("Operation?: "); op = char.Parse(Console.ReadLine()); if (op == 'E' || op == 'e') Environment.Exit(0); Console.Write("Enter the left hand operand: "); left = double.Parse(Console.ReadLine()); Console.Write("Enter the right hand operand: "); right = double.Parse(Console.ReadLine()); switch (op) { case 'A' : case 'a' : Console.WriteLine(left + right); break; case 'S' : case 's' : Console.WriteLine(left - right); break; case 'M' : case 'm' : Console.WriteLine(left * right); break; case 'D' : case 'd' : Console.WriteLine(left / right); break; } Console.WriteLine(); } Lê Viết Mẫn - lvman@hce.edu.vn 22 Các cấu trúc điều khiển 2 Monday, September 9, 13
  23. Ví dụ 2 - in lịch Viết chương trình in lịch theo tháng, năm và kiểu lịch in theo dạng sau : October, 1948 Sun Mon Tue Wed Thu Fri Sat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Lê Viết Mẫn - lvman@hce.edu.vn 23 Các cấu trúc điều khiển 2 Monday, September 9, 13
  24. Hướng dẫn • In tên tháng, năm • In các thứ theo các cột • In các ngày ứng với các cột thứ • Phải in ngày mồng 1 vào đúng cột của thứ tương ứng. Các ngày tiếp theo được in liên tiếp, khi gặp ngày thứ 7 thì phải in xuống dòng mới • Tính ngày cuối cùng của tháng lastDayOfMonth • Tính ngày tuyệt đối (absoluteDays) cho ngày 1 tháng cần in lịch • firstWeekdayOfMonth = absoluteDays % 7; • firstSaturday = 7 - firstWeekdayOfMonth; Lê Viết Mẫn - lvman@hce.edu.vn 24 Các cấu trúc điều khiển 2 Monday, September 9, 13
  25. Debugging Gỡ lỗi Xem thêm tại Chương 3, sách Lập trình Visual C# thế nào ? Tập 1 (Dương Quang Thiện) Lê Viết Mẫn - lvman@hce.edu.vn 25 Các cấu trúc điều khiển 2 Monday, September 9, 13
  26. Các loại lỗi (bug) • Lỗi cú pháp - syntax error • Lỗi lúc biên dịch - Compile-time error • Lỗi dễ thấy nhất, xảy ra khi viết câu lệnh không đúng qui tắc của ngôn ngữ • Trình biên dịch sẽ thông báo cho chúng ta thông qua những thông điệp sai lầm / các cảnh báo (Error List) • Lỗi ngữ nghĩa - semantic error • Lỗi lúc chạy chương trình - runtime error • Ý nghĩa câu lệnh không đúng như mong muốn • Chương trình bị gãy đổ (crash) cùng với thông báo lỗi hoặc không • Lỗi logic - logic error • Các lỗi ngữ nghĩa mà không làm crash chương trình • Kết quả chương trình không đúng Lê Viết Mẫn - lvman@hce.edu.vn 26 Các cấu trúc điều khiển 2 Monday, September 9, 13
  27. Test • Định nghĩa trước các trường hợp có thể xảy ra lỗi • Kiểm tra (chạy) chương trình với các trường hợp đó để xem chương trình có bị lỗi dự kiến hay không • Nếu không - chương trình được viết tốt cho trường hợp đó • Nếu có - tìm nguyên nhân gây ra lỗi và sửa chữa chương trình • Tìm nguyên nhân gây ra lỗi • Các lệnh điều khiển gỡ lỗi • Công cụ debugger Lê Viết Mẫn - lvman@hce.edu.vn 27 Các cấu trúc điều khiển 2 Monday, September 9, 13
  28. Các lệnh điều khiển gỡ lỗi if (expression) { Console.Write("true"); for (int i = 0; i < exp; i++) { } Console.Write("loop {0}", i); else { } Console.Write("false"); } Lê Viết Mẫn - lvman@hce.edu.vn 28 Các cấu trúc điều khiển 2 Monday, September 9, 13
  29. Tìm hiểu các bước lặp double a = 0.0; for (int i = 0; i < f(a); i++) { int x = ; int y = ; a = f(x + i * y); } a i x y x+i*y 0.0 0 5 14 36.78 36.8 1 19 8 95.03 Lê Viết Mẫn - lvman@hce.edu.vn 29 Các cấu trúc điều khiển 2 Monday, September 9, 13
  30. Chốt ngừng - breakpoint • Là một dấu hiệu báo cho debugger biết tạm ngưng thi hành chương trình ở điểm nào đó • Chương trình lúc này ở chế độ ngắt (break mode) • Chương trình tạm ngưng thi hành và có thể tiếp tục chạy nếu bạn muốn • Các hoạt động của các biến, hàm, đối tượng bị “đóng băng” • Bạn có thể quan sát tình trạng, giá trị các biến, biểu thức và hàm • Có thể thay đổi giá trị các biến • Có thể cho thực thi tiếp từng dòng lệnh trong đoạn mã • Sử dụng thanh công cụ Debug • Mỗi breakpoint còn hỗ trợ các Hit Count và Condition Lê Viết Mẫn - lvman@hce.edu.vn 30 Các cấu trúc điều khiển 2 Monday, September 9, 13
  31. Cảm ơn sự chú ý Câu hỏi ? Lê Viết Mẫn - lvman@hce.edu.vn 31 Các cấu trúc điều khiển 2 Monday, September 9, 13