Xem mẫu
- K THU T L P TRÌNH C
Chương 4: C u trúc l p
bangtqh@hotmail.com
04/2010
Khái ni m vòng l p
• M t công vi c nào đó ñư c th c hi n
l p đi l p l i nhi u l n
• Ví d
– In ra màn hình các s t 1 đ n 10, m i s
trên m t dòng
• Gi i pháp đơn gi n
– printf(“1\n”);
– printf(“2\n”);
–…
– printf(“10\n”);
• Gi i pháp t ng quát
– L p i ch y t 1 t i 10
printf(“%d\n”, i);
bangtqh@hotmail.com K thu t l p trình C - C u trúc l p 2
- 04/2010
L p d ng for
– Cú pháp
for([B.Th c 1]; [B.th c 2]; [B.Th c 3])
;
• Các ph n trong c p d u “[” và “]” là không b t bu c
• Các d u “;” và c p ngo c “(” và “)” b t bu c ph i có
– Ví d :
bangtqh@hotmail.com K thu t l p trình C - C u trúc l p 3
04/2010
L p d ng for
Các bư c ho t đ ng:
1.Tính B.Th c 1.
2.Tính B.Th c 2.
• N u sai thoát vòng l p.
• N u đúng ñi vào th c hi n
FALSE
vi c c n l p
TRUE
3.Tính B.Th c 3, sau đó
quay tr l i bư c 2 ñ b t
đ u các bư c l p m i.
bangtqh@hotmail.com K thu t l p trình C - C u trúc l p 4
- 04/2010
L p d ng for
• Bi u th c 1: Thư ng là 1 phép gán đ kh i t o giá tr ban ñ u cho
bi n đi u khi n
• Bi u th c 2: Thư ng là 1 bi u th c đi u ki n
• Bi u th c 3: Cũng là 1 phép gán đ thay ñ i giá tr bi n đi u khi n
bangtqh@hotmail.com K thu t l p trình C - C u trúc l p 5
04/2010
bangtqh@hotmail.com K thu t l p trình C - C u trúc l p 6
- 04/2010
Tính S = 3 + 6 + 9 + ... + 3 N
Vòng l p ch y
ngư c t N tr
v 1
bangtqh@hotmail.com K thu t l p trình C - C u trúc l p 7
04/2010
L p d ng for
• Nh n xét
– Bi u th c 1 ch ñư c tính m t l n
– Bi u th c 2, bi u th c 3 và kh i l nh trong
thân l nh for ñư c l p đi l p l i nhi u l n
– D a các giá tr kh i t o bi n đi u khi n, ñi u
ki n l p và bi u th c 3 có th tính đư c s l n
l p.
• Khi bi u th c 2 v ng m t thì nó ñư c xem
là ñúng (vòng l p vô h n).
– Đ thoát kh i l nh for trong trư ng h p này
ph i dùng l nh break ho c return
• Có th s d ng các l nh for l ng nhau.
bangtqh@hotmail.com K thu t l p trình C - C u trúc l p 8
- 04/2010
L p d ng for
1. Tính TBC các s l ≤ N
2. Tìm ư c s chung l n nh t (UCLN) c a 2
s a, b
3. Ki m tra xem s N có ph i là s nguyên
t không?
4. S ti n nhi u nh t 1 ngư i tham gia “Đ u
trư ng 100” có th ñ t đư c là bao nhiêu
?
5. Hi n th t t c các s nguyên t ≤ N
6. In ra màn hình tam giác cân đ cao N
g m toàn các d u ‘*’ có d ng bên
bangtqh@hotmail.com K thu t l p trình C - C u trúc l p 9
04/2010
Ki u array – m ng
• M ng là m t ki u d li u có c u trúc do
ngư i l p trình đ nh nghĩa
• Dùng bi u di n các đ i tư ng d li u d ng
m t dãy các thành ph n có cùng ki u v i
nhau (ki u cơ s )
• NNLT C luôn ch ñ nh m t kh i nh liên t c
cho m t bi n ki u m ng
• Kích thư c c a m ng ñư c xác đ nh ngay
khi khai báo và không bao gi thay ñ i
bangtqh@hotmail.com K thu t l p trình C - C u trúc l p 10
- 04/2010
Khai báo array trong C
ki ucơs TênBi n[S ph nt ];
ki u c a m i thành ph n h ng s , s thành ph n
t i đa c a m ng
Do l p trình viên đ t tên
int a[100];
//a là m ng bi u di n dãy g m 100 s nguyên int
bangtqh@hotmail.com K thu t l p trình C - C u trúc l p 11
04/2010
Ki u array – ví d
#define SIZE 10
int a[5]; // a dãy g m 5 s nguyên
long int big[100]; // big: chi m 400 bytes!
double d[100]; // d: chi m 800 bytes!
long double v[SIZE]; // v:10 long doubles
2 thành ph n đ u tiên
đư c kh i t o, ph n
int a[5] = { 10, 20, 30, 40, 50}; còn l i: 0
double d[100] = { 1.5, 2.7};
short primes[] = { 1, 2, 3, 5, 7, 11, 13};
long b[50] = { 0 };
int i = 7;
Trình biên d ch xác đ nh kích const int c = 5;
thư c g m 7 thành ph n
int a[i];
cách nhanh nh t đ kh i t o double d[c];
t t c các thành ph n b ng 0 short primes[];
bangtqh@hotmail.com K thu t l p trình C - C u trúc l p 12
- 04/2010
Ki u array – Lưu ý
• Các thành ph n c a m ng đư c truy xu t thông qua ch
s c a chúng 0..n-1
• Thao tác truy xu t không ki m tra gi i h n c a ch s
int main()
int main()
{
{ a
int
int a[6];
a[6]; 59 0
int
int i = 7;
i = 7;
a[0] = 59; 1
a[0] = 59;
a[5] = -10;
a[5] = -10; 2
a[i/2] = 2;
a[i/2] = 2; 2 3
a[6] = 0;
a[6] = 0; 4
a[-1] = 5;
a[-1] = 5;
return 0; -10 5
return 0;
}}
bangtqh@hotmail.com K thu t l p trình C - C u trúc l p 13
04/2010
Ki u array – Thao tác cơ s
Gi i h n ch
s m ng ?
bangtqh@hotmail.com K thu t l p trình C - C u trúc l p 14
- 04/2010
L p d ng for
1. Tính TBC các s l trong dãy s a1,
a2,…,aN
2. Tìm giá tr min/max trong dãy a1, a2,…,aN
3. Đ m xem trong dãy a1, a2,…,aN có bao
nhiêu s nguyên t ?
4. Cho dãy đi m M1(x1, y1), M2(x2,
y2),…,Mn(xn, yn) trên m t ph ng. Hãy:
• Tìm đ dài đư ng g p khúc M1M2..Mn
• Tìm đo n MiMj (i≠j) có ñ dài l n nh t
• Đ m xem có bao nhiêu ño n c t tr c 0y
• Có bao nhiêu ñi m thu c góc ph n tư th
nh t.
bangtqh@hotmail.com K thu t l p trình C - C u trúc l p 15
04/2010
L p d ng while
• L nh l p while
– Cú pháp
while (bi u th c)
kh i l nh c n l p;
– Ý nghĩa
• Trong khi bi u th c có giá tr ñúng (khác 0) thì còn
ph i th c hi n kh i l nh. Vi c l p d ng l i khi bi u
th c có giá tr sai (b ng 0).
• L p while ki m tra đi u ki n trư c khi th c hi n
kh i l nh.
– Hãy v sơ ñ kh i bi u di n l nh while
bangtqh@hotmail.com K thu t l p trình C - C u trúc l p 16
- 04/2010
L p d ng while – Ví d
bangtqh@hotmail.com K thu t l p trình C - C u trúc l p 17
04/2010
L p d ng while – Lưu ý
• Nh n xét
– Bi u th c đi u ki n luôn dư c đ t trong c p d u
“(” và “)”
– Bi u th c đi u ki n s ñư c tính toán đ u tiên
nên ph i có giá tr xác đ nh
• Câu l nh sau làm gì ?
while(0) printf(“nothing\n”);
• Hãy chuy n l nh for d ng t ng quát thành
l nh while
bangtqh@hotmail.com K thu t l p trình C - C u trúc l p 18
- 04/2010
L p d ng do…while
• Cú pháp
do
kh i l nh;
while (bi u th c);
• Ý nghĩa
– Th c hi n kh i l nh trong khi bi u th c có giá tr ñúng (khác
0)
– Th c hi n kh i l nh trư c khi ki m tra bi u th c đi u ki n
– Kh i l nh đư c th c hi n ít nh t 1 l n
• Hãy v sơ ñ kh i bi u di n l nh do … while
bangtqh@hotmail.com K thu t l p trình C - C u trúc l p 19
04/2010
L p do…while - ví d
bangtqh@hotmail.com K thu t l p trình C - C u trúc l p 20
- 04/2010
L p while và do…while
1. Vi t chương trình nh p vào s nguyên
N. Hãy in ra màn hình bi u di n c a nó
d ng nh phân (Binary)
2. Vi t chương trình tìm ph n t ñ u tiên
trong dãy a1, a2,…,an th a mãn: b ng
t ng các ph n t ñ ng trư c nó.
3. Vi t l i chương trình ki m tra xem s N
có nguyên t hay không b ng cách s
d ng do…while
4. Chuy n đo n mã l nh d ng do…while
thành d ng while
bangtqh@hotmail.com K thu t l p trình C - C u trúc l p 21
04/2010
K thu t b t phím
• Đ c trong b ñ m bàn phím b ng hàm
getch() có ñư c mã c a phím b nh n.
• N u b ñ m bàn phím r ng ñ i nh n 1
phím.
– Phím b nh n là phím thư ng b ñ m bàn
phím nh n 1 mã x
– N u phím b nh n là phím đi u khi n b ñ m
bàn phím ti p nh n 2 mã liên ti p ( x và 0 )
• Hàm getch() s ñ c các ký t có trong b
đ m theo th t ngư c v i th t ñưa vào.
bangtqh@hotmail.com K thu t l p trình C - C u trúc l p 22
- 04/2010
K thu t b t phím
Bư c 1: Ki m tra b ñ m bàn phím xem có
phím nào b nh n không kbhit()
Bư c 2: N u hàm kbhit() tr v giá tr ≠ 0
2.1. B t phím l n 1: key1 = getch();
2.2. Ki m n u tra key1 == 0
• Sai: x lý ñ i v i trư ng h p phím thư ng
• Đúng: B t phím l n 2: key2 = getch();
x lý trư ng h p phím đi u khi n.
bangtqh@hotmail.com K thu t l p trình C - C u trúc l p 23
04/2010
B t phím
bangtqh@hotmail.com K thu t l p trình C - C u trúc l p 24
- 04/2010
K thu t b t phím
Mã Phím đi u khi n Vi t chương trình hi n th lên
màn hình 1 d u ‘*’ sau ñó
0/72 Phím lên ↑
cho phép ngư i dùng dùng
0/80 Phím xu ng ↓ các phím mũi tên di chuy n
0/75 Phím sang trái ← d u ‘*’ kh p màn hình.
0/77 Phím sang ph i → Chương trình s k t thúc n u
27 Phím ESC ngư i dùng b m phím ESC.
0/59 Phím F1
0/60 Phím F2
0/83 Phím Delete
0/73 Phím PgUp
0/81 Phím PgDn
… …
bangtqh@hotmail.com K thu t l p trình C - C u trúc l p 25
04/2010
break và continue
• L nh break thư ng đư c s d ng k t h p
l nh l p
– Dùng đ thoát kh i vòng l p m t cách b t
thư ng (không quan tâm t i đi u ki n l p)
– N u có nhi u l nh l p l ng nhau thì l nh break
ch thoat vòng l p tr c ti p ch a nó
• L nh continue
– Dùng đ quay tr l i t ñ u vòng l p
– Th c hi n l n l p m i mà không ñi h t các l nh
còn l i trong thân vòng l p
bangtqh@hotmail.com K thu t l p trình C - C u trúc l p 26
- 04/2010
bangtqh@hotmail.com K thu t l p trình C - C u trúc l p 27
nguon tai.lieu . vn