Session 11 - Mảng – Lý thuyết

Embed Size (px)

Citation preview

Bi 11Mc tiu: Kt thc bi hc ny, bn c th: Hiu c cc phn t ca mng v cc ch s mng Khai bo mt mng Hiu cch qun l mng trong C Hiu mt mng c khi to nh th no Hiu mng chui/ k t Hiu mng hai chiu Hiu cch khi to mng nhiu chiu.

Mng

Gii thiu: C th bn s gp kh khn khi lu tr mt tp hp cc phn t d liu ging nhau trong cc bin khc nhau. V d, im cho tt c 11 cu th ca mt i bng phi c ghi nhn trong mt trn u. S lu tr im ca mi cu th trong cc bin c tn khc nhau th chc chn phin h hn dng mt bin chung cho chng. Vi mng mi vic s c thc hin n gin hn. Mt mng l mt tp hp cc phn t d liu c cng kiu. Mi phn t c lu tr cc v tr k tip nhau trong b nh chnh. Nhng phn t ny c gi l phn t mng. 11.1 Cc phn t mng v cc ch mc: Mi phn t ca mng c nh danh bng mt ch mc hoc ch s gn cho n. Chiu ca mng c xc nh bng s ch s cn thit nh danh duy nht mi phn t. Mt ch s l mt s nguyn dng c bao bng du ngoc vung [ ] t ngay sau tn mng, khng c khong trng gia. Mt ch s cha cc gi tr nguyn bt u bng 0. V vy, mt mng player vi 11 phn t c biu din nh sau: player[0], player[1], player[2], ... , player[10]. Nh thy, phn t mng bt u vi player[0], v v vy phn t cui cng l player[10] khng phi l player[11]. iu ny l do bi trong C, ch s mng bt u t 0; do trong mng N phn t, phn t cui cng c ch s l N-1. Phm vi cho php ca cc gi tr ch s c gi l min gii hn ca ch s mng, gii hn di v gii hn trn. Mt ch s mng hp l phi c mt gi tr nguyn nm trong nim gii hn. Thut ng hp l c s dng cho mt nguyn nhn rt c trng. Trong C, nu ngi dng c gng truy xut mt phn t nm ngoi dy ch s hp l (nh player[11] trong v d trn ca mng), trnh bin dch C s khng pht sinh ra li. Tuy nhin, c th n truy xut mt gi tr no dn n kt qu khng on c. Cng c nguy c vit chng ln d liu hoc m lnh chng trnh. V vy, ngi lp trnh phi m bo rng tt c cc ch s l nm trong min gii hn hp l. Khai bo mt mng: Mt mng c mt vi c tnh ring bit v phi c khai bo khi s dng chng. Nhng c tnh ny bao gm: Lp lu tr Kiu d liu ca cc phn t mng. Tn mng xc nh v tr phn t u tin ca mng. Kch thc mng - mt hng s c gi tr nguyn dng.

Mng

1

Mt mng c khai bo ging nh cch khai bo mt bin, ngoi tr tn mng c theo sau bi mt hoc nhiu biu thc, c t trong du ngoc vung [] xc nh chiu di ca mng. C php tng qut khai bo mt mng nh sau: lp_lu_tr kiu_d_liu tn_mng[biu_thc_kch_thc]

y, biu_thc_kch_thc l mt biu thc xc nh s phn t trong mng v phi nh ra mt tr nguyn dng. Lp_lu_tr l mt ty chn. Mc nh lp automatic c dng cho mng khai bo bn trong mt hm hoc mt khi lnh, v lp external c dng cho mng khai bo bn ngoi mt hm. V vy mng player c khai bo nh sau: int player[11]; Nn nh rng, trong khi khai bo mng, kch thc ca mng s l 11, tuy nhin cc ch s ca tng phn t bn trong mng s l t 0 n 10. Cc qui tc t tn mng l ging vi qui tc t tn bin. Mt tn mng v mt tn bin khng c ging nhau, n dn n s nhp nhng. Nu mt s khai bo nh vy xut hin trong chng trnh, trnh bin dch s hin th thng bo li. Mt vi qui tc vi mng: Tt c cc phn t ca mt mng c cng kiu. iu ny c ngha l, nu mt mng c khai bo kiu int, n khng th cha cc phn t c kiu khc. Mi phn t ca mng c th c s dng bt c ni no m mt bin c cho php hay c yu cu. Mt phn t ca mng c th c tham chiu n bng cch s dng mt bin hoc mt biu thc nguyn. Sau y l cc tham chiu hp l: player[i]; /* i l mt bin, tuy nhin cn phi ch rng i nm trong min gii hn ca ch s c khai bo cho mng player*/ player[3] = player[2] + 5; player[0] += 2; player[i / 2 + 1]; Kiu d liu ca mng c th l int, char, float, hoc double.

11.2 Vic qun l mng trong C: Mt mng c i x khc vi mt bin trong C. Thm ch hai mng c cng kiu v kch thc cng khng th tng ng nhau. Hn na, khng th gn mt mng trc tip cho mt mng khc. Thay v th, mi phn t mng phi c gn ring l tng ng vi tng phn t ca mng khc. Cc gi tr khng th c gn cho ton b mt mng, ngoi tr ti thi im khi to. Tuy nhin, tng phn t khng ch c th c gn tr m cn c th c so snh. int player1[11], player2[11]; for (i = 0; i < 11; i++) player1[i] = player2[i]; Tng t, cng c th c kt qu nh vy bng vic s dng cc lnh gn ring l nh sau: player1[0] = player2[0]; player1[1] = player2[1]; ... player1[10] = player2[10];2 Lp trnh c bn C

Cu trc for l cch l tng thao tc cc mng. V d 11.1: /* Program demonstrates a single dimensional array */ #include void main() { int num[5]; int i; num[0] = 10; num[1] = 70; num[2] = 60; num[3] = 40; num[4] = 50; for (i = 0; i < 5; i++) pirntf(\n Number at [%d] is %d, i, num[i]); } Kt qu ca chng trnh c trnh by bn di: Number Number Number Number Number at at at at at [0] [1] [2] [3] [4] is is is is is 10 70 60 40 50

V d bn di nhp cc gi tr vo mt mng c kch thc 10 phn t, hin th gi tr ln nht v gi tr trung bnh. V d 11.2: /*Input values are accepted from the user into the array ary[10]*/ #include void main() { int ary[10]; int i, total, high; for (i = 0; i < 10; i++) { printf(\nEnter value: %d: , i + 1); scanf(%d, &ary[i]); } /* Displays highest of the entered values */ high = ary[0]; for (i = 1; i < 10; i++) { if (ary[i] > high) high = ary[i]; } printf(\n Highest value entered was %d, high); /* Prints average of value entered for ary[10] */ for (i = 0, total = 0; i < 10; i++)

Mng

3

total = total + ary[i]; printf(\nThe average of the element of ary is %d, total/i); } Mt v d v kt qu c trnh by di y: Enter value: 1: 10 Enter value: 2: 20 Enter value: 3: 30 Enter value: 4: 40 Enter value: 5: 50 Enter value: 6: 60 Enter value: 7: 70 Enter value: 8: 80 Enter value: 9: 90 Enter value: 10: 10 Highest value entered was 90 The average of the element of ary is 46 Vic khi to mng: Cc mng khng c khi to t ng, tr khi mi phn t mng c gn mt gi tr ring l. Khng nn dng cc mng trc khi c s khi to thch hp. iu ny l bi v khng gian lu tr ca mng khng c khi to t ng, do d gy ra kt qu khng lng trc. Mi khi cc phn t ca mt mng cha khi to c s dng trong cc biu thc ton hc, cc gi tr tn ti sn trong nh s c s dng, cc gi tr ny khng m bo rng c cng kiu nh khai bo ca mng, tr khi cc phn t ca mng c khi to mt cch r rng. iu ny ng khng ch cho cc mng m cn cho cc bin thng thng. Trong on m lnh sau, cc phn t ca mng c gn gi tr bng cc dng vng lp for. int ary[20], i; for(i=0; i 0) { /*Interchange two strings*/ strcpy(temp, x[item]); strcpy(x[item], x[i]); strcpy(x[i], temp); } } } /* Display the arranged list of strings */ printf(Recorded list of strings: \n); for(i = 0; i < n; ++i) { printf("\nString %d is %s", i + 1, x[i]); } } Chng trnh trn nhp vo cc chui n khi ngi dng nhp vo t END. Khi END c nhp vo, chng trnh s sp xp danh sch cc chui v in ra theo th t sp xp. Chng trnh kim tra hai phn t k tip nhau. Nu th t ca chng khng thch hp, th hai phn t s c i ch. S so snh hai chui c thc hin vi s tr gip ca hm strcmp() v s i ch c thc hin vi hmg strcpy(). Mt v d v kt qu thc thi ca chng trnh nh sau: Enter each string on a separate line Type END when over String 1: has

10

Lp trnh c bn C

String String String String Record String String String String

2: 3: 4: 5: list 1 is 2 is 3 is 4 is

seen alice wonderland END of strings: alice has seen wonderland

Mng

11

Tm tt bi hc Mt mng l mt tp hp cc phn t d liu c cng kiu c tham chiu bi cng mt tn. Mi phn t ca mng c cng kiu d liu, cng lp lu tr v c cng cc c tnh. Mi phn t c lu tr v tr k tip nhau trong b nh chnh. Cc phn t d liu c bit nh l cc phn t mng. Chiu ca mng c xc nh bi s cc ch s cn thit nh danh duy nht mi phn t. Cc mng c th c cc kiu d liu nh int, char, float, hoc double. Phn t ca mng c th c tham chiu bng cch s dng mt bin hoc mt biu thc s nguyn. Mt mng khng th c khi to, tr khi mi phn t c gn mt gi tr ring l. Cc mng extern v static c th c khi to khi khai bo. Mng hai chiu c th xem nh l mt mng ca cc mng mt chiu.

12

Lp trnh c bn C

Kim tra tin hc tp 1. Mt ________ l mt tp hp cc phn t d liu cng kiu v c tham chiu bi cng mt tn. A. Vng lp C. Cu trc B. Mng D. Tt c u sai

2. Mi phn t ca mng c nh danh bng ________ duy nht hoc ________ c gn ti n. A. Ch mc, Ch s C. Tt c u sai 3. Mt tn mng v mt tn bin c th ging nhau B. Min gi tr, Ch s (ng/Sai)

4. Mt phn t ca mng c th c s dng bt k v tr no m mt bin c cho php v yu cu. (ng/Sai) 5. Hai mng, ngay c khi chng c cng kiu v kch thc, khng th c xem l _________. A. iu kin C. Bng nhau B. S ph nh D. Tt c u sai

6. Mt chui c khai bo nh l mt mng kiu k t, c kt thc bi k t _________. A. chm phy C. NULL 7. Cc mng c th c nhiu hn mt chiu. B. phy D. Tt c u sai (ng/Sai)

8. S so snh hai chui c thc hin vi s gip ca ________ v s i v tr c thc hin bng _________. A. strcmp, strcpy C. strlen, strcat B. strcat, strcpy D. Tt c u sai

Mng

13

Bi tp t lm 1. Vit mt chng trnh sp xp cc tn sau y theo th t abc. George Albert Tina Xavier Roger Tim William 2. Vit mt chng trnh m s k t nguyn m trong mt dng vn bn. 3. Vit mt chng trnh nhp cc s sau y vo mt mng v o ngc mng 34 45 56 67 89

14

Lp trnh c bn C