Vous êtes sur la page 1sur 34

CHNG VI

HAM VA CU TRUC CHNG


TRNH
I.
1.

Ham
Quy tc xy dng mt ham:
Ham co th xem la mt n v c lp
cua chng trnh. Cac ham co vai tro
ngang nhau, v vy khng cho phep xy
dng mt ham bn trong mt ham khac.
Dong u tin (cua mt ham) cha cac
thng tin v ham:

Kiu gia tr cua ham (nu ham co


gia tr)
Tn ham

Cac dong tip theo dung khai bao


kiu gia tr cua i s.Va bt buc
phai khai bao kiu gia tr cho tt ca
cac i s.
Tiep theo la thn ham. Thn ham la ni
dung chnh cua ham no bt u bng
du { va kt thuc }
Trong thn ham co th dung 1 hoc
nhiu lnh return hoc co th khng
dung. Va co th t chung bt ky
ch nao nu thy thch hp.
Cu phap chung cua lnh return
return ([Biu thc]);
Gia tr cua biu thc trong ngoc
se c
gan cho ham.

2. Quy tc hoat ng cua ham


Cach goi ham:
tn_ham([Danh sach tham s
thc]);
Chu y:
- S tham s thc phai bng vi
s tham s hnh thc (i) va mi
tham s thc phai co cung kiu vi
gia tr nh kiu gia tr cua i
tng ng cua no.
- V nguyn tc moi ham cn
c khai bao trc khi s dung
no. No hoan toan ging vi vic khai

V du:
Vit chng trnh tm s ln nht va
nho nht cua tng ct trong ma trn, co
s dung ham tm max, tm min.
#include "stdio.h"
int max(a,b)
int a,b;
{
int m;
m=a>b?a:b;
return (m);
}

int min(a,b)
int a,b;
{
int m;
m=a<b?a:b;
return (m);
}
main()
{
int s,k,i,j,ma,mi,max(),min(),temp;
int a[3][3];
clrscr();

for (i=0;i<3;++i)
for (j=0;j<3;++j)
{
printf("a[%d,%d] ",i,j);
scanf("%d",&temp);
a[i][j]=temp;
}
for (i=0;i<3;++i)
{
for (j=0; j<3;++j) printf(" %10d",a[i][j]);
printf("\n");
}

for (j=0;j<3;++j)
{
ma=mi=a[0][j];
for (i=0; i<3;++i)
{
mi=min(a[i][j],mi);
ma=max(a[i][j],ma);
}
printf("\n Cot %d Max = %d \Min = %d",i,ma,mi);
}
getch();
return 0;
}

3. Cac khai nim lin quan n ham:


- Tn ham
- Kiu gia tr cua ham
- i hay tham s hnh thc
- Thn ham
- Khai bao ham
- Li goi ham
- Tham s thc

4. Cach xy dng ham


[type] tn_ham([Danh sach i s])
[Khai bao kiu gia tr cho tt ca cac i]
{
[Cac khai bao kiu gia tr cho cac bin cuc
b va
cac ham no s dung]
<Cac cu lnh>
[return ([Biu thc]);]
}
Chu y:
- Khi xy dng ham cn nm vng nhng
qui nh v mi quan h gia: tham s
thc va tham s hnh thc (i) cung
nh cac i trong thn cua ham

- i vi ham khng cho gia tr th


chung ta khng cn khai bao kiu
gia tr cua no.
- i vi cac ham co gia tr ma ta
qun khng khai bao kiu gia tr cua
no, th may se coi ham o co gia
tr nguyn. Nh vy i vi ham co
gai tr kiu nguyn th khng cn
khai bao kiu gia tr cho chung.
- Khi gp lnh return co cha biu
thc, th gia tr cua biu thc bao
gi cung c chuyn v theo

Nguyn tc hoat ng cua tham s thc, cac


i va cac bin cuc b
- Do i va bin cuc b u co pham vi
hoat ng trong cung mt ham nn i va
bin cuc b cn co tn khac nhau.
- i va bin cuc b u la bin t ng.
Chung c cung cp b nh khi ham c
khi ng va chung se lp tc bin mt khi
may ra khoi ham. Nh vy, khng th mang
gia tr cua i ra khoi ham. iu nay co
ngha la khng th s dung i lam thay
i gia tr cua bt ky mt ai lng nao
ngoai ham.
- Khi mt ham c goi ti, vic u tin la
gai tr cua cac tham s thc c gan cho
cac i. Nh vy, cac i chnh la ban sao
cua cac tham s thc. Ham ch lam vcc

II.
1.

Con tro va a ch
ia ch
Lin quan n mt bin ta a co cac
khai nim:
- Tn bin
- Kiu gia tr cua bin
- Gia tr cua bin
Khi khai bao mt bin th may se cp
phat cho bin mt vung nh co s byte
bng vi ln cua kiu o.

V du:
Kiu int la 2 byte
Kiu float la 4 byte

Chung ta cung co th hiu: a ch


cua bin la s th t cua byte u tin
trong mt day cac byte lin tip nhau ma
may danh cho bin.
Cn chu y rng: a ch cua bin la
m s nguyn nhng khng c anh
ng no vi cac s nguyn thng thng
trong cac phep tnh
Phep toan
&x
cho ta a ch cua bin x

2. Con tro
Con tro la mt bin dung cha a
ch. V co nhiu loai a ch nn cung
co by nhiu kiu con tro tng ng.
V du:
Con tro kiu int dung cha a
ch cac
bin kiu int.
Cung nh bin th con tro cung cn phai
oc khai bao trc khi s dung.
Cu phap khai bao:
type *tn_con_tro
V du:
int x,y,*px,*py

Toan t: & va * la cac toan t mt ngi, no


ch tac ng ln bin, phn t cua mang
hoc chui.
&: Toan t ly ai ch cua bin
*: Toan t ly gia tr tai a ch nao
o.
Cac toan t nay co u tin hn cac toan
t s hoc va co u tin tng ng vi
toan t mt ngi.
3. Cac biu thc con tro:
a. Phep gan con tro:
Con tro cung la mt bin nn ta cung co th
ap dung phep gan ln no.
V du:
int *p1, *p2,x;

b. Phep toan s hoc trn con tro:


Cac phep toan s hoc c ap dung trn
bin con tro cung nh gia tr cua no la 2 phep
toan cng va tr.
V du:
int *p;
Th ta co th dung:
p++: tro n phn t k tip;
p--: tro n phn t trc o
p= p+3: Nhay n a ch cach p la
3*Sizeof(p)
Trong biu thc ta co th dung cac dang sau
cua mt bin con tro p:
(*p)++,++(*p):Tng gia tr tai p ln 1

c. So sanh con tro


Cac phep toan so sanh a ch cua cac
bin con tro la:
>,<, = =
4. Kiu gia tr trong khai bao:
Moi thanh phn cua cung mt khai bao
(bin, phn t mang, ham, con tro) khi
xut hin trong biu thc u co cung
mt kiu gia tr.
V du:
int a, b[5], f(), *p;
Th a, b[i], f(x) ho *p xut hin trong
mt biu
thc th chung lun lun
cho mt gia tr kiu
float.

5. Ham co i con tro:


Nu i la con tro th tham s thc
tng ng phai la a ch cua bin hoc
a ch cua phn t mang co kiu tng
ng.
Khi o a ch cua bin c truyn cho
i con tro tng ng.
V du:

#include "stdio.h"
int swap(x,y)
int x,y;
{
int tem;
tem=x;
x=y;
y=tem;
return (x,y);
}

main()
{
int x,y,swap();
printf("Nhap x = \n y = ");
scanf("%d %d",&x,&y);
printf("x = %d y = %d",x,y);
swap(x,y);
printf("x = %d y = %d",x,y);
getch();
return 0;
}

#include "stdio.h"
swap(x,y)
int *x,*y;
{
int tem;
tem=*x;
*x=*y;
*y=tem;
}

main()
{
int x,y;
clrscr();
printf("Nhap x = ");
scanf("%d",&x);
printf("\nNhap y = ");
scanf("%d",&y);
printf("x = %d y = %d",x,y);
swap(&x,&y);
printf("\nx = %d y = %d",x,y);
getch();
return 0;
}

6. S dung bin con tro:


Trong cac i cua ham, ta co th chia
thanh 2 loai:
- Gm cac i dung cha cac
gia tr a bit.(Tham tr)
- Gm cac i dung cha cac
kt qua mi nhn c (Tham
bin)
V du:
Vit chng trnh giai phung trnh bc
hai co s dung con tro xy dng
ham giai phng trnh

#include "stdio.h"
#include "math.h"
int ptb2(a,b,c,x1,x2)
float a,b,c,*x1,*x2;
{
float delta;
if (a==0) return (0);
delta=pow(b,2)-4*a*c;
if (delta<0) return (-1);
*x1=(-b+sqrt(delta))/(2*a);
*x2=(-b-sqrt(delta))/(2*a);
return (1);
}

main()
{
int s;
float a,b,c,x1,x2;
clrscr();
printf("Nhap cac gia tri cho he so");
scanf("%f%f%f",&a,&b,&c);
printf("\na = %6.2f
b = %6.2f
c =
%6.2f",a,b,c);
s=ptb2(a,b,c,&x1,&x2);
if (s==0)
printf("\nKhong phai la phuong trinh bac 2
vi a=0");

else if (s==-1) printf("\nPhuong


trinh vo nghiem");
else printf("\n x1 = %6.2f
x2 =
%6.2f",x1,x2);
getch();
return 0;
}

III. Con tro va mang


V du:
int a[10];
int *p;
p =a;
T v du trn th luc nay con tro p tro
n u mang a, iu nay co ngha p
= &a[0]
Khi o cac biu thc sau la tng
ng nhau:
*p a[0]
*(p+i) a[i]
p+i &a[i]

Vic khai bao mang la a ch cua mang


c cp ro rang va u kch thc, a
ch nay khng thay i. Tn mang c
xem nh mt hng a ch
Vic khai bao con tro th v tr c cp
la ch cua con tro , con v tr con tro tro
n la tuy y, va no ch trao i a ch,
gia tr khi no a co a ch.
V du: Vit chng trnh nhp vao mang
mt chiu di dang con tro.

#include <stdio.h>
main()
{
int a[5],tam, *pa;
int i;
pa=a;
for (i =0; i<5;++i)
{printf("\na[%d] = ",i);
scanf("%d",pa+i);
}

tam=0;
for (i=0;i<5;++i)
if (*(pa+i)<0)
{tam+=1;
continue;
}
for (i=0;i<5;++i) printf("%6d
",*(pa+i));
printf("\nTong so cac so am %d
",tam);
getch();
return 0;
}

IV. Con tro va mang nhiu chiu


Vic x ly mang nhiu chiu phc
tap hn so vi mang mt chiu. V
khng phai moi quy tc cua mang mt
chiu co th ap dung c vi mang
nhiu chiu. Bi nhng ly do sau:
Phep toan ly a ch khng dung
c i vi cac phn t cua
mang nhiu chiu.
Mang nhiu chiu th cac phn
t c b tr lin tip nhau
trong b nh ht hang nay n
hang khac. Nhng khng th s

Tuy nhiu chung ta co th dung con tro


truy cp n tng phn t cua
mang nhiu chiu, vi s a ch bng
vi s phn t trong mang nhiu chiu.
V du:
Vit chng trnh nhp vao mt ma
trn 3 dong 3 ct va xac nh phn phn
t ln nht trong ma trn ch s dung con
tro, khng dung mang.

#include "stdio.h"
main()
{
int i,max;
int *pa;
clrscr();
for (i=0;i<9;++i)
scanf("%d",pa+i);
for (i=1;i<10;++i)
{printf(" %10d",*(pa+i-1));
if (i % 3 ==0) printf("\n");
}

max=*pa;
for (i=0;i<9;++i)
if (*(pa+i)>max)
max=*(pa+i);
printf("\n Max = %d ",max);
getch();
return 0;
}

Vous aimerez peut-être aussi