You are on page 1of 41

Trường ĐHCN Việt - Hung

Khoa CNTT

NHẬP MÔN LẬP TRÌNH


Nguyễn Thị Thu Thủy

Chương 4: CÂU LỆNH LẶP

1
&&
VC
VC
BB
BB
Nội dung

1 Câu lệnh for

2 Câu lệnh while

3 Câu lệnh do… while

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

NMLT - Câu lệnh lặp 2


&&
VC
VC
BB
BB
Đặt vấn đề

 Ví dụ
 Viết chương trình xuất các số từ 1 đến 10
=> Sử dụng 10 câu lệnh cout
 Viết chương trình xuất các số từ 1 đến 1000
=> Sử dụng 1000 câu lệnh cout !
 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

NMLT - Câu lệnh lặp 3


&&
VC
VC
BB
BB
1. Vòng lặp for

<Khởi đầu>

<Bước nhảy>

Đ
<Đ/K lặp> <Lệnh>

for (<Khởi đầu>; <Đ/K lặp>; <Bước nhảy>)


<Lệnh>;<Khởi đầu>, <Đ/K lặp>, <Bước nhảy>:
là biểu thức C bất kỳ có chức năng riêng
<Lệnh>: đơn hoặc khối lệnh.
NMLT - Câu lệnh lặp 4
&&
VC
VC
BB
BB
1. Vòng lặp for

- Biểu thức khởi đầu thường là một lệnh gán:


biến = giá trị 1;
- Đ/k Lặp thường là 1 biểu thức so sánh:
Biến phép_toán_so_sánh giá trị 2;
- Bước nhảy thường là 1 lệnh gán làm tăng (giảm)
giá trị của biến.
Þ Cú pháp tổng quát câu lệnh for:
for(biến=giá_trị1; biến so_sánh giá_trị2; tăng/giảm biến)
Khối lênh;

NMLT - Câu lệnh lặp 5


&&
VC
VC
BB
BB
1. Vòng lặp for

 Nguyên tắc thực hiện vòng lặp for


for(biến=giá_trị1; biến so_sánh giá_trị2; tăng/giảm biến)
Khối lênh;
- B1: Bắt đầu vòng lặp biểu thức khởi đầu được
thực hiện (biến được gán giá trị 1)
- B2: kiểm tra Đ/k lặp (so sánh biến với giá trị 2):
+ Nếu đk lặp đúng thì thực hiện Lệnh (trong thân
vòng lặp), sau đó thực hiện bước nhảy (tăng/giảm
biến tùy thuộc vào biểu thức của bước nhảy) và
quay lại B2.
+ Nếu Đk lặp sai thì vòng lặp dừng lại.
NMLT - Câu lệnh lặp 6
&&
VC
VC
BB
BB

 Ví dụ: Viết chương trình in ra các số từ 1 đến 10


Sử dụng cout bt Lệnh thay thế
cout<<1; int i; i=1; cout<<i;
cout<<2 i=i+1; cout<<i;
cout<<3; i=i+1; cout<<i;
cout<<4; i=i+1; cout<<i;
cout<<5 i=i+1; cout<<i;
cout<<6; i=i+1; cout<<i;
cout<<7; i=i+1; cout<<i;
cout<<8; i=i+1; cout<<i;
cout<<9; i=i+1; cout<<i;
cout<<10; i=i+1; cout<<i;
i=i+1; => i>10: dừng
Biến: i; giá trị 1: 1; giá trị 2: 10; Lệnh/khối lệnh: cout<<i; lệnh tăng/giảm
biến: i=i+1;
Lệnh cout<<i thực hiệntrong khi i<=10 => bt đk: i<=10 Nguyễn Thị Thu Thủy 7
&&
VC
VC
BB
BB

 Ví dụ: Viết chương trình in ra các số từ 1 đến 10


Biến: i; giá trị 1: 1; giá trị 2: 10; Lệnh/khối lệnh:
cout<<i; lệnh tăng/giảm biến: i=i+1;
Lệnh cout<<i thực hiệntrong khi i<=10 => bt đk:
i<=10
Þ Bt khởi đầu: i=1;
Þ Bt đk: i<=10;
Þ Bước nhảy: i=i+1; //i++;
Þ Lệnh: cout<<i;
for(i=1; i<=10; i++)
cout<<i; 8
Nguyễn Thị Thu Thủy
&&
VC
VC
BB
BB

 Ví dụ: Viết chương trình nhập vào 1 số n, in ra


các số từ 1 đến n
Biến: i; giá trị 1: 1; giá trị 2: n; Lệnh/khối lệnh:
cout<<i; lệnh tăng/giảm biến: i=i+1;
Lệnh cout<<i thực hiệntrong khi i<=n => bt đk: i<=n
Þ Bt khởi đầu: i=1;
Þ Bt đk: i<=n;
Þ Bước nhảy: i=i+1; //i++;
Þ Lệnh: cout<<i;
for(i=1; i<=n; i++)
cout<<i; 9
Nguyễn Thị Thu Thủy
&&
VC
VC
BB
BB
1. Vòng lặp for

void main()
{
int i;
for (i = 0; i < 10; i++)
cout<<“\n”<< i;
//biến i tồn tại (sử dụng được)trong suốt cả chương trình
for (int j = 0; j < 10; j = j + 1)
cout<<“\n”<< j;
//(biến j chỉ tồn tại (sử dụng được) trong vòng lặp for)
for (int k = 0; k < 10; k += 2)
{
cout<<k;
cout<<“\n”;
}
}

NMLT - Câu lệnh lặp 10


&&
VC
VC
BB
BB
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.
if (n < 10 && m < 20)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
cout<<i + j;
cout<<“\n”;
}
}
}

NMLT - Câu lệnh lặp 11


&&
VC
VC
BB
BB
Câu lệnh for - Một số lưu ý
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
cout<<i + j;
cout<<“\n”;
}
}
Vòng lặp for lồng nhau trên thực hiện như sau:
- Vòng 1: i=0, sau đó thực hiện vòng for ở trong:
+ j=0; in ra: 0, xuống dòng, tăng j thêm 1 (j=1)
+ j=1<m; in ra 1 (lúc đó i=0, j=1); tăng j thêm 1;
+ j=2<m: in ra 2 (lúc đó i=0, j=2); tăng j thêm 1;
+ Nếu m=3, j=3 ko <3 => dừng vòng lặp trong; tăng i lên 1 (vòng
lặp bên trong  câu lệnh thân của vòng lặp ngoài)
- Vòng 2: i=1; nếu i<n thì thực hiện câu lệnh for ở trong
+ j=0; in ra 1 (lúc đó i=1; j=0), tăng j thêm 1 (j=1)
+ j=1<m: in ra 2 ((lúc đó i=1; j=0), tăng j thêm 1 (j=2)
+ j=2<m: in ra 3 (lúc đó i=1, j=2); tăng j thêm 1; (j=3)
+ Nếu m=3, j=3 ko <3 => dừng vòng lặp trong; tăng i lên 1
- Vòng thứ 3: làm tương tự như vòng 2, cho đến khi i>=n thì dừng
12
- Câu lệnh cout<<i+j và cout<<“\n” được thực hiệnNMLT
n*m- Câu lệnh lặp
lần
&&
VC
VC
BB
BB
Câu lệnh for - Một số lưu ý

 Trong câu lệnh for, có thể sẽ không có phần


<Khởi đầu>
int i;
for (i = 0; i < 10; i++)
cout<<“\n”<< i;
Cách viết trên Tương đương với cách viết:
int i = 0;
for (; i < 10; i++)
cout<<“\n”<< i;

=> Gán giá trị ban đầu cho biến bên ngoài vòng
lặp
NMLT - Câu lệnh lặp 13
&&
VC
VC
BB
BB
Câu lệnh for - Một số lưu ý

 Trong câu lệnh for, có thể sẽ không có phần


<Bước nhảy>
int i;
for (i = 0; i < 10; i++)
cout<<“\n”<<i;
Cách viết trên Tương đương với cách viết:

for (i = 0; i < 10; )


{
cout<<“\n”<< i;
i++;
}
=> Biểu thức tang/giảm giá trị cho biến nằm trong
khối lệnh của thân vòng lặp
NMLT - Câu lệnh lặp 14
&&
VC
VC
BB
BB

Các em vào link cô gửi trên Chat làm bài kiểm tra
nhé:
https://docs.google.com/forms/d/e/
1FAIpQLScFgUh9ulOiSwc3DfAA0_7OCf2Dz1Kps
sBxgoZ-tYFK1IqjgA/viewform?usp=sf_link

15
&&
VC
VC
BB
BB
Câu lệnh for - Một số lưu ý

 Trong câu lệnh for, có thể sẽ không có phần


<Đ/K lặp> (khi đó coi như điều kiện luôn đúng)
int i;
for (i = 0; i < 10; i++)
cout<<“\n”<<i;
//lặp vô hạn
for (i = 0; ; i++)
cout<<“\n”<<i;
//Sửa lại: dùng câu lệnh dừng vòng lặp
for (i = 0; ; i++)
{
if (i >= 10)
break;
cout<<“\n”<< i;
} 16
NMLT - Câu lệnh lặp
&&
VC
VC
BB
BB
Câu lệnh for - Một số lưu ý
 Không được thêm ; ngay sau lệnh lệnh for.
=> Nếu để ; ngay sau dòng for thì Tương đương
câu lệnh rỗng.

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


{
cout<<i;
cout<<“\n”;
}
//tương đương với khối lệnh sau:
for (i = 0; i < 10; i++)
{
};
{
cout<<i;
cout<<“\n”; 17
} NMLT - Câu lệnh lặp
&&
VC
VC
BB
BB
Câu lệnh for - Một số lưu ý

 Các thành phần <Khởi đầu>, <Đ/K lặp>,


<Bước nhảy> cách nhau bằng dấu ;
 Nếu có nhiều thành phần trong mỗi phần thì
được cách nhau bằng dấu ,
for (int i = 1, j = 2; i + j < 10; i++, j += 2)
cout<<“\n”<< i + j;

NMLT - Câu lệnh lặp 18


&&
VC
VC
BB
BB
2. Vòng lặp while

Đ
<Đ/K lặp> <Lệnh>

S Biểu thức C bất kỳ,


thường là biểu thức
quan hệ (logic)cho kết quả
0 (sai) và != 0 (đúng)
while (<Đ/K lặp>)
<Lệnh>;
Câu lệnh đơn hoặc
Câu lệnh phức (kẹp
giữa { và })

NMLT - Câu lệnh lặp 19


&&
VC
VC
BB
BB
2. Vòng lặp while

 Nguyên tắc thực hiện lệnh while:


- B1: kiểm tra đk lặp:
+ Nếu đúng: thực hiện Lệnh (trong thân
vòng lặp), sau đó quay lại B1
+ Nếu sai: Chuyển sang b2
- B2: Dừng vòng lặp

NMLT - Câu lệnh lặp 20


&&
VC
VC
BB
BB 2. Vòng lặp while
Ví dụ:. Vòng lặp while
int i = 0;
while (i < 10)
{
cout<<“\n”<< i;
i++;
}
//tương đương với:
for (int i = 0; i < 10; i++)
cout<<“n”<< i;
//tương đương với
int i = 0;
for (; i < 10; )
{
cout<<“\n”<< i;
i++;
}
NMLT - Câu lệnh lặp 21
&&
VC
VC
BB
BB
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)
{
cout<<m;
m--;
}
n--;
}
}
NMLT - Câu lệnh lặp 22
&&
VC
VC
BB
BB
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 đã không thỏa.
void main()
{
int n = 1;
while (n > 10)
{
cout<<“\n”<< n;
n--;
}

}

NMLT - Câu lệnh lặp 23


&&
VC
VC
BB
BB
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);
{
cout<<“\n”<< n;
n++;
}
//tương đương
while (n < 10)
{
};
{
cout<<“\n”<< n;
n++;
}
NMLT - Câu lệnh lặp 24
&&
VC
VC
BB
BB
Câu lệnh while - Một số lưu ý

 Câu lệnh while có thể bị lặp vô tận (loop)


void main()
{
int n = 1;
while (n < 10)
{
cout<< n;
n--;
}

n = 1;
while (n < 10)
cout<< n;
}
NMLT - Câu lệnh lặp 25
&&
VC
VC
BB
BB
3. Vòng lặp do… while

<Lệnh>

Đ
<Đ/K lặp>

S Câu lệnh đơn hoặc


Câu lệnh phức (kẹp
do giữa { và })

<Lệnh>;
Biểu thức C bất kỳ,
while (<Đ/K lặp>); thường là biểu thức
quan hệ cho kết quả
0 (sai) và != 0 (đúng)
NMLT - Câu lệnh lặp 26
&&
VC
VC
BB
BB
3. Vòng lặp do… while

 Nguyên tắc thực hiện lệnh do…while:


- B1: Thực hiện Lệnh (trong thân vòng lặp)
- B2: Kiểm tra Đ/k Lặp
+ Nếu đúng: quay lại B1
+ Nếu sai: dừng vòng lặp.

NMLT - Câu lệnh lặp 27


&&
VC
VC
BB
BB
Câu lệnh do… while
Ví dụ:
int i = 0;
do
{
cout<<“\n"<< i;
i++;
}
while (i < 10);
//Tương đương với:
int i = 0;
cout<<“\n"<< i;
i++;
for (; i < 10; )
{
cout<<“\n"<< i;
i++;
}
NMLT - Câu lệnh lặp 28
&&
VC
VC
BB
BB
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
{
cout<<“\n"<< a + b;
b = b + 2;
}
while (b < 20);
a++;
}
while (a < 20); 29
NMLT - Câu lệnh lặp
&&
VC
VC
BB
BB
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.
void main()
{
int n;
do
{
cout<<“Nhap n:” ;
cin>>n;
}
while (n < 1 || n > 100);
}

NMLT - Câu lệnh lặp 30


&&
VC
VC
BB
BB
Câu lệnh do… while - Một số lưu ý

 Câu lệnh do… while có thể bị lặp vô tận (loop)



int n = 1;
do
{
cout<<n;
n--;
}
while (n < 10);

n = 1;
do
cout<<n;
while (n < 10);
… 31
NMLT - Câu lệnh lặp
&&
VC
VC
BB
BB
So sánh for, while, do… while

 Đều có khả năng lặp lại nhiều hành động.


int n = 10;
for (int i = 1; i <= n; i++)
cout<<“\n"<< i;

int i = 1;
while (i <= n)
{
cout<<“\n"<< i; i++;
}

int i = 1;
do {
cout<<“\n"<< i; i++;
} while (i < n); 32
NMLT - Câu lệnh lặp
&&
VC
VC
BB
BB
So sánh for, while, do… while

 Số lần lặp xác định ngay trong câu lệnh for


int n = 10;
for (int i = 1; i <= n; i++)
…;

int i = 1;
while (i <= n)
{
…;
}

int i = 1;
do {
…;
} while (i > n); 33
NMLT - Câu lệnh lặp
&&
VC
VC
BB
BB
So sánh while & do… while

 while có thể không thực hiện lần nào.


 do… while sẽ được thực hiện ít nhất 1 lần.
int n = 100;
while (n < 10)
{
…;
}

do
{
cout<<“Nhap n:” ;
cin>>n;
}
while (n > 10);
NMLT - Câu lệnh lặp 34
&&
VC
VC
BB
BB
4. Câu lệnh dừng vòng lặp

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


 Lệnh continue bỏ qua lần lặp hiện tại.
for (i = 0; i < 10; i++)
{ Cout ko được thực
hiện lần nào do ngay
if (i % 2 == 0)
từ lần lặp đầu tiên i=0
break; %2==0 => thực hiện
cout<<“\n”<<i; lệnh break dừng vòng
} lặp

for (i = 0; i < 10; i++) Lần 1: i=0%2==0 => bỏ qua ko thực hiện cout, tăng i
Lần 2: i=1%2!=0 => thực hiện in 1, tăng i lên (i=2)
{ Lần 3: i=2%2==0=> bỏ qua ko thực hiện cout, tăng i
if (i % 2 == 0) Lần 4: i=3%2!=0 => thực hiện in 2, tăng i lên (i=3)
.....
continue; Lần 10: i=9%2!=0 => thực hiện in 9, tăng i lên (i=10)
cout<<“\n”<<i; Lần 11: i=10ko nhỏ hơn 10 => vòng lặp kết thúc
Þ LQ in lên màn hình:1 3 5 7 9 (mỗi số in trên 1
} dòng) 35
NMLT - Câu lệnh lặp
&&
VC
VC
BB
BB
Bài tập thực hành

1. Nhập một số nguyên dương n (n > 0).


Hãy cho biết:
a. Có phải là số đối xứng? Ví dụ: 121, 12321, …
b. Có phải là số chính phương? Ví dụ: 4, 9, 16, …
c. Có phải là số nguyên tố? Ví dụ: 2, 3, 5, 7, …
d. Chữ số lớn nhất và nhỏ nhất?
e. Các chữ số có tăng dần hay giảm dần không?

NMLT - Câu lệnh lặp 36


&&
VC
VC
BB
BB
Bài tập thực hành

2. Nhập một số nguyên dương n. Tính:


2. S = 1 + 2 + … + n
3. S = 12 + 22 + … + n2
4. S = 1 + 1/2 + … + 1/n
5. S = 1*2*…*n = n!
6. S = 1! + 2! + … + n!
3. Nhập 3 số nguyên a, b và n với a, b < n. Tính tổng
các số nguyên dương nhỏ hơn n chia hết cho a
nhưng không chia hết cho b.
4. Tính tổng các số nguyên tố nhỏ hơn n (0 < n < 50)
NMLT - Câu lệnh lặp 37
&&
VC
VC
BB
BB
Bài tập thực hành

5. Nhập một số nguyên dương n. Xuất ra số ngược


lại. Ví dụ: Nhập 1706  Xuất 6071.
6. Tìm và in lên màn hình tất cả các số nguyên trong
phạm vi từ 10 đến 99 sao cho tích của 2 chữ số
bằng 2 lần tổng của 2 chữ số đó.
7. Tìm ước số chung lớn nhất của 2 số nguyên
dương a và b nhập từ bàn phím.
8. Nhập n. In n số đầu tiên trong dãy Fibonacy.
a. a0 = a1 = 1
b. an = an – 1 + an – 2
NMLT - Câu lệnh lặp 38
&&
VC
VC
BB
BB
Bài tập thực hành
9. Viết chương trình thực hiện các công việc sau:
 S = 1/2 + 1/4 + … + 1/2n
 S = 1 + 1/3 + 1/5 + … + 1/(2n+1)
 S = 1/(1x2) + 1/(2x3) + … + 1/(nxn+1)
 S = 1/2 + 2/3 + … + n/(n+1)
 S = 1 + 1/(1 + 2) + … + 1/(1 + 2 + … + n)
 Liệt kê tất cả ước số của số nguyên dương n
 Tính tổng các ước số của số nguyên dương n
 Đếm số lượng ước số của số nguyên dương n
 Tính tổng các ước số chẵn của số nguyên
dương n NMLT - Câu lệnh lặp 39
&&
VC
VC
BB
BB
ÔN TẬP

Sinh viên truy cập vào link sau để làm bài kiểm tra
ôn tập chương 4:
https://
docs.google.com/forms/d/e/1FAIpQLScFgUh9ulOiSw
c3DfAA0_7OCf2Dz1KpssBxgoZ-tYFK1IqjgA/viewform
?usp=sf_link

40
&&
VC
VC
BB
BB
ÔN TẬP

Sinh viên truy cập vào link sau để làm bài kiểm tra
ôn tập chương 4:
https://
docs.google.com/forms/d/e/1FAIpQLScFgUh9ulOiSw
c3DfAA0_7OCf2Dz1KpssBxgoZ-tYFK1IqjgA/viewform
?usp=sf_link

41

You might also like