3.6 ฟังก์ชัน

Post on 29-May-2015

154 Views

Category:

Education

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

hfdhs

TRANSCRIPT

ฟงกชน (Function)

ฟงกชน (Function) คอ ชดค าสงทรวมกนเปนโปรแกรม

ยอย ๆ ภายในเครองหมาย {} ถกสรางขนมาเพอท างานอยางใด

อยางหนง และมการตงชอของฟงกชนเพอใหสะดวกตอการเรยกใช

งาน ตามกฎการตงชอ โดยมรปแบบการใชงานแตกตางกนคอ จะ

มการรบหรอไมรบขอมลจากโปรแกรมทเรยกใชงาน และจะมการ

สงหรอไมสงคาขอมลออกจากฟงกชน ซงรปแบบการใชงานตาง ๆ

ของฟงกชนจะขนอยกบหนาทและเปาหมายการท างานของฟงกชน

นน ๆ

แผนภาพแสดงการท างานของฟงกชน

Function main

Function A Function B

Function C Function D Function F Function E Function F

ในการเขยนโปรแกรมภาษา C มโครงสรางประกอบดวยฟงกชน

การท างาน โดยเรมตนการท างานทฟงกชน main() นนสามารถเรยกใช

ฟงกชนยอยอน ๆ ได ไมวาจะเปนฟงกชนทผใชสรางขนมาเอง (User -

Define Function) หรอฟงกชนมาตรฐานทภาษา C ไดสรางมาใหแลว

(Standard Library Function) นอกจากนในฟงกชนยอยกยงสามารถท

จะเรยกใชฟงกชนยอยอน ๆ ไดเชนกน เชน ฟงกชน main() เรยกใชงาน

ฟงกชน A และฟงกชน B, ฟงกชน A เรยกใชงานฟงกชน C ฟงกชน C

ฟงกชน D และฟงกชน F สวนฟงกชน B เรยกใชงานฟงกชน E และ

ฟงกชน F เปนตน

ฟงกชนทสรางขนเอง (User - Define Function)

1 ฟงกชนทไมมการคนคากลบ และไมมการรบคาพารามเตอร

2 ฟงกชนทไมมการคนคากลบ และมการรบคาพารามเตอร

3 ฟงกชนทมการคนคากลบ แตไมมการรบคาพารามเตอร

4 ฟงกชนทมการคนคากลบ และมการรบคาพารามเตอร

ฟงกชนทสรางขนเอง (User - Define Function) เปน

ฟงกชนทเราเขยนโคดฟงกชนขนมาใชงานเองตามรปแบบ

การสรางฟงกชนของภาษา C เพอใหท างานอยางใดอยาง

หนง ซงแบงรปแบบการสรางฟงกชนได 4 รปแบบ ดงน

ฟงกชนทมการคนคากลบ และไมมการรบคาพารามเตอร (Void

Functions with No Parameters) เปนฟงกชนทสรางขนโดยไมมการรบ

คาขอมล (พารามเตอร) ใด ๆ จากฟงกชนทเรยกใชงาน และเมอฟงกชน

ท างานเสรจจะไมมการคนคาขอมลใด ๆ กลบไปใหฟงกชนทเรยกใชงาน

ซงมรปแบบการสรางฟงกชน ดงน

1 ฟงก ชนท ไมมการคนคากลบ และไมมการรบคาพารามเตอร

(Void Functions with No Parameters)

void functionName (void)

{

statements;

}

โดยท functionName เปนชอฟงกชนทตองการสราง

statements เปนชดค าสงภายในฟงกชน

ฟงกชนทไมมการคนคากลบ แตมการรบคาพารามเตอร (Void

Functions with Parameters) เปนฟงกชนทสรางขนโดยมการรบ

คาขอมล (พารามเตอร) จากฟงกชนทเรยกใชงาน และเมอฟงกชน

ท างานเสรจจะไมมการคนคาขอมลใด ๆ กลบไปใหฟงกชนทเรยกใช

งาน ซงมรปแบบการสรางฟงกชนดงน

2 ฟงก ชนท ไม มการคนค าก ลบ แตมการรบค าพาราม เตอร

(Void Functions with Parameters)

void functionName (typeParameter_1 varName_1, …, typeParameter_n varName_n)

{

statements;

}

โดยท

functionName เปนชอฟงกชนทตองการสราง

typeParameter_n เปนชนดขอมลทตองการรบจากฟงกชนทเรยกใชงาน

varName_n เปนชอตวแปรทใชรบขอมลจากฟงกชนทเรยกใชงาน

statements เปนชดค าสงภายในฟงกชน

3 ฟงก ชนท ไมมการคนคากลบ แตไมมการรบคาพารามเตอร

(Function Return Value with No Parameters)

ฟงกชนทมการคนคากลบ แตไมมการรบคาพารามเตอร

(Function Return Value with No Parameters) เปนฟงกชนทสรางขน

โดยไมมการรบคาขอมล (พารามเตอร) ใด ๆ จากฟงกชนทเรยกใชงาน

และเมอฟงกชนท างานเสรจจะมการคนคาขอมลกลบไปใหฟงกชนท

เรยกใชงาน ซงมรปแบบการสรางฟงกชน ดงน

typeReturn functionName (void)

{

statements;

return varNameReturn;

}

โดยท

functionName เปนชอฟงกชนทตองการสราง

typeReturn เปนชนดขอมลทตองการคนคากลบใหฟงกชนทเรยกใช

varNameReturn เปนชอตวแปรทคนคากลบใหฟงกชนทเรยกใชงาน ซงม

ชนดขอมลเดยวกนกบ typeReturn

statements เปนชดค าสงภายในฟงกชน

3 ฟ งก ช นท ม ก ารคนค าก ลบ และม การร บค าพาราม เ ตอร

(Function Return Value with Parameters)

ฟงก ชนทมการคนคากลบ และมการรบคาพาราม เตอร

(Function Return Value with Parameters) เปนฟงกชนทสรางขนโดย

มการรบคาขอมล (พารามเตอร) จากฟงกชนทเรยกใชงาน และเมอ

ฟงกชนท างานเสรจจะมการคนคาขอมลกลบไปใหฟงกชนทเรยกใชงาน

ซงมรปแบบการสรางฟงกชน ดงน

typeReturn functionName (typeParameter_1 varName_1, …, typeParameter_n varName_n)

{

statements;

return varNameReturn;

}

โดยท

functionName เปนชอฟงกชนทตองการสราง

typeParameter_n เปนชนดขอมลทตองการรบจากฟงกชนทเรยกใชvarName-n

เปนชอตวแปรทใชรบขอมลจากฟงกชนทเรยกใชงาน

typeReturn เปนชนดขอมลทตองการคนคากลบใหฟงกชนทเรยกใชงาน

statements เปนชดค าสงภายในฟงกชน

varNameReturn เปนชอตวแปรทคนคากลบมาใหฟงกชนทเรยกใชงาน

ซงมชนดขอมลเดยวกนกบ

การสงคาผานพารามเตอร

การสงขอมลแบบสงผานคา

(Call by Value) คอ เมอมการ

เรยกใชงานฟงกชนและมการ

ส ง ข อ ม ล ใ ห ฟ ง ก ช น โ ด ย

ฟงกชนทถกเรยกใชงานจะม

ตวแปรมารบคาขอมล ซงการ

กระท าใด ๆ กบตวแปรทรบคา

ขอมลในฟงกชน จะไมมผลกบ

คาของตวแปรทสงใหฟงกชน

นน ๆ

สามารถท าได 2 รปแบบคอ การสงขอมลแบบสงผานคา และการสงขอมล

แบบสงผานตวอางอง

การท างานของการสงขอมลแบบ

สงผานตวอางอง (Call by Reference)

คอ เมอมการเรยกใชงานฟงกชนและม

การสงขอมลใหฟงกชน โดยทฟงกชนท

ถ ก เรยกใช งานจะมต วแปรมารบ

ต าแหนงทอยของขอมล หรอกคอใชตว

แปรพอยนเตอรมารบต าแหนงทอยของ

ขอมลนนเอง ซงการกระท าใด ๆ กบ

ตวแปรทรบคาขอมลในฟงกชนจะมผล

กบคาของตวแปรทสงใหฟงกชนนน ๆ

ดวย

ขอบเขตการท างานของตวแปร

การใชงานตวแปร มขอบเขตการใชงานแตกตางกน 2

รปแบบคอ

• Local Variable เปนตวแปรทมการประกาศใชงานภายใน

ฟงกชน ซงไมสามารถเรยกใชงานนอกฟงกชนได

• Global Variables เปนตวแปรทมการประกาศใชงานตงแต

ตนโปรแกรม ซ งสามารถเรยกใชงานในสวนใดของ

โปรแกรมกได

ฟงกชนแบบเรยกตวเอง (recursive function)

ฟงกชนทมการเรยกตวเองโดยใหพารามเตอรทแตกตางกนออกไป เชน การหา

Factorial หรอการหา Fibonacci

5!

5 * 4!

4 * 3!

3 * 2!

2 * 1!

1

n! = n * (n-1)! factorial(n) = n * factorial(n-1)

#include<stdio.h>

int factorial(int x);

int main()

{

int y = factorial(3);

printf("3! = %d“, y);

return 0;

}

int factorial(int x)

{

if(x <= 1)

return 1;

else

return x* factorial(x-1);

}

ฟงกชนแบบเรยกตวเอง (recursive function)

#include<stdio.h>

int factorial(int x);

int main()

{

int y = factorial(3);

printf("3! = %d“, y);

return 0;

}

int factorial(int x)

{

if(x <= 1)

return 1;

else

return x* factorial(x-1);

}

ขอควรระวง :

ฟงกชนแบบเรยกตวเอง จ าเปนจะตองม if statement เพอ

ใชในการตดสนใจวาฟงกชนจะเรยกตวเองตอไป หรอ หยดเพอ

สงคากลบ

!

ฟงกชนมาตรฐานทภาษา C ไดสรางมาใหแลว

(Standard Library Function)

ฟงกชนมาตรฐาน เปนฟงกชนทผผลตคอมไพลเลอร

เขยนขนเพอผใชน าไปใชในการเขยนโปรแกรม

เพอใหเขยนโปรแกรมไดสะดวกและงายขน บางครง

อาจเรยกวา library functions ปกตฟงกชนเหลาน

จะจดเกบไวใน header files ดงนนผใชจะตองรวา

ฟงกชนนนอยใน header file ใด จงจะน าไปเรยกใช

ในสวนตนของโปรแกรม ดวย #include <header

file.h> ได เชน #include<stdio.h>

จะอยในไลบราล math.h

ไลบราลฟงกชนการค านวณทางคณตศาสตร

ไลบราลฟงกชน ค าอธบาย

sin(x) เปนฟงกชนหาคา sin ของมม โดยท x เปนมมทตองการหา มหนวยเปนเรเดยน

cos(x) เปนฟงกชนหาคา cos ของมม โดยท x เปนมมทตองการหา มหนวยเปนเรเดยน

tan(x) เปนฟงกชนหาคา sin ของมม โดยท x เปนมมทตองการหา มหนวยเปนเรเดยน

sqrt(x) เปนฟงกชนหาคารากทสอง โดยท x เปนตวแปรหรอคาคงท ซงเปนจ านวนเตมบวก หรอ

จ านวนเตมศนย

pow(x, y) เปนฟงกชนหาคายกก าลง โดยท x เปนตวแปรหรอคาคงท ซงเปนเลขฐาน และเปนจ านวนเตม

บวก หรอจ านวนเตมศนย

log(x) เปนฟงกชนหาคา log ฐาน n โดยท x เปนตวแปรหรอคาคงท ซงเปนจ านวนเตมบวก หรอ

จ านวนเตมศนย

log10(x) เปนฟงกชนหาคา log ฐาน 10 โดยท x เปนตวแปรหรอคาคงท ซงเปนจ านวนเตมบวก หรอ

จ านวนเตมศนย

fabs(x) เปนฟงกชนหาคาสมบรณ โดยท x เปนตวแปรหรอคาคงท

จะอยในไลบราล string.h

ไลบราลฟงกชนส าหรบขอความ (String Library)

ไลบราลฟงกชน ค าอธบาย

strcpy(str1, str2) เปนฟงกชนส าหรบคดลอกขอความจากตวแปร str2 มาเกบทตวแปร str1

strcat(str1, str2) เปนฟงกชนส าหรบเชอมตอขอความ โดยน าคาตวแปร str2 มาตอทายตวแปร

str1 และเกบคาไวทตวแปร str1

strcmp(str1, str2) เปนฟงกชนส าหรบเปรยบเทยบความยาวขอความ ถาความยาวขอความในตวแปร

str1 ยาวกวาตวแปร str2 จะไดผลลพธเปนจรง

strcmpi(str1, str2) เปนฟงกชนส าหรบเปรยบเทยบขอความ

•ถาขอความในตวแปร str1 เหมอนตวแปร str2 จะไดผลลพธเปนศนย

•ถาขอความในตวแปร str1 นอยกวาตวแปร str2 เมอเรยงล าดบตวอกษรจะได

ผลลพธเปนคาลบ

•ถาขอความในตวแปร str1 มากกวาตวแปร str2 เมอเรยงล าดบตวอกษรจะได

ผลลพธเปนคาบวก

strlen(str) เปนฟงกชนส าหรบหาความยาวขอความ โดยท str เปนตวแปรชนดขอความหรอ

คาคงท

ทมา : คมออบรมครวทยาศาสตร คณตศาสตร คอมพวเตอร โลก ดาราศาสตร และอวกาศ ระดบมธยมศกษาตอนปลาย

หนงสอเรยนรายวชาเพมเตม การเขยนโปรแกรมเบองตนดวยภาษา C บรษทซคเซสมเดย

คมอเรยนเขยนโปรแกรมภาษา ส านกพมพ IDC PREMIER

top related