Bai Giang 4

Preview:

Citation preview

Cấu trúc lặp (tiếp theo)Cấu trúc lặp (tiếp theo)

Ngôn Ngữ Lập TrìnhC++

2Vòng lặp

Đề mụcĐề mục

Câu lệnh forCâu lệnh do-whileSo sánh while, for và do-whileVòng lặp lồng nhauGỡ rối vòng lặpCác lỗi lập trình thường gặp

Câu lệnh forCâu lệnh do-whileSo sánh while, for và do-whileVòng lặp lồng nhauGỡ rối vòng lặpCác lỗi lập trình thường gặp

3Vòng lặp

Câu lệnh forCâu lệnh for

Câu lệnh for thích hợp với vòng lặp thực hiện cáccông việc giống nhau dựa trên biến đếm.Ví dụ 1: In ra màn hình 20 dấu ‘*’dem = 0;while (dem < 20){

cout<<‘*’<<endl;dem ++;

}

Câu lệnh for thích hợp với vòng lặp thực hiện cáccông việc giống nhau dựa trên biến đếm.Ví dụ 1: In ra màn hình 20 dấu ‘*’dem = 0;while (dem < 20){

cout<<‘*’<<endl;dem ++;

}

for (dem = 0; dem < 20; dem++)cout<<‘*’<<endl;

for (dem = 0; dem < 20; dem++)cout<<‘*’<<endl;

4Vòng lặp

Giải thích quá trình thực hiện:

khởi tạo dem = 0;kiểm tra (dem < 20) thấy đúng, vậy in ra dấu ‘*’tăng dem ++ vậy dem = 1quay lại kiểm tra (dem < 20) thấy đúng, vậy in ra dấu ‘*’tăng dem ++ vậy dem = 2...tăng dem ++ vậy dem = 19quay lại kiểm tra (dem < 20) thấy đúng, vậy in ra dấu ‘*’tăng dem ++ vậy dem = 20quay lại kiểm tra (dem < 20) thấy sai, vậy ra khỏi vòng lặp

Giải thích quá trình thực hiện:

khởi tạo dem = 0;kiểm tra (dem < 20) thấy đúng, vậy in ra dấu ‘*’tăng dem ++ vậy dem = 1quay lại kiểm tra (dem < 20) thấy đúng, vậy in ra dấu ‘*’tăng dem ++ vậy dem = 2...tăng dem ++ vậy dem = 19quay lại kiểm tra (dem < 20) thấy đúng, vậy in ra dấu ‘*’tăng dem ++ vậy dem = 20quay lại kiểm tra (dem < 20) thấy sai, vậy ra khỏi vòng lặp

Câu lệnh forCâu lệnh for

for (dem = 0; dem < 20; dem++)cout<<‘*’<<endl;

for (dem = 0; dem < 20; dem++)cout<<‘*’<<endl;

5Vòng lặp

Câu lệnh forCâu lệnh for

Ví dụ 2 : Tính lương cho các công nhânfor (dem_cn = 0; dem_cn < 10; dem_cn ++){

cout<<“So san pham lam duoc : ";cin>>SoSP;Luong = SoSP * 5;cout<<“Luong cua ban la : "<<Luong<<" nghin dong"<<endl;

}

Ví dụ 2 : Tính lương cho các công nhânfor (dem_cn = 0; dem_cn < 10; dem_cn ++){

cout<<“So san pham lam duoc : ";cin>>SoSP;Luong = SoSP * 5;cout<<“Luong cua ban la : "<<Luong<<" nghin dong"<<endl;

}

6Vòng lặp

Bài tậpBài tập

Tính tổng S = 13 + 23 + 33 + ... + 103

In ra màn hình bảng giá trịi i*i sqrt(i)1 1 1.02 4 1.43 9 1.74 16 2.05 25 2.26 36 2.47 49 2.6

Tính tổng S = 13 + 23 + 33 + ... + 103

In ra màn hình bảng giá trịi i*i sqrt(i)1 1 1.02 4 1.43 9 1.74 16 2.05 25 2.26 36 2.47 49 2.6

7Vòng lặp

Lời giảiLời giải

Tính tổng S = 13 + 23 + 33 + ... + 103

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

tong += i*i*i;

In bảngcout.setf(ios::fixed); // hien thi theo ki phap dau chamcout.precision(1); // lay 1 so le sau dau chamcout<<setw(3)<<“i”<<setw(5)<<“i*i” <<setw(7)<<“sqrt(i)”<<endl;for (i = 1; i <= 7; i++)

cout<<setw(3)<<i<<setw(6)<<i*i<<setw(9)<<sqrt(i)<<endl;

Tính tổng S = 13 + 23 + 33 + ... + 103

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

tong += i*i*i;

In bảngcout.setf(ios::fixed); // hien thi theo ki phap dau chamcout.precision(1); // lay 1 so le sau dau chamcout<<setw(3)<<“i”<<setw(5)<<“i*i” <<setw(7)<<“sqrt(i)”<<endl;for (i = 1; i <= 7; i++)

cout<<setw(3)<<i<<setw(6)<<i*i<<setw(9)<<sqrt(i)<<endl;

8Vòng lặp

Câu lệnh forCâu lệnh for

Biến điều khiển trong lệnh for có thể tăng giảm vớimột lượng bất kỳ.Ví dụ: Tính tổng các số lẻ nằm từ 1 đến Nsum = 0;for (le = 1; le <= N; le += 2)

sum += le;

Biến điều khiển trong lệnh for có thể tăng giảm vớimột lượng bất kỳ.Ví dụ: Tính tổng các số lẻ nằm từ 1 đến Nsum = 0;for (le = 1; le <= N; le += 2)

sum += le;

9Vòng lặp

Bài tậpBài tập

In ra màn hình bảng đổi nhiệt độ từ độ C sang độ FCelsius Fahrenheit

20 68.0015 59.0010 50.005 41.000 32.00-5 23.00

-10 14.00-15 5.00-20 -4.00

Công thức: F = 1.8*C + 32

In ra màn hình bảng đổi nhiệt độ từ độ C sang độ FCelsius Fahrenheit

20 68.0015 59.0010 50.005 41.000 32.00-5 23.00

-10 14.00-15 5.00-20 -4.00

Công thức: F = 1.8*C + 32

10Vòng lặp

Câu lệnh forCâu lệnh for

Cú pháp:for (khởi tạo; biểu thức điều kiện; cập nhật biến điều khiển)

<Câu lệnh>;

Giái thích:Thực hiện câu lệnh khởi tạo;Kiểm tra biểu thức điều kiện;Nếu điều kiện đúng thì

• Thực hiện <Câu lệnh>;• Thực hiện cập nhật biến điều khiển• Quay lại kiểm tra điều kiện;

Nếu điều kiện sai thì ra khỏi vòng lặp

Cú pháp:for (khởi tạo; biểu thức điều kiện; cập nhật biến điều khiển)

<Câu lệnh>;

Giái thích:Thực hiện câu lệnh khởi tạo;Kiểm tra biểu thức điều kiện;Nếu điều kiện đúng thì

• Thực hiện <Câu lệnh>;• Thực hiện cập nhật biến điều khiển• Quay lại kiểm tra điều kiện;

Nếu điều kiện sai thì ra khỏi vòng lặp

11Vòng lặp

Câu lệnh do-whileCâu lệnh do-while

Câu lệnh do-while thích hợp với những vòng lặp cầnthực hiện ít nhất một lần lặp

Làm thực đơn (menu)Kiểm tra lệnh nhiều lần

Cú phápdo{

<Câu lệnh>;} while (biểu thức điều kiện)

Giải thíchLàm <Câu lệnh>. Kiểm tra điều kiện, nếu đúng thì

• Quay lại làm <Câu lệnh>• Kiểm tra điều kiện

Kiểm tra điều kiện, nếu sai thì• Ra khỏi vòng lặp.

Câu lệnh do-while thích hợp với những vòng lặp cầnthực hiện ít nhất một lần lặp

Làm thực đơn (menu)Kiểm tra lệnh nhiều lần

Cú phápdo{

<Câu lệnh>;} while (biểu thức điều kiện)

Giải thíchLàm <Câu lệnh>. Kiểm tra điều kiện, nếu đúng thì

• Quay lại làm <Câu lệnh>• Kiểm tra điều kiện

Kiểm tra điều kiện, nếu sai thì• Ra khỏi vòng lặp.

12Vòng lặp

Câu lệnh do-whileCâu lệnh do-while

Làm thực đơn:void thuc_don(){

cout<<“1. Tinh dien tich hinh tron”<<endl;cout<<“2. Tinh dien tich tam giac”<<endl;cout<<“3. Thoat”<<endl;

}do{

thuc_don();cout<<“Chon mot so: ”;cin>>so;switch (so)...

} while (so != 3);

Làm thực đơn:void thuc_don(){

cout<<“1. Tinh dien tich hinh tron”<<endl;cout<<“2. Tinh dien tich tam giac”<<endl;cout<<“3. Thoat”<<endl;

}do{

thuc_don();cout<<“Chon mot so: ”;cin>>so;switch (so)...

} while (so != 3);

13Vòng lặp

Câu lệnh do-whileCâu lệnh do-while

Kiểm tra lệnh nhiều lầndo{

cout<<“Nhap ban kinh: ”;cin>>ban_kinh;ket_qua = chu_vi_ht(ban_kinh);cout<<“Chu vi la: “<<ket_qua;

} while (ban_kinh != 0);

Kiểm tra lệnh nhiều lầndo{

cout<<“Nhap ban kinh: ”;cin>>ban_kinh;ket_qua = chu_vi_ht(ban_kinh);cout<<“Chu vi la: “<<ket_qua;

} while (ban_kinh != 0);

14Vòng lặp

Break và ContinueBreak và Continue

Lệnh break dùng để thoát ngay ra khỏi vòng lặpLệnh continue dùng để quay trở lại ngay đầu vòng lặpdo{

cout<<“Nhap mot so: ”;cin>>so;if (so == 0)

break;cout<<“Hello”<<endl;

} while (so != 0);

Lệnh break dùng để thoát ngay ra khỏi vòng lặpLệnh continue dùng để quay trở lại ngay đầu vòng lặpdo{

cout<<“Nhap mot so: ”;cin>>so;if (so == 0)

break;cout<<“Hello”<<endl;

} while (so != 0);

15Vòng lặp

So sánh các câu lệnh lặpSo sánh các câu lệnh lặp

while: Thích hợp với vòng lặp chưa biết trước số lần lặpCâu lệnh trong while có thể không được thực hiện1 lần nào nếu điều kiện kiểm tra là sai ngay từđầu.

for:Thích hợp với vòng lặp biết trước số lần lặp

do-while:Thích hợp với vòng lặp có ít nhất là một lần lặp

while: Thích hợp với vòng lặp chưa biết trước số lần lặpCâu lệnh trong while có thể không được thực hiện1 lần nào nếu điều kiện kiểm tra là sai ngay từđầu.

for:Thích hợp với vòng lặp biết trước số lần lặp

do-while:Thích hợp với vòng lặp có ít nhất là một lần lặp

16Vòng lặp

Vòng lặp lồng nhauVòng lặp lồng nhau

Ví dụ 1: In ra màn hình 20 dòng và 30 cột các ngôi sao************************************************************************************************************************...

Lời giải:for (dong = 1; dong <= 20; dong ++){

for (cot = 1; cot <= 30; cot ++)cout<<‘*’;

cout<<endl;}

Ví dụ 1: In ra màn hình 20 dòng và 30 cột các ngôi sao************************************************************************************************************************...

Lời giải:for (dong = 1; dong <= 20; dong ++){

for (cot = 1; cot <= 30; cot ++)cout<<‘*’;

cout<<endl;}

17Vòng lặp

Vòng lặp lồng nhauVòng lặp lồng nhau

Ví dụ 2: In ra màn hình các ngôi sao như sau****************************

Lời giải:for (dong = 1; dong <= 7; dong ++){

for (cot = 1; cot <= dong; cot ++)cout<<‘*’;

cout<<endl;}

Ví dụ 2: In ra màn hình các ngôi sao như sau****************************

Lời giải:for (dong = 1; dong <= 7; dong ++){

for (cot = 1; cot <= dong; cot ++)cout<<‘*’;

cout<<endl;}

18Vòng lặp

Gỡ rối vòng lặpGỡ rối vòng lặp

Lần theo giá trị các biến trong sau từng bước lặpLập bảng vết – ví dụ:tong = 0;gt = 1;for (i = 1; i <= 6; i++){

gt = gt*i;tong = tong + gt;

}cout<<“Tong: “<<tong;Tong = 1! + 2! +... + 6!

Lần theo giá trị các biến trong sau từng bước lặpLập bảng vết – ví dụ:tong = 0;gt = 1;for (i = 1; i <= 6; i++){

gt = gt*i;tong = tong + gt;

}cout<<“Tong: “<<tong;Tong = 1! + 2! +... + 6!

873720615312053324496332211101

tonggti

19Vòng lặp

Gỡ rối vòng lặpGỡ rối vòng lặp

In ra các giá trị trung gian trong từng bước lặptong = 0;gt = 1;for (i = 1; i <= 6; i++){

gt = gt*i;cout<<“gt = “<<gt<<endl;tong = tong + gt;cout<<“tong = “<<tong<<endl;

}cout<<“Tong: “<<tong;

In ra các giá trị trung gian trong từng bước lặptong = 0;gt = 1;for (i = 1; i <= 6; i++){

gt = gt*i;cout<<“gt = “<<gt<<endl;tong = tong + gt;cout<<“tong = “<<tong<<endl;

}cout<<“Tong: “<<tong;

20Vòng lặp

Bài tậpBài tập

Vòng lặp sau cho kết quả như thế nào ?tong = 0;for (i = 1; i <= 7; i++){

if (i % 2) == 1tong = tong + i*i;

elsetong = tong – i*i;

}cout<<“Tong: “<<tong;Tong = 12 – 22 + 32 – 42 + 52 – 62 + 72

Vòng lặp sau cho kết quả như thế nào ?tong = 0;for (i = 1; i <= 7; i++){

if (i % 2) == 1tong = tong + i*i;

elsetong = tong – i*i;

}cout<<“Tong: “<<tong;Tong = 12 – 22 + 32 – 42 + 52 – 62 + 72

tongi

11

-32

63

-104

155

-216

287

21Vòng lặp

Bài tậpBài tập

Vòng lặp sau cho kết quả như thế nào ?for (i = 1; i <= 7; i++){

for (j = 1; j <= i; j++)cout<<setw(3)<<j;

cout<<endl;}

Vòng lặp sau cho kết quả như thế nào ?for (i = 1; i <= 7; i++){

for (j = 1; j <= i; j++)cout<<setw(3)<<j;

cout<<endl;}

7654321i / j

11

212

3213

43214

543215

6543216

76543217

22Vòng lặp

Các lỗi lập trình thường gặpCác lỗi lập trình thường gặp

Nhầm giữa if và whileSai ở điều kiện lặp

So sánh sự bằng nhau giữa hai số thựcThiếu { } ở câu lệnh gộpBiến chưa khởi tạo giá trị

Nhầm giữa if và whileSai ở điều kiện lặp

So sánh sự bằng nhau giữa hai số thựcThiếu { } ở câu lệnh gộpBiến chưa khởi tạo giá trị

23Vòng lặp

Bài tậpBài tập

Viết chương trình tính giá trịA = 1/n + 2/(n-1) + 3/(n-2) + ... + n/1Viết chương trình nhập vào một số nguyên dương, sau đó cho biết số đó có bao nhiêu chữ sốViết chương trình kiểm tra một số có là số nguyên tốViết chương trình in ra màn hình cây thông

** ** * ** * * ** * * * ** * * * * ** * * * * * *

Viết chương trình tính giá trịA = 1/n + 2/(n-1) + 3/(n-2) + ... + n/1Viết chương trình nhập vào một số nguyên dương, sau đó cho biết số đó có bao nhiêu chữ sốViết chương trình kiểm tra một số có là số nguyên tốViết chương trình in ra màn hình cây thông

** ** * ** * * ** * * * ** * * * * ** * * * * * *