You are on page 1of 29

CHNG 3

HM V CHNG TRNH
1. Chng trnh con
KN: l mt chng trnh nm trong mt chng
trnh ln nhm thc hin mt nhim v c th.
Vai tr ca chng trnh con :
Chia nh chng trnh thnh nhiu phn d qun l,
Vit 1 ln, s dng nhiu ln
D c v bo tr
Trong C c duy nht mt loi chng trnh con l
HM


2. Hm
KN: Hm l chng trnh con
Chia ct cc nhim v tnh ton ln thnh cc cng
vic nh hn.
C th s dng n mi lc trong chng trnh,
C th c cung cp cho nhiu ngi khc s
dng di dng th vin m khng cn phi bt
u xy dng li t u.
Cc hm thch hp cn c th che du nhng chi
tit thc hin i vi cc phn khc trong chng
trnh, v nhng phn ny khng cn bit hm
thc hin nh th no

Hm
Tnh cht:
Hm c th c kiu tr v hoc v kiu (void)
Hm c th c tham s hoc khng c tham s
Gi tr tr v ca hm thc hin bng lnh return,
ph hp vi kiu ca hm.
Hm c th thay i ni dung ca bin c
truyn vo t chng trnh chnh.
Hm
Phn loi
Hm chun(c trong th vin):printf, scanf, sqrt
Hm t vit (ngi dng t nh ngha)
Khai bo hm v thit k hm
Kiu_hm Tn_Hm (Kiu_1 bin_1, Kiu_2 bin_2,)
{
Khai bo bin dng trong hm;
Cc_cu_lnh;
return(gi_tr);
}
S dng hm (gi hm): tn_hm(danh sch tham s)

2.1 Khai bo hm
VD:
// Khai bo v nh ngha hm tnh tng
float tong(float a, float b)
{
float c;
c = a+b;
return c;
}
// Khai bo v nh ngha hm bnh phng
int binhphuong(int x)
{
int y;
y = x*x;
return y;
}




2.1 Khai bo hm
Mt s quy tc:
1.Tham s hnh thc v tham s thc
Tham s hnh thc: l tham s dng khi khai bo
hm
Tham s thc: l tham s c truyn vo cho hm
khi gi hm.
Tham s thc c th l biu thc, trong khi tham
s hnh thc th khng th l biu thc.
Kiu ca tham s thc phi tng ng vi kiu
tham s hnh thc
Khai bo hm
2. Lnh return:
tr li gi tr cng kiu vi kiu ca hm, c th l biu
thc.
C tc dng dng hm, kt thc hm, chuyn v ch
gi n

int binhphuong(int x) int binhphuong(int x)
{ {
int y; return (x*x);
y = x*x; }
return y;
}

Khai bo hm
3. Hm khng c gi tr tr v
- Dng t kho void m t kiu ca hm
- C php: void tn_hm(kiu_1 bin_1,)
- Khng cn cha lnh return trong thn hm.(Nu c th lnh
return khng c gi tr)
- vd: void InRa(int a,int b)
{
int c;
c = a+b;
printf(Tong la: %d,c);
}


Khai bo hm
4. Hm khng c tham s:
- C th dng t kho void, hoc khng m t tham s
- vd: void hienthi(void)
{
printf(xin chao);
}
hoc
void hienthi()
{
printf(xin chao);
}
2.2 S dng hm
S dng hm (gi hm)
C php: Tn_hm(danh sch tham s);
Vd:
#include<stdio.h>
#include<conio.h>
int tong(int x, int y)
{
int c;
c = x+y;
return c;
}
int main()
{
int a,b, t;
printf("Nhap a va b:");
scanf("%d %d", &a, &b);
t = tong(a,b);
printf (Tong la %d,t);
return 0;
}
#include<stdio.h>
#include<conio.h>
int tong(int x, int y)
{
int c;
c = x+y;
return c;
}
int main()
{
int a,b;
printf("Nhap a va b:");
scanf("%d %d", &a, &b);
printf("Tong la %d", tong(a,b));
return 0;
}
Ch :
Trc khi s dng hm cn khai bo nguyn mu cho hm, hm
phi ph hp vi nguyn mu.
Nguyn mu hm thng c khai bo u chng trnh.
C php:
Kiu_hm Tn_Hm (Kiu_1 , Kiu_2 ,);
Hoc
Kiu_hm Tn_Hm (Kiu_1 bin_1 , Kiu_2 bin_2 ,);

ngha ca nguyn mu hm:
Cho php nh ngha sau khi s dng. Nhng phi khai bo trc
Cho php a ra li gi n mt hm m khng cn bit nh ngha
V d: khi gi printf, scanf chng ta ch cn quan tm cc tham
s truyn cho hm
Tp stdio.h cha nguyn mu hm ca printf v scanf
Ngn ng C cung cp mt s hm th vin nh: x l vo ra, hm
ton hc, hm x l xu s dng cc hm ny chng ta ch
cn khai bo nguyn mu ca chng trc khi s dng, thng qua
ch th
#include<tp_tiu_>
tp_tiu_ (.h) cha cc nguyn mu hm

Lu y:
Thn hm c bao quanh cp du {}
Nu hm nhn nhiu tham s th cc tham s ngn
cch nhau bi du phy
Lun lun cn cp du ngoc n sau tn hm
Cc tham s ca hm s nhn cc gi tr t tham s truyn
vo
Thc hin ln lt cc lnh cho n khi gp lnh return/kt
thc chng trnh
Lu :
i vi hm s dng lnh return ch c th tr v
duy nht 1 gi tr.
c th tr v nhiu gi tr sau khi gi hm =>
dng hm truyn nhiu tham s dng tham bin.
2.3 Truyn tham s cho hm
Tn_hm ( tham bin 1, tham bin 2. . .);
C ch truyn gi tr ca bin cho hm c gi l
phng php truyn theo tham tr. Nu hm c truyn
theo tham tr th ni dung ca bin s khng b thay i
sau khi thc hin hm
VD: Hm int tong(a,b);
C ch truyn cho hm theo a ch ca bin c gi l
phng php truyn tham bin cho hm. Nu hm c
truyn theo tham bin th ni dung ca bin c th s b
thay i sau khi thc hin hm.
VD: hm scanf

Xt v d:

#include<stdio.h>
void doicho(int x, int y)
{
int temp;
temp = x;
x = y;
y = temp;
}
int main()
{
int a = 5,b = 6;
doicho(a,b);
printf(a = %d, b = %d,a,b);
}

Kt qu:
a = 5, b = 6

2.3 Truyn tham s cho hm
Nhn xt:

-Gi tr ca bin a v b c truyn cho
hm doicho()
-Hm doicho() thc hin trn cc bn sao
gi tr ca a v b => 2 bin a v b khng
thay i gi tr sau khi gi hm doicho().
=> Phng php truyn theo tham tr

c th thay i gi tr ca bin a v b
sau khi gi hm doicho() ???



2.3 Truyn tham s cho hm


#include<stdio.h>
void doicho(int x, int y)
{
int temp;
temp = x;
x = y;
y = temp;
}
int main()
{
int a = 5,b = 6;
doicho(a,b);
printf(a = %d, b = %d,a,b);
}

Kt qu:
a = 5, b = 6
#include<stdio.h>
void doicho(int *x, int *y)
{
int temp;
temp = *x;
*x = *y;
*y = temp;
}
int main()
{
int a = 5,b = 6;
doicho(&a, &b);
printf(a = %d, b = %d,a,b);
}

Kt qu:
a = 6, b = 5


Mun a, b thay i gi tr (hon v ni dung cho nhau) => phi
truyn cho hm doicho(a, b) a ch ca nh ca a v a ch nh
ca b.

3. Bin
3.1 Phm vi ca bin
Phm vi: khi lnh, chng
trnh con, chng trnh chnh
Bin khai bo trong phm vi
no th s dng trong phm
vi
Trong cng mt phm vi cc
bin c tn khc nhau.
Trong cc phm vi khc
nhau, cc bin c th trng
tn (khng khuyn ngh)
3.Bin
3.2. Phn loi bin
Bin ton cc:
Bin c khai bo ngoi mi hm, c s dng cc hm
ng sau n
Gi tr bin thay i theo cc thao tc x l trong chng trnh
Phm vi hot ng ca bin ton cc: tnh t v tr khai bo n
cho ti cui chng trnh.
Bin cc b (bin a phng):
Bin c khai bo trong khi lnh hoc chng trnh con, c
t trc cc cu lnh.
Ni dung ca cc bin a phng khng c lu tr sau khi
hm thc hin.



3. Bin
#include<stdio.h>
#include<conio.h>
int i; // bin ton cc
int binhphuong(int x)
{
int c; // Bin cc b trong phm vi hm
c = x*x;
return c;
}
int main()
{
for(i = 0;i<10;i++)
{
if(i%5 == 0)
{
int n; // Bin cc b trong phm vi khi lnh
n = binhphuong(i);
printf("%d",n);
}
}
return 0;
}
3. Bin
3.2.1 Bin a phng ng
Cp pht bin cho hm l Cp pht t ng
Mi ln gi hm l 1 ln cp pht
Gi tr ca bin khng c lu gi khi hm kt
thc.
Cc tham s ca hm cng l bin a phng



3. Bin
3.2.2 Bin a phng tnh
c cp pht c nh
Gi tr ca bin c lu gi li ngay c khi hm
kt thc hot ng.
Gi tr ca bin c khi to = 0 khi dng ln u
C php: static kiu_bin tn_bin;
V d
#include<stdio.h>
void hienthi();
int main()
{
int j;
for(j=1;j<=4;j++)
hienthi();
}
void hienthi()
{
static int i;
i++;
printf(\nGoi lan thu %d,i);

}

Kt qu:
Goi lan thu 1
Goi lan thu 2
Goi lan thu 3
Goi lan thu 4

4. Hm quy
KN: Hm quy l hm triu gi chnh n
long giaithua(int n)
{
long m = 1;
if(n==0)
m=1;
else
m = n*giaithua(n-1);

}
4. Hm quy
S dng phng php quy khi no???
=> Trong nhng ng dng m cch gii quyt c th
c thc hin bng vic p dng lin tip cng 1 gii
php cho nhng tp con ca bi ton.

VD: Tnh n!
C: n! = n*(n-1)*.*3*2*1
= n*(n-1)!
= n*(n-1)*(n-2)!
=



4. Hm quy
long giaithua(int n)
{
if(n==0)
return 1L;
else
return( n*giaithua(n-1));
}
long giaithua(int n)
{
int i;
long m=1;
if (n == 0)
return 1L;
else
{
for (i = 1; i <= n; i++)
m = m*i;
return m;
}
}
=>
4. Hm quy
Nn s dng vng lp hay quy ???
Vng lp: Hiu qu v thi gian v vng nh
quy:
Ngn gn
Tn nhiu vng nh, thi gian truyn tham s,
kt qu trung gian, kt qu tr v.
=> Nn trnh s dng quy trong trng hp c
th thc hin c bng vng lp

You might also like