3.6 ฟังก์ชัน

22
งก์ชน (Function)

Upload: -

Post on 29-May-2015

154 views

Category:

Education


0 download

DESCRIPTION

hfdhs

TRANSCRIPT

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