You are on page 1of 46

Chương 3:

Câu lệnh lặp

Dương Thị Quy


Bộ môn: Công nghệ phần mềm
Khoa: Công nghệ thông tin
Mục tiêu
 Ý nghĩa, cách hoạt động của vòng lặp.
 Cú pháp, ý nghĩa, cách sử dụng lệnh for, while, do…
while.
 Ý nghĩa và cách sử dụng lệnh break, continue.
 Một số bài toán sử dụng lệnh for, while, do…while
thông qua các ví dụ.
 So sánh, đánh giá một số bài toán sử dụng lệnh for,
while hoặc do…while.
 Cấu trúc vòng lặp lồng nhau.

07/04/2024 Câu lệnh lặp for, while, do..while 2


Nội dung
Câu lệnh for

Câu lệnh while

Câu lệnh do .. while

Một số kinh nghiệm lập trình

07/04/2024 Câu lệnh lặp for, while, do..while 3


Đặt vấn đề
 Ví dụ:
 Viết chương trình in ra các số từ 1 đến 5.

=> Sử dụng 5 câu lênh printf


 Viết chương trình in ra các số từ 1 đến 1000.

=> Sử dụng 1000 câu lệnh printf


 Giải pháp:
 Sử dụng một cấu trúc lặp lại một hành động trong

khi còn thỏa mãn một điều kiện nào đó.


 Sử dụng 3 cấu trúc lặp: for, while, do..while

07/04/2024 Câu lệnh lặp for, while, do..while 4


Câu lênh for
Sơ đồ khối: VÀO

Sai
Điều kiện Biểu thức 1: Khởi tạo giá trị ban đầu
cho biến điều kiện
Đúng Biểu thức 2: Kiểm tra điều kiện đúng
sai để dừng vòng lặp
<Công việc> Biểu thức 3: Phép gán cho phép thay
đổi giá trị biến điều kiện
RA

Cú pháp: <Công việc>:


- Câu lệnh đơn
for (Biểu thức 1; Biểu thức 2; Biểu thức 3)
- Câu lệnh phức đặt
<Công việc> trong cặp { và }

07/04/2024 Câu lệnh lặp for, while, do..while 5


Cách thức hoạt động
B1: Tính giá trị Biểu thức 1
B2: Tính giá trị Biểu thức 2
 Nếu giá trị Biểu thức 2 là sai (= 0): Thoát khỏi câu

lệnh for
 Nếu giá trị của Biểu thức 2 là đúng (!= 0): <Công

việc> trong thân vòng for được thực hiện.


B3: Tính giá trị của Biểu thức 3 và quay lại B2.

07/04/2024 Câu lệnh lặp for, while, do..while 6


Ví dụ
 Viết chương trình in ra các số từ 1 đến 5.
int i;
for ( i = 1; i <= 5; i++ )
printf( “%d\n”, i );
 Viết chương trình in ra các số từ 1 đến 1000.
int i;
for ( i = 1; i <= 1000; i++ )
printf( “%d\n”, i );

07/04/2024 Câu lệnh lặp for, while, do..while 7


Câu lệnh for – Một số lưu ý
 Câu lệnh for là một câu lệnh đơn và có thể lồng nhau
 Ví dụ: In ra tất cả các cặp số từ [1, 1]..[9,9]
int i, j;
for ( i = 1; i < 10; i++ )
for ( j = 1; j < 10; j++ )
printf( “[%d, %d]\n”, i, j );

07/04/2024 Câu lệnh lặp for, while, do..while 8


Câu lệnh for – Một số lưu ý
 Trong câu lệnh for, có thể không có phần <Biểu thức 1>
 Ví dụ:
int i;
for ( i = 0; i < 10; i++ )
printf( “%d\n”, i );

int i = 0;
for ( ; i < 10; i++ )
printf( “%d\n”, i );

07/04/2024 Câu lệnh lặp for, while, do..while 9


Câu lệnh for – Một số lưu ý
 Trong câu lệnh for, có thể không có phần <Biểu thức 2>
 Ví dụ:
int i;
for ( i = 0; i < 10; i++ )
printf( “%d\n”, i );

for ( i = 0; ; i++ ){
if ( i >= 10 )
break;
printf( “%d\n”, i );
}

07/04/2024 Câu lệnh lặp for, while, do..while 10


Câu lệnh for – Một số lưu ý
 Trong câu lệnh for, có thể không có phần <Biểu thức 3>
 Ví dụ:
int i;
for ( i = 0; i < 10; i++ )
printf( “%d\n”, i );

int i;
for ( i = 0; i < 10; ){
printf( “%d\n”, i );
i++;
}

07/04/2024 Câu lệnh lặp for, while, do..while 11


Câu lệnh for – Một số lưu ý
 Trong câu lệnh for, có thể không có cả 3 phần <Biểu
thức 1,2,3>
 Ví dụ:
int i;
for ( i = 0; i < 10; i++ )
printf( “%d\n”, i );

int i = 0;
for ( ; ; ){
if ( i >= 10 )
break;
printf( “%d\n”, i );
i++;
}
07/04/2024 Câu lệnh lặp for, while, do..while 12
Câu lệnh for – Một số lưu ý
 Biểu thức 1 bao giờ cũng được tính toán 1 lần khi gọi thực
hiện for
 Biểu thức 2, 3 và Công việc có thể thực hiện lặp lại nhiều
lần
 Biểu thức 1, 2, 3 phải được phân cách bằng dấu chấm
phẩy ;
 Nếu Biểu thức 2 không có, vòng lặp for được xem là luôn
đúng. Muốn thoát ra khỏi vòng lặp for phải dùng một trong
các lệnh break, goto hoặc return.

07/04/2024 Câu lệnh lặp for, while, do..while 13


Ví dụ minh họa
 Ví dụ 1: Viết chương trình in ra câu:
"Vi du su dung vong lap for" 3 lan
 Cách 1:

#include <stdio.h>
#define MSG "Vi du su dung vong lap for.\n"
int main(){
int i;
for ( i = 1; i <= 3; i++ )
printf( "%s", MSG );
return 0;
}
 Lưu ý:Có dấu chấm phẩy sau lệnh for(i = 1; i <= 3; i++);
các lệnh thuộc vòng lặp for sẽ không được thực hiện.

07/04/2024 Câu lệnh lặp for, while, do..while 14


Ví dụ minh họa
 Ví dụ 1: Viết chương trình in ra câu:
"Vi du su dung vong lap for" 3 lần
 Cách 2:

#include <stdio.h>
#define MSG "Vi du su dung vong lap for.\n"
int main(){
int i;
for ( i = 1; i <= 3; i++, printf("%s", MSG));
return 0;
}

07/04/2024 Câu lệnh lặp for, while, do..while 15


Ví dụ minh họa
 Ví dụ 2: Nhập 3 số nguyên và in ra tổng của chúng.

#include <stdio.h>
int main() {
int i, n, Tong;
iTong = 0;
for ( i = 1; i <= 3; i++ ) {
printf( "Nhap vao so thu %d :", i );
scanf( "%d", &n );
Tong = Tong + n;
}
printf( "Tong: %d", Tong );
return 0;
}
07/04/2024 Câu lệnh lặp for, while, do..while 16
Ví dụ minh họa
 Ví dụ 2: Nhập 3 số nguyên và in ra tổng của chúng.

#include <stdio.h>
int main() {
int i, in, iTong;
for (iTong=0, i=1; i<=3; printf("Nhap vao so thu %d:
", i), scanf("%d", &in), i++, iTong=iTong+in);
printf("Tong: %d", iTong);
return 0;
}

07/04/2024 Câu lệnh lặp for, while, do..while 17


Ví dụ minh họa
 Ví dụ 3: Nhập n và tính tổng các số lẻ từ 0..n.

#include <stdio.h>
int main() {
int i, in, is;
printf(“%s”, "Nhap vao so n: ");
scanf("%d", &in);
is = 0;
for ( i = 1; i <= in; i++ ) {
if ( i % 2 != 0 ) //neu i la so le
is = is + i; //hoac is += i;
}
printf("Tong: %d", is);
}
07/04/2024 Câu lệnh lặp for, while, do..while 18
Ví dụ minh họa
 Ví dụ 3: Nhập n và tính tổng các số lẻ từ 0..n.

#include <stdio.h>
int main() {
int i, in, is;
printf(“%s”, "Nhap vao so n: ");
scanf("%d", &in);
for (is = 0, i = 1; i <= in; is += i, i += 2);
printf("Tong: %d", is);
return 0;
}

07/04/2024 Câu lệnh lặp for, while, do..while 19


Ví dụ minh họa
 Ví dụ 4: Một vài ví dụ thay đổi biến điều khiển vòng lặp.
 Thay đổi biến điều khiển từ 1..100, mỗi lần tăng 1:
for (i = 1; i <= 100; i++)
 Thay đổi biến điều khiển từ 100 đến 1, mỗi lần giảm 1:
for (i = 100; i >= 1; i--)
 Thay đổi biến điều khiển từ 7 đến 77, mỗi lần tăng 7:
for (i = 7; i <= 77; i += 7)
 Thay đổi biến điều khiển từ 20 đến 2, mỗi lần giảm 2:
for (i = 20; i >= 2; i –= 2)

07/04/2024 Câu lệnh lặp for, while, do..while 20


Lệnh break
 Thông thường lệnh break dùng để thoát khỏi vòng lặp
không xác định điều kiện dừng hoặc bạn muốn dừng vòng
lặp theo điều kiện do bạn chỉ định.
 Việc dùng lệnh break để thoát khỏi vòng lặp thường sử
dụng phối hợp với lệnh if.
 Lệnh break dùng trong for, while, do…while, switch. Lệnh
break thoát khỏi vòng lặp trong cùng chứa nó.
 Ví dụ:
 Sử dụng break để thoát khỏi vòng lặp trong cùng chứa

nó.
 Sử dụng lệnh break trong switch để nhảy bỏ các câu

lệnh kế tiếp còn lại.

07/04/2024 Câu lệnh lặp for, while, do..while 21


Lệnh continue
 Được dùng trong vòng lặp for, while, do…while.
 Khi lệnh continue thi hành quyền điều khiển sẽ trao qua cho
biểu thức điều kiện của vòng lặp gần nhất.
 Nghĩa là quay ngược lên đầu vòng lặp, tất cả những lệnh đi
sau trong vòng lặp chứa continue sẽ bị bỏ qua không thi
hành.
 Ví dụ:
for(; ;){
printf(“%s”, "Nhap vao 1 so nguyen: ");
scanf("%d", &in);
if (in < 0)
continue; //in < 0 quay nguoc len dau vong lap
if (in == 0) break;
itong += in;
}
07/04/2024 Câu lệnh lặp for, while, do..while 22
Ví dụ minh họa
 Ví dụ 5: Nhập vào một dãy số nguyên từ bàn phím, nhập 0
để dừng. In ra tổng các số nguyên dương trong dãy.
#include <stdio.h>
int main() {
int in, iTong = 0;
for(; ;){
printf(“%s”, "Nhap vao 1 so nguyen: ");
scanf("%d", &in);
if (in < 0)
continue; //in < 0 quay nguoc len dau vong
lap
if (in == 0)
break; //in = 0 thoat vong lap
iTong += in;
}
printf("Tong: %d.\n", iTong);
return 0;
}07/04/2024 Câu lệnh lặp for, while, do..while 23
Câu lệnh for – Một số lưu ý
 Với mỗi Biểu thức có thể viết thành một dãy biểu thức con phân
cách nhau bởi dấu phẩy. Khi đó các biểu thức con được xác
định từ trái sang phải. Tính đúng sai của dãy biểu thức con
trong biểu thức thứ 2 được xác định bởi biểu thức con cuối
cùng.
 Trong thân for: Công việc có thể chứa một hoặc nhiều cấu trúc
điều khiển khác.
 Khi gặp lệnh break, cấu trúc lặp sâu nhất sẽ thoát ra.
 Trong thân for có thể dùng lệnh goto để thoát khỏi vòng lặp đến
vị trí mong muốn.
 Trong thân for có thể sử dụng return để trở về một hàm nào đó.
 Trong thân for có thể sử dụng lệnh continue để chuyển đến đầu
vòng lặp (bỏ qua các câu lệnh còn lại trong thân).

07/04/2024 Câu lệnh lặp for, while, do..while 24


Bài tập
1: Viết chương trình tính tổng S, với n nguyên dương
được nhập vào từ bàn phím:

2: Viết chương trình giải bài toán cổ điển sau:


 Vừa gà vừa chó 36 con

 Bó lại cho tròn, đếm đủ 100 chân

 Hỏi có bao nhiêu gà, bao nhiêu chó

07/04/2024 Câu lệnh lặp for, while, do..while 25


3. Viết chương trình giải bài toán cổ điển sau:
 Trăm trâu, trăm cỏ

 Trâu đứng ăn năm

 Trâu nằm ăn ba,

 Ba trâu già ăn một

=> Hỏi mỗi loại trâu có bao nhiêu con.

07/04/2024 Câu lệnh lặp for, while, do..while 26


Hướng dẫn 2
 Tối đa có 36 con, như vậy ta sẽ lặp từ 1 đến 36.
 Khả năng sẽ có ít nhất 1 con gà hoặc 1 con chó,
không có trường hợp nào 0 con gà, 0 con chó, vì nếu
bài toán mà có vậy thì ta đã biết đáp án nên loại bỏ
phương án có chó/ gà bằng 0 ra khỏi để xử lý. Vậy,
vòng lặp ta bớt đi 1 lần lặp, còn 35.
 Sẽ có hai vòng lặp lồng nhau, căn cứ trên số chân gà
và số chân chó, nếu khớp 100, tổng ga + cho = 36 thì
ta in kết quả ra.

07/04/2024 Câu lệnh lặp for, while, do..while 27


Câu lênh while
Sơ đồ khối: VÀO
Hoạt động:

Sai <Biểu thức> được kiểm tra:


Điều kiện - Nếu Sai:
+ Kết thúc vòng lặp while
Đúng + <Công việc> không được thực
hiện một lần nào.
<Công việc> - Nếu Đúng:
+ Thực hiện <Công việc>;
+ Lặp lại kiểm tra <Biểu thức>
RA

Cú pháp: <Công việc>:


- Câu lệnh đơn
while (<Biểu thức> )
- Câu lệnh phức đặt
<Công việc> trong cặp { và }

07/04/2024 Câu lệnh lặp for, while, do..while 28


Câu lệnh while
 Biểu thức: có thể là một biểu thức hoặc nhiều biểu
thức con. Nếu là nhiều biểu thức con thì cách nhau
bởi dấu phẩy (,) và tính đúng sai của biểu thức được
quyết định bởi biểu thức con cuối cùng.
 Trong thân while (Công việc) có thể chứa một hoặc
nhiều cấu trúc điều khiển khác.
 Trong thân while có thể sử dụng lệnh continue để
chuyển đến đầu vòng lặp (bỏ qua các câu lệnh còn lại
trong thân).
 Muốn thoát khỏi vòng lặp while tùy ý có thể dùng các
lệnh break, goto, return như lệnh for.

07/04/2024 Câu lệnh lặp for, while, do..while 29


Câu lệnh while vs for
 int i = 0;
while (i < 10) {
printf(“%d\n”, i);
i++;
}

 for (int i = 0; i < 10; i++)


printf(“%d\n”, i);

 int i = 0;
for (; i < 10; ){
printf(“%d\n”, i);
i++;
}

07/04/2024 Câu lệnh lặp for, while, do..while 30


Câu lệnh while – Một số lưu ý
 Câu lệnh while là một câu lệnh đơn và có thể lồng
nhau.

if (n < 10 && m < 20) {


while (n >= 1){
while (m >= 1){
printf(“%d\n”, m);
m--;
}
n--;
}
}

07/04/2024 Câu lệnh lặp for, while, do..while 31


Câu lệnh while – Một số lưu ý
 Câu lệnh while có thể không thực hiện lần nào do
điều kiện lặp ngay từ lần đầu đã sai.

int main(){
int n = 1;
while (n > 10){
printf(“%d\n”, n);
n--;
}
}

07/04/2024 Câu lệnh lặp for, while, do..while 32


Câu lệnh while – Một số lưu ý
 Không được thêm ; ngay sau lệnh lệnh while.

int n = 0;
while (n < 10);{
printf(“%d\n”, n);
n++;
}

while (n < 10){


printf(“%d\n”, n);
n++;
};

07/04/2024 Câu lệnh lặp for, while, do..while 33


Câu lệnh while – Một số lưu ý
 VD1: Viết ra 3 dòng MSG
a. int i = 0;
while (i++ < 3)
printf("%s", MSG);
b. while (printf("%s", MSG), ++i < 3);

 VD2: Tính tổng từ 1..n.


a. while (i++ < in)
is = is + i;
b. while (is = is+i, i++ < in);
 VD3: for(; ;){<Công việc>}
 while(1){<Công việc>}

07/04/2024 Câu lệnh lặp for, while, do..while 34


Câu lênh do .. while
Sơ đồ khối: VÀO
Hoạt động:

<Công việc> - <Công việc> được thực hiện


- <Biểu thức> được kiểm tra:
+ Nếu Đúng:
Đúng Sai Lặp lại thực hiện <Công việc>
Điều kiện + Nếu Sai:
Kết thúc vòng lặp

RA
Cú pháp:
<Công việc>:
do
- Câu lệnh đơn
<Công việc>; - Câu lệnh phức đặt
while (<Biểu thức>); trong cặp { và }

07/04/2024 Câu lệnh lặp for, while, do..while 35


Câu lệnh do .. while
 int i = 0;
do {
printf(“%d\n”, i);
i++;
} while (i < 10);

 int i = 0;
for (; i < 10; ){
printf(“%d\n”, i);
i++;
}

07/04/2024 Câu lệnh lặp for, while, do..while 36


Câu lệnh do .. while – Một số lưu ý
 Câu lệnh do… while là một câu lệnh đơn và có thể lồng
nhau.

 int a = 1, b;
do {
b = 1;
do {
printf(“%d\n”, a + b);
b = b + 2;
} while (b < 20);
a++;
} while (a < 20);

07/04/2024 Câu lệnh lặp for, while, do..while 37


Câu lệnh do .. while – Một số lưu ý
 Câu lệnh do… while sẽ được thực hiện ít nhất 1 lần do
điều kiện lặp được kiểm tra ở cuối.
 Câu lệnh do… while có thể bị lặp vô hạn

 int main(){
int n;
do {
printf(“Nhap n: ”);
scanf(“%d”, &n);
} while (n < 1 || n > 100);
}

07/04/2024 Câu lệnh lặp for, while, do..while 38


Câu lệnh do .. while – Một số lưu ý
 VD: Nhập password = 123456
a. do {
printf("Nhap vao password: ");
scanf("%d", &in);
} while (in != 123456);

b. do{}while(printf("Nhap vao password: "),


scanf("%d", &in), in != 12345);

07/04/2024 Câu lệnh lặp for, while, do..while 39


for, while, do ..while
 Đều có khả năng lặp lại nhiều hành động
 Vòng lặp for thường sử dụng khi biết được số lần lặp xác
định.
 Vòng lặp thường while, do…while sử dụng khi không biết
rõ số lần lặp.
 Khi gọi vòng lặp while, nếu biểu thức sai vòng lặp while sẽ
không được thực hiện lần nào nhưng vòng lặp do…while
thực hiện được 1 lần  Số lần thực hiện ít nhất của while
là 0 và của do…while là 1
 Các lệnh lặp for, while, do…while có thể lồng vào chính
nó, hoặc lồng vào lẫn nhau. Nếu không cần thiết không
nên lồng vào nhiều cấp dễ gây nhầm lẫn khi lập trình cũng
như kiểm soát chương trình.

07/04/2024 Câu lệnh lặp for, while, do..while 40


Bài tập
 1. Nhập vào số xe (gồm 4 chữ số) của bạn. Cho biết
số xe của bạn được mấy nút?
 2. Viết chương trình in ra các số lẻ nhỏ hơn hoặc
bằng n (Với n là số nguyên dương được nhập). Sao
cho 15 số lẻ được in trên một dòng.
 3. Viết chương trình in ra tất cả các ước của một số n
(Với n được nhập từ bàn phím).
 4. Nhập vào 1 số n, kiểm tra n có phải là số nguyên tố
không?

07/04/2024 Câu lệnh lặp for, while, do..while 41


 5. Cho số nguyên dương n. Hãy tìm chữ số đầu tiên
của n.
 6. Tìm chữ số nhỏ nhất/ lớn nhất của của số nguyên
dương n.

07/04/2024 Câu lệnh lặp for, while, do..while 42


Hướng dẫn:5
do
{
printf("\nNhap n: ");
scanf("%d", &n);
}while(n < 0 && printf("\nLoi: (n >= 0)"));
tam = n;
do
{
i = tam % 10;
tam /= 10;
}while(tam != 0);
printf("\nChu so dau tien la %d", i);

07/04/2024 Câu lệnh lặp for, while, do..while 43


Hướng dẫn: 6
do {
printf("\nNhap n: ");
scanf("%d", &n);
}while(n < 0 && printf("\nLoi: n >= 0 !"));
min = n % 10; // khoi tao min
if(n == 0)
min = 0;
do
{
i = n % 10;
if(i < min)
{
min = i;
}
} while(n=n/10);
printf("\nChu so nho nhat la %d", min);

07/04/2024 Câu lệnh lặp for, while, do..while 44


Hỏi & Đáp

07/04/2024 Câu lệnh lặp for, while, do..while 45


THANKS YOU

04/07/2024 Câu lệnh lặp for, while, do..while 46

You might also like