22
งก์ชน (Function)

3.6 ฟังก์ชัน

  • Upload
    -

  • View
    427

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 3.6 ฟังก์ชัน

ฟงกชน (Function)

Page 2: 3.6 ฟังก์ชัน

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

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

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

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

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

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

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

นน ๆ

Page 3: 3.6 ฟังก์ชัน

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

Function main

Function A Function B

Function C Function D Function F Function E Function F

Page 4: 3.6 ฟังก์ชัน

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

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

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

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

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

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

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

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

ฟงกชน F เปนตน

Page 5: 3.6 ฟังก์ชัน

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

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

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

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

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

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

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

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

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

Page 6: 3.6 ฟังก์ชัน

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

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

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

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

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

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

(Void Functions with No Parameters)

void functionName (void)

{

statements;

}

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

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

Page 7: 3.6 ฟังก์ชัน

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

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

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

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

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

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

(Void Functions with Parameters)

void functionName (typeParameter_1 varName_1, …, typeParameter_n varName_n)

{

statements;

}

Page 8: 3.6 ฟังก์ชัน

โดยท

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

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

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

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

Page 9: 3.6 ฟังก์ชัน

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

(Function Return Value with No Parameters)

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

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

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

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

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

typeReturn functionName (void)

{

statements;

return varNameReturn;

}

Page 10: 3.6 ฟังก์ชัน

โดยท

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

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

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

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

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

Page 11: 3.6 ฟังก์ชัน

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

(Function Return Value with Parameters)

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

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

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

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

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

typeReturn functionName (typeParameter_1 varName_1, …, typeParameter_n varName_n)

{

statements;

return varNameReturn;

}

Page 12: 3.6 ฟังก์ชัน

โดยท

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

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

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

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

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

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

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

Page 13: 3.6 ฟังก์ชัน

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

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

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

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

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

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

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

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

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

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

นน ๆ

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

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

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

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

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

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

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

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

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

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

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

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

ดวย

Page 14: 3.6 ฟังก์ชัน

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

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

รปแบบคอ

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

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

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

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

โปรแกรมกได

Page 15: 3.6 ฟังก์ชัน

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

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

Factorial หรอกำรหำ Fibonacci

5!

5 * 4!

4 * 3!

3 * 2!

2 * 1!

1

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

Page 16: 3.6 ฟังก์ชัน

#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);

}

Page 17: 3.6 ฟังก์ชัน

ฟงกชนแบบเรยกตวเอง (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);

}

Page 18: 3.6 ฟังก์ชัน

ขอควรระวง :

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

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

สงคำกลบ

!

Page 19: 3.6 ฟังก์ชัน

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

(Standard Library Function)

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

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

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

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

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

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

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

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

Page 20: 3.6 ฟังก์ชัน

จะอยในไลบรำล 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 เปนตวแปรหรอคำคงท

Page 21: 3.6 ฟังก์ชัน

จะอยในไลบรำล 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 เปนตวแปรชนดขอควำมหรอ

คำคงท

Page 22: 3.6 ฟังก์ชัน

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

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

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