Home » Blog lập trình » [Lập trình C/C++] Bài 5 – Các cấu trúc lặp for – while – do while trong ngôn ngữ lập trình C/C++

[Lập trình C/C++] Bài 5 – Các cấu trúc lặp for – while – do while trong ngôn ngữ lập trình C/C++

Một số lưu ý:

Dấu  //  dùng để comment ghi chú, giải thích

Dấu ;   dùng để kết thúc câu lệnh, luôn luôn có nếu không sẽ bị lỗi.

 

I. LỜI MỞ ĐẦU

– Một trong những cấu trúc quan trọng của lập trình cấu trúc là các câu lệnh cho phép lặp nhiều lần một đoạn lệnh nào đó của chương trình.

– Mỗi bài toán lặp có một đặc trưng riêng, ví dụ lặp cho đến khi đã đủ số lần định trước thì dừng hoặc lặp cho đến khi một điều kiện nào đó không còn thoả mãn nữa thì dừng … việc sử dụng câu lệnh lặp phù hợp sẽ làm cho chương trình dễ đọc và dễ bảo trì hơn. Đây là ý nghĩa chung của các câu lệnh lặp.

 

Đặt vấn đề:
Viết chương trình xuất các số từ 1 đến 10
=> Sử dụng 10 câu lệnh cout từ 1 đến 10
Viết chương trình xuất các số từ 1 đến 1000
=> Sử dụng 1000 câu lệnh cout từ 1 đến 1000
– Giải pháp
– Sử dụng cấu trúc lặp lại một hành động trong khi còn thỏa một điều kiện nào đó.
– 3 lệnh lặp: for,  while,  do… while

– Mục đích của các vòng lặp là lặp lại một thao tác với một số lần nhất định hoặc trong khi một điều kiện nào đó còn thoả mãn.

II. CẤU TRÚC LẶP WHILE

while là cấu trúc điều khiển lặp thực hiện một lệnh hay khối lệnh nào đó với số lần lặp được xác định tuỳ theo một điều kiện (gọi là điều kiện lặp).

 

CÚ PHÁP

while(<biểu thức logic>)

{

// lệnh hoặc khối lệnh cần thực hiện

}

và chức năng của nó đơn giản chỉ là lặp lại lệnh hoặc khối lệnh cần thực hiện khi điều kiện của biểu thức logic còn thoả mãn.

 

VD_1:

Kết quả: Chương trình sẽ in ra các giá trị:  5 4 3 2 1

 

Nhận xét:

while là cấu trúc điều khiển lặp với điều kiện trước, tức là điều kiện lặp được kiểm tra trước khi vào thân của vòng lặp, do vậy nếu biểu thức điều kiện có giá trị ‘sai’ ngay từ đầu thì thân của while có thể không được thực hiện lần nào.
− Trong thân của while phải có lệnh để làm thay đổi giá trị của biểu thức điều kiện. Hoặc nếu biểu thức điều kiện luôn có giá trị ‘đúng’ – chúng ta gọi vòng lặp đó là vòng lặp vô tận(không kết thúc), thì trong thân của while phải có lệnh để chấm dứt vòng lặp (xem lệnh break).

– Cấu trúc lặp while có thể lồng vào nhau, khi gặp các tình huống cụ thể thì các bạn sẽ hiểu rõ hơn về vấn đề while lồng vào nhau. Vấn đề này thì mình xin hẹn các bạn ở các bài viết khác – mình sẽ đưa ra các bài toán cụ thể và phân tích 1 cách dễ hiểu nhất để các bạn có thể vận dụng kiến thức này 1 cách linh hoạt trong lập trình.

Chú ý:

– Không được thêm ; sau câu lệnh while.

 

THỰC HÀNH TRÊN MÁY

Bài 1. Viết chương trình tính tổng từ 1 đến n. Với n là số nguyên nhập từ bàn phím.

VD: n = 5

==> S = 1 + 2 + 3 + 4 + 5 = 15

Bài 2. Viết chương trình tính giai thừa n . Với n là số nguyên nhập từ bàn phím.

VD: n = 5

==> S = 1 x 2 x 3 x 4 x 5 = 120

Demo code Bài 2

 

II. CẤU TRÚC LẶP DO WHILE

CÚ PHÁP

do

{

// lệnh hoặc khối lệnh cần thực hiện

}while(<điều kiện lặp >);

 

– Chức năng của nó là hoàn toàn giống vòng lặp while chỉ trừ có một điều là điều kiện điều khiển vòng lặp được tính toán sau khi  lệnh hoặc khối lệnh cần thực hiện được thực thi, vì vậy lệnh hoặc khối lệnh cần thực hiện sẽ được thực hiện ít nhất một lần ngay cả khi điều kiện lặp không bao giờ được thoả mãn.

VD_2:

==> Chương trình sẽ lặp lại khi người dùng nhập 1 số nguyên khác 0.

 

Nhận xét:

– Cấu trúc while mà chúng ta khảo sát ở trên luôn kiểm tra điều kiện lặp trước khi thực hiện thân của nó. Tức là đòi hỏi trước khi vào cấu trúc while chúng ta phải xác lập được điều kiện lặp cho nó.
– Có lẽ bạn cũng đồng ý rằng có những cấu trúc lặp mà thân của nó phải thực hiện ít nhất một lần, tức bước lặp đầu tiên được thực hiện mà không cần điều kiện gì, sau đó các bước lặp tiếp theo sẽ được xem xét tuỳ vào trạng thái của bước lặp trước đó. Với tình huống như thế thì while không thuận lợi bằng một cấu trúc điều khiển khác mà C/C++ cung cấp, đó là cấu trúc do while.

– Vòng lặp do-while thường được dùng khi điều kiện để kết thúc vòng lặp nằm trong vòng lặp.

– Cấu trúc lặp do while có thể lồng vào nhau, khi gặp các tình huống cụ thể thì các bạn sẽ hiểu rõ hơn về vấn đề do while lồng vào nhau. Vấn đề này thì mình xin hẹn các bạn ở các bài viết khác – mình sẽ đưa ra các bài toán cụ thể và phân tích 1 cách dễ hiểu nhất,  để các bạn có thể vận dụng kiến thức này 1 cách linh hoạt trong lập trình.

 

III. CẤU TRÚC LẶP FOR

CÚ PHÁP

for(<  giá trị khởi tạo >; <  điều kiện lặp  >; < bước nhảy >)

{

// lệnh hoặc khối lệnh cần thực hiện

}

và chức năng chính của nó là lặp lại lệnh hoặc khối lệnh cần thực hiện chừng nào điều kiện lặp  còn mang giá trị đúng, như trong vòng lặp while. Nhưng thêm vào đó, for cung cấp chỗ dành cho lệnh giá trị khởi tạo và lệnh bước nhảy. Vì vậy vòng lặp này được thiết kế đặc biệt lặp lại một hành động với một số lần xác định.

Cách thức hoạt động của nó như sau:

  1. giá trị khởi tạo được thực hiện. Nói chung nó đặt một giá trị ban đầu cho biến điều khiển. Lệnh này được thực hiện chỉ một lần duy nhất.
  2. điều kiện lặp được kiểm tra, nếu nó là đúng thì vòng lặp tiếp tục(thực hiện  lệnh hoặc khối lệnh ) còn nếu không thì vòng lặp kết thúc và lệnh hoặc khối lệnh cần thực hiện được bỏ qua.
  3. lệnh hoặc khối lệnh được thực hiện. Nó có thể là một lệnh đơn hoặc là một khối lệnh được bao trong một cặp ngoặc nhọn{}.
  4. Cuối cùng, bước nhảy được thực hiện để tăng biến điều khiển và vòng lặp, sau đó quay trở lại 2.

VD_3:

Kết quả: Chương trình sẽ in ra các giá trị:   0 1 2 3 4 5 6 7 8 9

Chú ý:

– Không được thêm ; sau câu lệnh for.

Trong thân của for cũng như các cấu trúc lặp khác, có thể có câu lệnh continuebreak, với chức năng là:

– Lệnh break làm kết thúc câu lệnh.

  • break : kết thúc vòng lặp (trong cùng) chứa nó. break cho ta khả năng kết thúc một vòng lặp từ một vị trí bên trong của vòng lặp mà không cần đến giá trị của biểu thức điều kiện. Nếu trong nhiều cấu trúc lặp lồng nhau thì break chỉ có tác dụng kết thúc một cấu trúc lặp trong cùng chứa nó mà thôi.

– Lệnh continue bỏ qua lần lặp hiện tại.

  • continue: Trái với break, continue là câu lệnh có chức năng chuyển chu trình về đầu bước lặp tiếp theo. Có nghĩa là sẽ bỏ qua các lệnh trong thân của vòng lặp kể từ lệnh sau continue cho tới hết thân của vòng lặp. Nếu có nhiều cấu trúc lặp bao nhau thì lệnh continue cũng chỉ có tác dụng với cấu trúc lặp trong cùng chứa nó.

 

Nhận xét:

– Đây cũng là toán tử điều khiển thực hiện lặp một số lệnh nào đó nhưng có cú pháp khác với hai chương trình lặp while và do while mà chúng ta đã xem xét ở phần trên, for trong C/C++ được dùng hết sức mềm dẻo nhưng nói chung nó sẽ trực quan và dễ hiểu hơn trong những tình huống lặp mà số bước lặp xác định.

–  Cấu trúc lặp for có thể lồng vào nhau, khi gặp các tình huống cụ thể thì các bạn sẽ hiểu rõ hơn về vấn đề for lồng vào nhau. Vấn đề này thì mình xin hẹn các bạn ở các bài viết khác – mình sẽ đưa ra các bài toán cụ thể và phân tích 1 cách dễ hiểu nhất để các bạn có thể vận dụng kiến thức này 1 cách linh hoạt trong lập trình.

 

THỰC HÀNH TRÊN MÁY

Bài 1. Viết chương trình tính tổng từ 1 đến n. Với n là số nguyên nhập từ bàn phím.

VD: n = 5

==> S = 1 + 2 + 3 + 4 + 5 = 15

Bài 2. Viết chương trình tính giai thừa n . Với n là số nguyên nhập từ bàn phím.

VD: n = 5

==> S = 1 x 2 x 3 x 4 x 5 = 120

Bài 3. Viết chương trình tính tổng: S(n) = 1 + 3 + 5 + 7 +…+ n. Với n là số nguyên nhập từ bàn phím.

VD: n = 10

==> S(n) = 1 + 3 + 5 + 7 + 9 = 25

Bài 4. Viết chương trình kiểm tra xem n có phải là số chính phương hay không ? Với n là số nguyên nhập từ bàn phím.

 

Demo code Bài 1

Lời kết luận từ tác giả:

– Đây là tài liệu dùng để học và tham khảo.

– Trong quá trình biên soạn bộ tài liệu có:

+ Tham khảo 1 số nguồn tài liệu(google search, ebook, sách chuyên ngành…).

+ Kiến thức – kinh nghiệm cá nhân của tôi.

– Có thể còn 1 số lỗi sai sót – sẽ luôn cập nhật phiên bản mới.

– Mong nhận được sự đóng góp và phản hồi tích cực từ các bạn đọc. Chân thành cảm ơn.

Link download file PDF: Here

Share
Share
Free WordPress Themes - Download High-quality Templates