บทที่ 5
ฟังก์ชันของภาษา c
ในบทนี้จะอธิบายถึงฟังก์ชัน
ในภาษาซีซึ่งกล่าวถึงการทำงานของฟังชันก์
การสร้างฟังก์ชันและรูปแบบของฟังก์ชัน การส่งค่าลักษณะต่าง ๆ
และจะกล่าวถึงฟังก์ชันมาตรฐานของภาษาซีด้วย
การเขียนโปรแกรมภาษาในภาษาซี
การเขียนโปรแกรมในภาษาซีนั้นสามารถเขียนได้ 2 แบบ
แบบที่ 1 เขียนแบบโครงสร้าง
หรือเป็นบรรทัดไปเรื่อย ๆ
หรือทั้งโปรแกรมมีเพียงหนึ่งฟังก์ชันคือ ฟังชันก์ main( )
การเขียนแบบนี้มีข้อดีคือ เหมาะสำหรับโปรแกรมสั้น ๆ
แต่เมื่อนำไปใช้กับโปรแกรมที่มีขนาดยาวถ้าในโปรแกรมมีชุดคำสั่งที่ซ้ำกัน
และการตรวจสอบหาข้อผิดพลาดนั้นทำได้ยาก เพราะจะต้องรันทั้งโปรแกรม
แบบที่ 2 เขียนแบบฟังก์ชัน
เป็นการเขียนโปรแกรมโดยแบ่งการทำงานของโปรแกรมออกเป็นฟังก์ชันย่อย
แต่ยังต้องมีฟังก์ชัน main( ) อยู่เหมือนเดิม แต่ฟังก์ชัน main( )
นี้จะไปเรียกฟังก์ชันอื่นขึ้นมาทำงานต่อไป การเขียนแบบนี้มีข้อดีคือ
การทำงานของโปรแกรมนั้นตรวจสอบได้ง่าย เพราะสามารถรันเฉพาะฟังก์ชันได้
และทำให้ตัวโปรแกรมนั้นสั้นลงในกรณีที่ชุดคำสั่งที่เหมือนกัน
ซึ่งโปรแกรมเมอร์เกือบทั้งหมดนิยมเขียนในลักษณะนี้
การเขียนโปรแกรมแบบฟังก์ชัน
การเขียนโปรแกรมแบบฟังก์ชันมีขั้นตอนดังนี้
1.
ประกาศฟังก์ชันที่ต้องการไว้ในส่วนแรกของโปรแกรม
2.
เรียกใช้ฟังก์ชันที่ประกาศไว้
3.
กำหนดหรือสร้างรายละเอียดของฟังก์ชันนั้น
โปรแกรม 5 – 1 แสดงขั้นตอน 3 ขั้นตอนของการสร้างฟังก์ชัน
จากตัวอย่างข้างต้นจะเห็นได้ว่า
สิ่งที่จำเป็นสำหรับเรื่องฟังก์ชันก็คือ
ชื่อของฟังก์ชันเพราะถ้าเรียกใช้ หรือประกาศชื่อฟังก์ชันไว้ไม่ตรงกัน
โปรแกรมที่เขียนขึ้นก็จะเกิด Error ขึ้นมาได้
ฉะนั้นจะต้องรู้ว่าโปรแกรมที่เขียนนั้นมีฟังก์ชันอะไรบ้าง
กิจกรรมนับคาบเรียน
คำสั่ง ให้นักเรียนเขียนโปรแกรมลอกเลียนแบบตัวอย่างโปรแกรม 5-1 โดยกำหนดให้ แสดงผล เป็น Hello C
กดคลิกเื่พื่อส่งโปรแกรม
กดคลิกเื่พื่อส่งผลลัพธ์ที่ได้จากโปรแกรม
รายละเอียดการติดตามการเรียน
ให้นักเรียน บันทึกกิจกรรมที่ส่ง กดที่นี่
ผู้ปกครองติดตามการเรียนของนักเรียน
กดที่นี่
การสร้างฟังก์ชัน
รูปที่ 5 – 2 ส่วนประกอบต่าง ๆ ของฟังก์ชัน
ส่วนหัวของฟังก์ชัน ( Function Header )ประกอบ
ด้วย 3 ส่วนหลัก คือ ชนิดข้อมูลของค่าที่ส่งกลับ (Return Type
)ชื่อฟังก์ชัน ( Function name )
และรายชื่อพารามิเตอร์ซึ่งจะมีการบอกชนิดข้อมูล เหมือนการประกาศตัวแปร
และสามารถมีหลายตัวได้โดยเครื่องหมาย , คั้นระหว่างแต่ละพารามิเตอร์
ถ้าไม่ได้ใช้ Return type ภาษาซี
จะถือว่ามีค่าที่ส่งกลับเป็นชนิดข้อมูลแบบ Integer แล้ว
ในส่วนรายละเอียดของฟังก์ชันจะต้องมีคำสั่ง Return
ด้วนในบรรทัดที่ต้องการออกจากฟังก์ชัน
ถ้าไม่ต้องการให้ฟังก์ชันนั้นมีการส่งค่ากลับ ให้ใส่ Return Type เป็น
Void และไม่ต้องใส่คำสั่ง Return
และในส่วนของรายชื่อพารามิเตอร์ ถ้าไม่ต้องการส่งค่ากลับก็ไม่ต้องใส่ก็ได้ หรือใส่เป็น Void ไว้
ส่วนรายละเอียดของฟังก์ชัน ประกอบด้วย การประกาศตัวแปรแบบ
Local และ ชุดคำสั่งต่าง ๆ ของฟังก์ชันนั้น เมื่อต้องการจบฟังก์ชัน
ถ้ามีการใส่ Return Type ไว้ก็ให้ส่งค่ากลับตามชนิดของ Return Type
ที่ใส่ เช่น
return 0;
แต่ถ้าไม่มีการส่งค่ากลับใส่ ก็ไม่จำเป็นต้องมีคำสั่ง return หรือให้ใส่คำสั่งดังนี้ return ;
รูปที่ 5 – 3 แสดงตัวอย่างของฟังก์ชัน
รูปแบบของฟังก์ชัน
รูปแบบของฟังก์ชันของภาษา ซี มีอยู่ 4 รูปแบบ
แบบที่ 1 ฟังก์ชันแบบไม่มีการส่งค่ากลับ และไม่มีพารามิเตอร์ เป็นฟังก์ชันที่ไม่มีการส่งค่ากลับไปให้กับฟังก์ชันที่เรียกมา และไม่มีการส่งค่าจากฟังก์ชันที่เรียกมาให้ด้วย
แบบที่ 2 ฟังก์ชันแบบไม่มีการส่งค่ากลับ และพารามิเตอร์ เป็นฟังก์ชันที่จะไม่มีการส่งค่ากลับไปให้ฟังก์ชันที่เรียกขึ้นมา แต่มีการส่งค่าจากฟังก์ชันที่เรียกมาให้ด้วย
แบบที่ 3 ฟังก์ชันแบบมีการส่งค่ากลับ และไม่มีพารามิเตอร์ เป็นฟังก์ชันที่จะมีการส่งค่ากลับไปให้ฟังก์ชันที่เรียกมา แต่ไม่มีการส่งค่าจากฟังก์ชันที่เรียกมาให้ด้วย
แบบที่ 4 ฟังก์ชันแบบมีการส่งค่ากลับ และมีพารามิเตอร์ เป็นฟังก์ชันที่จะมีการส่งค่ากลับไปให้กับฟังก์ชันที่เรียกมา แต่มีการส่งค่าจากฟังก์ชันที่เรียกมาให้ด้วย
โปรแกรม 5- 2 ตัวอย่างฟังก์ชันแบบไม่มีการส่งค่ากลับ และไม่มีพารามิเตอร์
การประกาศฟังก์ชั่น (Prototype Declarations)
การประกาศฟังก์ชั่นนั้น
เป็นสิ่งที่จำเป็นต้องทำเสมอเมื่อจะสร้างฟังก์ชั่น
การประกาศฟังก์ชั่นนั้นจะประกาศอยู่ตรงส่วนบนสุดของโปรแกรม
หรือก่อนส่วนการประกาศตัวแปรแบบ Global ดังที่แสดงในตัวอย่างที่ 5-1
ซึ่งเมื่อสังเกตแล้วจะพบว่าการประกาศฟังก์ชั่นก็คือ
การตัดเอาเฉพาะส่วนหัวของฟังก์ชั่นไป แล้วต่อฐานด้วยเครื่องหมาย ; นั่นเอง
การเรียกฟังก์ชั่น (Function Call)
การเรียกใช้ฟังก์ชั่นนั้น
จะต้องรู้ก่อนว่าฟังชั่นที่จะเรียกใช้มีรูปแบบเป็นอย่างไร อาทิเช่น
มีการส่งค่ากลับหรือไม่
หรือต้องมีการส่งค่าพารามิเตอร์ไปให้ฟังก์ชันที่จะเรียกใช้หรือไม่เพื่อให้
การใช้ฟังก์ชันนั้นถูกต้องและไม่มีข้อผิดพลาด
ซึ่งการเรียกใช้ฟังก์ชันสามารถดูได้จากตัวอย่างที่ 5-2 ถึง 5-5 ดังรูปที่
5-4 แสดงตัวอย่างการเรียกใช้ฟังก์ชันแบบต่างๆที่สามารถทำได้
test(a,7);
test(6,b);
test(a+6,b);
test(test(a,b),b);
รูปที่ 5-4 แสดงตัวอย่างการเรียกใช้ฟังก์ชันแบบต่างๆ
ตัวอย่างโปรแกรม
โปรแกรม 5-6 โปรแกรมแสดงเลขหลักแรก

กิจกรรมนับคาบเรียน
คำสั่ง ให้นักเรียนเขียนโปรแกรมลอกเลียนแบบตัวอย่างโปรแกรม 5-6 โดยกำหนดให้ แสดงผล คำตอบ ส่งมา
กดคลิกเื่พื่อส่งโปรแกรม
กดคลิกเื่พื่อส่งผลลัพธ์ที่ได้จากโปรแกรม
รายละเอียดการติดตามการเรียน
ให้นักเรียน บันทึกกิจกรรมที่ส่ง กดที่นี่
ผู้ปกครองติดตามการเรียนของนักเรียน
กดที่นี่
การส่งค่าผ่านพารามิเตอร์ ในภาษา C นั้นจะมีการส่งค่าผ่านพารามิเตอร์ หรือ Parameter Passing ซึ่งสามารถแบ่งได้เป็น 3 ประเภทใหญ่ๆ ดังนี้
การส่งค่าแบบกำหนดค่า (Pass by Value)
จากตัวอย่างที่ได้แสดงมาข้างต้นจะเป็นการส่งค่าในแบบกำหนดค่าทังหมด
ซึ่งเมื่อใดที่การส่งค่า
จะทำการคัดลอกข้อมูลไปให้กับพารามิเตอร์ในฟังก์ชันที่ถูกเรียก
การส่งค่าแบบนี้จะไม่ทำให้ค่าเดิมถูกเปลี่ยนแปลง ดังรูป 5-5
แสดงการส่งค่าแบบกำหนดค่า
การส่งค่าแบบอ้างอิง (Pass by Reference)
ในบางกรณี จำเป็นที่จะต้องใช้การส่งค่าแบบอ้างอิง
ซึ่งการส่งค่าแบบนี้จะทำการเชื่อมระหว่าง
ตัวแปรที่ประกาศในฟังก์ชันที่เรียกกับพารามิเตอร์ในฟังก์ชันที่ถูกเรียกมี
การเปลี่ยนค่า ก็จะทำให้ค่าในตัวแปรของฟังก์ชันที่เรียกเปลี่ยนตามไปด้วย
การส่งค่าแบบอ้างที่อยู่(Pass by Address)
การส่งค่าแบบนี้จะใช้พอยเตอร์ซึ่งจะขอยกไปกล่าวในบทที่8
ฟังก์ชันมาตรฐาน
ในภาษา C ได้จัดเตรียมฟังก์ชันมาตรฐานต่างๆเอาไว้ให้ใช้มากมาย
ฟังก์ชันมาตรฐานต่างๆ จะอยู่ในStandard Library Files ที่มีนามสกุลเป็น.h
ถ้าต้องใช้ฟังก์ชันมาตรฐานเหล่านั้นจะต้องทราบก่อนว่าฟังก์ชันนั้นอยู่ใน
Standard Library Files อันไหน แล้วนำเอา Standard Library Files
นั้นเข้ามาโดยใช้คำสั่ง include
ยกตัวอย่างฟังก์ชันที่ใช้บ่อยๆ คือ ฟังก์ชัน scanf() , printf()
ซึ่งถ้าจะใช้ฟังก์ชันทั้ง 2 นี้จะต้องนำเข้า Standard Library Files
ที่ชื่อ stdio.h ก่อนจึงจะสามารถใช้ได้
ฟังก์ชันมาตรฐานทางคณิตศาสตร์
ถ้าต้องการใช้ฟังก์ชันมาตรฐานทางคณิตศาสตร์จะต้องนำเข้า Standard Library Files 2ไฟล์ คือ math.h และ stdlib.h
abs/fabs/labs ทั้ง3ฟังก์ชัน
จะส่งค่ากลับเป็นค่า Absolute ของตัวเลขที่ส่งไปให้ ค่าAbsolute คือ
ค่าทางบวกของค่านั้น สำหรับ abs
ต้องมีการส่งพารามิเตอร์ที่มีชนิดข้อมูลเป็นตัวเลขจำนวนเต็มหรือ Integer
สำหรับ labs
ต้องมีการส่งพารามิเตอร์ที่มีชนิดข้อมูลเป็นตัวเลขที่เป็นทศนิยมหรือ
Float-Point การประกาศฟังก์ชันของทั้ง 3 ฟังก์ชันเป็นดังนี้
int abs (Int number);
long labs(long number);
double fabs(double number);
ตัวอย่าง
abs(3) ส่งค่ากลับเป็น 3
fabs(-3.4) ส่งค่ากลับเป็น 3.4
ceil ฟังก์ชัน ceil หรือ ceiling
เป็นฟังก์ชันที่จะหาค่าจำนวนเต็มที่มากกว่าหรือเท่ากับ ค่าที่ส่งไปให้
ตัวอย่างเช่น หาค่า ceiling ของ 3.000001 จะเป็น 4.0 ถ้าพิจารณาแล้ว
ผลของฟังก์ชัน ceil คือ
ค่าตัวเลขจำนวนเต็มที่อยู่ทางด้านขวามือของค่าที่ส่งไปให้ ดังแสดงในรูปที่
5-6
การประกาศฟังก์ชันของ ceil จะเป็นดังนี้
Double ceil (double number);
ตัวอย่าง
ceil(-1.9) ส่งค่ากลับเป็น-1.0
ceil(1.1) ส่งค่ากลับเป็น 2.0
floor ฟังก์ชัน floor
เป็นฟังก์ชันที่จะหาค่าจำนวนเต็มที่น้อยกว่าหรือเท่ากับค่าที่ส่งไปให้
ตัวอย่างเช่น หาค่า floor ของ 3.99999 จะเป็น 3.0 ถ้าพิจารณาแล้ว
ผลของฟังก์ชัน floor คือ
ค่าตัวเลขจำนวนเต็มที่อยู่ทางด้านซ้ายมือของค่าที่ส่งไปให้
ดังแสดงในรูปที่ 4-6 โดยมีการประกาศฟังก์ชันเป็นดังนี้
double floor(double number);
ตัวอย่าง
floor(-1.1) ส่งค่ากลับเป็น -2.0
floor(1.9) ส่งค่ากลับเป็น 1.0
pow ฟังก์ชัน pow เป็นฟังก์ชันที่หาค่า x ยกกำลังด้วย y หรือ xy ซึ่งมีการประกาศฟังก์ชันดังนี้
double pow(double x,double y);
ตัวอย่าง
pow(3.0,4.0) ส่งค่ากลับเป็น 81.0
pow(3.4,2.3) ส่งค่ากลับเป็น 16.687893
sqrt ฟังก์ชัน sqrt เป็นฟังก์ชันที่หาค่ารากที่สองของค่าที่ส่งไปให้ ซึ่งมีการประกาศฟังก์ชันเป็นดังนี้
double sqrt(double number);
ตัวอย่าง
sqrt(25.0) ส่งค่ากลับเป็น 5.0
แบบทดสอบ เก็บคะแนน 10 คะแนน