Professional Documents
Culture Documents
01418112-65 Chapter 08 (W 11)
01418112-65 Chapter 08 (W 11)
ฟังก์ชัน
FUNCTIONS
รูปแบบ ชื่อฟังก์ชันย่อย();
ฟังก์ชันที่ไม่มีการรับค่าเข้ามาในฟังก์ชัน และไม่มีการส่งค่ากลับออกไปจากฟังก์ชัน
ตัวอย่าง โปรแกรมแสดงการทำงานของฟังก์ชันหลักร่วมกับการทำงานของฟังก์ชันสร้างเอง (ฟังก์ชันย่อย)
รูปแบบ ชื่อฟังก์ชันย่อย(พารามิเตอร์ที่ต้องการส่งไปยังฟังก์ชันย่อย);
ฟังก์ชันที่มีการรับค่าเข้ามาในฟังก์ชัน แต่ไม่มีการส่งค่ากลับออกไปจากฟังก์ชัน
• พารามิเตอร์ (Parameter) คือ ตัวส่ง โดยฟังก์ชันหลัก main() จะเป็นผูส้ ่ง
ค่าพารามิเตอร์ ไปยังฟังก์ชันย่อย
• อาร์กิวเมนต์ (Argument) คือ ตัวรับ โดยฟังก์ชันย่อยจะกำหนดอาร์กิวเมนต์ขึ้น
สำหรับรองรับค่าพารามิเตอร์ที่ฟังก์ชันหลัก main() จะส่งค่ามาให้
• การกำหนดพารามิเตอร์นั้น จะกำหนดเพียงแต่ค่าที่ต้องการส่งไปเท่านั้น
แต่การกำหนดอาร์กิวเมนต์ต้องทำการกำหนดชนิดของข้อมูล และชื่อตัวแปร
ที่จะใช้สำหรับรองรับค่าพารามิเตอร์ด้วย โดยชื่อตัวแปรที่จะใช้สำหรับรองรับ
ค่าพารามิเตอร์นี้จะกำหนดเป็นชื่ออะไรก็ได้ และอาจจะตั้งชื่อเหมือนหรือไม่
เหมือนกับตัวแปรพารามิเตอร์ที่ส่งมาก็ได้
ฟังก์ชันที่มีการรับค่าเข้ามาในฟังก์ชัน แต่ไม่มีการส่งค่ากลับออกไปจากฟังก์ชัน
• การกำหนดชนิดข้อมูลของอาร์กิวเมนต์แต่ละตัว จะต้องพิจารณาจากชนิดข้อมูลของ
พารามิเตอร์ที่จะส่งมาเป็นหลัก
• กล่าวคือ ต้องระวังในเรื่องการกำหนดชนิดข้อมูลของอาร์กิวเมนต์ให้มีชนิดข้อมูลเป็น
ชนิดเดียวกับพารามิเตอร์ที่จะส่งมาด้วย เช่น จากตัวอย่างก่อนหน้า ฟังก์ชันหลัก
main() ส่งค่าพารามิเตอร์ตัวแรก คือ a มีชนิดข้อมูลเป็น int ดังนั้น อาร์กิวเมนต์
ตัวแรกของฟังก์ชัน test() ก็ต้องกำหนดชนิดข้อมูลเป็น int ด้วย และส่ง
ค่าพารามิเตอร์ตัวที่สอง คือ average มีชนิดข้อมูลเป็น float ดังนั้น อาร์กิวเมนต์
ตัวที่สองของฟังก์ชัน test() ก็ต้องกำหนดชนิดข้อมูลเป็น float เป็นต้น
• ให้ระมัดระวังในเรื่องของชนิดข้อมูลให้ดี เพราะหากกำหนดชนิดข้อมูลไม่ตรงตัว
กันแล้ว จะทำให้เกิดข้อผิดพลาดขึ้นกับโปรแกรมได้
ฟังก์ชันที่มีการรับค่าเข้ามาในฟังก์ชัน แต่ไม่มีการส่งค่ากลับออกไปจากฟังก์ชัน
14 main()
ตัวอย่าง โปรแกรมการเลือกลบหรือหารตัวเลข 15
16
{
int choice, num1, num2;
17 do
18 {
กำหนดอาร์กิวเมนต์ตัวที่ 1 คือ ตัวแปร a 19 printf("Calculate\n");
1 #include <stdio.h> 20 printf("1. Substract\n");
2 เป็นชนิดข้อมูล int สำหรับค่าพารามิเตอร์ตัวที่ 1 21 printf("2. Divide\n");
22 printf("3. Exit\n");
3 void substract(int a,int b) คือ ค่า num1 และตัวแปร b เป็นชนิดข้อมูล int 23 printf("Select choice : ");
สำหรับค่าพารามิเตอร์ที่ 2 คือ ค่า num2 24 scanf("%d", &choice);
4 { 25
26 if(choice < 1 || choice > 3)
5 printf("Result of %d-%d is %d\n\n", a, b, a-b); 27 printf("Please enter choice 1-3 only\n\n");
6 } 28 else if(choice == 3)
29 break;
7 30 else
31 {
8 void divide(int a, int b) 3 32 6 printf("Enter number1 : ");
9 { 33
34
scanf("%d", &num1);
printf("Enter number2 : ");
10 float result; 35 scanf("%d", &num2);
เรียกใช้งานฟังก์ชันย่อย 36 if(choice==1)
11 result = (float)a/b; 37 substract(num1, num2);
38 else
12 printf("Result of %d/%d is %f\n\n", a, b, result); 39 divide(num1, num2);
13 } 40 }
ส่งพารามิเตอร์ num1, num2 ซึ่งมีชนิดข้อมูล 41 }
42 while(choice != 3);
เป็น int ไปยังฟังก์ชันย่อย 43 }
ฟังก์ชันที่มีการรับค่าเข้ามาในฟังก์ชัน แต่ไม่มีการส่งค่ากลับออกไปจากฟังก์ชัน
ผลลัพธ์ของโปรแกรม
อธิบายโปรแกรม
• บรรทัดที่ 17-42 เป็นการใช้ลูป do-while กำหนดการทำงานของ
ฟังก์ชันหลัก main() โดยการทำงานของโปรแกรมจะมี 3
เมนูให้เลือกใช้งาน คือ 1. การลบ 2. การหาร 3. ออกจากโปรแกรม
ซึ่งโปรแกรมจะวนลูปทำงานไปเรื่อย ๆ จนกว่าผู้ใช้งานโปรแกรม
จะเลือกเมนูที่ 3 คือ ออกจากโปรแกรม จึงจะจบการทำงานของ
โปรแกรม
• บรรทัดที่ 19-24 เป็นการแสดงผลเมนู และรอรับค่าการเลือกของผู้ใช้
ฟังก์ชันที่มีการรับค่าเข้ามาในฟังก์ชัน แต่ไม่มีการส่งค่ากลับออกไปจากฟังก์ชัน
• บรรทัดที่ 26-27 เป็นการนำค่าเมนูที่ผู้ใช้งานเลือกมาทำการตรวจสอบ
o ถ้าผู้ใช้งานเลือกเมนูที่ไม่ใช่ 1-3 ก็จะแสดงข้อความเตือนในบรรทัดที่ 27 ให้เลือกเมนูที่ 1-3
เท่านั้น
o หากผู้ใช้งานโปรแกรมเลือกเมนูที่ 3 ก็จะเข้าสู่การทำงานในบรรทัดที่ 28-29 โดยคำสั่ง break
เป็นการสั่งให้ออกจากการทำงานของลูป do-while
o แต่หากผู้ใช้งานโปรแกรมเลือกเมนู 1-2 ก็จะเข้าสู่การทำงานในบรรทัดที่ 30-40
โดยในบรรทัดที่ 32-35 จะรับค่าตัวเลข 2 ตัวเข้ามาในโปรแกรม โดยเมื่อป้อนค่าตัวเลข
เรียบร้อยแล้ว ก็จะพิจารณาว่าผู้ใช้งานโปรแกรมเลือกเมนูใด
o ถ้าเลือกเมนูที่ 1 ก็จะไปทำงานในบรรทัดที่ 37 คือ เรียกฟังก์ชันย่อย substract() ให้ทำงาน
โดยส่งค่าเลขจำนวนเต็ม num1 และ num2 ไปยังฟังก์ชันย่อยด้วย
o แต่ถ้าเลือกเมนูที่ 2 ก็จะไปทำงานบรรทัดที่ 39 คือ เรียกฟังก์ชันย่อย divide() ให้ทำงาน และ
ส่งค่า num1, num2 ไปยังฟังก์ชันย่อยนัน้ ด้วย
ฟังก์ชันที่มีการรับค่าเข้ามาในฟังก์ชัน แต่ไม่มีการส่งค่ากลับออกไปจากฟังก์ชัน
• บรรทัดที่ 3-6 เป็นการทำงานของฟังก์ชันย่อย substract() ซึ่งจะรับค่า num1
ผ่านเข้ามาทางตัวแปร a และรับค่า num2 ผ่านเข้ามาทางตัวแปร b จากนั้นทำการ
พิมพ์ค่าผลลัพธ์ของ a-b ออกทางจอภาพ
• บรรทัดที่ 8-13 เป็นการทำงานของฟังก์ชันย่อย divide() ซึ่งจะรับค่า num1 และ
num2 ผ่านเข้ามาทางตัวแปร a และ b ตามลำดับ จากนั้นบรรทัดที่ 11 ทำ Explicit
Type Conversion เพื่อแปลงชนิดข้อมูลของผลลัพธ์ที่ได้จาก int ไปเป็น float
ก่อนนำผลหารที่ได้เก็บลงตัวแปร result ที่มีชนิดข้อมูลเป็นเลขจำนวนจริง และ
พิมพ์ผลลัพธ์นั้นออกทางจอภาพ
ฟังก์ชันที่มีการรับค่าเข้ามาในฟังก์ชัน แต่ไม่มีการส่งค่ากลับออกไปจากฟังก์ชัน
ตัวอย่าง โปรแกรมแสดงค่ารหัสแอสกี
1 #include <stdio.h>
2
ผลลัพธ์ของโปรแกรม
3 void ascii_char(int num)
4 {
5 printf("Your character is %c\n", num);
6 }
7
8 main()
97
Please enter number between 1-255 : 97
9 { Your character is a
10 int number;
11 printf("Please enter number between 1-255 : ");
12 scanf("%d", &number);
13 ascii_char(number);
14 }