Download - 3.6 ฟังก์ชัน
ฟงกชน (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