ฟังก์ชันของภาษา c

ในภาษาซีซึ่งกล่าวถึงการทำงานของฟังชันก์ การสร้างฟังก์ชันและรูปแบบของฟังก์ชัน การส่งค่าลักษณะต่าง ๆ และจะกล่าวถึงฟังก์ชันมาตรฐานของภาษาซีด้วย
การเขียนโปรแกรมภาษาในภาษาซี
การเขียนโปรแกรมในภาษาซีนั้นสามารถเขียนได้ 2 แบบ
แบบที่ 1 เขียนแบบโครงสร้าง
หรือเป็นบรรทัดไปเรื่อย ๆ หรือทั้งโปรแกรมมีเพียงหนึ่งฟังก์ชันคือ ฟังชันก์ main( ) การเขียนแบบนี้มีข้อดีคือ เหมาะสำหรับโปรแกรมสั้น ๆ แต่เมื่อนำไปใช้กับโปรแกรมที่มีขนาดยาวถ้าในโปรแกรมมีชุดคำสั่งที่ซ้ำกัน และการตรวจสอบหาข้อผิดพลาดนั้นทำได้ยาก เพราะจะต้องรันทั้งโปรแกรม
แบบที่ 2 เขียนแบบฟังก์ชัน
เป็นการเขียนโปรแกรมโดยแบ่งการทำงานของโปรแกรมออกเป็นฟังก์ชันย่อย แต่ยังต้องมีฟังก์ชัน main( ) อยู่เหมือนเดิม แต่ฟังก์ชัน main( ) นี้จะไปเรียกฟังก์ชันอื่นขึ้นมาทำงานต่อไป การเขียนแบบนี้มีข้อดีคือ การทำงานของโปรแกรมนั้นตรวจสอบได้ง่าย เพราะสามารถรันเฉพาะฟังก์ชันได้ และทำให้ตัวโปรแกรมนั้นสั้นลงในกรณีที่ชุดคำสั่งที่เหมือนกัน ซึ่งโปรแกรมเมอร์เกือบทั้งหมดนิยมเขียนในลักษณะนี้
การเขียนโปรแกรมแบบฟังก์ชัน
การเขียนโปรแกรมแบบฟังก์ชันมีขั้นตอนดังนี้
1. ประกาศฟังก์ชันที่ต้องการไว้ในส่วนแรกของโปรแกรม
2. เรียกใช้ฟังก์ชันที่ประกาศไว้
3. กำหนดหรือสร้างรายละเอียดของฟังก์ชันนั้น

โปรแกรม 5 – 1 แสดงขั้นตอน 3 ขั้นตอนของการสร้างฟังก์ชัน

จากตัวอย่างข้างต้นจะเห็นได้ว่า สิ่งที่จำเป็นสำหรับเรื่องฟังก์ชันก็คือ ชื่อของฟังก์ชันเพราะถ้าเรียกใช้ หรือประกาศชื่อฟังก์ชันไว้ไม่ตรงกัน โปรแกรมที่เขียนขึ้นก็จะเกิด Error ขึ้นมาได้ ฉะนั้นจะต้องรู้ว่าโปรแกรมที่เขียนนั้นมีฟังก์ชันอะไรบ้าง
การสร้างฟังก์ชัน
รูปที่ 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 โปรแกรมแสดงเลขหลักแรก

ผลลัพธ์ที่ได้
Enter an integer: 27
Least significant digit is: 7
โปรแกรม 5-7 โปรแกรมบวกค่าตัวเลขทั้งสองหลักแรกมาบวกกัน
ผลลัพธ์ที่ได้
Enter an integer: 23
Sum of last two digits is:5
Enter an integer: 8
Sum of last two digits is:8
โปรแกรม 5-8 โปรแกรมแสดงตัวเลขในรูปแบบ Long Integer

ผลลัพธ์ที่ได้
Enter a number with up to 6 digits: 123456
The number you entered is 123,456
Enter a number with up to 6 digits: 12
The number you entered is 000,012
การส่งค่าผ่านพารามิเตอร์
ในภาษา 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

ไม่มีความคิดเห็น:

แสดงความคิดเห็น