โครงสร้างภาษาซี
ภาษาซี แบ่งได้เป็น 3 ส่วน คือ ส่วนหัวของโปรแกรม (Header) ส่วนของตัวโปรแกรม (Body) และส่วนของฟังก์ชัน (Function)
1. ส่วนหัวของโปรแกรม (Header)
จะเริ่มตั้งแต่บรรทัดแรกของโปรแกรมจนถึงบรรทัดก่อน main() สามารถแบ่ง ออกเป็นส่วนย่อย ๆ ได้ ดังนี้
1) ส่วนประมวลผลก่อน (Preprocessor Directives) เป็นส่วนที่คอมไพเลอร์จะทำการแปลเป็นลำดับแรกก่อนคำสั่งประเภทอื่น คำสั่งที่จัดอยู่ในกลุ่มส่วนประมวลผลก่อนจะต้องขึ้นต้นด้วยเครื่องหมาย # ไดเร็กทีฟ(Directive) และตามด้วยชื่อโปรแกรมหรือชื่อตัวแปรที่ต้องการกำหนดค่า ในส่วนนี้อาจเรียกว่าส่วนหัวโปรแกรม(Header Part) จะไม่มีการจบประโยคคำสั่งด้วย ; ซึ่งคำสั่งที่ มักใช้บ่อย ๆ ได้แก่ #include #define เป็นต้น
#define ใช้สำหรับกำหนดชื่อค่าคงที่ในโปรแกรม ซึ่งชื่อค่าคงที่จะมีรูปแบบเหมือนกับชื่อตัวแปรโดยทั่วไป ผู้เขียนโปรแกรมอาจจะใช้ตัวอักษรตัวใหญ่เพื่อให้มีความแตกต่างออกไป ค่าที่กำหนดให้กับชื่อค่าคงที่อาจจะเป็นตัวเลข ตัวอักษร ข้อความ หรือนิพจน์ก็ได้ เช่น
#define MAX 40
#define NAME “NPRU”
#define STATUS ‘1’
#define LIMIT MAX-1
#include ใช้สำหรับสั่งให้ตัวแปลภาษาซี นำฟังก์ชันที่เก็บอยู่ในไลบรารีมารวมกับโปรแกรม ก่อนที่จะทำการแปลโปรแกรม เช่น
#include <stdio.h> หรือ #include “stdio.h”
#include <conio.h> หรือ #include “conio.h”
ข้อแตกต่างของการใช้เครื่องหมาย < > และ “ ” คือ ถ้าใช้เครื่องหมาย < > จะเป็นการอ่านไฟล์จากไดเรกทอรีที่กำหนดไว้ก่อน แต่ถ้าใช้เครื่องหมาย “ ” จะเป็นการอ่านไฟล์จากไดเรกทอรีปัจจุบันที่กำลังติดต่ออยู่
2) ส่วนประกาศสาธารณะ (Global Declarations) เป็นส่วนที่ใช้ในการประกาศตัวแปรสาธารณะ (Global Variables)เพื่อให้ฟังก์ชันทุกฟังก์ชันสามารถใช้งานตัวแปรเหล่านี้ได้โดยชื่อของตัวแปรนิยมใช้ตัวอักษรตัวเล็ก เช่น
int a , b , c;
int num = 5;
char sex = ‘f’;
float score = 55.3;
3) ส่วนต้นแบบฟังก์ชัน (Function Prototype) เป็นส่วนที่ใช้ประกาศว่าผู้เขียนโปรแกรมสร้างฟังก์ชันอะไรขึ้นมาใช้งาน โดยให้ระบุเฉพาะรูปแบบของการคืนค่า ชื่อฟังก์ชัน ตัวแปรและชนิดของตัวแปรที่สร้างขึ้นเพื่อรอรับค่าที่ส่งไปจากฟังก์ชันหลัก แต่ยังไม่ต้องเขียนรายละเอียดของคำสั่งที่ต้องการให้ทำงาน เช่น
float comput_avg(float a , float b); มีการคืนค่าเป็นเลขทศนิยม
void display(); ไม่มีการคืนค่าจากฟังก์ชัน
2. ส่วนของตัวโปรแกรม (Body)
การทำงานของโปรแกรมภาษาซีจะเริ่มที่คำสั่งแรกในฟังก์ชัน main ไปเรื่อย ๆ จนจบโปรแกรม ฟังก์ชัน main เป็นฟังก์ชันหลักที่ทุกโปรแกรมจะต้องมี รูปแบบการเขียนคำสั่งของฟังก์ชัน main มีดังนี้
type main( )
{
statement1;
statement2;
:
}
โดยที่ type คือชนิดของข้อมูลที่ต้องการส่งค่ากลับ ถ้าไม่มีการส่งค่ากลับ ให้เขียน void
main() เป็นคำสงวนที่ต้องมีเสมอ และห้ามตั้งซ้ำ
statement เป็นคำสั่งของภาษาซี โดยแต่ละคำสั่งจะต้องจบด้วยเครื่องหมาย “;” และสามารถเขียนคำสั่งมากกว่า 1 คำสั่งภายในบรรทัดเดียวกันได้
หมายเหตุ ด้านหน้าฟังก์ชัน main อาจจะมี หรือ ไม่มี การกำหนดชนิดข้อมูลที่จะมีการส่งค่ากลับ ขึ้นอยู่กับเครื่องมือที่ผู้เขียนโปรแกรมเลือกใช้ เช่น ถ้าผู้เขียนโปรแกรมใช้ Dev-C++ หน้าฟังก์ชัน main ไม่ต้องมีการประกาศชนิดข้อมูลที่ส่งค่ากลับ หรือ อาจระบุเป็น int main() ซึ่งหมายถึงมีการส่งค่ากลับเป็นตัวเลขชนิดจำนวนเต็ม แต่ถ้าผู้เขียนโปรแกรมเลือกใช้ Turbo C หรือ Borland C และต้องการให้ฟังก์ชัน main ไม่มีการส่งค่ากลับ ด้านหน้าฟังก์ชัน main จะต้องระบุเป็น void main()
การเขียนคำสั่งจะต้องอยู่ภายในเครื่องหมาย “{“ และ “}” นอกจากนี้ ในส่วนของฟังก์ชัน main สามารถประกาศตัวแปรท้องถิ่น (Local Variable) ซึ่งเป็นตัวแปรที่จะใช้ได้เฉพาะภายในฟังก์ชันที่ทำการประกาศไว้เท่านั้น เช่น การประกาศตัวแปรชื่อ data ให้เป็นชนิดจำนวนเต็มและกำหนดให้มีค่าเป็น 5
main( )
{ int data = 5;
printf(“\ndata = %d”,data);
}
3. ส่วนของฟังก์ชัน (Function)
ฟังก์ชัน คือ คำสั่งหลาย ๆ คำสั่งมาเขียนรวมกันไว้เป็นบล็อกคำสั่ง เพื่อทำงานอย่างใดอย่างหนึ่ง ซึ่งฟังก์ชันในภาษาซี สามารถแบ่งออกเป็น 2 ประเภท ได้แก่ ฟังก์ชันที่ผู้เขียนโปรแกรมสร้างขึ้นเอง และฟังก์ชันที่ภาษาซีสร้างขึ้นมาเพื่อใช้ในการทำงานทั่วไป
สำหรับส่วนของฟังก์ชัน เป็นส่วนของฟังก์ชันที่ผู้เขียนโปรแกรมสร้างขึ้นเอง เป็นส่วนรายละเอียดของแต่ละฟังก์ชันที่เคยประกาศไว้ในส่วนต้นแบบฟังก์ชัน โดยจะเขียนไว้ตอนท้ายของโปรแกรมถัดจากฟังก์ชัน main() เช่น
main()
{ float avg;
avg = compute_avg(5,8);
}
float compute_avg(float a , float b)
{ return (a+b)/2;
}
รูปแบบการเขียนคำสั่งภาษาซี
การเขียนคำสั่งในภาษาซี มีกฎเกณฑ์ในการเขียนคำสั่ง ดังนี้
1. ต้องเขียนคำสั่งด้วยตัวอักษรตัวพิมพ์เล็ก
2. คำสั่งแต่ละคำสั่งจะจบด้วยเครื่องหมาย “;” เช่น clrscr();
3. สามารถเขียนคำสั่งให้อยู่ในบรรทัดเดียวกันได้มากกว่า 1 คำสั่ง เช่น
int data = 5; float avg; clrscr(); printf(“NPRU”);
4. กรณีที่คำสั่งมีความยาวเกิน 1 บรรทัด ก็สามารถขึ้นบรรทัดใหม่ได้ทันที เช่น
printf(“\n Please select 1. Pizza 2. Steak 3.Sapaghetti”
“4. Salad : ”);
การเขียนหมายเหตุ (Comment)
การเขียนหมายเหตุเพื่ออธิบายการทำงานในส่วนต่าง ๆ ของโปรแกรม จะช่วยให้ผู้อ่านโปรแกรมสามารถเข้าใจได้ง่ายขึ้น แต่จะไม่มีผลกับการทำงานของโปรแกรม สามารถเขียนได้ 2 วิธี คือ
1. ใช้สัญลักษณ์ // นำหน้าข้อความที่ต้องการ จะเป็นการกำหนดให้ข้อความที่อยู่ถัดจากสัญลักษณ์ // ไปจนถึงท้ายบรรทัดเป็นข้อความหมายเหตุ เช่น
Max = 5; // upper bound
// this program written by manutnit
2. เขียนข้อความหมายเหตุอยู่ภายในเครื่องหมาย /* */ เช่น
Max = 5; /* upper bound */
ในกรณีที่ต้องการเขียนหมายเหตุหลายบรรทัด จะทำได้ดังนี้
/* this program written by manutnit
on 22/may/2015 */