หน่วยที่ 2
โครงสร้างภาษาซี
คำสั่งที่ใช้งานในภาษา C นั้นล้วนเป็นฟังก์ชั่นทั้งสิ้น ดังนั้นโปรแกรมที่เขียนขึ้นจึงประกอบไปด้วยฟังก์ชั่นมากมาย ที่ถูกกำหนดให้ทำหน้าที่ใดหน้าที่หนึ่งในลักษณะของโมดูลย่อย เพื่อทำงานให้บรรลุเป้าหมาย และในเมื่อภาษา C คือ ภาษาที่ประกอบไปด้วยฟังก์ชั่น
ฟังก์ชั่น (Function) คือ ชุดคำสั่งที่เขียนขึ้นเพื่อสั่งให้คอมพิวเตอร์ทำงาน ที่อนุญาตให้สามารถรับข้อมูล (Input) ประมวลผล (Processes) และแสดงผลข้อมูล (Output) โดยฟังก์ชั่นที่ถูกเขียนขึ้นใช้งาน และสามารถเรียกมาใช้งานได้ทันที จะถูกจัดเก็บไว้ในไลบารีมาตรฐาน (Standard Library) ในขณะที่ฟังก์ชั่นอื่นๆ จะเป็นฟังก์ชั่นที่ถูกเขียนขึ้นโดยผู้เขียนโปรแกรม อย่างไรก็ตามในภาษา C จะมีฟังก์ชั่นพิเศษฟังก์ชั่นหนึ่งที่จำเป็นต้องมีไว้ในโปรแกรมเสมอ คือ ฟังก์ชั่น main() ทั้งนี้ฟังก์ชั่นดังกล่าวจัดเป็นฟังก์ชั่นหลักที่นำมาใช้เป็นจุดเริ่มต้นของโปรแกรมเพื่อสั่งให้ทำงาน โดยฟังก์ชั่นอื่นๆ จะถือเป็นรูทีนย่อย (Subroutines)
ลักษณะโครงสร้างของภาษาซี
ลักษณะโครงสร้างภาษาซี แบ่งออกได้เป็น 4 ส่วน ดังนี้
1. ส่วนประมวลผลก่อน (Preprocessor directives)
2. ส่วนฟังก์ชันหลัก (the main () function)
3. ประโยคคำสั่ง (compound statement)
4. ส่วนอธิบายโปรแกรม (program comment)

1. ส่วนประมวลผลก่อน (Preprocessor directives)
ตัวประมวลผลก่อน หรือพรีโปรเซสเซอร์ไดเร็กทีฟ ถือเป็นส่วนสำคัญส่วนหนึ่งของภาษาซี เรียกว่าส่วนหัวของโปรแกรม จำเป็นต้องกำหนดไว้ในตอนต้นโปรแกรมเสมอ ถ้าตัวแปลภาษาซีตรวจพบว่ามีการใช้พรีโปรเซสเซอร์ไดเร็กทีฟ ก็จะถูกแปลความหมายเป็นอันดับแรกก่อนคำสั่งประเภทอื่น การเขียนคำสั่งพรีโปรเซสเซอร์ไดเร็กทีฟ ต้องขึ้นต้นด้วยเครื่องหมาย #
พรีโปรเชสเชอร์จะมีอยู่หลายตัวด้วยกัน เช่น
| #if |
#ifdef |
#ifndef |
#else |
#elif |
#endif |
| #include |
#define |
#undef |
#line |
#error |
#pragma |
แต่พรีโปรเซสเซอร์ไดเร็กทีฟ ที่น่าสนใจและใช้งานเป็นประจำคือ #include และ #define
- พรีโปรเซสเซอร์ไดเร็กทีฟ #define เป็นการกำหนดค่านิพจน์ต่างๆ ให้กับชื่อของตัวแปร เช่น
# define START 0 หมายถึง เป็นการกำหนดค่าคงที่ให้กับตัวแปร START โดยให้มีค่าเป็น 0
# define temp 37 หมายถึง เป็นการกำหนดให้ตัวแปร temp มีค่าเท่ากับ 37
- พรีโปรเซสเซอร์ไดเร็กทีฟ #include ใช้สำหรับสั่งให้ตัวแปลภาษาซี นำ header file (ไฟล์ที่ระบุชื่อต่อจาก #include) มารวมกับโปรแกรมก่อนที่จะแปลภาษา สามารถเขียนได้ 2 รูปแบบดังนี้
แบบที่ 1 #include <header file>
แบบที่ 2 #include “header file”
เช่น #include<stdio.h> โดยคอมไพเลอร์จะค้นหาเฮดเดอร์ไฟล์ที่ระบุจากไดเร็กทอรี่ที่เก็บเฮดเดอร์ไฟล์โดยเฉพาะ โดยชื่อเฮดเดอร์ไฟล์ที่ผนวกเข้ามาสามารถเขียนอยู่ภายในเครื่องหมาย < > หรือ " " ก็ได้
เฮดเดอร์ไฟล์ (header file)
เฮดเดอร์ไฟล์ (header file) เป็นไฟล์ส่วนหัวที่มีการประกาศรายละเอียดของคำสั่งในภาษา C หลายคำสั่งเอาไว้ให้ผู้เขียนโปรแกรมเรียกใช้ได้ header file จะมีนามสกุล .h เช่น stdio.h เป็นต้น แต่ละไฟล์จะเก็บการประกาศของคำสั่งสำหรับใช้งานด้านต่างๆ ไม่เหมือนกัน การ include ไฟล์ .h ให้ประกาศไว้ที่ด้านบนของโปรแกรมและเราสามารถ include ไฟล์ .h เข้ามาหลายไฟล์ในโปรแกรมเดียวกันได้เช่น
Header File ที่สำคัญ
เฮดเดอร์ไฟล์ที่เรานิยมใช้บ่อยมีอยู่ 2 เฮดเดอร์ คือ stdio.h และ conio.h
stdio.h กลุ่มฟังก์ชันที่ใช้งานด้าน อินพุตและเอาต์พุต เช่น printf( ) , scanf ( ) เมื่อโปรแกรมมีการเรียกใช้งานฟังก์ชัน printf( ) ก็จะต้องผนวกเฮดเดอร์ไฟล์ stdio.h มิฉะนั้นจะคอมไพล์โปรแกรมไม่ผ่าน ภาษาซีสามารถผนวกเฮดเดอร์ได้หลาย
conio.h กลุ่มฟังก์ชันที่ใช้ควบคุมการแสดงผล, รับค่าจากคีย์บอร์ด เช่น getch ( )
string.h กลุ่มฟังก์ชันที่ใช้จัดการข้อความเช่น รวมข้อความ, ค้นหาอักขระ
math.h กลุ่มฟังก์ชันด้านการคำนวณทางคณิตศาสตร์ เช่น sin, cos, tan, log เป็นต้น
2. ฟังก์ชั่นหลัก (Main Function)
ฟังก์ชั่น main( ) ในภาษาซี จัดเป็นฟังก์ชันที่ทำหน้าเสมือนกับเป็นโปรแกรมหลักที่สั่งให้ชุดคำสั่งทำงานรวมถึงการเรียกใช้ฟังก์ชั่นย่อยๆ อื่นทำงาน กล่าวคือการสั่งงานในโปรแกรมจะต้องอยู่ภายในฟังก์ชั่น main ( ) เท่านั้น ตามด้วยเครื่องหมายปีกกาเปิด { และจบด้วยเครื่องหมายปีกกาปิด } และคำสั่งทุกคำสั่งในภาษาซีจะต้องปิดท้ายด้วยเครื่องหมาย ; (semicolon) เสมอ
ฟังก์ชัน main() สามารถเขียนในรูปแบบของ int main ก็ได้ มีความหมายเหมือนกัน คือ หมายความว่า ฟังก์ชัน main() จะไม่มีอาร์กิวเมนต์ (argument) คือไม่มีการรับค่าใด ๆ เข้ามาประมวลผลภายในฟังก์ชัน และจะมีการคืนค่ากลับออกไปจากฟังก์ชันด้วย
argument คือ ตัวรับค่าเข้ามาในฟังก์ชัน
parameter คือ ค่าที่ส่งไปยังฟังก์ชันค่า argument และ parameter ต้องเป็นข้อมูลชนิดเดียวกัน เช่น หากกำหนดให้ argument เป็นข้อมูลชนิดตัวอักษรแล้วค่า parameter ที่ส่งไปก็ต้องเป็นชนิดตัวอักษรด้วย
3. ประโยคคำสั่ง (Compound Statement)
เป็นชุดคำสั่งที่บรรจุอยู่ในฟังก์ชั่นนั่นๆ ซึ่งอาจจะเป็น
- ประโยคที่ใช้สำหรับประกาศตัวแปร (Variable) หรือการกำหนดค่าเริ่มต้นให้กับตัวแปรต่างๆ โดยตัวแปรที่ใช้งานในโปรแกรม จำเป็นต้องได้รับการประกาศชนิดข้อมูลของตัวแปรนั้นๆ ด้วย
- ประโยคนิพจน์คณิตศาสตร์ เช่น ประโยคคำนวณตัวเลขต่างๆ
- ประโยคคำสั่งควบคุมอื่นๆ เช่น คำสั่งควบคุมวงจรลูป คำสั่งควบคุมเงื่อนไข เป็นต้น
ประโยคคำสั่งเหล่านี้จะถูกบรรจุภายในบล็อก {} เพื่อใช้เป็นจุดเริ่มต้นและจุดสิ้นสุดของการทำงานในบล็อกนั้นๆ นอกจากนี้แล้ว ภายในบล็อกยังสามารถมีบล็อกย่อยๆ ซ้อนลงไปได้อีก เมื่อสิ้นสุดประโยคใดๆจะต้องลงท้ายด้วยเครื่องหมาย ; (Semicolon)
4. คำอธิบายในโปรแกรม (Program Comment)
คำอธิบายในโปรแกรม (program comment) คือข้อความที่แทรกอยู่ภายในโปรแกรม ซึ่งคอมพิวเตอร์จะไม่แปลข้อความนี้ให้เป็นส่วนหนึ่งของโปรแกรม กล่าวคือจะไม่มีผลต่อการทำงานของโปรแกรม เขียนไว้เพื่ออธิบายโปรแกรม ซึ่งในบางครั้งผู้เขียนโปรแกรม อาจต้องการเขียนคำอธิบาย กำกับขั้นตอนการทำงานของโปรแกรมในแต่ละขั้น ทำให้เกิดประโยชน์กับผู้เขียนและผู้ที่อ่านโปรแกรมได้เข้าใจง่ายขึ้น และช่วยทำให้การแก้ไขและปรับปรุงโปรแกรมเป็นไปได้ง่ายยิ่งขึ้น สามารถเขียนได้ 2 รูปแบบ
/* และปิดด้วยเครื่องหมาย */ เป็นการระบุคำอธิบายที่ครอบคลุมหลายบรรทัด
// เป็นการระบุคำอธิบายในบรรทัดเดียวเท่านั้น
อักขระในภาษาซี
ภาษา C ได้เตรียมกลุ่มอักขระต่างๆ ให้ใช้งานเรียกว่า Character Sets แบ่งออกเป็น 2 กลุ่มใหญ่ๆ คือ กลุ่มอักขระพื้นฐาน (Basic Character set) และ (Execution Character set)
1. กลุ่มอักขระพื้นฐาน (Basic Character set) ประกอบด้วยกลุ่มอักขระ ดังต่อไปนี้
- อักษรตัวพิมพ์ใหญ่ (Alphabets Upper Case) ประกอบด้วยอักษร A-Z จำนวน 26 ตัว ดังนี้

- อักษรตัวพิมพ์เล็ก (Alphabets Lower Case) ประกอบด้วยอักษร a-z จำนวน 26 ตัว ดังนี้
- ตัวเลข (Decimal Digits) ประกอบไปด้วยตัวเลข 0 - 9 จำนวน 10 ตัว ดังนี้
- ตัวอักขระแบบกราฟิก ประกอบด้วยสัญลักษณ์ต่างๆ จำนวน 29 ตัว ดังนี้

- ตัวอักขระแบบช่องว่าง (White space Character) ประกอบด้วยอักขระที่เป็นช่องว่างในลักษณะต่างๆ จำนวน 5 ตัว ดังนี้
2. Execution Character set ประกอบด้วยกลุ่มอักขระ ดังต่อไปนี้
-อักขระที่เป็นค่าว่าง (Null Character) อักขระที่เป็นค่าว่าง หรือค่า Null จะใช้สัญลักษณ์ \0
-อักขระควบคุม (Escape Sequence) เป็นรหัสที่ใช้ควบคุมการแสดงผลทางจอภาพและเครื่องพิมพ์ ประกอบด้วย
กฎเกณฑ์การเขียนภาษาซี
กฎเกณฑ์การเขียนภาษาซี สามารถสรุปได้ดังนี้
1. จะต้องกำหนดพรีโปรเชสเชอร์ที่ต้นโปรแกรมก่อน เช่น #include<stdio.h> , #include<conio.h>
2. คำสั่งต่าง ๆ จะต้องเขียนด้วยตัวอักษรภาษาอังกฤษพิมพ์เล็ก
3. การใช้ตัวอักษรภาษาอังกฤษพิมพ์เล็กและพิมพ์ใหญ่ในภาษาซีจะมีความแตกต่างกัน
4. ตัวแปรที่นำมาใช้งานในโปรแกรม จะต้องมีการประกาศไว้เสมอ
5. ภายในโปรแกรมต้องมีอย่างน้อยหนึ่งฟังก์ชั่น คือ main ( )
6. ใช้เครื่องหมาย { เพื่อบอกจุดเริ่มต้นของชุดคำสั่ง และเครื่องหมาย } เพื่อบอกจุดสิ้นสุดของชุดคำสั่ง โดยสามารถซ้อนเครื่องหมาย { } เพิ่มไว้ภายในได้
7. สิ้นสุดของแต่ละประโยคคำสั่ง จะต้องจบด้วยเครื่องหมาย ; (semicolon) เช่น a = b+c ;
8. สามารถใช้เครื่องหมาย /*comment*/ หรือ //comment เพื่อระบุหมายเหตุภายในโปรแกรม โดยคำอธิบายที่อยู่ภายใต้เครื่องหมาย /*comment*/ หรือ //comment จะไม่ถูกนำไปประมวลผล