23
Cu trúc lp (tiếp theo) Cu trúc lp (tiếp theo) Ngôn NgLp Trình C++

Bai Giang 4

  • Upload
    nbb3i

  • View
    1.993

  • Download
    4

Embed Size (px)

Citation preview

Page 1: Bai Giang 4

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++

Page 2: Bai Giang 4

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

Page 3: Bai Giang 4

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;

Page 4: Bai Giang 4

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;

Page 5: Bai Giang 4

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;

}

Page 6: Bai Giang 4

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

Page 7: Bai Giang 4

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;

Page 8: Bai Giang 4

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;

Page 9: Bai Giang 4

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

Page 10: Bai Giang 4

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

Page 11: Bai Giang 4

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.

Page 12: Bai Giang 4

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);

Page 13: Bai Giang 4

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);

Page 14: Bai Giang 4

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);

Page 15: Bai Giang 4

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

Page 16: Bai Giang 4

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;}

Page 17: Bai Giang 4

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;}

Page 18: Bai Giang 4

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

Page 19: Bai Giang 4

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;

Page 20: Bai Giang 4

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

Page 21: Bai Giang 4

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

Page 22: Bai Giang 4

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ị

Page 23: Bai Giang 4

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

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