Professional Documents
Culture Documents
• รูปแบบของฟังก์ชันประเภทนี้ คือ
ชนิดข้อมูลที่ต้องการส่งกลับออกไป ชื่อฟังก์ชัน(ชนิดข้อมูลที่รับเข้ามา ชื่อตัวแปรที่รับเข้ามา)
{
รูปแบบ ...
return ค่าที่ต้องการส่งคืนกลับออกไปจากฟังก์ชัน
}
• ฟังก์ชันประเภทนี้มีการรับค่าเข้ามาในฟังก์ชันย่อย และนำค่าที่ได้นั้นมาประมวลผลตามขั้นตอนต่าง ๆ
ตามที่ต้องการ
• จากนั้นส่งผลลัพธ์ที่ได้คืนกลับไปยังฟังก์ชันที่ทำการเรียกใช้งานฟังก์ชันย่อยนั้น
• ซึ่งการส่งคืนค่ากลับออกไปจากฟังก์ชัน สามารถทำได้โดยใช้คำสั่ง return ตามด้วยค่าที่ต้องการ
ส่งคืนกลับออกไป
ฟังก์ชันที่มีการรับค่าเข้ามาในฟังก์ชัน และมีการส่งค่ากลับออกไปจากฟังก์ชัน
!1
2
3
• หากฟังก์ชันมีการส่งค่ากลับออกไปจากฟังก์ชันแล้ว มี 3 จุดที่ควรระมัดระวังในเรื่องของ
ชนิดข้อมูลทีต่ ้องกำหนดให้เป็นชนิดเดียวกัน ไม่เช่นนั้นจะเกิดข้อผิดพลาดกับโปรแกรมได้
• การนำอาร์เรย์มาใช้งานร่วมกับฟังก์ชันสร้างเอง
• โดยสามารถส่งค่าของอาร์เรย์ไปยังฟังก์ชันสร้างเองได้
อาร์เรย์กับฟังก์ชันสร้างเอง
ตัวอย่าง โปรแกรมนับจำนวนตัวอักษรในข้อความ (ไม่รวมช่องว่าง)
1 #include <stdio.h> การประกาศอาร์กิวเมนต์เพื่อรับค่าพารามิเตอร์ในลักษณะของอาร์เรย์นั้น ให้กำหนดชนิดข้อมูลและชื่อตัวแปรอาร์เรย์ โดยไม่ต้องกำหนดขนาดของอาร์เรย์
2
3 int count(char word[]) 23 main() 28 fgets(word, 50, stdin);
4 { 24 { 29 length = count(word);
5 int i=0,counter=0; 25 char word[50]; 30 printf("Length of your word is %d\n", length);
6 while(word[i] != '\0') 26 int length; 31 }
7 { 27 printf("Please enter word : "); การส่งพารามิเตอร์ทำโดยระบุชื่อของอาร์เรย์โดยตรง
8 switch(word[i])
9 {
10
11
case ' ' :
break; ผลลัพธ์ของโปรแกรม
12 case '\t' :
13 break;
14 case '\n' :
15 break;
16 default :
17 counter++;
18 }
19 i++;
20 }
21 return counter;
22 }
อาร์เรย์กับฟังก์ชันสร้างเอง
อธิบายโปรแกรม
• บรรทัดที่ 27-28 รับค่าข้อความสตริงเข้ามาในโปรแกรม
• บรรทัดที่ 29 เรียกใช้งานฟังก์ชันย่อย count() โดยส่งค่าข้อความสตริง word
เข้าไปในฟังก์ชันย่อยด้วย
• บรรทัดที่ 3-22 เป็นการทำงานของฟังก์ชันย่อย count()
o โดยบรรทัดที่ 6-20 ใช้ลูป while ตรวจสอบข้อมูล (ตัวอักษร) ในแต่ละช่อง
ของอาร์เรย์ว่าเป็น Null Character หรือไม่
o ถ้าไม่ใช่ก็จะเข้าสู่การทำงานของการตรวจสอบเงื่อนไขด้วยคำสั่งเงื่อนไข
switch-case ในบรรทัดที่ 8-18 โดยโปรแกรมนี้จะทำการตรวจสอบ
ว่าข้อความมีขนาดกี่ตัวอักษร โดยไม่นับรวมช่องว่างและ Tab 'a'
อาร์เรย์กับฟังก์ชันสร้างเอง
o ดังนั้น ในบรรทัดที่ 10-13 จึงตรวจสอบว่าข้อมูลของอาร์เรย์ช่องที่ i มีค่าเป็นช่องว่าง
หรือ Tab หรือไม่
o ถ้าใช่ก็จะไม่ทำการบวกเพิ่มค่าของตัวแปร counter นี้ในการนับจำนวนตัวอักษร
o แต่หากค่าข้อมูลที่ตรวจสอบไม่ใช่ช่องว่างหรือ Tab ก็จะไปตรวจสอบว่าเป็น New Line
(‘\n’) หรือไม่ เพราะโดยปกติการรับค่าด้วยฟังก์ชัน fgets นั้น จะติดค่า New Line
(‘\n’) มาด้วยเสมอ
o ซึ่งถ้าเป็น New Line ก็จะไม่บวกเพิ่มค่าตัวแปร counter เช่นกัน
o แต่ถ้าไม่ใช่ New Line ก็จะเข้าสู่กรณีของ default ซึ่งจะทำการบวกเพิ่มค่าของ
ตัวแปร counter ขึ้นอีก 1 จากนั้นบรรทัดที่ 19 จะบวกเพิ่มค่า i เพื่อเลือ่ นไปพิจารณา
ข้อมูลของอาร์เรย์ในช่องถัดไป
อาร์เรย์กับฟังก์ชันสร้างเอง
o และจะวนลูปไปเรื่อย ๆ จนกว่าจะพบ ‘\0’ จากนั้นจะส่งจำนวนตัวอักษรที่นับได้กลับคืน
ไปยังฟังก์ชันหลัก main()
o โดยในบรรทัดที่ 29 ฟังก์ชันหลัก main() ได้นำตัวแปร length มารับค่าทีฟ
่ ังก์ชันย่อย
count() จะส่งคืนกลับมาให้
o ซึ่งจากผลลัพธ์ที่แสดงในรูปภาพ ไม่ว่าจะป้อนคำว่า “computer science“
ในลักษณะอย่างไร คือ จะเว้นช่องว่างมากน้อยเท่าใด ก็ได้จำนวนตัวอักษรไม่ต่างกัน
เนื่องจากจะไม่นับรวมช่องว่างหรือ Tab เข้าไปด้วย
อาร์เรย์กับฟังก์ชันสร้างเอง
ตัวอย่าง โปรแกรมแสดงการหาค่าสูงสุดของตัวเลข 5 ตัว ด้วยฟังก์ชันสร้างเอง
1 #include <stdio.h> 17 int findMax(int num[])
2 18 {
3 int findMax(int num[]); 19 int maximum, i=0;
4 20 maximum = num[i];
5 main() 21
6 { 22 for(i=0; i<5; i++)
7 int number[5] = { 20, 50, 100, 99, 9 }; 23 {
8 int max; 24 if(num[i] > maximum)
9 max = findMax(number); 25 maximum = num[i];
10 printf("number[1] : %d\n", number[0]); 26 }
11 printf("number[2] : %d\n", number[1]); 27 return maximum;
12 printf("number[3] : %d\n", number[2]); 28 } number[1] : 20
13 printf("number[4] : %d\n", number[3]); number[2] : 50
14 printf("number[5] : %d\n", number[4]); number[3] : 100
15 printf("Maximum of these number is %d\n", max); ผลลัพธ์ของ number[4] : 99
number[5] : 9
16 }
โปรแกรม Maximum of these number is 100
อาร์เรย์กับฟังก์ชันสร้างเอง
อธิบายโปรแกรม
• ฟังก์ชัน toupper()
o ฟังก์ชันนี้จะแปลงตัวอักษรจากตัวเล็กไปเป็นตัวใหญ่
o แต่หากตัวอักษรเป็นตัวอักษรใหญ่อยู่แล้ว ฟังก์ชันนี้ก็จะไม่เปลี่ยนแปลงค่าตัวอักษรแต่อย่างใด
รูปแบบ int memcmp(const void *s1, const void *s2, size_t n);
ฟังก์ชันที่มีการประกาศไว้ในเฮดเดอร์ไฟล์ string.h
• ฟังก์ชัน void *memchr()
o จะทำการค้นหาบัฟเฟอร์ว่ามีค่าพารามิเตอร์ c อยู่หรือไม่
o หากพบพารามิเตอร์ c จะคืนค่าแอดเดรส ณ ตำแหน่งของพารามิเตอร์ c กลับมาให้
o แต่หากไม่พบก็จะคืนค่า Null Pointer กลับมาให้
รูปแบบ void *memchr(const void *s, int c, size_t n);
• ฟังก์ชัน void *memset()
o ทำการคัดลอก (Copy) ค่าของ c ลงไปยังหน่วยความจำ ณ ตำแหน่งที่ชี้อยู่
โดย s ซ้า ๆ กันจำนวน n ไบต์
รูปแบบ void *memset(void *s, int c, size_t n);
ฟังก์ชันที่มีการประกาศไว้ในเฮดเดอร์ไฟล์ string.h
ตัวอย่าง โปรแกรมแสดงการทำงานของฟังก์ชันมาตรฐาน strchr() และ strstr()
1 #include <stdio.h>
2 #include <string.h>
ผลลัพธ์ของโปรแกรม
3
4 main()
5 {
6 char str[]="Hello ! C Language";
7 char substr[]="C Lan";
8
9 printf("String is %s\n", str);
10 printf("After use strchr(); with character \"!\" , ");
11 printf("String is %s\n", strchr(str, '!'));
12 printf("After search string with substr \"C Lan\" , ");
13 printf("String is %s\n", strstr(str, substr));
14 }
ฟังก์ชันที่มีการประกาศไว้ในเฮดเดอร์ไฟล์ string.h
อธิบายโปรแกรม