Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Ch­ng 6






Hµm

 

Mé t ch­ng tr× nh viÕ t trong ng«n ng÷ C lµ mé t d·y c¸ c hµm, trong ®ã cã mé t hµm chÝ nh (hµm main()). Hµm chia c¸ c bµi to¸ n lí n thµnh c¸ c c«ng viÖ c nhá hn, gió p thù c hiÖ n nh÷ ng c«ng viÖ c lÆ p l¹ i nµo ®ã mé t c¸ ch nhanh chã ng mµ kh«ng ph¶i viÕ t l¹ i ®o¹ n ch­ng tr× nh. Thø tù c¸ c hµm trong ch­ng tr× nh lµ bÊ t kú, song ch­ng tr× nh bao giê cò ng ®i thù c hiÖ n tõ hµm main().

 

6.1. C së:

Hµm cã thÓ xem lµ mé t ®n vÞ ®é c lË p cñ a ch­ng tr× nh. C¸ c hµm cã vai trß ngang nhau, v× vË y kh«ng cã phÐ p x©y dù ng mé t hµm bª n trong c¸ c hµm kh¸ c.

X©y dù ng mé t hµm bao gå m: khai b¸ o kiÓ u hµm, ®Æ t tª n hµm, khai b¸ o c¸ c ®è i vµ ®­a ra c©u lÖ nh cÇ n thiÕ t ®Ó thù c hiÖ n yª u cÇ u ®Ò ra cho hµm. Mé t hµm ®­î c viÕ t theo mÉ u sau:

type tª n hµm (khai b¸ o c¸ c ®è i)

{

Khai b¸ o c¸ c biÕ n cô c bé

C¸ c c©u lÖ nh

[return[biÓ u thø c]; ]

}

 

Dß ng tiª u ®Ò:

Trong dß ng ®Ç u tiª n cñ a hµm chø a c¸ c th«ng tin vÒ: kiÓ u hµm, tª n hµm, kiÓ u vµ tª n mç i ®è i.

VÝ dô:

float max3s(float a, float b, float c)

khai b¸ o c¸ c ®è i cã d¹ ng:

KiÓ u ®è i 1 tª n ®è i 1, kiÓ u ®è i 2 tª n ®è i 2,..., kiÓ u ®è i n tª n ®è i n

 

Th©n hµm:

Sau dß ng tiª u ®Ò lµ th©n hµm. Th©n hµm lµ né i dung chÝ nh cñ a hµm b¾ t ®Ç u vµ kÕ t thó c b»ng c¸ c dÊ u { }.

Trong th©n hµm chø a c¸ c c©u lÖ nh cÇ n thiÕ t ®Ó thù c hiÖ n mé t yª u cÇ u nµo ®ã ®· ®Ò ra cho hµm.

Th©n hµm cã thÓ sö dô ng mé t c©u lÖ nh return, cã thÓ dï ng nhiÒ u c©u lÖ nh return ë c¸ c chç kh¸ c nhau, vµ cò ng cã thÓ kh«ng sö dô ng c©u lÖ nh nµy.

D¹ ng tæ ng qu¸ t cñ a nã lµ:

return [biÓ u thø c];

Gi¸ trÞ cñ a biÓ u thø c trong c©u lÖ nh return sÏ ®­î c g¸ n cho hµm.

VÝ dô:

XÐ t bµi to¸ n: T× m gi¸ trÞ lí n nhÊ t cñ a ba sè mµ gi¸ trÞ mµ gi¸ trÞ cñ a chó ng ®­î c ®­a vµo bµn phÝ m.

X©y dù ng ch­ng tr× nh vµ tæ chø c thµnh hai hµm: Hµm main() vµ hµm max3s. NhiÖ m vô cñ a hµm max3s lµ tÝ nh gi¸ trÞ lí n nhÊ t cñ a ba sè ®ä c vµo, gi¶ sö lµ a, b, c. NhiÖ m vô cñ a hµm main() lµ ®ä c ba gi¸ trÞ vµo tõ bµn phÝ m, rå i dï ng hµm max3s ®Ó tÝ nh nh­ trª n, rå i ®­a kÕ t qu¶ ra mµn h× nh.

 

Ch­ng tr× nh ®­î c viÕ t nh­ sau:

#include " stdio.h"

float max3s(float a, float b, float c); /* Nguyª n mÉ u hµm*/

main()

{

float x, y, z;

printf(" \n Vao ba so x, y, z: ");

scanf(" %f%f%f", & x& y& z);

printf(" \n Max cua ba so x=%8.2f y=%8.2f z=%8.2f la: %8.2f",

x, y, z, max3s(x, y, z));

} /* KÕ t thó c hµm main*/

 

float max3s(float a, float b, float c)

{

float max;

max=a;

if (max< b) max=b;

if (max< c) max=c;

return(max);

} /* KÕ t thó c hµm max3s*/

 

Quy t¾ c ho¹ t ®é ng cñ a hµm:

Mé t c¸ ch tæ ng qu¸ t lê i gä i hµm cã d¹ ng sau:

tª n hµm ([Danh s¸ ch c¸ c tham sè thù c])

Sè c¸ c tham sè thù c tÕ thay vµo trong danh s¸ ch c¸ c ®è i ph¶i b»ng sè tham sè h× nh thø c vµ lÇ n l­î t chó ng cã kiÓ u t­ng ø ng ví i nhau.

Khi gÆ p mé t lê i gä i hµm th× nã sÏ b¾ t ®Ç u ®­î c thù c hiÖ n. Nã i c¸ ch kh¸ c, khi m¸ y gÆ p lê i gä i hµm ë mé t vÞ trÝ nµo ®ã trong ch­ng tr× nh, m¸ y sÏ t¹ m dê i chç ®ã vµ chuyÓ n ®Õ n hµm t­ng ø ng. Qu¸ tr× nh ®ã diÔ n ra theo tr× nh tù sau:

CÊ p ph¸ t bé nhí cho c¸ c biÕ n cô c bé.

G¸ n gi¸ trÞ cñ a c¸ c tham sè thù c cho c¸ c ®è i t­ng ø ng.

Thù c hiÖ n c¸ c c©u lÖ nh trong th©n hµm.

Khi gÆ p c©u lÖ nh return hoÆ c dÊ u } cuè i cï ng cñ a th©n hµm th× m¸ y sÏ xo¸ c¸ c ®è i, biÕ n cô c bé vµ ra khá i hµm.

NÕ u trë vÒ tõ mé t c©u lÖ nh return cã chø a biÓ u thø c th× gi¸ trÞ cñ a biÓ u thø c ®­î c g¸ n cho hµm. Gi¸ trÞ cñ a hµm sÏ ®­î c sö dô ng trong c¸ c biÓ u thø c chø a nã.

 

C¸ c tham sè thù c, c¸ c ®è i vµ biÕ n cô c bé:

Do ®è i vµ biÕ n cô c bé ®Ò u cã ph¹ m vi ho¹ t ®é ng trong cï ng mé t hµm nª n ®è i vµ biÕ n cô c bé cÇ n cã tª n kh¸ c nhau.

§è i vµ biÕ n cô c bé ®Ò u lµ c¸ c biÕ n tù ®é ng. Chó ng ®­î c cÊ p ph¸ t bé nhí khi hµm ®­î c xÐ t ®Õ n vµ bÞ xo¸ khi ra khá i hµm nª n ta kh«ng thÓ mang gi¸ trÞ cñ a ®è i ra khá i hµm.

§è i vµ biÕ n cô c bé cã thÓ trï ng tª n ví i c¸ c ®¹ i l­î ng ngoµi hµm mµ kh«ng g©y ra nhÇ m lÉ n nµo.

Khi mé t hµm ®­î c gä i tí i, viÖ c ®Ç u tiª n lµ gi¸ trÞ cñ a c¸ c tham sè thù c ®­î c g¸ n cho c¸ c ®è i (trong vÝ dô trª n hµm max3s, c¸ c tham sè thù c lµ x, y, z, c¸ c ®è i t­ng ø ng lµ a, b, c). Nh­ vË y c¸ c ®è i chÝ nh lµ c¸ c b¶n sao cñ a c¸ c tham sè thù c. Hµm chØ lµm viÖ c trª n c¸ c ®è i.

C¸ c ®è i cã thÓ bÞ biÕ n ®æ i trong th©n hµm, cß n c¸ c tham sè thù c th× kh«ng bÞ thay ®æ i.

 

Chó ý:

Khi hµm khai b¸ o kh«ng cã kiÓ u ë tr­í c nã th× nã ®­î c mÆ c ®Þ nh lµ kiÓ u int.

Kh«ng nhÊ t thiÕ t ph¶i khai b¸ o nguyª n mÉ u hµm. Nh­ng nã i chung nª n cã v× nã cho phÐ p ch­ng tr× nh biª n dÞ ch ph¸ t hiÖ n lç i khi gä i hµm hay tù ®é ng viÖ c chuyÓ n d¹ ng.

Nguyª n mÉ u cñ a hµm thù c chÊ t lµ dß ng ®Ç u tiª n cñ a hµm thª m vµo dÊ u;. Tuy nhiª n trong nguyª n mÉ u cã thÓ bá tª n c¸ c ®è i.

Hµm th­ê ng cã mé t vµi ®è i. VÝ dô nh­ hµm max3s cã ba ®è i lµ a, b, c. c¶ ba ®è i nµy ®Ò u cã gi¸ trÞ float. Tuy nhiª n, cò ng cã hµm kh«ng ®è i nh­ hµm main.

Hµm th­ê ng cho ta mé t gi¸ trÞ nµo ®ã. LÏ dÜ nhiª n gi¸ trÞ cñ a hµm phô thué c vµo gi¸ trÞ c¸ c ®è i.

 

6.2. Hµm kh«ng cho c¸ c gi¸ trÞ:

C ¸ c hµm kh«ng cho gi¸ trÞ giè ng nh­ thñ tô c (procedure) trong ng«n ng÷ lË p tr× nh PASCAL. Trong tr­ê ng hî p nµy, kiÓ u cñ a nã lµ void.

VÝ dô hµm t× m gi¸ trÞ max trong ba sè lµ max3s ë trª n cã thÓ ®­î c viÕ t thµnh thñ tô c hiÓ n thÞ sè cù c ®¹ i trong ba sè nh­ sau:

void htmax3s(float a, float b, float c)

{

float max;

max=a;

if (max< b) max=b;

if (max< c) max=c;

}

Ló c nµy, trong hµm main ta gä i hµm htmax3s b»ng c©u lÖ nh:

htmax3s(x, y, z);

 

6.3. Hµm ®Ö qui:

6.3.3. Më ®Ç u:

C kh«ng nh÷ ng cho phÐ p tõ hµm nµy gä i tí i hµm kh¸ c, mµ nã cß n cho phÐ p tõ mé t ®iÓ m trong th©n cñ a mé t hµm gä i tí i chÝ nh hµm ®ã. Hµm nh­ vË y gä i lµ hµm ®Ö qui.

Khi hµm gä i ®Ö qui ®Õ n chÝ nh nã, th× mç i lÇ n gä i m¸ y sÏ t¹ o ra mé t tË p c¸ c biÕ n cô c bé mí i hoµn toµn ®é c lË p ví i tË p c¸ c biÕ n cô c bé ®· ®­î c t¹ o ra trong c¸ c lÇ n gä i tr­í c.

§Ó minh ho¹ chi tiÕ t nh÷ ng ®iÒ u trª n, ta xÐ t mé t vÝ dô vÒ tÝ nh giai thõ a cñ a sè nguyª n d­ng n. Khi kh«ng dï ng ph­ng ph¸ p ®Ö qui hµm cã thÓ ®­î c viÕ t nh­ sau:

long int gt(int n) /* TÝ nh n! ví i n> =0*/

{

long int gtphu=1;

int i;

for (i=1; i< =n; ++i)

gtphu*=i;

return s;

}

Ta nhË n thÊ y r»ng n! cã thÓ tÝ nh theo c«ng thø c truy hå i sau:

 

n! =1 nÕ u n=0

n! =n*(n-1)! nÕ u n> 0

Hµm tÝ nh n! theo ph­ng ph¸ p ®Ö qui cã thÓ ®­î c viÕ t nh­ sau:

long int gtdq(int n)

{

if (n==0 || n==1)

return 1;

else

return(n*gtdq(n-1));

}

Ta ®i gi¶i thÝ ch ho¹ t ®é ng cñ a hµm ®Ö qui khi sö dô ng trong hµm main d­í i ®©y:

#include " stdio.h"

main()

{

printf(" \n 3! =%d", gtdq(3));

}

LÇ n gä i ®Ç u tiª n tí i hµm gtdq ®­î c thù c hiÖ n tõ hµm main(). M¸ y sÏ t¹ o ra mé t tË p c¸ c biÕ n tù ®é ng cñ a hµm gtdq. TË p nµy chØ gå m c¸ c ®è i n. Ta gä i ®è i n ®­î c t¹ o ra lÇ n thø nhÊ t lµ n thø nhÊ t. Gi¸ trÞ cñ a tham sè thù c (sè 3) ®­î c g¸ n cho n thø nhÊ t. Ló c nµy biÕ n n trong th©n hµm ®­î c xem lµ n thø nhÊ t. Do n thø nhÊ t cã gi¸ trÞ b»ng 3 nª n ®iÒ u kiÖ n trong to¸ n tö if lµ sai vµ do ®ã m¸ y sÏ lù a chä n c©u lÖ nh else. Theo c©u lÖ nh nµy, m¸ y sÏ tÝ nh gi¸ trÞ biÓ u thø c:

n*gtdq(n-1) (*)

§Ó tÝ nh biÓ u thø c trª n, m¸ y cÇ n gä i chÝ nh hµm gtdq v× thÕ lÇ n gä i thø hai sÏ thù c hiÖ n. M¸ y sÏ t¹ o ra ®è i n mí i, ta gä i ®ã lµ n thø hai. Gi¸ trÞ cñ a n-1 ë ®©y l¹ i lµ ®è i cñ a hµm, ®­î c truyÒ n cho hµm vµ hiÓ u lµ n thø hai, do vË y n thø hai cã gi¸ trÞ lµ 2. B©y giê, do n thø hai vÉ n ch­a tho¶ m·n ®iÒ u kiÖ n if nª n m¸ y l¹ i tiÕ p tô c tÝ nh biÓ u thø c:

n*gtdq(n-1) (**)

BiÓ u thø c trª n l¹ i gä i hµm gtdq lÇ n thø ba. M¸ y l¹ i t¹ o ra ®è i n lÇ n thø ba vµ ë ®©y n thø ba cã gi¸ trÞ b»ng 1. §è i n=1 thø ba l¹ i ®­î c truyÒ n cho hµm, ló c nµy ®iÒ u kiÖ n trong lÖ nh if ®­î c tho¶ m·n, m¸ y ®i thù c hiÖ n c©u lÖ nh:

return 1=gtdq(1) (***)

B¾ t ®Ç u tõ ®©y, m¸ y sÏ thù c hiÖ n ba lÇ n ra khá i hµm gtdq. LÇ n ra khá i hµm thø nhÊ t ø ng ví i lÇ n vµo thø ba. KÕ t qu¶ lµ ®è i n thø ba ®­î c gi¶i phã ng, hµm gtdq(1) cho gi¸ trÞ lµ 1 vµ m¸ y trë vÒ xÐ t gi¸ trÞ biÓ u thø c

n*gtdq(1) ®©y lµ kÕ t qu¶ cñ a (**)

 

ë ®©y, n lµ n thø hai vµ cã gi¸ trÞ b»ng 2. Theo c©u lÖ nh return, m¸ y sÏ thù c hiÖ n lÇ n ra khá i hµm lÇ n thø hai, ®è i n thø hai sÏ ®­î c gi¶i phã ng, kÕ t qu¶ lµ biÓ u thø c trong (**) cã gi¸ trÞ lµ 2.1. Sau ®ã m¸ y trë vÒ biÓ u thø c (*) ló c nµy lµ:

n*gtdq(2)=n*2*1

n l¹ i hiÓ u lµ thø nhÊ t, nã cã gi¸ trÞ b»ng 3, do vË y gi¸ trÞ cñ a biÓ u thø c trong (*) lµ 3.2.1=6. ChÝ nh gi¸ trÞ nµy ®­î c sö dô ng trong c©u lÖ nh printf cñ a hµm main() nª n kÕ t qu¶ in ra trª n mµn h× nh lµ:

3! =6

Chó ý:

Hµm ®Ö qui so ví i hµm cã thÓ dï ng vß ng lÆ p th× ®n gi¶n hn, tuy nhiª n ví i m¸ y tÝ nh khi dï ng hµm ®Ö qui sÏ dï ng nhiÒ u bé nhí trª n ng¨ n xÕ p vµ cã thÓ dÉ n ®Õ n trµn ng¨ n xÕ p. V× vË y khi gÆ p mé t bµi to¸ n mµ cã thÓ cã c¸ ch gi¶i lÆ p (kh«ng dï ng ®Ö qui) th× ta nª n dï ng c¸ ch lÆ p nµy. Song vÉ n tå n t¹ i nh÷ ng bµi to¸ n chØ cã thÓ gi¶i b»ng ®Ö qui.

 

6.3.2. C¸ c bµi to¸ n cã thÓ dï ng ®Ö qui:

Ph­ng ph¸ p ®Ö qui th­ê ng ¸ p dô ng cho c¸ c bµi to¸ n phô thué c tham sè cã hai ®Æ c ®iÓ m sau:

Bµi to¸ n dÔ dµng gi¶i quyÕ t trong mé t sè tr­ê ng hî p riª ng ø ng ví i c¸ c gi¸ trÞ ®Æ c biÖ t cñ a tham sè. Ng­ê i ta th­ê ng gä i lµ tr­ê ng hî p suy biÕ n.

Trong tr­ê ng hî p tæ ng qu¸ t, bµi to¸ n cã thÓ qui vÒ mé t bµi to¸ n cï ng d¹ ng nh­ng gi¸ trÞ tham sè th× bÞ thay ®æ i. Sau mé t sè h÷ u h¹ n b­í c biÕ n ®æ i dÖ qui nã sÏ dÉ n tí i tr­ê ng hî p suy biÕ n.

Bµi to¸ n tÝ nh n giai thõ a nª u trª n thÓ hiÖ n râ nÐ t ®Æ c ®iÓ u nµy.

 

6.3.3. C¸ ch x©y dù ng hµm ®Ö qui:

Hµm ®Ö qui th­ê ng ®­î c x©y dù ng theo thuË t to¸ n sau:

if (tr­ê ng hî p suy biÕ n)

{

Tr× nh bµy c¸ ch gi¶i bµi to¸ n khi suy biÕ n

}

else /* Tr­ê ng hî p tæ ng qu¸ t */

{

Gä i ®Ö qui tí i hµm (®ang viÕ t) ví i c¸ c gi¸

trÞ kh¸ c cñ a tham sè

}

6.3.4. C¸ c vÝ dô vÒ dï ng hµm ®Ö qui:

VÝ dô 1:

Bµi to¸ n dï ng ®Ö qui t× m USCLN cñ a hai sè nguyª n d­ng a vµ b.

Trong tr­ê ng hî p suy biÕ n, khi a=b th× USCLN cñ a a vµ b chÝ nh lµ gi¸ trÞ cñ a chó ng.

Trong tr­ê ng hî p chung:

uscln(a, b)=uscln(a-b, b) nÕ u a> b

uscln(a, b)=uscln(a, b-a) nÕ u a< b

 

Ta cã thÓ viÕ t ch­ng tr× nh nh­ sau:

#include " stdio.h"

int uscln(int a, int b); /* Nguyª n mÉ u hµm*/

main()

{ int m, n;

printf(" \n Nhap cac gia tri cua a va b: ");

scanf(" %d%d", & m, & n);

printf(" \n USCLN cua a=%d va b=%d la: %d", m, m, uscln(m, n))

}

int uscln(int a, int b)

{

if (a==b)

return a;

else

if (a> b)

return uscln(a-b, b);

 

else

return uscln(a, b-a);

}

 

VÝ dô 2:

Ch­ng tr× nh ®ä c vµo mé t sè rå i in nã ra d­í i d¹ ng c¸ c ký tù liª n tiÕ p.

# include " stdio.h"

# include " conio.h"

void prind(int n);

main()

{

int a;

clrscr();

printf(" n=");

scanf(" %d", & a);

prind(a);

getch();

}

void prind(int n)

{

int i;

if (n< 0)

{ putchar('-');

n=-n;

}

if ((i=n/10)! =0)

prind(i);

putchar(n%10+'0');

}

6.4. Bé tiÒ n sö lý C:

C ®­a ra mé t sè c¸ ch më ré ng ng«n ng÷ b»ng c¸ c bé tiÒ n sö lý macro ®n gi¶n. Cã hai c¸ ch më ré ng chÝ nh lµ #define mµ ta ®· hä c vµ kh¶ n¨ ng bao hµm né i dung cñ a c¸ c file kh¸ c vµo file ®ang ®­î c dÞ ch.

 

Bao hµm file:

§Ó dÔ dµng xö lý mé t tË p c¸ c #define vµ khai b¸ o (trong c¸ c ®è i t­î ng kh¸ c), C ®­a ra c¸ ch bao hµm c¸ c file kh¸ c vµo file ®ang dÞ ch cã d¹ ng:

#include " tª n file"

Dß ng khai b¸ o trª n sÏ ®­î c thay thÕ bë i né i dung cñ a file cã tª n lµ tª n file. Th«ng th­ê ng cã vµi dß ng nh­ vË y xuÊ t hiÖ n t¹ i ®Ç u mç i file gè c ®Ó gä i vµo c¸ c c©u lÖ nh #define chung vµ c¸ c khai b¸ o cho c¸ c biÕ n ngoµi. C¸ c #include ®­î c phÐ p lå ng nhau. Th­ê ng th× c¸ c #include ®­î c dï ng nhiÒ u trong c¸ c ch­ng tr× nh lí n, nã ®¶m b¶o r»ng mä i file gè c ®Ò u ®­î c cung cÊ p cï ng c¸ c ®Þ nh nghÜ a vµ khai b¸ o biÕ n, do vË y tr¸ nh ®­î c c¸ c lç i khã chÞ u do viÖ c thiÕ u c¸ c khai b¸ o ®Þ nh nghÜ a. TÊ t nhiª n khi thay ®æ i file ®­î c bao hµm vµo th× mä i file phô thué c vµo nã ®Ò u ph¶i dÞ ch l¹ i.

 

PhÐ p thÕ MACRO:

§Þ nh nghÜ a cã d¹ ng:

#define biÓ u thø c 1 [ biÓ u thø c 2 ]

sÏ gä i tí i mé t macro ®Ó thay thÕ biÓ u thø c 2 (nÕ u cã) cho biÓ u thø c 1.

VÝ dô:

#define YES 1

Macro thay biÕ n YES bë i gi¸ trÞ 1 cã nghÜ a lµ hÔ cã chç nµo trong ch­ng tr× nh cã xuÊ t hiÖ n biÕ n YES th× nã sÏ ®­î c thay bë i gi¸ trÞ 1.

Ph¹ m vi cho tª n ®­î c ®Þ nh nghÜ a bë i #define lµ tõ ®iÓ m ®Þ nh nghÜ a ®Õ n cuè i file gè c. Cã thÓ ®Þ nh nghÜ a l¹ i tª n vµ mé t ®Þ nh nghÜ a cã thÓ sö dô ng c¸ c ®Þ nh nghÜ a kh¸ c tr­í c ®ã. PhÐ p thÕ kh«ng thù c hiÖ n cho c¸ c x©u dÊ u nh¸ y, vÝ dô nh­ YES lµ tª n ®­î c ®Þ nh nghÜ a th× kh«ng cã viÖ c thay thÕ nµo ®­î c thù c hiÖ n trong ®o¹ n lÖ nh cã " YES".

V× viÖ c thiÕ t lË p #define lµ mé t b­í c chuÈ n bÞ chø kh«ng ph¶i lµ mé t phÇ n cñ a ch­ng tr× nh biª n dÞ ch nª n cã rÊ t Ý t h¹ n chÕ vÒ v¨ n ph¹ m vÒ viÖ c ph¶i ®Þ nh nghÜ a c¸ i g×. Ch¼ ng h¹ n nh­ nh÷ ng ng­ê i lË p tr× nh ­a thÝ ch PASCAL cã thÓ ®Þ nh nghÜ a:

#define then

#define begin {

#define end; }

sau ®ã viÕ t ®o¹ n ch­ng tr× nh:

if (i> 0) then

begin

a=i;

......

end;

Ta cò ng cã thÓ ®Þ nh nghÜ a c¸ c macro cã ®è i, do vË y v¨ n b¶n thay thÕ sÏ phô thué c vµo c¸ ch gä i tí i macro.

 

VÝ dô:

§Þ nh nghÜ a macro gä i max nh­ sau:

#define max(a, b) ((a)> (b)? (a): (b))

ViÖ c sö dô ng:

x=max(p+q, r+s);

 

t­ng ®­ng ví i:

x=((p+q)> (r+s)? (p+q): (r+s));

Nh­ vË y ta cã thÓ cã hµm tÝ nh cù c ®¹ i viÕ t trª n mé t dß ng. Chõ ng nµo c¸ c ®è i cß n gi÷ ®­î c tÝ nh nhÊ t qu¸ n th× macro nµy vÉ n cã gi¸ trÞ ví i mä i kiÓ u d÷ liÖ u, kh«ng cÇ n ph¶i cã c¸ c lo¹ i hµm max kh¸ c cho c¸ c kiÓ u d÷ liÖ u kh¸ c nh­ng vÉ n ph¶i cã ®è i cho c¸ c hµm.

TÊ t nhiª n nÕ u ta kiÓ m tra l¹ i viÖ c më ré ng cñ a hµm max trª n, ta sÏ thÊ y r»ng nã cã thÓ g©y ra sè bÉ y. BiÓ u thø c ®· ®­î c tÝ nh l¹ i hai lÇ n vµ ®iÒ u nµy lµ kh«ng tè t nÕ u nã g©y ra hiÖ u qu¶ phô kiÓ u nh­ c¸ c lê i gä i hµm vµ to¸ n tö t¨ ng. CÇ n ph¶i thË n trä ng dï ng thª m dÊ u ngoÆ c ®Ó ®¶m b¶o trË t tù tÝ nh to¸ n. Tuy vË y, macro vÉ n rÊ t cã gi¸ trÞ.

 

Chó ý:

Kh«ng ®­î c viÕ t dÊ u c¸ ch gi÷ a tª n macro ví i dÊ u më ngoÆ c bao quanh danh s¸ ch ®è i.

 

VÝ dô:

XÐ t ch­ng tr× nh sau:

main()

{

int x, y, z;

x=5;

y=10*5;

z=x+y;

z=x+y+6;

z=5*x+y;

z=5*(x+y);

z=5*((x)+(y));

printf(" Z=%d", z);

getch();

return;

}

Ch­ng tr× nh sö dô ng MACRO sÏ nh­ sau:

#define begin {

#define END }

#define INTEGER int

#define NB 10

#define LIMIT NB*5

#define SUMXY x+y

#define SUM1 (x+y)

#define SUM2 ((x)+(y))

main()

BEGIN

INTEGER x, y, z;

x=5;

y=LIMIT;

z=SUMXY;

z=5*SUMXY;

z=5*SUM1;

z=5*SUM2;

printf(" \n Z=%d", z);

getch();

return;

END

 







© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.