Cấu trúc lặp trong Ngôn ngữ lập trình C - Bài 7

Cấu trúc lặp trong Ngôn ngữ lập trình C - Bài 7
access_time 10/2/2019 12:00:00 AM
person quản trị viên

Cấu trúc lặp trong Ngôn ngữ lập trình C

1. Giới thiệu

Là các cấu trúc for, do.. while, while … Cấu trúc này nhằm tổ chức thực thi các câu lệnh có mục đích lặp đi lặp lại nhiều lần. sử dụng cấu trúc lặp trong chương trình làm cho việc mô tả mã lệnh (code) trở nên ngắn gọn hơn rất nhiều, cách biểu diễn của chương trình cũng nhờ đó mà trong sáng, dễ hiểu hơn.

2. Cấu trúc while

Ý nghĩa của vòng lặp while là: “Trong khi điều kiện đúng thì thực hiện các công việc này”. Cú pháp sử dụng vòng lặp while như sau:

Cú pháp

initializer

while (condition) {
// one or more statements;

// update
}

Biểu thức của vòng lặp while là điều kiện để các lệnh được thực hiện, biểu thức này bắt buộc phải trả về một giá trị kiểu bool là true/false. Nếu có nhiều câu lệnh cần được thực hiện trong vòng lặp while thì phải đặt các lệnh này trong khối lệnh.

Mô tả :

·       initializer : Biểu thức khởi tạo ban đầu

·       condition : Biểu thức điều kiện.

·       statements : Tập hợp các câu lệnh sẽ được thực hiện tương ứng với các điều kiện kiểm tra biểu thức điều kiện.

·       update : Cập nhật lại giá trị (Thông thường nó liên quan tới giá trị khởi tạo ban đầu), giá trị này chính là tác nhân làm thay đổi biểu thức điều kiện.


Hình ảnh 1: Cấu trúc vòng lặp while

Ví dụ

Viết chương trình in ra các số tự nhiên từ 1 đến 10. Sử dụng cấu trúc lặp while để thực hiện.

 


Hình số 2 : Ví dụ cấu trúc while

3. Cấu trúc do.. while

Đôi khi vòng lặp while không thoả mãn yêu cầu trong tình huống sau, chúng ta muốn chuyển ngữ nghĩa của while là “chạy trong khi điều kiện đúng” thành ngữ nghĩa khác như “làm điều này trong khi điều kiện vẫn còn đúng”. Nói cách khác thực hiện một hành động, và sau khi hành động được hoàn thành thì kiểm tra điều kiện. Cú pháp sử dụng vòng lặp do...while như sau:

Cú pháp

initializer

do {
// one or more statements;

// update
} while (condition)

Mô tả :

·       initializer : Biểu thức khởi tạo ban đầu

·       condition : Biểu thức điều kiện.

·       statements : Tập hợp các câu lệnh sẽ được thực hiện tương ứng với các điều kiện kiểm tra biểu thức điều kiện.

·       update : Cập nhật lại giá trị (Thông thường nó liên quan tới giá trị khởi tạo ban đầu), giá trị này chính là tác nhân làm thay đổi biểu thức điều kiện.

Ở đây có sự khác biệt quan trọng giữa vòng lặp while và vòng lặp do...while là khi dùng

vòng lặp do...while thì tối thiểu sẽ có một lần các câu lệnh trong do...while được thực hiện. Điều này cũng dễ hiểu vì lần đầu tiên đi vào vòng lặp do...while thì điều kiện chưa được kiểm tra.


Hình số 3: Cấu trúc vòng lặp do-while

Ví dụ : Sử dụng câu lệnh do..while nhằm để in kết quả từ 1..10,tuy nhiên giá trị khởi đầu của counter = 1 trong khi điều kiện kiểm tra counter < = 10, thì khối lệnh trong do.. while vẫn thực hiện in ra counter vì khối lệnh này được thực thi trước điều kiện của biểu thức logic được kiểm tra.

Thể hiện của chương trình :


Hình số 4 : Thể hiện cấu trúc lặp do-while

3. Cấu trúc lệnh for

Không giống như cấu trúc while và do while, for là cấu trúc lặp thường sử dụng trong tình huống đã xác định trước số lần lặp trước khi vòng lặp thực hiện.

Cú pháp

for (initializer; condition; increment/decrement) {
// one or more statements;
}

Mô tả :

·       initializer : Biến kiểm sát vòng lặp hữu hạn (thường hay dùng là kiểu nguyên như int, byte, short, long, char,...)

·       condition : Biểu thức logic để vòng lặp kết thúc (thực thi với số lần hữu hạn).

·       statements : Tập hợp các câu lệnh sẽ được thực hiện tương ứng với các điều kiện kiểm tra biểu thức điều kiện.

·       increment/decrement:  Biến kiểm soát vòng lặp phải bị biến đổi để tiến đến giá trị mong muốn tương ứng với việc làm cho biểu thức logic không thỏa mãn và vòng lặp sẽ dừng lại. Thông thường biến này là biến tăng hoặc giảm.

Ví dụ : Viết chương trình sử dụng cấu trúc for để in ra số nguyên từ 1 ..10

 

Hình số 5 : Cấu trúc vòng lặp for

Code thể hiện chương trình


Hình số 6: Thể hiện cấu trúc vòng lặp for

4. Cấu trúc lệnh nhảy

Khác với các cấu trúc khác của C#, các lệnh thuộc nhóm này thường dùng cho mục đích phá vỡ tính tuần tự, liên tục (Sequence, flow) đối với việc thi hành lệnh trong chương trình.Cấu trúc lệnh nhảy bao gồm có các lệnh continue, break, goto, return.

4.1 Lệnh nhảy Continue và Break

Khi đang thực hiện các lệnh trong vòng lặp, có yêu cầu như sau: không thực hiện các lệnh còn lại nữa mà thoát khỏi vòng lặp, hay không thực hiện các công việc còn lại của vòng lặp hiện tại mà nhảy qua vòng lặp tiếp theo. Để đáp ứng yêu cầu trên C# cung cấp hai lệnh nhảy là break và continue để thoát khỏi vòng lặp.

break khi được sử dụng sẽ đưa chương trình thoát khỏi vòng lặp và tiếp tục thực hiện các lệnh tiếp ngay sau vòng lặp.

continue ngừng thực hiện các công việc còn lại của vòng lặp hiện thời và quay về đầu vòng lặp để thực hiện bước lặp tiếp theo

Hai lệnh break và continue tạo ra nhiều điểm thoát và làm cho chương trình khó hiểu cũng như là khó duy trì. Do vậy phải cẩn trọng khi sử dụng các lệnh nhảy này.

Ví dụ


Hình số 7: Sử dụng break;

Trong ví dụ trên vòng lặp được thực hiện khi couter < 5; nếu couter == 5 thì chương trình sẽ bị thoát khỏi vòng lặp for. Kết quả chương trình chỉ in ra các số : 1234

Ví dụ mô tả về cách sử dụng continue

Lập trình viên in ra các số 1,2,3,4,6,7,8,9,10 (In ra từ 1-> 10 nhưng bỏ qua số 5.

Khi đó sử dụng continue để thực hiện ví dụ này.


Hình số 8: Sử dụng continue;

4.2 Lệnh nhảy goto
Lệnh goto cho phép bạn có thể chuyển quyền thực thi chương trình đến 1 nhãn (label) đã được định nghĩa trong chương trình để thiếp tục thực thi các lệnh đặt ở phía sau nhãn này.

Cú pháp

goto <lable>;

Mô tả

lable là 1 nhãn định danh (identified) được tạo ra trong chương trình giống như việc ta tạo ra 1 điểm mốc để chương trình biết và chuyển đến đó, cách đặt tên nhãn cũng giống như đặt tên biến nhưng luôn phải bắt đầu bởi ký tự trong bảng chữ cái và kết thúc bở dấu “:” .

Ví dụ : Sử dụng goto để in ra dãy số 1->10;


Hình số 9: Sử dụng goto;

 

Lập trình viên hoàn toàn có thể sử dụng goto để thay thế cho cấu trúc lặp while, do while và for, Tuy nhiên điều này gây nhập nhằng và phá vỡ cấu trúc khi lập trình. Đặc biệt khi nâng cấp sản phẩm.

4.3 Lệnh nhảy return

Về cơ bản thì lệnh return cũng khá giống với lệnh goto, tuy nhiên nếu lệnh goto làm việc với 1 nhãn đã có trong chương trình, lệnh return chỉ làm việc với hàm, phương thức (function, method). Mục đích của việc sử dụng lệnh return là trả quyền điều khiển thực thi chương trình cho nơi đã gọi hàm có.

Hình ảnh minh họa việc sử dụng lệnh nhảy return.


Hình số 10: Sử dụng return;

Ví dụ

Kết hợp goto và return để nhập thông tin một số. Nếu người dùng nhập số lẻ thì yêu cầu nhập lại, nếu nhập số chẵn thì in ra kết quả và kết thúc chương trình.


Hình số 11:Kết hợp return và goto;


vertical_align_top
share
Chat...