=
=

Bài 4: Các câu lệnh lặp

I. Lệnh lặp for

Cú pháp:

for( biểu thức 1; biểu thức 2; biểu thức 3){
 Lệnh hoặc khối lệnh ;
}

Toán tử for gồm ba biểu thức và thân for. Thân for là một câu lệnh hoặc một khối lệnh viết sau từ khoá for. Bất kỳ biểu thức nào trong ba biểu thức trên có thể vắng mặt nhưng phải giữ dấu.

Thông thường biểu thức 1 là toán tử gán để tạo giá trị ban đầu cho biến điều khiển, biểu thức 2 là một quan hệ logic biểu thị điều kiện để tiếp tục chu trình, biểu thức ba là một toán tử gán dùng để thay đổi giá trị biến điều khiển.

Hoạt động của vòng lặp for :theo các bước sau:

Nếu biểu thức 2 vắng mặt thì nó luôn được xem là đúng. Trong trường hợp này việc ra khỏi chu trình for cần phải được thực hiện nhờ các lệnh break, goto hoặc return viết trong thân chu trình. Trong dấu ngoặc tròn sau từ khoá for gồm ba biểu thức phân cách nhau bởi dấu; Trong mỗi biểu thức không những có thể viết một biểu thức mà có quyền viết một dãy biểu thức phân cách nhau bởi dấu phảy. Khi đó các biểu thức trong mỗi phần được xác định từ trái sang phải.

Tính đúng sai của dãy biểu thức được tính là tính đúng sai của biểu thức cuối cùng trong dãy này. Trong thân của for ta có thể dùng thêm các toán tử for khác, vì thế ta có thể xây dựng các toán tử for lồng nhau. Khi gặp câu lệnh break trong thân for, máy ra sẽ ra khỏi toán tử for sâu nhất chứa câu lệnh này. Trong thân for cũng có thể sử dụng toán tử goto để nhảy đến một ví trí mong muốn bất kỳ. Xem các ví dụ sau đây để hiểu hơn về for.

Ví dụ 1: Chương trình sau đây dùng lệnh lặp for hiển thị các số nguyên từ 1 đến 9. Nhấn nút Execute màu xanh để xem kết quả.

Ví dụ 2: Chương trình sau đây dùng lệnh lặp for hiển thị tổng các số nguyên từ 1 đến 9. Nhấn nút Execute màu xanh để xem kết quả.

Ví dụ 3: Chương trình sau đây dùng lệnh lặp for hiển thị các số nguyên lẻ từ 1 đến 9. Nhấn nút Execute màu xanh để xem kết quả.

☛ Bài tập:
  • Từ ví dụ 3, nhấn dòng liên kết Edit this program in JDoodle.com để truy cập trang chủ JDoodle.
  • Thay đổi nội dung chương trình C yêu cầu người dùng nhập một số nguyên dương n từ bàn phím. Chương trình hiển thị giá trị tổng S = 1 + 1/2 + 1/3 +...+ 1/n
  • Lưu đến tài khoản cá nhân trên JDoodle.

II. Lệnh lặp while

Toán tử while dùng để xây dựng chu trình lặp dạng:

while(biểu thức) {
 Lệnh hoặc khối lệnh;
}

Như vậy toán tử while gồm một biểu thức và thân chu trình. Thân chu trình có thể là một lệnh hoặc một khối lệnh.

Hoạt động của chu trình như sau:

Máy xác định giá trị của biểu thức, tuỳ thuộc giá trị của nó máy sẽ chọn cách thực hiện như sau : Nếu biểu thức có giá trị 0 (biểu thức sai), máy sẽ ra khỏi chu trình và chuyển tới thực hiện câu lệnh tiếp sau chu trình trong chương trình.

Nếu biểu thức có giá trị khác không (biểu thức đúng), máy sẽ thực hiện lệnh hoặc khối lệnh trong thân của while. Khi máy thực hiện xong khối lệnh này nó lại thực hiện xác định lại giá trị biểu thức rồi làm tiếp các bước như trên.

Chú ý:

Trong các dấu ngoặc ( ) sau while chẳng những có thể đặt một biểu thức mà còn có thể đặt một dãy biểu thức phân cách nhau bởi dấu phảy. Tính đúng sai của dãy biểu thức được hiểu là tính đúng sai của biểu thức cuối cùng trong dãy.

Bên trong thân của một toán tử while lại có thể sử dụng các toán tử while khác. bằng cách đó ta đi xây dựng được các chu trình lồng nhau.

Khi gặp câu lệnh break trong thân while, máy sẽ ra khỏi toán tử while sâu nhất chứa câu lệnh này.

Trong thân while có thể sử dụng toán tử goto để nhảy ra khỏi chu trình đến một vị trí mong muốn bất kỳ. Ta cũng có thể sử dụng toán tử return trong thân while để ra khỏi một hàm nào đó.

Xem các ví dụ for được viết lại dưới dạng while sau đây.

Ví dụ 1: Chương trình sau đây dùng lệnh lặp while hiển thị các số nguyên từ 1 đến 9. Nhấn nút Execute màu xanh để xem kết quả.

Ví dụ 2: Chương trình sau đây dùng lệnh lặp while hiển thị tổng các số nguyên từ 1 đến 9. Nhấn nút Execute màu xanh để xem kết quả.

Ví dụ 3: Chương trình sau đây dùng lệnh lặp while hiển thị các số nguyên lẻ từ 1 đến 9. Nhấn nút Execute màu xanh để xem kết quả.

☛ Bài tập:
  • Từ ví dụ 3, nhấn dòng liên kết Edit this program in JDoodle.com để truy cập trang chủ JDoodle.
  • Thay đổi nội dung chương trình C xuất rà màn hình số nguyên dương n nhỏ nhất sao cho 1 + 2 +...+ n > 10000.
  • Lưu đến tài khoản cá nhân trên JDoodle.

III. Lệnh lặp do/while

Khác với các toán tử while và for, việc kiểm tra điều kiện kết thúc đặt ở đầu chu trình, trong chu trình do while việc kiểm tra điều kiện kết thúc đặt cuối chu trình.

Như vậy thân của chu trình bao giờ cũng được thực hiện ít nhất một lần. Chu trình do while có dạng sau:

do {
 Lệnh hoặc khối lệnh;
} while(biểu thức);

Lệnh hoặc khối lệnh là thân của chu trình có thể là một lệnh riêng lẻ hoặc là một khối lệnh.

Hoạt động của chu trình như sau: Máy thực hiện các lệnh trong thân chu trình. Khi thực hiện xong tất cả các lệnh trong thân của chu trình, máy sẽ xác định giá trị của biểu thức sau từ khoá while rồi quyết định thực hiện như sau:

Chú ý: Những điều lưu ý với toán tử while ở trên hoàn toàn đúng với do while.

Ví dụ 1: Chương trình sau đây dùng lệnh lặp do while hiển thị các số nguyên từ 1 đến 9. Nhấn nút Execute màu xanh để xem kết quả.

Ví dụ 2: Chương trình sau đây dùng lệnh lặp do while hiển thị các số nguyên từ 1 đến 9 nhưng giá trị i chúng ta khởi tạo bằng 10. Nhấn nút Execute màu xanh để xem kết quả.

Kết quả hiển thị giá trị 10 ra màn hình. Trong khi đó nếu dùng while, sẽ không có giá trị nào xuất hiện như sau:

Ví dụ 3: Chương trình sau đây dùng lệnh lặp while hiển thị các số nguyên từ 1 đến 9 nhưng giá trị i chúng ta khởi tạo bằng 10. Nhấn nút Execute màu xanh để xem kết quả.

Đây chính là một trong những khác biệt giữa while và do while.

☛ Bài tập:
  • Từ ví dụ 3, nhấn dòng liên kết Edit this program in JDoodle.com để truy cập trang chủ JDoodle.
  • Thay đổi nội dung chương trình C yêu cầu người dùng nhập số nguyên dương N bất kỳ và xuất ra màn hình số nguyên dương m lớn nhất sao cho 1 + 2 +...+ m > N.
  • Lưu đến tài khoản cá nhân trên JDoodle.

IV. Sử dụng break, continue

Lệnh Break

Câu lệnh break cho phép ra khỏi các chu trình với lệnh điều khiển for, while và switch. Khi có nhiều chu trình lồng nhau, câu lệnh break sẽ đưa máy ra khỏi chu trình bên trong nhất chứa nó không cần điều kiện gì. Mọi câu lệnh break có thể thay bằng câu lệnh goto với nhãn thích hợp.

Ví dụ chương trình sau đây dùng lệnh lặp while hiển thị các số nguyên từ 10 đến 15. Nhấn nút Execute màu xanh để xem kết quả.

Lệnh continue

Trái với câu lệnh break, lệnh continue dùng để bắt đầu một vòng mới của chu trình chứa nó. Trong while và do while, lệnh continue chuyển điều khiển về thực hiện ngay phần kiểm tra, còn trong for điều khiển được chuyển về bước khởi đầu lại (tức là bước: tính biểu thức 3, sau đó quay lại bước 2 để bắt đầu một vòng mới của chu trình).

Chú ý: Lệnh continue chỉ áp dụng cho chu trình tức các lệnh lặp chứ không áp dụng cho switch.

Ví dụ chương trình sau đây dùng lệnh lặp while hiển thị các số nguyên từ 10 đến 19 nhưng bỏ qua số 15. Nhấn nút Execute màu xanh để xem kết quả.

Lệnh nhảy không điều kiện - toán tử goto

Nhãn có cùng dạng như tên biến và có dấu : đứng ở phía sau. Nhãn có thể được gán cho bất kỳ câu lệnh nào trong chương trình.

Ví dụ:

ts : s = s++; thì ở đây ts là nhãn của câu lệnh gán s = s++.

Toán tử goto có dạng: goto nhãn;

Khi gặp toán tử này máy sẽ nhảy tới câu lệnh có nhãn viết sau từ khoá goto.

Khi dùng toán tử goto cần chú ý:

Câu lệnh goto và nhãn cần nằm trong một hàm, có nghĩa là toán tử goto chỉ cho phép nhảy từ vị trí này đến vị trí khác trong thân một hàm và không thể dùng để nhảy từ một hàm này sang một hàm khác. Không cho phép dùng toán tử goto để nhảy từ ngoài vào trong một khối lệnh. Tuy nhiên việc nhảy từ trong một khối lệnh ra ngoài là hoàn toàn hợp lệ. Ví dụ như đoạn chương trình sau là sai.

goto n1;
... {
...
n1: printf("\n Gia tri cua N la: ");
...
}

Ví dụ chương trình sau đây dùng lệnh lặp while hiển thị các số nguyên từ 10 đến 19 nhưng bỏ qua số 15 dùng goto thay vì dùng break như ví dụ trên. Nhấn nút Execute màu xanh để xem kết quả.

☛ Bài tập:
  • Nhấn dòng liên kết Edit this program in JDoodle.com để truy cập trang chủ JDoodle.
  • Thay đổi nội dung chương trình C hiển thị tất cả các số lẻ nhỏ hơn 100 trừ các số 5, 7, 93.
  • Lưu đến tài khoản cá nhân trên JDoodle.