You are on page 1of 8

Ni dung

TRNG I HC BCH KHOA H NI


VIN CNG NGH THNG TIN V TRUYN THNG

11.1. Khi nim hm


11.2. Khai bo v s dng hm
11.3. Phm vi ca bin

TIN HC I CNG
Phn 3. Lp trnh C

Bi 11. Hm

Ni dung

11.1.1. Khi nim chng trnh con

11.1. Khi nim hm


11.1.1. Khi nim chng trnh con
11.1.2. Phn loi chng trnh con
11.2. Khai bo v s dng hm
11.3. Phm vi ca bin

Khi nim
L mt chng trnh nm trong mt chng
trnh ln hn nhm thc hin mt nhim v c
th

Vai tr
Chia nh chng trnh ra thnh tng phn
qun l => Phng php lp trnh c cu trc
C th s dng li nhiu ln: printf, scanf
Chng trnh d dng c v bo tr hn
3

11.1.2. Phn loi chng trnh con

11.1.2. Phn loi chng trnh con

Phn loi chng trnh con

Phn loi hm

Chng trnh con


HM
Hm
(function)

Th tc
(procedure)

Hm: tr v gi tr trong khi th tc th khng

Hm chun
(C trong th vin)

Trong C:

Hm t vit
(Ngi dng nh ngha)

Ch cho php khai bo chng trnh con l hm.


S dng kiu void vi ngha khng l kiu d
liu no c chuyn th tc v dng hm

11.2. Khai bo v s dng hm

11.2.1. Khai bo hm

11.2.1. Khai bo hm
11.2.2. S dng hm

V d:
Chng trnh in ra bnh phng ca cc s t
nhin t 1 n 10

Gm 2 hm:
Hm binhphuong(int x): tr v bnh phng
ca x

Hm main(): vi mi s nguyn t 1 n 10,


gi hm binhphuong vi mt gi tr u vo
v hin th kt qu.
7

11.2.1. Khai bo hm

Khai bo hm

Gi hm

#include<stdio.h>
#include<conio.h>
int binhphuong(int x){
int y;
y = x * x;
return y;
}
void main(){
int i;
for (i=0; i<= 10; i++)
printf(%d , binhphuong(i));
getch();
}

11.2.1. Khai bo hm
[<kiu_gi_tr_tr_v>] tn_hm ([danh_sch_tham_s])
{
[<Cc_khai_bo>]
[<Cc_cu_lnh>]
}

Dng u hm
L thng tin trao i gia cc hm. Phn bit
gia cc hm vi nhau.
Kiu gi tr tr v: kiu d liu bt k, khng
c l kiu d liu mng.
Tn hm: l tn hp l, trong C tn hm l duy
nht

11.2.1. Khai bo hm

V d khai bo hm

Tham s

V d:

Cho bit nhng tham s gi nh cung cp hot ng


cho hm => cc tham s hnh thc
Tham s cung cp d liu cho hm lc hot ng:
tham s thc

int giai_thua(int a)
{
int ket_qua;
int i;

V d: int max(int a, int b, int c)

Thn hm

ket_qua = 1;
for(i = 1;i<a;i++)
ket_qua = ket_qua * i;
if(a < 0) ket_qua = -1;
if(a == 0) ket_qua = 1;
return ket_qua;

return
Gi hm thng qua tn hm v cc tham s thc cung
cp cho hm.
Sau khi thc hin xong, tr v im m hm c gi
thng qua cu lnh return hoc kt thc hm.
C php chung: return biu_thc;

10

Dong dau ham


Cac khai bao

Cac cau lenh

}
11

12

11.2.1. Khai bo hm

Nguyn mu hm
(function
prototype)

nh ngha hm

11.2.1. Khai bo hm
#include<stdio.h>
#include<conio.h>
int binhphuong(int x);
void main(){
int i;
for (i=0; i<= 10; i++)
printf(%d ,
binhphuong(i));
getch();
}
int binhphuong(int x){
int y; y = x * x; return y;
}

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

14

11.2.1. Khai bo hm

11.2.2. S dng hm

Cc hm th vin
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.

C php:
tn_hm (danh_sch_tham_s);
V d: binhphuong(0), binhphuong(1)
Lu :

Khai bo thng qua ch th


#include<tp_tiu_>
tp_tiu_ (.h) cha cc nguyn mu hm

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
16

15

11.3. Phm vi ca bin

11.3.1. Phm vi ca bin

11.3.1. Phm vi ca bin


11.3.2. Phn loi bin
11.3.3. Cu lnh static v register

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.
Tnh hung
Trong hai phm vi khc nhau
c hai bin cng tn. Trong
mt phm vi ny nm
trong phm vi kia?
17

11.3.2. Phn loi bin

V d phm vi bin

Phn loi bin

V d 1:

18

#include <stdio.h>
void main()
{

Bin ton cc: bin c khai bo ngoi mi


hm, c s dng cc hm ng sau n
Bin cc b: bin c khai bo trong lnh khi
hoc chng trnh con, c t trc cc cu
lnh.

int a = 1;
printf(\n a = %d,a);
{
int a = 2;
printf(\n a = %d,a);
}
printf(\n a = %d,a);

Ghi nh
Hm main() cng l mt chng trnh con
nhng l ni chng trnh c bt u cng
nh kt thc
Bin khai bo trong hm main() cng l bin
cc b, ch c phm vi trong hm main().

#include<stdio.h>
#include<conio.h>
int i;
int binhphuong(int x){
int y;
y = x * x;
return y;
}
void main(){
int y;
for (i=0; i<= 10; i++){
y = binhphuong(i);
printf(%d , y);
}
}

}
{

int a = 3;
printf(\n a = %d,a);

}
}
19

20

V d 2
#include <stdio.h>
#include <conio.h>
int a, b, c;
int tich()
{
printf("\n Gia tri cac bien tong the
a, b, c: ");
printf(" a = %-5d b = %-5d c = %5d,a,b,c);
return a*b*c;
}
21

void main()
{
clrscr();
printf("\n Nhap gia tri cho 3
so nguyen a, b, c: ");
scanf("%d %d %d",&a,&b,&c);
printf("\n Tich cua 3 so la
%d",tich());
getch();
}

22

11.3.3. Cu lnh static v register


Bin static
Xut pht: bin cc b ra khi phm vi th b
nh dnh cho bin c gii phng
Yu cu lu tr gi tr ca bin cc b mt cch
lu di => s dng t kha static
So snh vi bin ton cc?
C php:
static <kiu_d_liu> tn_bin;

23

24

11.3.3. Cu lnh static v register

11.3.3. Cu lnh static v register

# include <stdio.h>

Day la lan goi ham fct lan thu 1


Day la lan goi ham fct lan thu 2
Day la lan goi ham fct lan thu 3
Day la lan goi ham fct lan thu 4
Day la lan goi ham fct lan thu 5
Day la lan goi ham fct lan thu 6
Day la lan goi ham fct lan thu 7
Day la lan goi ham fct lan thu 8
Day la lan goi ham fct lan thu 9
Day la lan goi ham fct lan thu 10

# include <conio.h>
void fct() {
static int count = 1;
printf("\n Day la lan goi ham fct lan thu
%2d", count++);
}
void main(){
int i;

for(i = 0;

i < 10; i++)

fct();

getch();
}

25

26

11.3.3. Cu lnh static, register

Bi tp

Bin register

int i=10;
printf ( Gia tri cua i %d, ++i);
printf( Gia tri cua i %d, i++);
printf (Gia tri cua i %d , i--);
printf (Gia tri cua i %d , --i);

Thanh ghi c tc truy cp nhanh hn RAM,


b nh ngoi
Lu bin trong thanh ghi s tng tc thc
hin chng trnh
C php
register <kiu_d_liu> tn_bin;
Lu : s lng bin register khng nhiu v
thng ch vi kiu d liu nh nh int, char

27

28

Bi tp
int a =10;
int b, c;
b = ++a *2;
c= a++ *2;
printf ( b= %d ,b);
printf ( c= %d , c);

29

30

You might also like