3.6 ฟังก์ชัน
Post on 17-Jun-2015
427 Views
Preview:
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