You are on page 1of 8

Lp trnh cn bn

Chng VI KIU MNG


Hc xong chng ny, sinh vin s nm c cc vn sau: Khi nim v kiu d liu mng cng nh ng dng ca n. Cch khai bo bin kiu mng v cc php ton trn cc phn t ca mng.

I. GII THIU KIU D LIU KIU MNG TRONG C


Mng l mt tp hp cc phn t c nh c cng mt kiu, gi l kiu phn t. Kiu phn t c th l c cc kiu bt k: k t, s, chui k t; cng c khi ta s dng kiu mng lm kiu phn t cho mt mng (trong trng hp ny ta gi l mng ca mng hay mng nhiu chiu). Ta c th chia mng lm 2 loi: mng 1 chiu v mng nhiu chiu. Mng l kiu d liu c s dng rt thng xuyn. Chng hn ngi ta cn qun l mt danh sch h v tn ca khong 100 sinh vin trong mt lp. Nhn thy rng mi h v tn lu tr ta cn 1 bin kiu chui, nh vy 100 h v tn th cn khai bo 100 bin kiu chui. Nu khai bo nh th ny th on khai bo cng nh cc thao tc trn cc h tn s rt di dng v rc ri. V th, kiu d liu mng gip ch ta trong trng hp ny; ch cn khai bo 1 bin, bin ny c th coi nh l tng ng vi 100 bin chui k t; l 1 mng m cc phn t ca n l chui k t. Hay nh lu tr cc t kha ca ngn ng lp trnh C, ta cng dng n mt mng lu tr chng.

II. MNG 1 CHIU


Nu xt di gc ton hc, mng 1 chiu ging nh mt vector. Mi phn t ca mng mt chiu c gi tr khng phi l mt mng khc.

II.1. Khai bo
II.1.1. Khai bo mng vi s phn t xc nh (khai bo tng minh)
C php: <Kiu> <Tn mng ><[s phn t]> ngha: - Tn mng: y l mt ci tn t ng theo quy tc t tn ca danh biu. Tn ny cng mang ngha l tn bin mng. - S phn t: l mt hng s nguyn, cho bit s lng phn t ti a trong mng l bao nhiu (hay ni khc i kch thc ca mng l g). - Kiu: mi phn t ca mng c d liu thuc kiu g. - y, ta khai bo mt bin mng gm c s phn t phn t, phn t th nht l tn mng [0], phn t cui cng l tn mng[s phn t -1]

Trang 72

Lp trnh cn bn V d: int a[10]; /* Khai bo bin mng tn a, phn t th nht l a[0], phn t cui cng l a[9].*/ Ta c th coi mng a l mt dy lin tip cc phn t trong b nh nh sau: V tr 0 1 2 3 4 5 6 7 8 9 Tn phn t a[0] a[1] a[2] Hnh 1: Hnh nh mng a trong b nh a[3] a[4] a[5] a[6] a[7] a[8] a[9]

II.1.2. Khai bo mng vi s phn t khng xc nh (khai bo khng tng minh)


C php: <Kiu> <Tn mng> <[]> Khi khai bo, khng cho bit r s phn t ca mng, kiu khai bo ny thng c p dng trong cc trng hp: va khai bo va gn gi tr, khai bo mng l tham s hnh thc ca hm. a. Va khai bo va gn gi tr C php: <Kiu> <Tn mng> []= {Cc gi tr cch nhau bi du phy} Nu va khai bo va gn gi tr th mc nhin C s hiu s phn t ca mng l s gi tr m chng ta gn cho mng trong cp du {}. Chng ta c th s dng hm sizeof() ly s phn t ca mng nh sau: S phn t=sizeof(tn mng)/ sizeof(kiu) b. Khai bo mng l tham s hnh thc ca hm, trong trng hp ny ta khng cn ch nh s phn t ca mng l bao nhiu.

II.2 Truy xut tng phn t ca mng


Mi phn t ca mng c truy xut thng qua Tn bin mng theo sau l ch s nm trong cp du ngoc vung [ ]. Chng hn a[0] l phn t u tin ca mng a c khai bo trn. Ch s ca phn t mng l mt biu thc m gi tr l kiu s nguyn. Vi cch truy xut theo kiu ny, Tn bin mng[Ch s] c th coi nh l mt bin c kiu d liu l kiu c ch ra trong khai bo bin mng. V d 1: int a[10]; Trong khai bo ny, vic truy xut cc phn t c ch ra trong hnh 1. Chng hn phn t th 2 (c v tr 1) l a[1] V d 2: Va khai bo va gn tr cho 1 mng 1 chiu cc s nguyn. In mng s nguyn ny ln mn hnh. Gi s ta bit s phn t ca mng l n; vic hin th 1 gi tr s nguyn ln mn hnh ta cn s dng hm printf() vi nh dng %d, tng qut ha ln nu mun hin th ln mn hnh gi tr ca n s nguyn, ta cn gi hm printf() ng n ln. Nh vy trong trng hp ny ta s dng 1 vng lp in ra gi tr cc phn t. Ta c on chng trnh sau:
#include <stdio.h> #include <conio.h> int main() { int n,i,j,tam; int dayso[]={66,65,69,68,67,70}; clrscr();

Trang 73

Lp trnh cn bn
n=sizeof(dayso)/sizeof(int); /*Ly s phn t*/ printf("\n Noi dung cua mang "); for (i=0;i<n;i++) printf("%d ",dayso[i]); return 0;

V d 3: i mt s nguyn dng thp phn thnh s nh phn. Vic chuyn i ny c thc hin bng cch ly s chia lin tip cho 2 cho ti khi bng 0 v ly cc s d theo chiu ngc li to thnh s nh phn. Ta s dng mng mt chiu lu li cc s d . Chng trnh c th nh sau:
#include<conio.h> #include<stdio.h> int main() { unsigned int N; unsigned int Du; unsigned int NhiPhan[20],K=0,i; printf("Nhap vao so nguyen N= ");scanf("%d",&N); do { Du=N % 2; NhiPhan[K]=Du; /* Lu s d vo mng v tr K*/ K++; /* Tng K ln ln k lu vo v tr k*/ N = N/2; } while(N>0); printf("Dang nhi phan la: "); for(i=K-1;i>=0;i--) printf("%d",NhiPhan[i]); getch(); return 0; }

V d 4: Nhp vo mt dy n s v sp xp cc s theo th t tng. y l mt bi ton c ng dng rng ri trong nhiu lnh vc. C rt nhiu gii thut sp xp. Mt trong s c m t nh sau: u tin a phn t th nht so snh vi cc phn t cn li, nu n ln hn mt phn t ang so snh th i ch hai phn t cho nhau. Sau tip tc so snh phn t th hai vi cc phn t t th ba tr i ... c tip tc nh vy cho n phn t th n-1. Chng trnh s c chia thnh cc hm Nhap (Nhp cc s), SapXep (Sp xp) v InMang (In cc s); cc tham s hnh thc ca cc hm ny l 1 mng khng ch nh r s phn t ti a, nhng ta cn c thm s phn t thc t c s dng ca mng l bao nhiu, y l mt gi tr nguyn.
#include<conio.h> #include<stdio.h> void Nhap(int a[],int N) { int i; for(i=0; i< N; i++) { printf("Phan tu thu %d: ",i);scanf("%d",&a[i]); } }

Trang 74

Lp trnh cn bn
void InMang(int a[], int N) { int i; for (i=0; i<N;i++) printf("%d ",a[i]); printf("\n"); } void SapXep(int a[], int N) { int t,i; for(i=0;i<N-1;i++) for(int j=i+1;j<N;j++) if (a[i]>a[j]) { t=a[i]; a[i]=a[j]; a[j]=t; } } int main() { int b[20], N; printf("So phan tu thuc te cua mang N= "); scanf("%d",&N); Nhap(b,N); printf("Mang vua nhap: "); InMang(b,N); SapXep(b,N); /* Gi hm sp xp*/ printf("Mang sau khi sap xep: "); InMang(b,N); getch(); return 0; }

Kt qu chy chng trnh c th l:

III. MNG NHIU CHIU


Mng nhiu chiu l mng c t 2 chiu tr ln. iu c ngha l mi phn t ca mng l mt mng khc. Ngi ta thng s dng mng nhiu chiu lu cc ma trn, cc ta 2 chiu, 3 chiu
Phn di y l cc vn lin quan n mng 2 chiu; cc mng 3, 4, chiu th tng t (ch cn tng qut ha ln).

Trang 75

Lp trnh cn bn

III.1 Khai bo
III.1.1. Khai bo mng 2 chiu tng minh C php: <Kiu> <Tn mng><[S phn t chiu 1]><[S phn t chiu 2]> V d: Ngi ta cn lu tr thng tin ca mt ma trn gm cc s thc. Lc ny ta c th khai bo mt mng 2 chiu nh sau: float m[8][9]; /* Khai bo mng 2 chiu c 8*9 phn t l s thc*/ Trong trng hp ny, ta khai bo cho mt ma trn c ti a l 8 dng, mi dng c ti a l 9 ct. Hnh nh ca ma trn ny c cho trong hnh 2: Dng\Ct 0 1 2 3 4 5 6 7 0
m[0][0] m[1][0] m[2][0] m[3][0] m[4][0] m[5][0] m[6][0] m[7][0]

1
m[0][1] m[1][1] m[2][1] m[3][1] m[4][1] m[5][1] m[6][1] m[7][1]

2
m[0][2] m[1][2] m[2][2] m[3][2] m[4][2] m[5][2] m[6][2] m[7][2]

3
m[0][3] m[1][3] m[2][3] m[3][3] m[4][3] m[5][3] m[6][3] m[7][3]

4
m[0][4] m[1][4] m[2][4] m[3][4] m[4][4] m[5][4] m[6][4] m[7][4]

5
m[0][5] m[1][5] m[2][5] m[3][5] m[4][5] m[5][5] m[6][5] m[7][5]

6
m[0][6] m[1][6] m[2][6] m[3][6] m[4][6] m[5][6] m[6][6] m[7][6]

7
m[0][7] m[1][7] m[2][7] m[3][7] m[4][7] m[5][7] m[6][7] m[7][7]

8
m[0][8] m[1][8] m[2][8] m[3][8] m[4][8] m[5][8] m[6][8] m[7][8]

Hnh 2: Ma trn c m t l 1 mng 2 chiu III.1.2. Khai bo mng 2 chiu khng tng minh khai bo mng 2 chiu khng tng minh, ta vn phi ch ra s phn t ca chiu th hai (chiu cui cng). C php: <Kiu> <Tn mng> <[]><[S phn t chiu 2]> Cch khai bo ny cng c p dng trong trng hp va khai bo, va gn tr hay t mng 2 chiu l tham s hnh thc ca hm.

III.2 Truy xut tng phn t ca mng 2 chiu


Ta c th truy xut mt phn t ca mng hai chiu bng cch vit ra tn mng theo sau l hai ch s t trong hai cp du ngoc vung. Chng hn ta vit m[2][3]. Vi cch truy xut theo cch ny, Tn mng[Ch s 1][Ch s 2] c th coi l 1 bin c kiu c ch ra trong khai bo bin mng. V d 1: Vit chng trnh cho php nhp 2 ma trn a, b c m dng n ct, thc hin php ton cng hai ma trn a,b v in ma trn kt qu ln mn hnh. Trong v d ny, ta s s dng hm lm ngn gn hn chng trnh ca ta. Ta s vit cc hm: nhp 1 ma trn t bn phm, hin th ma trn ln mn hnh, cng 2 ma trn.
#include<conio.h> #include<stdio.h> void Nhap(int a[][10],int M,int N) { int i,j; for(i=0;i<M;i++)

Trang 76

Lp trnh cn bn
for(j=0; j<N; j++){ printf("Phan tu o dong %d cot %d: ",i,j); scanf("%d",&a[i][j]); } } void InMaTran(int a[][10], int M, int N) { int i,j; for(i=0;i<M;i++){ for(j=0; j< N; j++) printf("%d ",a[i][j]); printf("\n"); } } /* Cong 2 ma tran A & B ket qua la ma tran C*/ void CongMaTran(int a[][10],int b[][10],int M,int N,int c[][10]){ int i,j; for(i=0;i<M;i++) for(j=0; j<N; j++) c[i][j]=a[i][j]+b[i][j]; } int main() { int a[10][10], b[10][10], M, N; int c[10][10];/* Ma tran tong*/ printf("So dong M= "); scanf("%d",&M); printf("So cot M= "); scanf("%d",&N); printf("Nhap ma tran A\n"); Nhap(a,M,N); printf("Nhap ma tran B\n"); Nhap(b,M,N); printf("Ma tran A: \n"); InMaTran(a,M,N); printf("Ma tran B: \n"); InMaTran(b,M,N); CongMaTran(a,b,M,N,c); printf("Ma tran tong C:\n"); InMaTran(c,M,N); getch(); return 0; }

V d 2: Nhp vo mt ma trn 2 chiu gm cc s thc, in ra tng ca cc phn t trn ng cho chnh ca ma trn ny. Ta nhn thy rng gi s ma trn a c M dng, N ct th cc phn t ca ng cho chnh l cc phn t c dng: a[i][i] vi i [0min(M,N)-1].
#include<conio.h> #include<stdio.h> int main() { float a[10][10], T=0; int M, N, i,j, Min; clrscr();

Trang 77

Lp trnh cn bn
printf("Ma tran co bao nhieu dong? ");scanf("%d",&M); printf("Ma tran co bao nhieu cot? ");scanf("%d",&N); for(i=0;i<M;i++) for(j=0; j<N; j++) { printf("Phan tu o dong %d cot %d: ",i,j); scanf("%f",&a[i][j]); } printf("Ma tran vua nhap: \n"); for(i=0;i<M;i++) { for(j=0; j< N; j++) printf("%.2f ",a[i][j]); printf("\n"); } Min=(M>N) ? N: M; /* Tm gi tr nh nht ca M & N*/ for(i=0;i<Min;i++) T=T+a[i][i]; printf("Tong cac phan tu o duong cheo chinh la: %f",T); getch(); return 0; }

IV. BI TP
IV.1 Mc ch yu cu
Lm quen vi kiu d liu c cu trc trong C, kiu mng. Thc hin cc bi tp trong phn ni dung bng cch kt hp kiu d liu mng, cc kiu d liu hc v cc phn hc trong cc bi tp trc.

IV.2 Ni dung
1. Vit chng trnh nhp vo mt dy n s thc a[0], a[1],..., a[n-1], sp xp dy s theo th t t ln n nh. In dy s sau khi sp xp. 2. Vit chng trnh sp xp mt mng theo th t tng dn sau khi loi b cc phn t trng nhau. 3. Vit chng trnh nhp vo mt mng, hy xut ra mn hnh: - Phn t ln nht ca mng. - Phn t nh nht ca mng. - Tnh tng ca cc phn t trong mng . 4. Vit chng trnh nhp vo mt dy cc s theo th t tng, nu nhp sai quy cch th yu cu nhp li. In dy s sau khi nhp xong. Nhp thm mt s mi v chn s vo dy c sao cho dy vn m bo th t tng. In li dy s kim tra. 5. Vit chng trnh nhp vo mt ma trn (mng hai chiu) cc s nguyn, gm m hng, n ct. In ma trn ln mn hnh. Nhp mt s nguyn khc vo v xt xem c phn t no ca ma trn trng vi s ny khng ? v tr no ? C bao nhiu phn t ? Trang 78

Lp trnh cn bn 6. Vit chng trnh chuyn i v tr t dng thnh ct ca mt ma trn (ma trn chuyn v) vung 4 hng 4 ct. Sau vit cho ma trn tng qut cp m*n. V d: 1 2 9 1 2 5 4 5 3 5 2 8 4 8 0 6 1 2 9 1 2 5 4 5 3 5 2 8 4 8 0 6

7. Vit chng trnh nhp vo mt mng s t nhin. Hy xut ra mn hnh: - Dng 1 : gm cc s l, tng cng c bao nhiu s l. - Dng 2 : gm cc s chn, tng cng c bao nhiu s chn. - Dng 3 : gm cc s nguyn t. - Dng 4 : gm cc s khng phi l s nguyn t. 8. Vit chng trnh tnh tng bnh phng ca cc s m trong mt mng cc s nguyn. 9. Vit chng trnh thc hin vic o mt mng mt chiu. V d : 1 2 3 4 5 7 9 10 o thnh 10 9 7 5 4 3 2 1 . 10. Vit chng trnh nhp vo hai ma trn A v B c cp m, n. In hai ma trn ln mn hnh. Tng hai ma trn A v B l ma trn C c tnh bi cng thc: cij= aij +bij ( i=0,1,2,...m-1; j=0,1,2...n-1) Tnh ma trn tng C v in kt qu ln mn hnh. 11. Vit chng trnh nhp vo hai ma trn A c cp m, k v B c cp k, n. In hai ma trn ln mn hnh. Tch hai ma trn A v B l ma trn C c tnh bi cng thc: cij= ai1*b1j + ai2 *b2j + ai3 *b3j + ... + aik *bkj (i=0,1,2,...m-1;j=0,1,2...n-1) Tnh ma trn tch C v in kt qu ln mn hnh. 12. Xt ma trn A vung cp n, cc phn t a[i, i] ( i= 1 ... n ) c gi l ng cho chnh ca ma trn vung A. Ma trn vung A c gi l ma trn tam gic nu tt c cc phn t di ng cho chnh u bng 0. nh thc ca ma trn tam gic bng tch cc phn t trn ng cho chnh. Ta c th chuyn mt ma trn vung bt k v ma trn tam gic bng thut ton: - Xt ct i (i =0,1...n-2) - Trong ct i xt cc phn t a[k,i] ( k=i+1...n-1) + Nu a[k,i]=0 th tng k ln xt phn t khc + Nu a[k,i] <> 0 th lm nh sau: Nhn ton b hng k vi - a[i,i]/a[k,i] Ly hng i cng vo hng k sau khi thc hin php nhn trn. i ch hai hng i v k cho nhau Nhn ton b hng k vi -1 sau khi i ch vi hng i Tng k ln xt phn t khc. Vit chng trnh tnh nh thc cp n thng qua cc bc nhp ma trn, in ma trn, a ma trn v dng tam gic, in ma trn tam gic, in kt qu tnh nh thc. 13. Vit chng trnh thc hin vic trn hai dy c th t thnh mt dy c th t. Yu cu khng c trn chung ri mi sp th t. Khi trn phi tn dng c tnh cht sp ca hai dy con.

Trang 79

You might also like