You are on page 1of 11

MOBIPRO.

VN
Ti liu lu hnh ni b

FUNCTIONS HM
Hc xong chng ny, sinh vin s nm c cc vn sau:
Khi nim v hm (function) trong C.
Cch xy dng v cch s dng hm trong C.

I. KHI NIM V HM TRONG C


Trong nhng chng trnh ln, c th c nhng on chng trnh vit lp i
lp li nhiu ln, trnh rm r v mt thi gian khi vit chng trnh; ngi ta
thng phn chia chng trnh thnh nhiu module, mi module gii quyt mt cng
vic no . Cc module nh vy gi l cc chng trnh con.
Mt tin li khc ca vic s dng chng trnh con l ta c th d dng kim
tra xc nh tnh ng n ca n trc khi rp ni vo chng trnh chnh v do
vic xc nh sai st tin hnh hiu nh trong chng trnh chnh s thun li hn.
Trong C, chng trnh con c gi l hm. Hm trong C c th tr v kt qu
thng qua tn hm hay c th khng tr v kt qu.
Hm c hai loi: hm chun v hm t nh ngha. Trong chng ny, ta ch
trng n cch nh ngha hm v cch s dng cc hm .
Mt hm khi c nh ngha th c th s dng bt c u trong chng trnh.
Trong C, mt chng trnh bt u thc thi bng hm main.
V d 1: Ta c hm max tm s ln gia 2 s nguyn a, b nh sau:
int max(int a, int b)
{
return (a>b) ? a:b;
}

V d 2: Ta c chng trnh chnh (hm main) dng nhp vo 2 s nguyn


a,b v in ra mn hnh s ln trong 2 s
#include <stdio.h>
#include <conio.h>
int max(int a, int b)
{
return (a>b) ? a:b;
}
int main()
{
int a, b, c;
printf("\n Nhap vao 3 so a, b,c ");
scanf("%d%d%d",&a,&b,&c);
printf("\n So lon la %d",max(a, max(b,c)));
getch();
return 0;
}

MOBIPRO.VN
Ti liu lu hnh ni b

I.1. Hm th vin
Hm th vin l nhng hm c nh ngha sn trong mt th vin no ,
mun s dng cc hm th vin th phi khai bo th vin trc khi s dng bng lnh
#include <tn th vin.h>
Mt s th vin:
alloc.h
assert.h
bcd.h
bios.h
complex.h
conio.h
ctype.h
dir.h
dirent.h
dos.h
errno.h
fcntl.h
float.h
fstream.h grneric.h
graphics.h io.h
iomanip.h iostream.h limits.h
locale.h
malloc.h
math.h
mem.h
process.h
setjmp.h
share.h
signal.h
stdarg.h
stddef.h
stdio.h
stdiostr.h stdlib.h
stream.h
string.h
strstrea.h sys\stat.h sys\timeb.h sys\types.h time.h
values.h
ngha ca mt s th vin thng dng:
1. stdio.h : Th vin cha cc hm vo/ ra chun (standard input/output). Gm
cc hm printf(), scanf(), getc(), putc(), gets(), puts(), fflush(), fopen(), fclose(),
fread(), fwrite(), getchar(), putchar(), getw(), putw()
2. conio.h : Th vin cha cc hm vo ra trong ch DOS (DOS console).
Gm cc hm clrscr(), getch(), getche(), getpass(), cgets(), cputs(), putch(),
clreol(),
3. math.h: Th vin cha cc hm tnh ton gm cc hm abs(), sqrt(), log().
log10(), sin(), cos(), tan(), acos(), asin(), atan(), pow(), exp(),
4. alloc.h: Th vin cha cc hm lin quan n vic qun l b nh. Gm cc
hm calloc(), realloc(), malloc(), free(), farmalloc(), farcalloc(), farfree(),
5. io.h: Th vin cha cc hm vo ra cp thp. Gm cc hm open(), _open(),
read(), _read(), close(), _close(), creat(), _creat(), creatnew(), eof(), filelength(),
lock(),
6. graphics.h: Th vin cha cc hm lin quan n ha. Gm initgraph(),
line(), circle(), putpixel(), getpixel(), setcolor(),
...
Mun s dng cc hm th vin th ta phi xem c php ca cc hm v s
dng theo ng c php (xem trong phn tr gip ca Turbo C).

I.2. Hm ngi dng


Hm ngi dng l nhng hm do ngi lp trnh t to ra nhm p ng nhu
cu x l ca mnh.

II. XY DNG MT HM
II.1 nh ngha hm
Cu trc ca mt hm t thit k:
<kiu kt qu> Tn hm ([<kiu t s> <tham s>][,<kiu t s><tham s>][])
{
[Khai bo bin cc b v cc cu lnh thc hin hm]
[return [<Biu thc>];]
}
Gii thch:
- Kiu kt qu: l kiu d liu ca kt qu tr v, c th l : int, byte, char, float,
void Mt hm c th c hoc khng c kt qu tr v. Trong trng hp hm khng
c kt qu tr v ta nn s dng kiu kt qu l void.
- Kiu t s: l kiu d liu ca tham s.
- Tham s: l tham s truyn d liu vo cho hm, mt hm c th c hoc
khng c tham s. Tham s ny gi l tham s hnh thc, khi gi hm chng ta phi
truyn cho n cc tham s thc t. Nu c nhiu tham s, mi tham s phn cch
nhau du phy (,).
- Bn trong thn hm (phn gii hn bi cp du {}) l cc khai bo cng cc
cu lnh x l. Cc khai bo bn trong hm c gi l cc khai bo cc b trong hm
v cc khai bo ny ch tn ti bn trong hm m thi.
- Khi nh ngha hm, ta thng s dng cu lnh return tr v kt qu thng
qua tn hm.

Lnh return dng thot khi mt hm v c th tr v mt gi tr no .


C php:
return ;
/*khng tr v gi tr*/
return <biu thc>;
/*Tr v gi tr ca biu thc*/
return (<biu thc>);
/*Tr v gi tr ca biu thc*/
Nu hm c kt qu tr v, ta bt buc phi s dng cu lnh return tr v
kt qu cho hm.
V d 1: Vit hm tm s ln gia 2 s nguyn a v b
int max(int a, int b)
{
return (a>b) ? a:b;
}

II.2 S dng hm
Mt hm khi nh ngha th chng vn cha c thc thi tr khi ta c mt li
gi n hm .
C php gi hm: <Tn hm>([Danh sch cc tham s])
V d: Vit chng trnh cho php tm c s chung ln nht ca hai s t
nhin.

#include<stdio.h>
unsigned int ucln(unsigned int a, unsigned int b)
{
unsigned int u;
if (a<b)
u=a;
else
u=b;
while ((a%u !=0) || (b%u!=0))
u--;
return u;
}
int main()
{
unsigned int a, b, UC;
printf(Nhap a,b: );scanf(%d%d,&a,&b);
UC = ucln(a,b);
printf(Uoc chung lon nhat la: , UC);
return 0;
}

Lu : Vic gi hm l mt php ton, khng phi l mt pht biu.

II.3 Nguyn tc hot ng ca hm


Trong chng trnh, khi gp mt li gi hm th hm bt u thc hin bng
cch chuyn cc lnh thi hnh n hm c gi. Qu trnh din ra nh sau:
- Nu hm c tham s, trc tin cc tham s s c gn gi tr thc tng
ng.
- Chng trnh s thc hin tip cc cu lnh trong thn hm bt u t lnh
u tin n cu lnh cui cng.
- Khi gp lnh return hoc du } cui cng trong thn hm, chng trnh s
thot khi hm tr v chng trnh gi n v thc hin tip tc nhng cu
lnh ca chng trnh ny.

III. TRUYN THAM S CHO HM


Mc nhin, vic truyn tham s cho hm trong C l truyn theo gi tr; ngha l
cc gi tr thc (tham s thc) khng b thay i gi tr khi truyn cho cc tham s
hnh thc
V d 1: Gi s ta mun in ra nhiu dng, mi dng 50 k t no . n
gin ta vit mt hm, nhim v ca hm ny l in ra trn mt dng 50 k t no .
Hm ny c tn l InKT.
#include <stdio.h>
#include <conio.h>
void InKT(char ch)
{
int i;
for(i=1;i<=50;i++) printf(%c,ch);
printf(\n);
}
int main()
{
char c = A;
InKT(*); /* In ra 50 dau * */
InKT(+);
InKT(c);
return 0;
}

Lu :
- Trong hm InKT trn, bin ch gi l tham s hnh thc c truyn bng gi
tr (gi l tham tr ca hm). Cc tham tr ca hm coi nh l mt bin cc b trong
hm v chng c s dng nh l d liu u vo ca hm.
- Khi chng trnh con c gi thi hnh, tham tr c cp nh v nhn
gi tr l bn sao gi tr ca tham s thc. Do , mc d tham tr cng l bin, nhng
vic thay i gi tr ca chng khng c ngha g i vi bn ngoi hm, khng nh
hng n chng trnh chnh, ngha l khng lm nh hng n tham s thc tng
ng.
V d 2: Ta xt chng trnh sau y:
#include <stdio.h>
#include <conio.h>
int hoanvi(int a, int b)
{
int t;
t=a; /*on ny hon v gi tr ca 2 bin a, b*/
a=b;
b=t;
printf("\Ben trong ham a=%d , b=%d",a,b);
return 0;
}
int main()
{
int a, b;
clrscr();
printf("\n Nhap vao 2 so nguyen a, b:");
scanf("%d%d",&a,&b);
printf("\n Truoc khi goi ham hoan vi a=%d

,b=%d",a,b);

hoanvi(a,b);
printf("\n Sau khi goi ham hoan vi a=%d
getch();
return 0;

,b=%d",a,b);

Kt qu thc hin chng trnh:

Gii thch:
- Nhp vo 2 s 6 v 5 (a=6, b=5)
- Trc khi gi hm hon v th a=6, b=5
- Bn trong hm hon v a=5, b=6
- Khi ra khi hm hon v th a=6, b=5
* Lu

Trong on chng trnh trn, nu ta mun sau khi kt thc chng trnh con
gi tr ca a, b thay i th ta phi t tham s hnh thc l cc con tr, cn tham s
thc t l a ch ca cc bin.
Lc ny mi s thay i trn vng nh c qun l bi con tr l cc tham s
hnh thc ca hm th s nh hng n vng nh ang c qun l bi tham s thc
t tng ng (cn rng vng nh ny chnh l cc bin ta cn thay i gi tr).
Ngi ta thng p dng cch ny i vi cc d liu u ra ca hm.
V d: Xt chng trnh sau y:
#include <stdio.h>
#include <conio.h>
long hoanvi(long *a, long *b)
/* Khai bo tham s hnh thc *a, *b
{
long t;
t=*a;
/*gn ni dung ca x
*a=*b;
/*Gn ni dung ca b
*b=t;
/*Gn ni dung ca t
printf("\n Ben trong ham a=%ld
/*In ra ni dung ca a, b*/
return 0;
}

l cc con tr kiu long */


cho t*/
cho a*/
cho b*/
, b=%ld",*a,*b);

int main()
{
long a, b;
clrscr();
printf("\n Nhap vao 2 so nguyen a, b:");
scanf("%ld%ld",&a,&b);
printf("\n Truoc khi goi ham hoan vi a=%ld ,b=%ld",a,b);
hoanvi(&a,&b); /* Phi l a ch ca a v b */
printf("\n Sau khi goi ham hoan vi a=%ld ,b=%ld",a,b);
getch();
return 0;
}

Kt qu thc hin chng trnh:

Gii thch:
- Nhp vo 2 s 5, 6 (a=5, b=6)
- Trc khi gi hm hoanvi th a=5, b=6

- Trong hm hoanvi (khi hon v) th a=6, b=5


- Khi ra khi hm hon v th a=6, b=6

CHUI K T
Hc xong chng ny, sinh vin s nm c cc vn sau:
Khi nim v chui k t.
Mt s hm x l chui v ng dng ca chng trong thc t.

I. KHI NIM
Chui k t l mt dy gm cc k t hoc mt mng cc k t c kt thc
bng k t \0 (cn c gi l k t NULL trong bng m Ascii).
Cc hng chui k t c t trong cp du nhy kp .

II. KHAI BO
II.1 Khai bo theo mng
C php:

char <Bin> [Chiu di ti a]

V d: Trong chng trnh, ta c khai bo:


char Ten[12];
Trong khai bo ny, b nh s cung cp 12+1 bytes lu tr ni dung
ca chui k t Ten; byte cui cng lu tr k t \0 chm dt chui.
Ghi ch:

- Chiu di ti a ca bin chui l mt hng nguyn nm trong khong t 1


n 255 bytes.
- Chiu di ti a khng nn khai bo tha trnh lng ph b nh, nhng
cng khng nn khai bo thiu.

II.2 Khai bo theo con tr


C php:

char *<Bin>

V d: Trong chng trnh, ta c khai bo:


char *Ten;
Trong khai bo ny, b nh s dnh 2 byte lu tr a ch ca bin
con tr Ten ang ch n, cha cung cp ni lu tr d liu. Mun c ch lu
tr d liu, ta phi gi n hm malloc() hoc calloc() c trong alloc.h, sau mi
gn d liu cho bin.

II.3 Va khai bo va gn gi tr
C php:

char <Bin>[]=<Hng chui>

V d:
#include<stdio.h>
#include<conio.h>
int main()
{
char Chuoi[]="Mau nang hay la mau mat em ;
printf("Vua khai bao vua gan tr : %s,Chuoi) ;

getch();
return 0;
}

* Ghi ch: Chui c khai bo l mt mng cc k t nn cc thao tc trn


mng c th p dng i vi chui k t.

III. CC THAO TC TRN CHUI K T


III.1. Nhp xut chui
III.1.1 Nhp chui t bn phm
nhp mt chui k t t bn phm, ta s dng hm gets()
C php:

gets(<Bin chui>)

V d:

char Ten[20];
gets(Ten);
Ta cng c th s dng hm scanf() nhp d liu cho bin chui, tuy nhin
lc ny ta ch c th nhp c mt chui khng c du khong trng.
Ngoi ra, hm cgets() (trong conio.h) cng c s dng nhp chui.
III.1.2 Xut chui ln mn hnh
xut mt chui (biu thc chui) ln mn hnh, ta s dng hm puts().
C php:

puts(<Biu thc chui>)

V d: Nhp vo mt chui v hin th trn mn hnh chui va nhp.


#include<conio.h>
#include<stdio.h>
#include<string.h>
int main()
{
char Ten[12];
printf("Nhap chuoi: ");gets(Ten);
printf("Chuoi vua nhap: ");puts(Ten);
getch();
return 0;
}

Ngoi ra, ta c th s dng hm printf(), cputs() (trong conio.h) hin th


chui ln mn hnh.

III.2 Mt s hm x l chui (trong string.h)


III.2.1 Cng chui - Hm strcat()
C php:

char *strcat(char *des, const char *source)

Hm ny c tc dng ghp chui ngun vo chui ch.


V d: Nhp vo h lt v tn ca mt ngi, sau in c h v tn ca h ln
mn hnh.
#include<conio.h>
#include<stdio.h>
#include<string.h>

int main()
{
char HoLot[30], Ten[12];
printf("Nhap Ho Lot: ");gets(HoLot);
printf("Nhap Ten: ");gets(Ten);
strcat(HoLot,Ten); /* Ghep Ten vao HoLot*/
printf("Ho ten la: ");puts(HoLot);
getch();
return 0;
}

III.2.2 Xc nh di chui - Hm strlen()


C php:

int strlen(const char* s)

V d: S dng hm strlen xc nh di mt chui nhp t bn phm.


#include<conio.h>
#include<stdio.h>
#include<string.h>
int main(){
char Chuoi[255];
int Dodai;
printf("Nhap chuoi: ");gets(Chuoi);
Dodai = strlen(Chuoi)
printf("Chuoi vua nhap: ");puts(Chuoi);
printf(Co do dai %d,Dodai);
getch();
return 0;
}

III.2.3 i mt k t thng thnh k t hoa - Hm toupper()


Hm toupper() (trong ctype.h) c dng chuyn i mt k t thng
thnh k t hoa.
C php:

char toupper(char c)

III.2.4 i chui ch thng thnh chui ch hoa, hm strupr()


Hm struppr() c dng chuyn i chui ch thng thnh chui ch hoa,
kt qu tr v ca hm l mt con tr ch n a ch chui c chuyn i.
C php:
char *strupr(char *s)
V d: Vit chng trnh nhp vo mt chui k t t bn phm. Sau s dng
hm strupr() chuyn i chng thnh chui ch hoa.
#include<conio.h>
#include<stdio.h>
#include<string.h>
int main()
{
char Chuoi[255],*s;
printf("Nhap chuoi: ");gets(Chuoi);
s=strupr(Chuoi) ;
printf(Chuoi chu hoa: );puts(s);
getch();
return 0;
}

III.2.5 i chui ch hoa thnh chui ch thng, hm strlwr()


Mun chuyn i chui ch hoa thnh chui ton ch thng, ta s dng hm
strlwr(), cc tham s ca hm tng t nh hm strupr()
C php:
char *strlwr(char *s)

You might also like