Xem mẫu

  1. 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
  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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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
  8. 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
  9. 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
  10. 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
  11. 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
  12. 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
  13. 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
  14. 04/2010 bangtqh@hotmail.com K thu t l p trình C - C u trúc l p 27
nguon tai.lieu . vn