วันเสาร์ที่ 27 ธันวาคม พ.ศ. 2557

ภาษาซี

ภาษาซี




ภาษาซี (C)  
เป็นภาษาโปรแกรมสำหรับวัตถุประสงค์ทั่วไป เริ่มพัฒนาขึ้นระหว่าง พ.ศ. 2512-2516 (ค.ศ. 1969-1973) โดยเดนนิส ริชชี่ (Denis Retchie) ที่เอทีแอนด์ทีเบลล์แล็บส์ (AT&T Bell Labs) [4][5] ภาษาซีมีเครื่องมืออำนวยความสะดวกสำหรับการเขียนโปรแกรมเชิงโครงสร้างและอนุญาตให้มีขอบข่ายตัวแปร (scope) และการเรียกซ้ำ (recursion) ในขณะที่ระบบชนิดตัวแปรอพลวัตก็ช่วยป้องกันการดำเนินการที่ไม่ตั้งใจหลายอย่าง เหมือนกับภาษาโปรแกรมเชิงคำสั่งส่วนใหญ่ในแบบแผนของภาษาอัลกอล การออกแบบของภาษาซีมีคอนสตรักต์ (construct) ที่โยงกับชุดคำสั่งเครื่องทั่วไปได้อย่างพอเพียง จึงทำให้ยังมีการใช้ในโปรแกรมประยุกต์ซึ่งแต่ก่อนลงรหัสเป็นภาษาแอสเซมบลี คือซอฟต์แวร์ระบบอันโดดเด่นอย่างระบบปฏิบัติการคอมพิวเตอร์ ยูนิกซ์

ภาษาซีเป็นภาษาโปรแกรมหนึ่งที่ใช้กันอย่างแพร่หลายมากที่สุดตลอดกาล  และตัวแปลโปรแกรมของภาษาซีมีให้ใช้งานได้สำหรับสถาปัตยกรรมคอมพิวเตอร์และระบบปฏิบัติการต่าง ๆ เป็นส่วนมาก

ภาษาหลายภาษาในยุคหลังได้หยิบยืมภาษาซีไปใช้ทั้งทางตรงและทางอ้อม ตัวอย่างเช่น ภาษาดี ภาษาโก ภาษารัสต์ ภาษาจาวา จาวาสคริปต์ ภาษาลิมโบ ภาษาแอลพีซี ภาษาซีชาร์ป ภาษาอ็อบเจกทีฟ-ซี ภาษาเพิร์ล ภาษาพีเอชพี ภาษาไพทอน ภาษาเวอริล็อก (ภาษาพรรณนาฮาร์ดแวร์)  และซีเชลล์ของยูนิกซ์ ภาษาเหล่านี้ได้ดึงโครงสร้างการควบคุมและคุณลักษณะพื้นฐานอื่น ๆ มาจากภาษาซี ส่วนใหญ่มีวากยสัมพันธ์คล้ายคลึงกับภาษาซีเป็นอย่างมากโดยรวม (ยกเว้นภาษาไพทอนที่ต่างออกไปอย่างสิ้นเชิง) และตั้งใจที่จะผสานนิพจน์และข้อความสั่งที่จำแนกได้ของวากยสัมพันธ์ของภาษาซี ด้วยระบบชนิดตัวแปร ตัวแบบข้อมูล และอรรถศาสตร์ที่อาจแตกต่างกันโดยมูลฐาน ภาษาซีพลัสพลัสและภาษาอ็อบเจกทีฟ-ซีเดิมเกิดขึ้นในฐานะตัวแปลโปรแกรมที่สร้างรหัสภาษาซี ปัจจุบันภาษาซีพลัสพลัสแทบจะเป็นเซตใหญ่ของภาษาซี  ในขณะที่ภาษาอ็อบเจกทีฟ-ซีก็เป็นเซตใหญ่อันเคร่งครัดของภาษาซี

ก่อนที่จะมีมาตรฐานภาษาซีอย่างเป็นทางการ ผู้ใช้และผู้พัฒนาต่างก็เชื่อถือในข้อกำหนดอย่างไม่เป็นทางการในหนังสือที่เขียนโดยเดนนิส ริตชี และไบรอัน เคอร์นิกัน (Brian Kernighan) ภาษาซีรุ่นนั้นจึงเรียกกันโดยทั่วไปว่า ภาษาเคแอนด์อาร์ซี (K&R C) ต่อมา พ.ศ. 2532 สถาบันมาตรฐานแห่งชาติของสหรัฐอเมริกา (ANSI) ได้ตีพิมพ์มาตรฐานสำหรับภาษาซีขึ้นมา เรียกกันว่า ภาษาแอนซีซี (ANSI C) หรือ ภาษาซี89 (C89) ในปีถัดมา องค์การระหว่างประเทศว่าด้วยการมาตรฐาน (ISO) ได้อนุมัติให้ข้อกำหนดเดียวกันนี้เป็นมาตรฐานสากล เรียกกันว่า ภาษาซี90 (C90) ในเวลาต่อมาอีก องค์การฯ ก็ได้เผยแพร่ส่วนขยายมาตรฐานเพื่อรองรับสากลวิวัตน์ (internationalization) เมื่อ พ.ศ. 2538 และมาตรฐานที่ตรวจชำระใหม่เมื่อ พ.ศ. 2542 เรียกกันว่า ภาษาซี99 (C99) มาตรฐานรุ่นปัจจุบันก็ได้รับอนุมัติเมื่อเดือนธันวาคม พ.ศ. 2554 เรียกกันว่า ภาษาซี11 (C11) 


ภาษาคอมพิวเตอร์

ภาษาคอมพิวเตอร์ หมายถึง ภาษาใดๆ ที่ผู้ใช้งานใช้สื่อสารกับคอมพิวเตอร์ หรือคอมพิวเตอร์ด้วยกัน แล้วคอมพิวเตอร์สามารถทำงานตามคำสั่งนั้นได้ คำนี้มักใช้เรียกแทนภาษาโปรแกรม แต่ความเป็นจริงภาษาโปรแกรมคือส่วนหนึ่งของภาษาคอมพิวเตอร์เท่านั้น และมีภาษาอื่นๆ ที่เป็นภาษาคอมพิวเตอร์เช่นกัน ยกตัวอย่างเช่น HTML เป็นทั้งภาษามาร์กอัปและภาษาคอมพิวเตอร์ด้วย แม้ว่ามันจะไม่ใช่ภาษาโปรแกรม หรือภาษาเครื่องนั้นก็นับเป็นภาษาคอมพิวเตอร์ ซึ่งโดยทางเทคนิคสามารถใช้ในการเขียนโปรแกรมได้ แต่ก็ไม่จัดว่าเป็นภาษาโปรแกรม
ภาษาคอมพิวเตอร์สามารถแบ่งออกเป็นสองกลุ่มคือ ภาษาระดับสูง (high level) และภาษาระดับต่ำ (low level) ภาษาระดับสูงถูกออกแบบมาเพื่อให้ใช้งานง่ายและสะดวกสบายมากกว่าภาษาระดับต่ำ โปรแกรมที่เขียนถูกต้องตามกฎเกณฑ์และไวยากรณ์ของภาษาจะถูกแปล (compile) ไปเป็นภาษาระดับต่ำเพื่อให้คอมพิวเตอร์สามารถนำไปใช้งานหรือปฏิบัติตามคำสั่งได้ต่อไป ซอฟต์แวร์สมัยใหม่ส่วนมากเขียนด้วยภาษาระดับสูง แปลไปเป็นออบเจกต์โค้ด (object code) แล้วเปลี่ยนให้เป็นชุดคำสั่งในภาษาเครื่อง

โปรแกรมภาษาระดับสูง High Level Languages

หน่วยสำคัญที่สุดของคอมพิวเตอร์ก็คือ หน่วยประมวลผลหรือที่เรียกกันว่า CPU โดยปกติ CPU จะมีภาษาของตัวเองที่เรียกว่า ภาษาเครื่อง (Machine Language) ซึ่งจะเป็นภาษาที่ประกอบไปด้วยเลขฐานสองมากมาย ดังนั้นการที่จะเขียนโปรแกรมควบคุมการทำงานของคอมพิวเตอร์ โดยใช้ภาษาเครื่องโดยตรงนั้นจึงทำได้ยาก จึงได้มีการพัฒนาตัวแปรภาษาเครื่องที่เรียกว่า โปรแกรมภาษาระดับสูงขึ้นมา หรือที่เรียกว่า High Level Languages โดยภาษาในระดับสูงเหล่านี้ จะมีลักษณะรูปแบบการเขียน (Syntax) ที่ทำให้เข้าใจได้ง่ายต่อการสื่อสารกับผู้พัฒนา และถูกออกแบบมาให้ง่ายต่อการใช้งาน และจะเปลี่ยนคำสั่งจากผู้ใช้งาน ไปเป็นเป็นภาษาเครื่อง เพื่อที่จะควบคุมการทำงานของคอมพิวเตอร์ต่อไป
  




ความแตกต่างระหว่าง Compiler และ Interpreter

Compiler
จะทำการแปลง Source Codes ไปเป็น Machine Codes ครั้งเดียว แล้วค่อย Execute คำสั่ง
ถ้าหากมีการแก้ไข Source Codes จะต้องมีการ Compile Source ใหม่อีกครั้ง
Intepreter
จะทำการแปลง Source Codes ทีละบรรทัด และก็ทำการ Execute ทีละบรรทัด


พื้นฐานความรู้ภาษาซี

โครงสร้างของโปรมแกรมภาซี
ข้อความสั่งตัวประมวลผลก่อน (Preprocessor statements)
ข้อความสั่งตัวประมวลผลก่อนขึ้นต้นด้วยเครื่องหมาย # เช่น
#include
หมายความว่า ให้ตัวประมวลผลก่อนไปอ่านข้อมูลจากแฟ้ม stdio.h ซึ่งเป็นแฟ้มที่มีอยู่ในคลัง เมื่อโปรแกรมมีการใช้ข้อความสั่งอ่านและบันทึก จะต้องใช้ข้อมูลจากแฟ้ม stdio.h  ข้อความสั่งตัวประมวลผลก่อนจะต้องเขียนไว้ตอนต้นของโปรแกรม

โครงสร้างพื้นฐานของโปรแกรมภาษาซีจะต้องประกอบด้วยโปรแกรมย่อย หรือเรียกว่า
ฟังก์ชัน (function) อย่างน้อย 1 ฟังก์ชัน คือ main() ซึ่งมีรูปแบบดังนี้
ฟังก์ชัน main() ประกอบด้วย 3 ส่วนหลัก คือ
1.ส่วนหัวของฟังก์ชัน
2.ส่วนการประกาศตัวแปร
3.ส่วนคำสั่ง
ข้อความสั่งหมายเหตุ (Comment Statement)
ข้อความสั่งหมายเหตุ คือ ข้อความที่เขียนไว้ภายในโปรแกรม เพื่อใช้อธิบายโปรแกรม
โดยตัวแปลโปรแกรมจะไม่แปลข้อความสั่งหมายเหจุให้เป็นภาษาเครื่อง
การเขียนข้อความสั่งหมายเหตุในโปรแกรมทำได้ 2 แบบ ได้แก่
1.// หมายเหตุ  ใช้เครื่องหมาย // หน้าข้อความหมายเหตุ ใช้ได้กับหมายเหตุที่มีขนาดยาวไม่เกิน 1 บรรทัด
2./*หมายเหตุ*/ เขียนหมายเหตุไว้ระหว่าง /* และ */ ใช้ได้กับหมายเหตุที่มีขนาดความยาวตั้งแต่ 1 บรรทัดขึ้นไป
ตัวแปร
ตัวแปร (Variable) คือ การจองพื้นที่ในหน่วยความจำของคอมพิวเตอร์สำหรับเก็บข้อมูลที่ต้องใช้ในการทำงานของโปรแกรม  โดยมีการตั้งชื่อเรียกหน่วยความจำในตำแหน่งนั้นด้วย  เพื่อความสะดวกในการเรียกใช้ข้อมูล  ถ้าจะใช้ข้อมูลใดก็ให้เรียกผ่านชื่อของตัวแปรที่เก็บเอาไว้ สำหรับภาษา C ตามมาตรฐาน ASNI (American National Standards Institute) มีตัวแปรไว้ให้ใช้งานอยู่หลายชนิด แต่ละชนิดจะใช้สำหรับเก็บข้อมูลต่างประเภทกันไป









รูปแบบการประกาศตัวแปรในภาษา







หลักการตั้งชื่อตัวแปรในภาษา C
1. ต้องขึ้นต้นด้วยตัวอักษร A-Z หรือ a-z หรือเครื่องหมาย _(Underscore) เท่านั้น 
2. ภายในชื่อตัวแปรสามารถใช้ตัวอักษร A-Z หรือ a-z หรือตัวเลข0-9 หรือเครื่องหมาย _
3. ภายในชื่อห้ามเว้นช่องว่าง หรือใช้สัญลักษณ์นอกเหนือจากข้อ 2 
4. ตัวอักษรเลขหรือใหญ่มีความหมายแตกต่างกัน
5. ห้ามตั้งชื่อซ้ำกับคำสงวน (Reserved Word) ดังนี้





ตัวคงที่ (Constant)
ตัวคงที่มีลักษณะคล้ายตัวแปร แตกต่างจากตัวแปรตรงที่ ค่าที่เก็บในตัวคงที่จะคงเดิมไม่มีวันเปลี่ยนแปลงจนกระทั่งจบโปรแกรม แต่ค่าที่เก็บตัวแปรสามารถเปลี่ยนแปลงได้ตลอดเวลา
แสดงผลออกทางหน้าจอ
การทำงานพื้นฐานที่สุดหรือเรียกได้ว่าเป็นส่วนหนึ่งในการทำงานของทุกโปรแกรมก็คือการแสดงผลข้อมูลออกทางหน้าจอ โดยในภาษา C นั้น การแสดงผลข้อมูลออกทางหน้าจอสามารถทำได้ง่าย โดยเรียกใช้คำสั่งหรือฟังก์ชั่นมาตรฐานที่ภาษา C เตรียมไว้ซึ่งมีอยู่หลายคำสั่ง

เป็นฟังก์ชันจากคลัง ที่มาพร้อมกับตัวแปลภาษาซี ใช้สำหรับการแสดงผล มีรูปแบบ ดังนี้







การควบคุมขนาดพื้นที่แสดงผล
วิธีกำหนดขนาดพื้นที่การแสดงผล ให้ใส่ตัวเลขขนาดของพื้นที่ที่ต้องการไว้หลังเครื่องหมาย % ในรหัสควบคุมรูปแบบ  ตัวอย่างเช่น



การควบคุมขนาดพื้นที่แสดงผล


การแสดงผลตัวเลขทศนิยม ตามปกติถ้าไม่กำหนดค่าใดๆ เพิ่มเติม เมื่อใช้รหัสควบคุมรูปแบบ %f โปรแกรมจะแสดงตัวเลขทศนิยมทั้งหมด 6 ตำแหน่ง ตัวอย่างเช่น

ในกรณีที่เราต้องการตัดให้แสดงตัวเลขหลังจุดทศนิยมเท่าที่จำเป็น ก็สามารถกำหนดค่าเพิ่มไปกับรหัสควบคุมรูปแบบได้



รับข้อมูลจากคีย์บอร์ด
การทำงานของโปรแกรมส่วนใหญ่มักจะเป็นการเชื่อมโยงกับผู้ใช้แบบ 2 ทิศทาง คือ ทั้งภาคของการแสดงผลการทำงานออกทางหน้าจอ และภาคของการรับข้อมูลจากผู้ใช้เข้ามาทางคีย์บอร์ด เพื่อร่วมในการประมวลผลของโปรแกรม ซึ่งในภาคของการรับข้อมูลจากผู้ใช้ ภาษา C  กำหนดคำสั่งและฟังก์ชั่นมาตรฐานเอาไว้ให้เรียกใช้
ฟังก์ชัน scanf()
เป็นฟังก์ชันจากคลัง ใช้ในการรับข้อมูลจากแป้นพิมพ์ โดยจะบอกเลขที่อยู่ของตัวแปรในหน่วยความจำ แล้วจึงนำค่าที่รับมาไปเก็บไว้ตามที่อยู่นั้น มีรูปแบบ ดังนี้
นิพจน์ (Expressions)
ในภาษาซี นิพจน์หมายถึง สิ่งที่ประมวลผลแล้วสามารถให้เป็นค่าตัวเลขได้ ซึ่งแต่ละนิพจน์จะมีระดับความยากง่ายในการประมวลผลที่แตกต่างกัน 
นิพจน์ที่เป็นค่าคงที่ ที่เป็นสัญลักษณ์
#define VAT 7
#define PI 3.14159
const int a = 35;
const char ch = ‘m’;
นิพจน์ที่มีลักษณะเป็นตัวแปร
int count;
float amount;
char ch;
นิพจน์ หมายถึง จำนวนใดจำนวนหนึ่งต่อไปนี้






ข้อความสั่งกำหนดค่า (assignment statement)
ตัวแปร = นิพจน์
ข้อความสั่งกำหนดค่า คือข้อความสั่งที่ใช้สำหรับ สั่งให้นำผลลัพธ์ของนิพจน์ที่อยู่ด้านขวาของตัวดำเนินการเท่ากับ (=)  มาเก็บไว้ในตัวแปรที่อยู่ด้านซ้ายของตัวดำเนินการเท่ากับ (=) เช่น

การคำนวณทางคณิตศาสตร์
เครื่องหมายการดำเนินการทางคณิตศาสตร์






ลำดับความสำคัญของเครื่องหมาย






ไม่มีความคิดเห็น:

แสดงความคิดเห็น