กำเนิดภาษา C
ด้วยศักยภาพและเทคโนโลยีของคอมพิวเตอร์ที่แพรหลาย จึงทำให้มีผู้คิดค้นพัฒนาโปรแกรมคอมพิวเตอร์ภาษาซีขึ้น
คือ นายเดนนิส ริทชี่ (Dennis Ritchie) ที่ศูนย์วิจัยเบล (Bell Laboratories) ประเทศสหรัฐอเมริกาเมื่อปี ค.ศ.1972
และเป็นภาษาคอมพิวเตอร์ที่ใช้เขียนระบบปฏิบัติการยูนิกส์ ซึ่งใช้กันแพร่หลายในระบบเครือข่ายคอมพิวเตอร์ในปัจจุบัน
ภาษาซีเป็นภาษาที่มีความใกล้เคียงกับภาษาระดับต่ำ (Low-Level Language) จึงทำให้นักพัฒนาโปรแกรมสามารถ
ที่จะกำหนดรายละเอียดของโปรแกรมให้เข้าถึงการทำงานในส่วนต่าง ๆ ของคอมพิวเตอร์ให้มากที่สุดเพื่อให้เกิดความเร็ว
ในการทำงานสูงสุด และในขณะเดียวกันภาษาซีก็ยังมีความเป็นภาษาระดับสูง (High-Level Language) ทำให้ผู้พัฒนา
สามารถที่จะพัฒนาโปรแกรมได้ โดยเน้นไปที่การแก้ปัญหาที่ต้องการได้อย่างอิสระโดยไม่ต้องคำนึงถึงฮาร์ดแวร์ใด ๆ
ภาษาซีเป็นภาษาโปรแกรมคอมพิวเตอร์ที่ได้รับความนิยมและมีการพัฒนาอย่างต่อเนื่อง นาย Bjarne Stroustrup
นักวิจัยและพัฒนาของศูนย์วิจัยเบล (Bell Laboratiories) ได้พัฒนาภาษา C++ (ซีพลัสพลัส) ขึ้นมา โดยที่ภาษา C++
มีความสามารถในการทำงานได้ทุกอย่างเหมือนกับภาษาซี ซึ่งมีรูปแบบและโครงสร้างของภาษาใกล้เคียงกัน แต่ภาษา
C++ ใช้หลักการออกแบบโปแกรมเชิงวัตถุ (Object Oriented Design) ในขณะที่ภาษาซีใช้หลักการออกแบบโปรแกรม
แบบโมดูลาร์ (Modular Design)
โครงสร้างภาษา C
โปรแกรมภาษาซีมีองค์ประกอบที่สำคัญ 2 ส่วนคือไฟล์ส่วนหัวโปรแกรม และไฟล์โปรแกรม ไฟล์ส่วนหัวโปรแกรมเป็นไฟล์ที่ใช้เก็บไลบราลีเพื่อใช้รวม (include) ในการคอมไพล์โปรแกรมซึ่งจะมีส่วนขยายเป็น *.h มีชื่อเรียกว่า Compiler Directive ไฟล์โปรแกรมจะเริ่มต้นด้วยฟังก์ชัน main() และตามด้วยเครื่องหมายปีกกาเปิด เพื่อเริ่มต้นเขียนโปรแกรม การเขียนโปรแกรมจะต้องเขียนด้วยอักษาภาษาอังกฤษตัวพิมพ์เล็กเสอม และเมื่อจบประโยคคำสั่ง จะใช้เครื่องหมายเซมิโคล่อน ( ; ) ในการคั่นแต่ละคำสั่ง ภายในโปรแกรมจะประกอบด้วยฟังก์ขันและส่วนของคำอธิบาย เมื่อเขียนคำสั่งเสร็จจะปิดท้ายโปรแกรมด้วยเครื่องหมายปีกกาปิดเสมอ
แสดงโครงสร้างของโปรแกรมภาษาซี
#include<library> | /* ไฟล์ส่วนหัวโปรแกรม*/ | |
void main(void) | /*ฟังก์ชันหลักของโปรแกรม*/ | |
{ | /*เริ่มต้นการเขียนโปรแกรมด้วยเครื่องหมายปีกกาเปิด*/ | |
variable declaration; | /*การประกาศค่าตัวแปรที่ใช้ในโปรแกรม*/ | |
program statement; | /*ประโยคคำสั่งในโปรแกรม*/ | |
} | /*จบการเขียนโปรแกรมด้วยเครื่องหมายปีกกาปิด*/ |
#include<library> | เป็นส่วนหัวหัว โปรแกรมที่จะต้องเขียนไว้เพื่อให้ใช้งานฟังก์ชันต่างๆ ในกรณีที่ต้องการทราบว่าฟังก์ชันใดถูกนิยามไว้ที่ใดให้ทำแถบสีที่ฟังก์ชัน ดังกล่าวและกดปุ่ม Ctrl+f1 |
main | เป็นฟังก์ชันหลักของโปรแกรม |
( ) | ภายในวงเล็บเป็นค่าพารามิเตอร์ที่จะส่งผ่านไปทำงานยังฟังก์ชันอื่นๆ ถ้าไม่มีการ ใส่ค่าแสดงว่าไม่ต้องการมีค่าพารามิเตอร์ |
{ | ปีกกาเปิดแสดงการเริ่มต้นการเขียนโปรแกรม |
variable declarations | ประกาศตัวแปร |
program statement | การเขียนประโยคคำสั่ง |
} | ปีกกาปิดแสดงการจบการเขียนโปรแกรม |
/*ข้อความ*/ | คำอธิบายโปรแกรม ใช้ในการอธิบายความหมายของคำสั่งหรือสิ่งที่ต้องการเขียน ไว้กันลืมจะไม่มีผลใดๆกับโปรแกรม แต่การเขียนจะต้องเริ่มต้นด้วยเครื่องหมาย /* |
ตัวแปร (variable) คือชื่อที่ผู้เขียนโปรแกรมตั้งขึ้น เพื่อใช้เก็บค่าที่ต้องการนำมาใช้งานในการเขียนโปรแกรม เพื่อทำการประมวลผลข้อมูล โดยมีกฏในการตั้งชื่อตัวแปรดังนี้
1. | ต้องขึ้นต้นด้วยตัวอักษร ตัวต่อไปอาจจะเป็นตัวอักษรหรือตัวเลขก็ได้ |
2. | ห้ามใช้สัญลักษณ์อื่นใด ยกเว้นเครื่องหมายสตริงก์ ($) และขีดล่าง (Underscore) |
3. | ตัวแปรอักษรภาษาอังกฤษตัวพิมพ์เล็กและตัวพิมพ์ใหญ่มีความหมายแตกต่างกัน |
4. | ห้ามเว้นวรรคระหว่างตัวแปร |
5. | ห้ามตั้งชื่อซ้ำกับคำสงวนในภาษาซ |
ก่อนที่จะนำตัวแปรไปใช้งาน ในภาษาซีจะต้องมีการประกาศค่าตัวแปรให้สอดคล้องกับข้อมูลที่จะนำไปใช้โดยมีรูปแบบดังนี้
รูปแบบ | Type varible name |
type | ชนิดของตัวแปร ซึ่งอาจจะป็น char, int, float, double หรือตัวแปรชนิดอื่นๆ เป็นต้น |
variable name | ชื่อของตัวแปร ถ้ามีมากกว่า 1 ตัวให้ใช้เครื่องหมายคอมม่าคั่น |
ตัวอย่างการประกาศตัวแปร
char n; | ประกาศค่าตัวแปรชื่อ n เป็นข้อมูลชนิด character |
float a,b,c; | ประกาศค่าตัวแปรชื่อ a,b,c เป็นข้อมูลชนิด float |
int number=1; | ประกาศค่าตัวแปรชื่อ number เป็นข้อมูลชนิด integer และกำหนดให้ตัวแปร count มีค่าเท่ากับ 1 |
char name[15]; | ประกาศตัวแปรชื่อ name เป็นลักษณะตัวแปรชุดเก็บชื่อยาวไม่เกิน 15 ตัวอักษร |
คำสงวนในภาษา C
คำสงวนคือคำที่กำหนดขึ้นในภาษาซีเพื่อให้มีความหมายอย่างใด อย่างหนึ่ง และนำไปใช้งานแตกต่างกัน การประกาศค่าตัวแปรจะต้องไม่ให้ซ้ำกับคำสงวน
Auto | Break | Case | Char | Const |
Default | Do | Double | Else | Enum |
Short | Signed | Sizeof | Extern | Float |
For | Goto | If | Int | Long |
Return | Register | Continue | While | Static |
Struct | Switch | Typedef | Unon | Unsigned |
Void | volatile |
ฟังก์ชั่น (Function)
ฟังก์ชัน clrscr(); เป็นฟังก์ชันที่ใช้ในการลบจอภาพ |
ฟังก์ชัน printf(); เป็นฟังก์ชันที่ใช้ในการแสดงผลข้อมูลที่อยู่ในตัวแปร ค่าคงที่ และนิพจน์ออกจอภาพ | |
ตัวอย่างที่ 1 | printf(“Lampang”); ความหมาย แสดงข้อความ Lampang ออกทางจอภาพ |
ตัวอย่างที่ 2 | printf(“%d”,num); ความหมาย แสดงค่าตัวแปร num ในรูปเลขจำนวนเต็ม |
ตัวอย่างที่ 3 | printf(“5.2f”,area); ความหมาย แสดงค่าที่เก็บอยู่ในตัวแปร area โดยจองพื้นที่ไว้ 5 ช่อง ทศนิยม 2 ตำแหน่ง |
ฟังก์ชัน scanf(); เป็นฟังก์ชันที่ใช้ในการรับข้อมูลจากแป้นพิมพ์เข้ามาเก็บไว้ในตัวแปร | |
ตัวอย่าง | scanf(“%d”,&num); ความหมาย รับค่าตัวเลขจำนวนเต็มแล้วนำมาเก็บไว้ในตัวแปร num |
ฟังก์ชัน getch(); เป็นฟังก์ชันที่ใช้ในการรอรับการกดแป้นพิมพ์หนึ่งครั้ง โดยไม่ต้องกดปุ่ม Enter และตัวอักษรที่ป้อนเข้ามาจะไม่ปรากฏบนจอภาพ |
ฟังก์ชัน getchar(); เป็นฟังก์ชันที่ใช้ในการรับข้อมูลเข้ามาทางแป้นพิมพ์ทีละ 1 ตัวอักษร แล้วกด Enter 1 ครั้ง ข้อมูลที่ป้อนจะแสดงบนจอภาพ |
ฟังก์ชัน gets(); เป็นฟังก์ชันที่ใช้ในการรับข้อมูลที่เป็นข้อความจากแป้นพิมพ์เข้ามาเก็บไว้ในตัวแปรแบบอาเรย์ การใช้ฟังก์ชัน gets(); จะต้องมีการประกาศตัวแปรแบบอาเรย์ และกำหนดจำนวนตัวอักษรที่ต้องการป้อน โดยคอมพิวเตอร์จะจองพื้นที่ไว้ตามจำนวนตัวอักษร แต่จะป้อนได้น้อยกว่าที่จองไว้ 1 ตัว เพื่อให้ตัวแปรเก็บ 0 อีก 1 ตัว |
ฟังก์ชัน textcolor(); เป็นฟังก์ชันที่ใช้ในการกำหนดสีตัวอักษร โดยจะต้องใช้ร่วมกับฟังก์ชัน cprintf ซึ่งมีสีต่างๆ ให้เลือก ตัวเลขค่าสีอาจจะพิมพ์เป็นตัวเลขหรือชื่อสีเป็นภาษาอังกฤษตัวพิมพ์ใหญ่ก็ได้ |
||
ตัวอย่างที่ 1 | textcolor(4); cprintf(“Lampang”); |
ความหมาย แสดงข้อความ Lampang เป็นสีแดง |
ตัวอย่างที่ 2 | textcolor(MAGENTA); cprintf(“BANGKOK”); |
ความหมาย แสดงข้อความ BANGKOK เป็นสีม่วง |
ตัวเลขค่าสี | สีที่ปรากฏ |
0 | (BLACK) ดำ |
1 | (BLUE) น้ำเงิน |
2 | (GREEN) เขียว |
3 | (CYAN) ฟ้า |
4 | (RED) แดง |
5 | (MAGENTA) ม่วง |
6 | (BROWN) น้ำตาล |
7 | (LIGHTGRAY) เทาสว่าง |
8 | (DARKGRAY) เทาดำ |
9 | (LIGHTBLUE) น้ำเงินสว่าง |
10 | (LIGHTGREEN) เขียวสว่าง |
11 | (LIGHTCYAN) ฟ้าสว่าง |
12 | (LIGHTRED) แดงสว่าง |
13 | (LIGHTMAGENTA) ม่วงสว่าง |
14 | (YELLOW) เหลือง |
15 | (WHITE) ขาว |
ฟังก์ชัน cprintf(); เป็นฟังก์ชันที่ใช้ในการพิมพ์ข้อความเหมือนฟังก์ชัน printf แต่จะแสดงเป็นสีต่างๆ ตามที่กำหนดไว้ในฟังก์ชัน textcolor การใช้ฟังก์ชัน cprintf ต้องกำหนดสีของตัวอักษรใน ฟังก์ชัน textcolor ก่อน | |
ตัวอย่างที่ 1 | textcolor(5); printf(“Lampang”); ความหมาย แสดงข้อความ Lampang ออกทางจอภาพ |
ตัวอย่างที่ 2 | textcolor(15); printf(“%d”,num); ความหมาย แสดงค่าตัวแปร num ในรูปเลขจำนวนเต็ม |
ตัวอย่างที่ 3 | textcolor(7); printf(“5.2f”,area); ความหมาย แสดงค่าที่เก็บอยู่ในตัวแปร area โดยจองพื้นที่ไว้ 5 ช่อง ทศนิยม 2 ตำแหน่ง |
้ฟังก์ชัน textbackground(); เป็นฟังก์ชันที่ใช้ในการกำหนดสีพื้นให้กับตัวอักษร | ||
ตัวอย่าง | textbackground(14) | ความหมาย กำหนดสีพื้นเป็นสีเหลือง |
ชนิดข้อมูล (Data type)
ภาษาซีเป็นอีกภาษาหนึ่งที่มีชนิดของข้อมูลให้ใช้งานหลายอย่างด้วยกัน ซึ่งชนิดของข้อมูลแต่ละอย่างมีขนาด
เนื้อที่ที่ใช้ในหน่วยความจำที่แตกต่างกัน และเนื่องจากการที่มีขนาดที่แตกต่างกันนั้นเอง ทำให้มีความสามารถใน
การจัดเก็บข้อมูลแต่ละประเภทแตกต่างกันไป ดังนั้นในการเลือกงานประเภทข้อมูลก็ควรจะคำนึงถึงความจำเป็นใน
การใช้งานด้วย สำหรับประเภทของข้อมูลมีดังนี้คือ
1 | ข้อมูลชนิดตัวอักษร (Character) | คือข้อมูลที่เป็นรหัสแทนตัวอักษรหรือค่าจำนวนเต็ม ได้แก่ ตัวอักษร ตัวเลขและกลุ่มตัวอักขระพิเศษใช้พื้นที่ในการเก็บข้อมูล 1 ไบต ์ |
2 | ข้อมูลชนิดจำนวนเต็ม (Integer) | คือข้อมูลที่เป็นเลขจำนวนเต็ม ได้แก่ จำนวนเต็มบวก จำนวนเต็มลบ และศูนย์ ข้อมูลชนิดจำนวนเต็มใช้พื้นที่ในการเก็บข้อมูล ขนาด 2 ไบต์ |
3 | ข้อมูลชนิดจำนวนเต็มที่มีขนาด 2 เท่า (Long Integer) | คือข้อมูลที่เป็นเลขจำนวนเต็ม ใช้พื้นที่ในการเก็บเป็น 2 เท่าของ Integer คือมีขนาด 4 ไบต ์ |
4 | ข้อมูลชนิดเลขทศนิยม (Float) | คือข้อมูลที่เป็นเลขทศนิยม ขนาด 4 ไบต์ |
5 | ข้อมูลชนิดเลขทศนิยมอย่างละเอียด (Double) | คือข้อมูลที่เป็นเลขทศนิยม ใช้พื้นที่ในการเก็บข้อมูลเป็น 2 เท่าของ float คือมีขนาด 8 ไบต์ |
ตัวดำเนินการทางคณิตศาสตร์
ในโปรแกรมภาษาซีจะใช้ตัวดำเนินการทางคณิตศาสตร์เป็นตัวเชื่อมในการเขียนโปรแกรม เพื่อหาผลลัพธ์จากการคำนวณ
ซึ่งสามารถกระทำกับข้อมูลได้หลายรูปแบบ เช่น บวก ลบ คูณ หาร เปอร์เซ็นต์ ดังตัวอย่างในตารางข้างล่างนี้
ตัวดำเนินการ | ความหมาย | ตัวอย่าง |
+ | บวก (Addition) | X + y |
– | ลบ (Subtraction) | X – y |
* | คูณ (Multiplication) | X * y |
/ | หาร (Division) | X / y |
++ | เพิ่มค่าครั้งละ 1(Increment) | X++ |
– | ลดค่าครั้งละ 1(Decrement) | X– |
% | หารเอาผลลัพธ์เฉพาะเศษ (Modulus) | X % y |
ตัวดำเนินการเปรียบเทียบ
ตัวดำเนินการเปรียบเทียบในโปรแกรมภาษาซีคือเครื่องหมายที่ใช้ในการเปรียบเทียบในทางคณิตศาสตร์
ผลลัพธ์จะมี 2 กรณีคือ ถ้าผลลัพธ์ถูกต้องหรือเป็นจริงจะมีค่าเป็น 1 ถ้าผลลัพธ์ผิดหรือเป็นเท็จจะมีค่าเป็น 0 ผลลัพธ์ของการเปรียบเทียบมีชื่อเรียกอีกอย่างหนึ่งว่าค่าคงที่บูลีน (Boolean Constant) ดังนี้
8 > 5 | ผลลัพธ์เป็นจริง | ค่าคงที่บูลีนเป็น 1 |
0 = 10 | ผลลัพธ์เป็นเท็จ | ค่าคงที่บูลีนเป็น 0 |
X > x | ผลลัพธ์เป็นจริง | ค่าคงที่บูลีนเป็น 1(เปรียบเทียบค่าตามรหัสแอสกี) |
A > B | ผลลัพธ์เป็นจริง | ค่าคงที่บูลีนเป็น 1(เปรียบเทียบค่าตามรหัสแอสกี) |
ตัวดำเนินการ | ความหมาย | ตัวอย่าง |
> | มากกว่า (Greather Than) | X > y |
< | น้อยกว่า (Less Than) | X < y |
>= | มากกว่าหรือเท่ากับ (Greather Than or Equal) | X >= y |
<= | น้อยกว่าหรือเท่ากับ (Less Than or Equal) | X <= y |
== | เท่ากับ (Equal) | X == y |
!= | ไม่เท่ากับ (Not Equal) | X != y |
ตัวดำเนินการทางตรรกะ
ตัวดำเนินการทางตรรกะในโปรแกรมภาษาซี คือเครื่องหมายที่ใช้เชื่อมเงื่อนไข 2 เงื่อนไข หรือมากกว่า 2 เงื่อนไข
เพื่อให้การเปรียบเทียบมีความละเอียดมากขึ้น ใช้สัญลักษณ์แทนในแต่ละเครื่องหมาย ดังตารางข้างล่างนี้
&& | จะให้ผลลัพธ์เป็นจริงเมื่อเงื่อนไขทั้งสองเป็นจริง แต่ถ้าเงื่อนไขใดเป็นเท็จ หรือทั้งสองเงื่อนไขเป็นเท็จจะทำให้ผลลัพธ์เป็นเท็จ |
|| | จะให้ผลลัพธ์เป็นจริง เมื่อเงื่อนไขใดเงื่อนไขหนึ่งเป็นจริง หรือเป็นจริงทั้งสองเงื่อนไข แต่ถ้าเป็นเท็จทั้งสองเงื่อนไขจะทำให้ผลลัพธ์เป็นเท็จ |
! | จะให้ผลลัพธ์เป็นจริง เมื่อเงื่อนไขหลัง not เป็นเท็จ แต่ถ้าเงื่อนไขหลัง not เป็นจริงจะทำให้ผลลัพธ์เป็นเท็จ ตัวดำเนินการ ความหมาย ตัวอย่าง && และ (and) Mark>=80&&mark<=100 |
|| หรือ (or) | Score<0||score>100 |
! | ไม่ (not) !x&&!y |
นิพจน์คณิตศาสตร์
นิพจน์คณิตศาสตร์ในโปรแกรมภาษาซี คือการนำค่าคงที่หรือตัวแปรมาเชื่อมต่อกัน ด้วยเครื่องหมายทางคณิตศาสตร์ นิพจน์คณิตศาสตร์จะมีลักษณะคล้ายกับสมการทางคณิตศาสตร์ ดังนี้
c = a * b | (10 + 5 ) * 10 % 9 = 15 |
(8 * a + 2 * b)/c | 5 + (5 – 1 ) * 4 = 21 |
ลำดับการประมวลผลของนิพจน์
ลำดับการประมวลผลของนิพจน์คณิตศาสตร์จะทำการประมวลผลในส่วนของวงเล็บก่อนใน กรณีที่มีวงเล็บ จากนั้นจะคำนวณไปตามลำดับของการประมวลดังตารางข้างล่างนี้ และหากมีเครื่องหมายที่อยู่ในลำดับการประมวลผล
เดียวกันจะทำการคำนวณจากด้านซ้ายไปด้านขวา
เครื่องหมาย | ลำดับการประมวลผล |
( ) | 1 |
++,– | 2 |
* / % | 3 |
+ – | 4 |
ตัวอย่าง 1 (10 -34) * 5 = 35 | ลำดับการประมวลผล 10 – 3 = 7 แล้วคูณกับ 5 ได้ผลลัพธ์ 35 |
ตัวอย่าง 2 5 + 10 *2 = 25 | ลำดับการประมวลผล 10 * 2 = 20 แล้วบวกดับ 5 ได้ผลลัพธ์ 25 |
ตัวอย่าง 3 (2 + 7) * 4 % 10 = 6 | ลำดับการประมวลผล 2 + 7 = 9 แล้วคูณกับ 4 ได้ 36 หารแบบเอาเศษด้วย 10 ได้ 6 |
ตัวอย่าง 4 2 + 7 * 4 % 10 = 10 | ลำดับการประมวลผล 7 * 4 = 28 แล้วหารแบบเอาเศษด้วย 10 ได้ 8 บวกกับ 2 เป็น 10 |
ตัวอย่าง 5 10 + 2 * 8 / 4 * 3 – 5 = 17 | ลำดับการประมวลผล 1. 2 * 8 = 16 2. 16 / 4 = 4 3. 4 * 3 = 12 4. 12 + 10 = 22 5. 22 – 5 = 17 |
ตัวอย่างการเขียนโปรแกรมด้วยภาษา C
::ภาษาC::…++โปรแกรมคิดเกรด++…
#include <conio.h>
#include <stdio.h>
void main()
{
int score;
char grade;
printf(“Enter score : “);
scanf(“%d”,&score);
clrscr();
if (score > 100)
grade = ‘E’;
else if (score >= 80)
grade = ‘A’;
else if ((score >= 70) && (score < 80))
grade = ‘B’;
else if ((score >= 50) && (score < 70))
grade = ‘C’;
else if ((score >= 40) && (score < 50))
grade = ‘D’;
else grade = ‘E’;
printf(“You got %cn”,grade);
getch();
}
ขอขอบคุณข้อมูลจาก
1. http://www.lks.ac.th/anchalee/cindex-n.htm
2. https://sites.google.com/site/spt532/test