Chương 5: Lệnh lặp trong C++ - Tài liệu học tập môn Tin cơ sở (Phùng Thị Thu Hiền)

Tài liệu học tập môn Tin cơ sở phần 2 của tác giả Phùng Thị Thu Hiền cung cấp kiến thức chi tiết về lệnh lặp trong lập trình C++. Tìm hiểu cú pháp, cách sử

Chuyên ngành

Lập trình C++

Người đăng

Ẩn danh

Thể loại

Tài liệu học tập
80
0
0

Phí lưu trữ

30 Point

Tóm tắt

I. Tổng quan về lệnh lặp for while do while trong C

Lệnh lặp for while do while trong C++ là ba cấu trúc điều khiển lặp cốt lõi. Chúng cho phép thực hiện một đoạn mã nhiều lần dựa trên điều kiện hoặc số lần xác định. Trước khi có các lệnh lặp chuyên dụng, lập trình viên sử dụng câu lệnh goto để lặp lại đoạn mã. Phương pháp goto khiến chương trình khó đọc và khó bảo trì. C++ cung cấp ba lệnh lặp trực quan hơn hẳn. Vòng lặp for phù hợp khi biết trước số lần lặp. Vòng lặp while kiểm tra điều kiện trước khi thực hiện lệnh bên trong. Vòng lặp do while thực hiện lệnh trước rồi mới kiểm tra điều kiện. Ba lệnh này có thể thay thế lẫn nhau về mặt logic. Tuy nhiên, chọn đúng lệnh lặp sẽ giúp mã nguồn rõ ràng hơn. Việc nắm vững cú pháp và cách hoạt động của từng loại là nền tảng quan trọng. Mỗi bài toán lặp có đặc trưng riêng biệt. Hiểu rõ bản chất từng lệnh giúp lập trình viên đưa ra quyết định đúng đắn khi viết chương trình.

1.1. Khái niệm cơ bản về vòng lặp trong lập trình

Vòng lặp là cấu trúc cho phép thực hiện lặp lại một đoạn lệnh nhiều lần. Trong lập trình cấu trúc, vòng lặp đóng vai trò then chốt. Nó giúp loại bỏ việc viết重复 đoạn mã. Thay vì copy-paste cùng một khối lệnh, vòng lặp xử lý tự động. Một vòng lặp gồm ba thành phần chính. Phần khởi tạo thiết lập giá trị ban đầu cho biến đếm. Phần điều kiện quyết định khi nào vòng lặp dừng lại. Phần cập nhật thay đổi giá trị biến đếm sau mỗi lần lặp. Khi điều kiện còn đúng, lệnh bên trong tiếp tục thực hiện. Khi điều kiện sai, chương trình thoát khỏi vòng lặp. C++ cung cấp ba loại vòng lặp chính. Mỗi loại có cú pháp riêng nhưng đều phục vụ mục đích lặp lại công việc.

1.2. Vai trò của lệnh lặp trong ngôn ngữ C

Lệnh lặp là một trong những cấu trúc quan trọng nhất của lập trình cấu trúc. Trong ngôn ngữ C++, lệnh lặp giúp giải quyết nhiều bài toán phức tạp. Các tác vụ như duyệt mảng, xử lý chuỗi, tính toán lặp đều cần vòng lặp. Không có lệnh lặp, chương trình trở nên dài dòng và kém hiệu quả. C++ cung cấp ba lệnh lặp tương đương về mặt logic. Tuy nhiên, mỗi lệnh phù hợp với ngữ cảnh sử dụng khác nhau. Lệnh for thường dùng khi biết chính xác số lần lặp. Lệnh while lý tưởng cho việc kiểm tra điều kiện trước. Lệnh do while đảm bảo lệnh thực hiện ít nhất một lần. Sự đa dạng này giúp người lập trình lựa chọn phương án tối ưu cho từng bài toán cụ thể.

II. Phân tích cú pháp và cách hoạt động của lệnh lặp for

Vòng lặp for có cú pháp gọn gàng và trực quan. Cấu trúc for gồm ba phần ngăn cách bằng dấu chấm phẩy. Phần đầu tiên là phần khởi tạo, thiết lập giá trị ban đầu cho biến đếm. Phần thứ hai là điều kiện kiểm tra trước mỗi lần lặp. Phần thứ ba là dãy biểu thức cập nhật giá trị biến đếm. Lệnh bên trong vòng lặp có thể là câu lệnh đơn hoặc khối lệnh. Quy trình thực thi của for diễn ra theo trình tự rõ ràng. Đầu tiên, phần khởi tạo được thực hiện một lần duy nhất. Tiếp theo, điều kiện được kiểm tra. Nếu điều kiện đúng, lệnh bên trong thực hiện. Sau đó, phần cập nhật chạy và quay lại kiểm tra điều kiện. Nếu điều kiện sai, vòng lặp kết thúc. Cách tổ chức này giúp người đọc dễ dàng theo dõi luồng xử lý. Vòng lặp for rất linh hoạt và mạnh mẽ. Nó xử lý được cả trường hợp biết trước và không biết trước số lần lặp.

2.1. Cú pháp chi tiết của vòng lặp for trong C

Cú pháp vòng lặp for gồm từ khóa for theo sau bởi ba phần trong ngoặc tròn. Phần khởi tạo khai báo và gán giá trị ban đầu cho biến đếm. Nhiều biến có thể được khởi tạo, phân cách bằng dấu phẩy. Phần điều kiện thường là biểu thức logic trả về true hoặc false. Phần cập nhật chứa biểu thức gán thay đổi giá trị biến đếm. Biến đếm thường tăng hoặc giảm sau mỗi lần lặp. Lệnh sau ngoặc tròn là nội dung cần lặp lại. Nếu lệnh gồm nhiều câu, dùng dấu ngoặc nhọn để nhóm lại. Ví dụ: for (int i = 1; i <= 10; i++) in ra các số từ 1 đến 10. Biến i khởi tạo bằng 1, kiểm tra i nhỏ hơn hoặc bằng 10, sau mỗi vòng lặp i tăng thêm 1.

2.2. Sơ đồ hoạt động và quy trình thực thi lệnh for

Quy trình thực thi lệnh for tuân theo bốn bước cơ bản. Bước thứ nhất, thực hiện phần khởi tạo để thiết lập giá trị ban đầu. Bước thứ hai, kiểm tra điều kiện lặp. Nếu điều kiện đúng, chuyển sang bước thứ ba. Nếu điều kiện sai, thoát khỏi vòng lặp và chuyển quyền điều khiển sang câu lệnh kế tiếp. Bước thứ ba, thực hiện lệnh bên trong vòng lặp. Bước thứ tư, thực hiện phần cập nhật rồi quay lại bước thứ hai. Chu trình này lặp lại cho đến khi điều kiện trở thành sai. Sơ đồ lưu đồ mô tả rõ ràng luồng điều khiển. Phần khởi tạo nằm ngoài vòng kiểm tra. Phần cập nhật nằm trong thân vòng lặp. Cách tổ chức này đảm bảo biến đếm được cập nhật đúng lúc.

III. Cách sử dụng lệnh lặp while và do while trong C

Lệnh lặp while và do while là hai biến thể quan trọng của cấu trúc lặp. Vòng lặp while kiểm tra điều kiện trước khi thực hiện lệnh. Nếu điều kiện sai ngay từ đầu, lệnh bên trong không được thực hiện. Cú pháp while đơn giản gồm từ khóa while, điều kiện trong ngoặc tròn, và lệnh cần lặp. Vòng lặp do while có điểm khác biệt then chốt. Lệnh được thực hiện trước, kiểm tra điều kiện sau. Điều này đảm bảo lệnh chạy ít nhất một lần. Cú pháp do while dùng từ khóa do, lệnh, rồi đến while và điều kiện. Dấu chấm phẩy đặt sau ngoặc đóng là bắt buộc. Cả hai lệnh đều phù hợp khi không biết trước số lần lặp. Việc chọn lệnh nào phụ thuộc vào yêu cầu cụ thể. Nếu cần lệnh chạy ít nhất một lần, dùng do while. Nếu cần kiểm tra điều kiện trước, dùng while. Sự lựa chọn đúng đắn giúp mã nguồn sạch và dễ hiểu hơn.

3.1. Cú pháp và cách hoạt động của vòng lặp while

Vòng lặp while có cú pháp gọn nhẹ gồm từ khóa while và điều kiện. Cấu trúc: while (điều kiện) { lệnh; }. Điều kiện là biểu thức logic được đặt trong ngoặc tròn. Trước mỗi lần lặp, điều kiện được kiểm tra. Nếu kết quả là true, lệnh bên trong thực hiện. Nếu kết quả là false, vòng lặp dừng lại. Quy trình lặp lại cho đến khi điều kiện sai. Biến đếm phải được khởi tạo trước vòng lặp. Phần cập nhật biến đếm nằm bên trong thân vòng lặp. Nếu quên cập nhật, vòng lặp trở thành vô hạn. Vòng lặp while lý tưởng cho việc đọc dữ liệu đến khi gặp giá trị kết thúc. Nó cũng phù hợp khi cần kiểm tra điều kiện trước khi xử lý.

3.2. Cú pháp và đặc điểm riêng của vòng lặp do while

Vòng lặp do while khác biệt ở chỗ thực hiện lệnh trước khi kiểm tra điều kiện. Cú pháp: do { lệnh; } while (điều kiện); Dấu chấm phẩy sau ngoặc đóng là bắt buộc. Lệnh bên trong luôn chạy ít nhất một lần. Điều này hữu ích khi cần nhập dữ liệu từ người dùng trước. Chương trình hiển thị menu, nhận lựa chọn, rồi kiểm tra tính hợp lệ. Nếu điều kiện sai, vòng lặp dừng sau lần thực hiện đầu tiên. Nếu điều kiện đúng, lệnh tiếp tục lặp lại. Biến đếm cần được khởi tạo trước khi vào vòng lặp. Phần cập nhật nằm trong thân vòng lặp. Do while thường dùng trong các chương trình có menu tương tác. Người dùng thấy menu ít nhất một lần trước khi quyết định thoát.

IV. Kết luận và ứng dụng thực tế của lệnh lặp for while do while

Ba lệnh lặp for while do while trong C++ là công cụ không thể thiếu. Mỗi lệnh có ưu điểm riêng phù hợp với từng loại bài toán. Vòng lặp for gọn gàng khi biết trước số lần lặp. Vòng lặp while linh hoạt cho việc kiểm tra điều kiện phức tạp. Vòng lặp do while đảm bảo lệnh thực hiện ít nhất một lần. Về bản chất, ba lệnh này có thể thay thế lẫn nhau. Tuy nhiên, chọn đúng lệnh giúp chương trình dễ đọc hơn. Trong thực tế, các lệnh lặp được ứng dụng rộng rãi. Duyệt mảng, xử lý chuỗi, tính toán số học đều cần vòng lặp. Các thuật toán sắp xếp, tìm kiếm sử dụng vòng lặp lồng nhau. Chương trình có giao diện menu dùng do while để hiển thị lặp lại. Nắm vững ba lệnh lặp là bước đệm quan trọng. Nó giúp tiếp cận các cấu trúc dữ liệu và thuật toán phức tạp hơn trong tương lai.

4.1. Các ứng dụng phổ biến của lệnh lặp trong lập trình

Lệnh lặp được sử dụng trong hầu hết mọi chương trình thực tế. Ứng dụng phổ biến nhất là duyệt và xử lý mảng dữ liệu. Vòng lặp for duyệt qua từng phần tử để tìm giá trị lớn nhất, nhỏ nhất. Các thuật toán sắp xếp như bubble sort dùng vòng lặp lồng nhau. Xử lý chuỗi ký tự cũng cần vòng lặp để duyệt từng ký tự. Chương trình tính tổng, tính giai thừa sử dụng while hoặc for. Game đơn giản dùng vòng lặp để cập nhật trạng thái liên tục. Đọc dữ liệu từ file cần vòng lặp cho đến khi hết dữ liệu. Chương trình có giao diện người dùng dùng do while để hiển thị menu. Bài toán đếm số nguyên tố, số hoàn hảo đều giải bằng vòng lặp. Thành thạo lệnh lặp giúp giải quyết đa dạng bài toán lập trình.

4.2. Lưu ý quan trọng khi sử dụng lệnh lặp for while do while

Khi sử dụng lệnh lặp, cần lưu ý vài điểm quan trọng. Vòng lặp vô hạn là lỗi thường gặp nhất. Nguyên nhân do quên cập nhật biến đếm hoặc điều kiện luôn đúng. Cần đảm bảo biến đếm được cập nhật đúng cách trong mỗi lần lặp. Khởi tạo biến đếm sai giá trị cũng gây lỗi logic. Sử dụng ngoặc nhọn ngay cả với lệnh đơn giúp tránh nhầm lẫn. Chọn đúng loại vòng lặp giúp mã nguồn dễ hiểu hơn. Vòng lặp lồng nhau cần được tổ chức rõ ràng. Biến trong vòng lặp for có phạm vi cục bộ trong vòng lặp đó. Biến khai báo ngoài vòng lặp có thể truy cập được từ bên trong. Hiểu rõ các lưu ý giúp tránh lỗi và viết chương trình hiệu quả.

Tóm tắt và mô tả trên trang này được tạo với sự hỗ trợ của AI. Nếu bạn thấy nội dung không chính xác hoặc có vấn đề, vui lòng Báo lỗi nội dung.

28/05/2026
Tài liệu học tập môn tin cơ sở phần 2 phùng thị thu hiền

Trích đoạn nội dung tài liệu

CHƯƠNG 5: CÂU LỆNH LẶP Mục tiêu của chương Nắm vững: - Cú pháp và ý nghĩa các câu lệnh lặp for. - Cú pháp và ý nghĩa các câu lệnh lặp while và do while. - Các quy trình thực hiện các lệnh lặp. - Vận dụng các câu lệnh đã học để giải các bài tập trong chương 5.

Nội dung của chương Nghiên cứu cơ chế hoạt động của các lệnh lặp, cách sử dụng các lệnh. Câu lệnh lặp for Câu lệnh lặp 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. Chẳng hạn trong ví dụ về bài toán nhân theo phương pháp Ấn độ, để lặp lại một đoạn lệnh chúng ta đã sử dụng câu lệnh goto. Tuy nhiên như đã lưu ý việc dùng nhiều câu lệnh này làm chương trình rất khó đọc.

Do vậy cần có những câu lệnh khác trực quan hơn và thực hiện các phép lặp một cách trực tiếp. C++ cung cấp cho chúng ta 3 lệnh lặp như vậy. Về thực chất 3 lệnh này là tương đương (cũng như có thể dùng goto thay cho cả 3 lệnh lặp này), tuy nhiên để chương trình viết được sáng sủa, rõ ràng, C++ đã cung cấp nhiều phương án cho người sử dụng lựa chọn câu lệnh khi viết chương trình phù hợp với tính chất lặp. 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.

Cú pháp for ([<phần khởi tạo>] ; [<điều kiện>] ; [<dãy biểu thức >]) <lệnh>; Vòng lặp for được định nghĩa bởi từ khóa for và được chia làm 3 phần chính, mỗi phần được ngăn cách bởi dấu chấm phẩy. Trong đó: 93  <phần khởi tạo> là một hay nhiều biểu thức gán (được phân cách bởi dấu ‘,’) có nhiệm vụ khởi tạo giá trị ban đầu cho các biến đếm.  < điều kiện > thường là biểu thức logic.  < dãy biểu thức> là một hay nhiều biểu thức gán (được phân cách bởi dấu ‘,’) có nhiệm vụ thay đổi trị của các biến ở <phần khởi tạo>.

 <lệnh> có thể là câu lệnh đơn, khối lệnh, hoặc câu lệnh điều khiển. Ý nghĩa Vòng lặp for được sử dụng phần lớn trong các cấu trúc lặp. Vòng lặp for phù hợp cho cả trường hợp biết trước số lần lặp lẫn không biết trước số lần lặp. Lệnh for thực hiện như sau: B1: Thực hiện <phần khởi tạo> (nếu có).

B2: Kiểm tra <điều kiện>. B3: Nếu <điều kiện> đúng thì thực hiện <lệnh>, sau đó thực hiện <phần khởi tạo> (nếu có) và quay về B2. Còn ngược lại nếu <điều kiện > sai thì chuyển sang B4. B4: Thoát khỏi vòng lặp, và chuyển quyền điều khiển sang câu lệnh kế tiếp sau lệnh for.

Lưu đồ <Phần khởi tạo> False <ĐK> True <Dãy biểu thức> <Lệnh> Hình 13: Sơ đồ hoạt động của lệnh for.1: In các số từ 1 đến 10 ra màn hình. for (int x = 1; x <= 10; x = x+ 1) { cout << x<< endl; } Quá trình thực hiện: 1. Khai báo biến x và gán giá trị x = 1. Kiểm tra x <= 10 không? Nếu không thì dừng.

In giá trị x ra màn hình. Chuyển về bước 2.2: biểu diễn các thành phần của vòng lặp for for (int count = 1; count <= 10; count++) { cout << "count = " << count << endl; } Ví dụ 5.3: sử dụng vòng lặp for để in ra tất cả các số chẵn từ 0 đến 10. for (int i = 0; i <= 10; i++) { if (i % 2 == 0) cout << i << " "; } Vòng lặp trên có thể được rút gọn lại như sau: for (int i = 0; i <= 10; i += 2) { cout << i << " "; } Ví dụ 5.4: sử dụng vòng lặp for để in ra tất cả các số chẵn từ 10 đến 0. for (int i = 10; i >= 0; i -= 2) { cout << i << " "; } 95 Ví dụ 5.5: Tính tổng của dãy các số từ 1 đến 500.

int main () { int i, kq = 0; for (i = 1 ; i <= 500 ; i ++) kq += i ; cout << "Tổng = " << kq; } Ví dụ 5.6: Tính giai thừa của một số nguyên dương #include <iostream> #include <math.h> using namespace std; int main () { // Khai bao bien int x, n, fact = 1; // Nhap gia tri dau vao cout<<"Nhap mot so :"; cin>>n; //Vong lap for for (int x = 1; x <= n; x++) { fact = fact * x; } cout<<n<<" Gia tri cua giai thua la "<<fact; return 0; } 5. Câu lệnh lặp while a. Cú pháp while (<điều kiện>) <lệnh>; Trong đó:  <điều kiện> thường là biểu thức logic. 96  <lệnh> có thể là câu lệnh đơn, khối lệnh, hoặc câu lệnh điều khiển.

Ý nghĩa Chừng nào mà điều kiện còn thỏa mãn thì thực hiện <lệnh>. Lệnh while thực hiện như sau: B1: Kiểm tra <điều kiện>. B2: Nếu <điều kiện> đúng thì thực hiện <lệnh>, sau đó quay về B1. Còn ngược lại <điều kiện > sai thì chuyển sang B3.

B3: Thoát khỏi vòng lặp, và chuyển quyền điều khiển sang câu lệnh kế tiếp sau lệnh while. Lưu đồ ĐK False True <Lệnh> Hình 14: Sơ đồ hoạt động của lệnh while Chú ý: - Do <điều kiện> được kiểm tra trước, nên phần <lệnh> của vòng lặp while có thể không được thực hiện lần nào. - Để bảo đảm cho vòng lặp while (…) không xác định, thì phải có ít nhất một câu lệnh trong phần thân vòng lặp có tác dụng làm thay đổi việc đánh giá lại <điều kiện > thoát sau mỗi lần lặp.7: Sử dụng vòng lặp while để in các số từ 1 đến 10. #include <iostream> #include <math.h> using namespace std; int main () { int i=1; while (i<=10) 97 { cout << i << endl; i++; } return 0; } Ví dụ 5.8: Chương trình nhập một câu, đếm số từ và ký tự trong câu đó, và in kết quả ra màn hình.

#include <iostream> #include <math.h> using namespace std; int main () { int demkytu=0; int demtu=1; cout << "Ban nhap mot cau gom cac chu thuong: " << endl; char ch='a'; while(ch!='\r') { ch=getch(); if(ch==' ') demtu++; else demkytu++; } cout << "\n So tu trong cau la = " << demtu << endl; cout << "\nSo ky tu trong cau la = " << demkytu-1 << endl; return 0; } Ví dụ 5.9: Chương trình tìm ước chung lớn nhất (UCLN) của 2 số nguyên m và n. Áp dụng thuật toán Euclide bằng cách liên tiếp lấy số lớn trừ đi số nhỏ khi nào 2 số bằng nhau thì đó là UCLN. Trong chương trình ta qui ước m là số lớn và n là số nhỏ. 98 Thêm biến phụ r để tính hiệu của 2 số.

Sau đó đặt lại m hoặc n bằng r sao cho m > n và lặp lại. Vòng lặp dừng khi m = n. #include <iostream> #include <math.h> using namespace std; int main () { int m, n, r; cout << "Nhập m, n: " ; cin >> m >> n ; if (m < n) { int t = m; m = n; n = t; } // nếu m < n thì đổi vai trò hai số while (m != n) { r=m-n; if (r > n) m = r; else { m = n ; n = r ; } } cout << "UCLN = " << m ; } Ví dụ 5.10: Chương trình nhân 2 số nguyên theo phương pháp Ấn độ int main () { long m, n, kq; // Các số cần nhân và kết quả kq cout << “Nhập m và n: “ ; cin >> m >> n ; kq = 0 ; while (m) { if (m%2) kq += n ; m >>= 1; n <<= 1; } cout << “m nhân n =” << kq ; } 99 5. Câu lệnh lặp do while a.

Cú pháp do { <lệnh>; } while (<điều kiện>); Trong đó:  <điều kiện> thường là biểu thức logic.  <lệnh> có thể là câu lệnh đơn, khối lệnh, hoặc câu lệnh điều khiển. Ý nghĩa Thực hiện <lệnh> cho đến khi <điều kiện> không còn được thỏa mãn. Lệnh do while thực hiện như sau: B1: Thực hiện <lệnh>.

B2: Kiểm tra <điều kiện>. B3: Nếu <điều kiện> đúng thì quay về B1. Còn ngược lại nếu <điều kiện> sai thì chuyển sang B4. B4: Thoát khỏi vòng lặp, và chuyển quyền điều khiển sang câu lệnh kế tiếp sau lệnh do while.

Lưu đồ <Lệnh> True False ĐK Hình 15: Sơ đồ hoạt động của lệnh do while. Chú ý: Khác với vòng lặp while(…), phần <lệnh> trong do. while (…) luôn được thực hiện ít nhất là 1 lần, do <điều kiện> được kiểm tra sau. Trong trường hợp vòng lặp do.

while (…) không xác định, ta nên xem xét và hiệu chỉnh lại các câu lệnh trong phần thân vòng lặp do … while (…) có liên quan đến <điều kiện > thoát của vòng lặp.11: Chương trình nhập một số nguyên và in kết quả ra màn hình dưới dạng số đảo ngược về thứ tự của số nguyên đó. #include <iostream> #include <math.h> using namespace std; int main () { long int so1, so2, sodaonguoc = 0; cout << "Nhap mot so nguyen : " << endl; cin>>so1; so2=so1; do { sodaonguoc=sodaonguoc*10; int digit=so1%10; sodaonguoc+=digit; so1/=10; } while(so1); cout << "So nguyen da nhap la " << so2 << "." << endl; cout << "So nguyen dao nguoc la " << sodaonguoc << "." << endl; return 0; } Ví dụ 5.12: Kiểm tra một số n có là số nguyên tố. Để kiểm tra một số n > 3 có phải là số nguyên tố ta lần lượt chia n cho các số i đi từ 2 đến một nửa của n. Nếu có i sao cho n chia hết cho i thì n là hợp số ngược lại n là số nguyên tố.

#include <iostream> #include <math.h> using namespace std; int main () { 101 int i, n ; // n: số cần kiểm tra cout << "Cho biết số cần kiểm tra: " ; cin >> n ; i=2; do { if (n%i == 0) { cout << n << "là hợp số" ; return ; // dừng chương trình } i++; } while (i <= n/2); cout << n << "là số nguyên tố" ; } Ví dụ 5.13: Chương trình kiểm tra dữ liệu nhập vào có thể là một tháng trong năm hay không: #include <iostream> #include <math.h> using namespace std; int main () { int month; do { cin >> month; } while (month < 1 || month > 12); return 0; } 102 5.

Nội dung được bảo vệ bản quyền — Tải xuống đầy đủ