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

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

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

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

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

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

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

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

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

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