Lập trình cơ bản - Lập trình với cấu trúc lặp
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 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, do 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
38 trang |
Chia sẻ: nguyenlam99 | Lượt xem: 1038 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Lập trình cơ bản - Lập trình với cấu trúc lặp, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
LẬP TRÌNH VỚI
CẤU TRÚC LẶP
LÊ ĐỨC LONG-NGÔ QUỐC VIỆT
2011
NỘI DUNG
1. Nhắc lại các toán tử BIT
2. Ý nghĩa, cách hoạt động của vòng lặp
3. Lặp với lệnh for
4. Các lệnh ảnh hưởng đến lặp: break, continue.
5. Lặp với lệnh while.
6. Lặp với lệnh dowhile.
7. Vòng lặp lồng nhau và so sánh các lệnh lặp
Ngô Quốc Việt-Lập trình cơ bản 2
NHẮC LẠI CÁC TOÁN TỬ BIT
Số nhị phân: một vị trí nhớ lưu trữ 8 bits. Ký hiệu
số nhị phân 01100100b.
Ngô Quốc Việt-Lập trình cơ bản 3
Nguồn: O’Reilly 2003
Toán tử BIT
Ngô Quốc Việt-Lập trình cơ bản 4
Toán tử & BIT
Ngô Quốc Việt-Lập trình cơ bản 5
Kết quả của 45 & 71 là 41 ?.
Cần phân biệt && và &.
Bài tập ngắn: viết hàm kiểm tra chẵn lẻ dựa trên &.
Toán tử OR BIT (|)
Ngô Quốc Việt-Lập trình cơ bản 6
Toán tử XOR BIT (^)
Ngô Quốc Việt-Lập trình cơ bản 7
Toán tử left và right shift
Ngô Quốc Việt-Lập trình cơ bản 8
Ý nghĩa và sử dụng lệnh lặp
Lặp: thực hiện một thao tác / hành động một số
lần nhất định. Ví dụ: hít đất 20 cái; hát điệp khúc 2
lần; chạy quanh sân 10 vòng; Tính dãy Fibonacci
với n = 100; Tính giai thừa của 1000;
Viết 100 lệnh hay 1000 lệnh “giống nhau”?
Nnlt trình phải hỗ trợ làm điều này các lệnh
lặp.
Lệnh lặp thực hiện một khối lệnh với số lần
lặp nhất định, hoặc khi chưa thoả điều kiện
nào đó.
Ngô Quốc Việt-Lập trình cơ bản 9
Xét bài toán tính n!
Input: số nguyên dương n
Output: giá trị của n!
Thuật giải thông thường
Bước 1: Gán gt = 1
Bước 2.1: Gán gt = gt * 1 = 1
Bước 2.2: Gán gt = gt * 2 = 1 * 2
Bước 2.3: Gán gt = gt * 3 = 1 * 2 * 3
Bước 2.4: Gán gt = gt * 4 = 1 * 2 * 3 * 4
.
Bước 2.i: Gán gt = gt * i = 1 * 2 * 3 * 4 * * i
Bước 2.n: Gán gt = gt * n = 1 * 2 * 3 * 4 * n
Xuất giá trị gt
Ngô Quốc Việt-Lập trình cơ bản 10
Phân biệt các lệnh lặp
Lệnh lặp for: số lần lặp biết trước.
Lệnh lặp while: lặp khi điều kiện lặp còn thỏa
hoặc lặp theo số lần biết trước (giống for).
Lệnh lặp do... while: giống lệnh lặp while nhưng
điều kiện lặp đặt ở cuối vòng lặp.
Lệnh lặp foreach: lặp theo các đối tượng trong
một tập hợp (khảo sát sau).
Ngô Quốc Việt-Lập trình cơ bản 11
Cấu trúc lặp for
Số lần lặp xác định trước. Dùng một biến đếm để
xác định số lần lặp đã làm
Ngô Quốc Việt-Lập trình cơ bản 12
Cấu trúc lặp for
Trường hợp lặp 1 câu lệnh
for(khởi tạo các biến đếm; kiểm tra số lần
lặp; cập nhật các biến đếm số lần lặp)
câu lệnh;
Trường hợp lặp nhiều câu lệnh
for(khởi tạo các biến đếm; kiểm tra số lần
lặp; cập nhật các biến đếm số lần lặp)
{
lệnh 1;
lệnh 2;
lệnh 3;
// các lệnh trong khối lệnh
}
Ngô Quốc Việt-Lập trình cơ bản 13
Cấu trúc lặp for
“khởi tạo các biến đếm”: các lệnh chỉ được chạy
đúng một lần trong lệnh for.
“kiểm tra số lần lặp” biểu thức logic: được
kiểm tra khi mỗi khi khối lệnh được thực hiện
xong.
“cập nhật các biến đếm số lần lặp” các lệnh
gán làm tăng/giảm giá trị biến đếm.
Ngô Quốc Việt-Lập trình cơ bản 14
Cấu trúc lặp for-ví dụ
#include "stdio.h"
#include "conio.h"
void main()
{
int n;
printf("Nhap so nguyen n:");
scanf("%i",&n);
int gt = 1;
for(int i = 1; i <= n; i++)
gt = gt * i;
printf("n! = %i",gt);
getch();
}
Ngô Quốc Việt-Lập trình cơ bản 15
Cấu trúc lặp for-ví dụ
Tính tổng các số lẻ từ 0 đến n (giá trị nhập vào)
#include
#include
void main(void)
{
int iDem, iN, iTongLe = 0;
printf("Nhap vao so n: \n");
scanf("%d", &iN);
iTongLe = 0;
for(iDem = 0; iDem <= iN; iDem++)
{
if (iDem % 2 != 0) //neu iDem la so le
iTongLe= iTongLe + iDem;
}
printf("Tong: %d", iTongLe);
getch ();
}
Ngô Quốc Việt-Lập trình cơ bản 16
Cấu trúc lặp for-ví dụ
Lặp với biến đếm giảm - Ví dụ tính tổng các số lẻ
#include
#include
void main(void)
{
int iDem, iN, iTongLe = 0;
printf("Nhap vao so n: \n");
scanf("%d", &iN);
iTongLe = 0;
for(iDem= iN; iDem > 0; iDem--)
{
if (iDem % 2 != 0) //neu iDem la so le
iTongLe= iTongLe + iDem;
}
printf("Tong: %d", iTongLe);
getch ();
}
Ngô Quốc Việt-Lập trình cơ bản 17
Lệnh break trong vòng lặp
Nhu cầu cần thoát khỏi vòng lặp khi số lần lặp chưa
đủ hay “điều kiện ngừng” chưa thoả mãn.
Cần thoát ra khi có “lỗi” hay “bất thường” trong
vòng lặp.
Ví dụ: cần đánh trứng 100 lần. Tuy nhiên ngừng đánh
trứng nếu “chén vỡ”.
for(int i = 0; i < 100; i ++)
{
if(bChenVo == true)
break;
//Tiep tục đánh trứng
}
Ngô Quốc Việt-Lập trình cơ bản 18
Lệnh break trong vòng lặp
Lệnh break cần được kèm với lệnh if.
Ngô Quốc Việt-Lập trình cơ bản 19
Điều
kiện lặp
Ra khỏi
lặp
false
Các lệnh sau break
Các lệnh trước
lệnh break
Điều kiện
break
true
false
Lệnh break trong vòng lặp
Ví dụ: nhập N (input từ bàn phím) số nguyên từ bàn phím. Nếu gặp số
zero thì ngừng. Tính tổng các số đã nhập.
#include
#include
void main(void)
{
int in, itong = 0;, iN
printf("Nhap vao so luong so nguyen: \n");
scanf("%d", &iN);
for(int i = 0; i < iN; i ++)
{
printf("Nhap vao 1 so nguyen: ");
scanf("%d", &in);
if (in == 0)
break; //in = 0 thoat vong lap
itong += in;
}
printf("Tong: %d.\n", itong);
getch();
}
Ngô Quốc Việt-Lập trình cơ bản 20
Lệnh continue trong vòng lặp
Dùng để không thực hiện các lệnh còn lại trong
lần lặp hiện tại, và quay trở lại đầu vòng lặp
Ngô Quốc Việt-Lập trình cơ bản 21
continue
Điều
kiện lặp
Ra khỏi
lặp
false
Các lệnh sau
continue
Các lệnh trước
lệnh continue
Điều kiện
continue
true
false
Lệnh continue trong vòng lặp
Lệnh continue cần được kèm với lệnh if, hoặc
lệnh lựa chọn switch.
Ví dụ: cần xếp 10000 trứng vào các hộp. Bỏ qua
trứng hư, và tiếp tục với các trứng còn lại.
Ngô Quốc Việt-Lập trình cơ bản 22
continue
iTrung < 10000
Ngừng
xếp trứng
false
Xếp iTrung vô hộp
Trứng
iTrung hư
true
false
Lệnh continue trong vòng lặp
#include "stdio.h"
#include "conio.h"
void main()
{
char sUname[20], sPword[20];
int iSolan;
printf("Nhap username/password: \n");
scanf("%s %s",&sUname, &sPword);
for(iSolan = 0; iSolan < 3; iSolan ++)
{
if(sUname != “abcde” || sPword != “12345”)
continue;
}
if(iSolan == 3)
printf(“Ban da nhap sai uname, pword sai 3 lan\n”);
getch();
}
Ngô Quốc Việt-Lập trình cơ bản 23
Cấu trúc lặp while
Viết chương trình tìm n sao cho: n! <= m (nhập
vào)
Ngô Quốc Việt-Lập trình cơ bản 24
Không thể sử
dụng cấu trúc for
vì không biết số
lần lặp
Cấu trúc lặp while
Ngô Quốc Việt-Lập trình cơ bản 25
while (điều kiện lặp)
{
lệnh 1;
lệnh 2;
// .....
}
điều kiện lặp biểu thức logic
Cấu trúc lặp while
#include "stdio.h"
#include "conio.h";
void main()
{
int m;
printf("Nhap m:");
scanf("%i",&m);
int n = 1, gt = 1;
while (gt <= m)
{
n++;
gt = gt * n;
}
printf("n = %i",n - 1);
getch();
}
Ngô Quốc Việt-Lập trình cơ bản 26
Cấu trúc lặp 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 (khối lệnh) 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 .
Ngô Quốc Việt-Lập trình cơ bản 27
Cấu trúc lặp do ... while
Lặp không xác định số lần lặp.
Tương tự lặp while, nhưng được
đặt cuối vòng lặp. Có lợi gì?
Ý nghĩa logic: cần phải làm gì đó trước, rồi kiểm
tra nếu thầy chưa thỏa thì làm lại. Ví dụ: kiểm tra
user name / password (cần nhập trước mới dữ
liệu để kiểm tra) cho đến khi nào nhập đúng.
Ngô Quốc Việt-Lập trình cơ bản 28
Cấu trúc lặp do ... while
do
{
lệnh 1;
lệnh 2;
// .....
} while (điều kiện lặp);
điều kiện lặp biểu thức logic
Ngô Quốc Việt-Lập trình cơ bản 29
Biểu thức logic: có thể chứa nhiều biểu thức logic.
Mỗi biểu thức cách nhau dấu phẩy. Chỉ xét điều kiện
của biểu thức logic cuối cùng.
Cấu trúc lặp do ... while-Ví dụ
#include
# define PASSWORD “0123456789”
void main(void)
{
int in;
do
{
printf("Nhap vao password: \n");
scanf("%d", &in);
} while (in != PASSWORD)
}
Ngô Quốc Việt-Lập trình cơ bản 30
Vòng lặp lồng nhau
Cho phép trong một vòng lặp có một hay nhiều
vòng lặp khác.
Ví dụ: hãy vẽ hình chữ nhật sau
x+++++++++++++++x
x+++++++++++++++x
x+++++++++++++++x
x+++++++++++++++x
x+++++++++++++++x
x+++++++++++++++x
Ngô Quốc Việt-Lập trình cơ bản 31
switch, break và continue
Ngô Quốc Việt-Lập trình cơ bản 32
Vòng lặp lồng nhau
#include
#include
void main(void)
{
int i, ij, iDai, iRong;
printf("Nhap vao so ky tu cho chieu dai: \n");
scanf("%d", &iDai);
printf(" Nhap vao so ky tu cho chieu rong : \n");
scanf("%d", &iRong);
for (i = 0; i < iRong; i++)
{
for (ij = 0; ij < iDai; ij++)
printf("*");
printf("\n"); //xuong dong khi in xong 1 hang
}
getch();
}
Ngô Quốc Việt-Lập trình cơ bản 33
for vs. while
Ngô Quốc Việt-Lập trình cơ bản 34
Tóm tắt các lệnh lặp
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 while, dowhile sử dụng khi không
biết rõ số lần lặp
Khi gọi vòng lặp while, dowhile, 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 dowhile 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
dowhile là 1
Ngô Quốc Việt-Lập trình cơ bản 35
Bài tập
1. Viết lưu đồ và chương trình tính tổ hợp N chập
K (kiểm tra K <= N). Trong đó
2. Viết chương trình tính giá trị của đa thức. Cho
phép nhập x, n, và các ai (0 i n) từ bàn phím
3. Viết chương trình vẽ một tam giác đều (có độ dài
cạnh nhập từ bàn phím) bằng các dấu *.
Ngô Quốc Việt-Lập trình cơ bản 36
)!(!
!
KNK
N
CKN
01
1
1 ... axaxaxaP
n
n
n
nn
Bài tập
4. Viết chương trình tính (n
dấu căn)
5. Viết chương trình tính
6. Viết chương trình tính mỗi loại trâu (đứng,
nằm, già) theo bài vè 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
Ngô Quốc Việt-Lập trình cơ bản 37
xxxx ...
)!1(
...
!3!2
1
2
n
xxx n
CÁM ƠN ĐÃ THEO DÕI
LÊ ĐỨC LONG-NGÔ QUỐC VIỆT
2011
Các file đính kèm theo tài liệu này:
- ltcb_baigiang04_4959.pdf