Nhập môn về lập trình C5 Slide 9Vòng lặp while Lưu đồ vận hành condition condition Statement Sai Đúng Điều kiện đi trước Kết thúc lặp... Lặp dựa trên biến đếm Kỹ thuật sử dụng m
Trang 1Nhập môn về lập trình (C5) Slide 1
Chương 5
Vòng lặp
while / do-while / for
Presenter:
Trang 2Learning outcomes
L.O.3.1 – Liệt kê được các kiểu điều khiển và vẽ sơ đồ mô
tả chúng
L.O.3.2 – Mô tả được được nguyên tắc kết hợp các kiểu
điều khiển để mô tả các giải thuật
L.O.3.3 – Hiện thực được các kiểu điều khiển bằng ngôn
ngữ C
L.O.3.4 – Sử dụng các cấu trúc điều khiển để giải quyết bài
toán thực tế
Trang 6 Có thể phân loại vòng lặp theo các tiêu chuẩn sau :
• Điều kiện : đi trước hoặc đi sau.
• Số lần lặp : biết trước hoặc không biết trước.
Trang 8Vòng lặp while
Cú pháp : while ( condition ) statement
Nghĩa là : trong khi điều kiện condition còn đúng thì làm phát biểu statement
Trang 9Nhập môn về lập trình (C5) Slide 9
Vòng lặp while
Lưu đồ vận hành
condition condition
Statement
Sai
Đúng
Điều kiện đi trước
Kết thúc lặp
Trang 11Nhập môn về lập trình (C5) Slide 11
Vòng lặp while
Trang 13while biểế n đểế m nhoổ hơn hoặc bằng 10
yểu cầầ u người dùng nhập giá trị tiểế p theo đọc giá trị
cộng giá trị này vào total cộng biểế n đểế m lển 1
giá trị trung bình bằng total chia cho 10
in giá trị trung bình
Trang 14Lặp dựa trên biến đếm
Kỹ thuật sử dụng một biến để đếm số lần lặp
Vòng lặp dừng khi biến đếm vượt quá một số cho trước
Gọi là lặp dựa trên biến đếm (counter-controlled
repitition)
Lặp hữu hạn vì biết trước số lần lặp
Trang 16Lặp dựa trên biến đếm
Trang 17 Khác với bài toán trước:
• Chúng ta không biết trước số lần nhập
• Làm sao biết khi nào dừng nhập điểm?
Trang 18Lặp dựa trên biến cờ
Dùng biến cờ (sentinel) để báo kết thúc nhập
Giá trị biến cờ phải không lẫn lộn với giá trị nhập vào có nghĩa
• Điểm là số nguyên không âm
Trang 19Nhập môn về lập trình (C5) Slide 19
Từ trên xuống, tinh chỉnh từng bước
Kỹ thuật xây dựng ứng dụng có cấu trúc chặt chẽ
Trên là một câu lệnh thể hiện chức năng chung của ứng
dụng
xác định điểổ m trung bình cuổ a lớp
Chỉ thể hiện ứng dụng, chưa đủ để viết ứng dụng C#
Bắt đầu tinh chỉnh
Trang 20Từ trên xuống, tinh chỉnh từng bước
Chia trên thành các tác vụ nhỏ hơn và liệt kê theo thứ tự
thực hiện
Bước tinh chỉnh đầu tiên:
khơổ i tạo biểế n nhập giá trị, tính tổổ ng lại rổầ i đểế m sổế điểổ m đã nhập tính toán và in ra điểổ m trung bình
Mỗi lần tinh chỉnh mô tả cùng giải thuật, chỉ khác về mức
độ chi tiết
Ba bước chung: khởi tạo, nhập và xử lý biến, tính toán
và xuất kết quả
Trang 22Từ trên xuống, tinh chỉnh từng bước
Cần lặp nhưng không biết số lần lặp
while người dùng chưa nhập biểế n cờ
thểm điểổ m vào total cộng biểế n đểế m lển 1 nhắế c người dùng nhập điểổ m tiểế p nhập điểổ m tiểế p (có thểổ là biểế n cờ)
Trang 23Nhập môn về lập trình (C5) Slide 23
Từ trên xuống, tinh chỉnh từng bước
Kiểm tra biến đếm khác 0 để phòng trường hợp ứng dụng
in "Khổng thầế y điểổ m nhập"
Trang 24Từ trên xuống, tinh chỉnh từng bước
int grade, total, counter;
Trang 25Nhập môn về lập trình (C5) Slide 25
Từ trên xuống, tinh chỉnh từng bước
Trang 26Phép chia số nguyên
Ta đã biết rằng phép chia số nguyên trả về phần nguyên, lược bỏ phần thập phân
float average;
average = total / counter;
Dù average có kiểu float, phép chia vẫn không phải
Chuyển đổi tạm thời các giá trị của total và counter thành kiểu float.
Trang 27Nhập môn về lập trình (C5) Slide 27
Phép chia số nguyên
Toán tử ép kiểu một ngôi
average = ( float ) total / counter;
Tạo ra một bản sao total (ở bên phải toán tử) tạm có kiểu số thực dấu chấm động
Giá trị lưu trong total vẫn là số nguyên
Sử dụng toán tử ép kiểu gọi là chuyển đổi tường minh
Trang 28Toán tử gán phức
Một biểu thức
biểế n = biểế n toánTưổ biểổ uThức;
Nếu toánTử là một trong các phép toán +, -, *, /, %
Đều có thể viết lại dưới dạng
biểế n toánTưổ = biểổ uThức;
Toán tử gán phức
Trang 30Toán tử tăng và giảm
C có hai toán tử để thêm hoặc bớt 1 vào giá trị của một biến kiểu số
Toán tử tăng ++
Toán tử giảm
Đặt toán tử ở trước số hạng gọi là prefix
Đặt toán tử ở sau số hạng gọi là postfix
Có sự khác nhau giữa prefix và postfix
Trang 31Nhập môn về lập trình (C5) Slide 31
Toán tử tăng và giảm
// demonstrate postfix increment operator
Trang 32Vòng lặp while
Ví du
Tính tổng các số nguyên S = 1 + 2 + 3 + + n
Để có thể sử dụng vòng lặp, ta cần đưa công thức tính dãy về dạng “từng bước”: S(n) = G[S(n-1)]
Theo dạng này, muốn tính giá trị bước thứ n, phải có giá trị bước thứ (n-1)
Xuất phát của vòng lặp là từ bước n=0
Ta có thể viết lại tổng trên như sau:
S(n) = 1 + 2 + 3 + + (n-1) + n (1)mặt khác ta cũng có:
S(n-1) = 1 + 2 + + (n-2) + (n-1) (2)Vậy, từ (1) và (2) ta suy ra:
Trang 33• Điều khiển vòng lặp while: i <= n (trong khi i chưa bằng n thì vẫn lặp)
Trang 34Vòng lặp while
Ví du
Trang 35Nhập môn về lập trình (C5) Slide 35
Vòng lặp do-while
Tương tự như câu lệnh while
Kiểm tra điều kiện lặp-tiếp tục sau khi thực hiện thân
while ( điềềuKiện );
Trang 36Vòng lặp do-while
Cú pháp và vận hành
Cú pháp : do statement while ( condition ) ;
Nghĩa là : làm phát biểu statement trước 1 lần, sau đó xét điều kiện condition, nếu đúng thì lặp, sai kết thúc
thúc.
• statement có thể là phát biểu ghép { }.
Vòng lặp do-while là vòng lặp có điều kiện đi sau và số lần lặp không biết trước
Trang 37Nhập môn về lập trình (C5) Slide 37
Vòng lặp do-while
Lưu đồ vận hành
condition condition
Statement
Sai
Đúng
Điều kiện đi sau
Kết thúc lặp
Trang 39• Kiều kiện lặp:
(i<=n)
Trang 40Vòng lặp do-while
Code ví du tính giai thừa
Trang 41Nhập môn về lập trình (C5) Slide 41
Vòng lặp for
Nhắc lại: lặp dựa trên biến đếm đòi hỏi:
• Biến điều khiển (biến đếm số lần lặp)
• Giá trị ban đầu của biến điều khiển
• Độ tăng (hoặc giảm) của biến điều khiển sau mỗi lần lặp
• Điều kiện lặp-tiếp tục xác định xem có tiếp tục lặp hay không
Trang 43Nhập môn về lập trình (C5) Slide 43
Vòng lặp for
test the condition ?
Execute the statement (s)
false true
Initialization expression
Exit the for
statement
Enter the for statement
Execute the update statement
Trang 44Vòng lặp for
C cung cấp câu lệnh lặp for
Xác định các yếu tố lặp dựa trên biến đếm chỉ trong một dòng
for ( int counter = 1; counter <= 10; counter++ )
chấm phẩy bắt buộc
Trang 45Nhập môn về lập trình (C5) Slide 45
Vòng lặp for
Cú pháp và vận hành
Cú pháp : for (init opt ; cond opt ; loop opt ) statement
Nghĩa là : làm phát biểu statement trong khi điều kiện
condopt còn đúng
• init opt : là phát biểu khởi động vòng lặp.
• loop opt : là phát biểu điều khiển vòng lặp.
• statement : có thể là phát biểu ghép.
Vòng lặp for cho phép thực hiện vòng lặp có số lần lặp
biết trước nếu dùng các dạng sau :
for (đếm=cậndưới ; đếm<=cậntrên ; tăng đếm ) statement
for (đếm=cậntrên ; đếm>=cậndưới ; giảm đếm ) statement
Trang 46Kết thúc lặp
Trang 49 Với p là số tiền gốc ban đầu, r là lãi suất, n là số năm
Hãy in ra số tiền trong 10 năm đầu
Trang 50amount = principal*pow(1.0 + rate, year);
printf("%d\t%.3f\n", year, amount);
}
Trang 51Nhập môn về lập trình (C5) Slide 51
Vòng lặp for
Trang 56Các lệnh lặp lồng nhau
Trang 57}
Trang 58Các lệnh lặp lồng nhau
Trang 60Các lệnh lặp lồng nhau
Trang 61Nhập môn về lập trình (C5) Slide 61
Các lệnh lặp lồng nhau
Có thể sử dụng các lệnh for, while, do … while lồng nhau
Số cấp lồng nhau có thể tùy ý
Có thể sử dụng các lệnh for, while, do … while hỗn hợp với nhau
Trang 63Nhập môn về lập trình (C5) Slide 63
break
Dùng break trong while, for, do while, switch
để thoát lập tức khỏi vòng lặp
Thực hiện lệnh kế tiếp sau vòng lặp
Chủ yếu để thoát sớm khỏi vòng lặp
Trang 64 Dùng continue trong while, for, do while
Bỏ các câu lệnh còn lại trong thân vòng lặp
Thực hiện lần lặp tiếp theo
while và do while: kiểm tra điều kiện ngay
for: tăng biến đếm, rồi kiểm tra điều kiện
Trang 66Vòng lặp for
Ví du sắp thứ tự dãy
Trang 67Nhập môn về lập trình (C5) Slide 67
Vòng lặp for
Nhập trị ban đầu và xử lý dãy
Một trong những ứng dụng phổ biến của for là dùng để xử
lý các vấn đề liên quan đến dãy (array)
Trang 71False False false False True false True False false True True True
Trang 74Toán tử điều kiện AND (&&)
Đảm bảo hai điều kiện phải cùng true thì mới thực hiện một luồng thực thi
if ( gender == FEMALE && age >= 65 )
seniorFemales++;
Khi một trong hai điều kiện là false, không tăng biến
seniorFemales
Trang 75Nhập môn về lập trình (C5) Slide 75
Toán tử điều kiện OR (||)
Thực thi nếu chỉ cần một trong hai điều kiện là true
if ( ( semesterAverage >= 90 ) || ( finalExam >= 90 ) )
printf( "Student grade is A" );
Khi cả hai điều kiện đều sai thì mới không thực thi câu lệnh in ra console
Toán tử && có độ ưu tiên cao hơn toán tử ||, đều kết hợp từ trái qua
Trang 76Thứ tự ưu tiên
-1 ! unary - ++ từ phải sang trái
4 < <= > >= từ trái sang phải
8 = += -= *= /= từ phải sang trái
Trang 78true
Trang 81Trâu già 3 con ăn 1 bó,
Hỏi có bao nhiêu trâu đứng, trâu nằm, trâu già!
Trang 83Nhập môn về lập trình (C5) Slide 83
Ví du