อัลกอริทึม (Algorithm)
อัลกอริทึม (Algorithm) หมายถึง กระบวนการทำงานอย่างใดอย่างหนึ่ง ที่มีลำดับการทำงานเป็นขั้นเป็นตอนชัดเจน และปฏิบัติตามขั้นตอนแล้วได้ผลลัพธ์ที่ถูกต้องซึ่งในการเริ่มต้นในการเขียนโปรแกรมอัลกอริทึมมีความสำคัญเป็นอย่างมากเพราะ เป็นการจัดลำดับขั้นตอนวิธีการแก้ปัญหาหรือจัดการความคิดให้เป็นขั้นตอนต่าง ๆ เพื่อแก้ไขปัญหาในขั้นตอนการเขียนโปรแกรมที่สอดคล้องกรรมวิธีแก้ปัญหาที่กำหนดไว้ การเขียนอัลกอริทึมจึงเป็นการแสดงลำดับการทำงานตามคุณสมบัติด้านการประมวลผลของคอมพิวเตอร์ ที่พร้อมจะนำไปแปลงเป็นลำดับคำสั่งให้คอมพิวเตอร์ทำงาน การเขียนโปรแกรมคอมพิวเตอร์ด้วยภาษาที่เหมาะสม เพื่อสั่งให้คอมพิวเตอร์ทำงานตามอัลกอริทึมที่กำหนดไว้ และการเขียนอัลกอริทึมออกมาให้ตรวจสอบความถูกต้องได้ครบถ้วนขึ้น
หลักการเขียนอัลกอริทึม
1. กระบวนการสำคัญเริ่มต้นที่จุดจุดเดียวในการมีจุดเริ่มต้นหลายที่จะทำให้กระบวนการวิธีสับสน จนในที่สุดอาจทำให้ผลลัพธ์ที่ได้ไม่ตรงกับความต้องการ หรืออาจทำให้อัลกอริทึมนั้นไม่สามารถทำงานได้เลย
2. กำหนดการทำงานเป็นขั้นเป็นตอนอย่างชัดเจน การกำหนดอัลกอริทึมที่ดีควรมีขั้นตอนที่ชัดเจนไม่คลุมเครือ เสร็จจากขั้นตอนหนึ่ง ไปยังขั้นตอนที่สองมีเงื่อนไขการทำงานอย่างไร ควรกำหนดให้ชัดเจน
3. การทำงานแต่ละขั้นตอนควรสั้นกระชับ เพราะการกำหนดขั้นตอนการทำงานให้สั้นกระชับนอกจากจะทำให้โปรแกรมทำงานได้รวดเร็วแล้ว ยังเป็นประโยชน์ต่อผู้อื่นที่มาพัฒนาโปรแกรมต่อด้วยเพราะสามารถศึกษาอัลกอริทึมจากโปรแกรมที่เขียนไว้ได้ง่าย
4. ผลลัพธ์ในแต่ละขั้นตอนควรต่อเนื่องกัน การออกแบบขั้นตอนที่ดีนั้นผลลัพธ์จากขั้นตอนแรกควรเป็นข้อมูลสำหรับนำเข้า ให้กับข้อมูลในขั้นต่อไป ต่อเนื่องกันไปจนกระทั่งได้ผลลัพธ์ตามที่ต้องการ
5. การออกแบบอัลกอริทึมที่ดี ควรออกแบบให้ครอบคลุมการทำงานในหลายรูปแบบ เช่น การออกแบบโดยคิดไว้ล่วงหน้าว่าหากผู้ใช้โปรแกรมป้อนข้อมูลเข้าผิดประเภท โปรแกรมจะมีการเตือนว่าผู้ใช้งานมีการใส่ข้อมูลที่ผิดประเภทโดยโปรแกรมจะไม่รับข้อมูลนั้น เพื่อให้ใส่ข้อมูลใหม่อีกครั้ง เพื่อป้องกันการเกิดจุดบกพร่องของโปรแกรมได้
ประโยชน์ของอัลกอริทึม
ประโยชน์ของอัลกอริทึม (Algorithm) คือ ทำให้ไม่สับสนกับวิธีดำเนินงาน เพราะทุกอย่างจะถูกจัดเรียงเป็นขั้นตอนมีวิธีการและทางเลือกไว้ให้ เมื่อนำมาใช้จะทำให้การทำงานสำเร็จอย่างรวดเร็ว ทำให้ปัญหาลดลงหรือสามารถค้นหาต้นเหตุของปัญหาได้อย่างรวดเร็ว เนื่องจากกระบวนการถูกแยกแยะกิจกรรม ขั้นตอน และความสัมพันธ์ ออกมาให้เห็นอย่างชัดเจน
รูปแบบการเขียนอัลกอริทึม
การเขียนอัลกอริทึมมีหลายรูปแบบ โดยผู้เขียนสามารถใช้อัลกอริทึมหลายรูปแบบประกอบกันในการออกแบบอัลกอริทึมนั้นเพื่อใช้ในการแก้ปัญหาการเขียนโปรแกรมได้
1. แบบลำดับ (Sequential) มีลักษณะการทำงานจะเป็นไปตามขั้นตอน ก่อน-หลัง ต่อเนื่องกันไปเป็นลำดับ โดยการทำงานแต่ละขั้นตอนต้องทำให้เสร็จก่อน แล้วจึงไปทำขั้นตอนต่อไป
2. แบบทางเลือก (Decision) อัลกอริทึมรูปแบบนี้ มีเงื่อนไขเป็นตัวกำหนดเส้นทางการทำงานของกระบวนการแก้ปัญหา โดยตัวเลือกนั้นอาจจะมีตั้งแต่ 2 ตัวขึ้นไป เช่น สอบข้อเขียน คะแนนเต็ม 50 ได้คะแนน 30 สอบผ่าน ถ้าต่ำกว่า 30 สอบไม่ผ่าน
3. แบบทำซ้ำ (Repetition) อัลกอริทึมแบบนี้คล้ายกับแบบทางเลือก คือ มีการตรวจสอบเงื่อนไข แต่แตกต่างกันตรงที่เมื่อการทำงานตรงตามเงื่อนไขที่กำหนด โปรแกรมจะกลับไปทำงานอีกครั้งวนการทำงานแบบนี้เรื่อย ๆ จนกระทั่งไม่ตรงกับเงื่อนไขที่กำหนดไว้จึงหยุดการทำงานหรือทำงานในขั้นต่อไป
คุณลักษณะการเขียนอัลกอริทึม
ในการแก้ปัญหาแต่ละปัญหามหลายวิธี ดังนั้นการเขียนอัลกอริทึมเพื่อแก้ปัญหาแต่ละปัญหาก็มีหลายวิธีด้วย แต่ละวิธีมีทั้งข้อเด่นข้อด้อย ดังนั้นต้องเลือกให้เหมาะสมกับงานและสภาพแวดบ้อมในขณะนั้น โดยทั่วไปอัลกอริทึมที่ดี ต้องคุณลักษณะดังต่อไปนี้
1. มีความถูกต้อง ความถูกต้องเป็นคุณสมบัติข้อแรกที่จะต้องพิจารณา นั่นคือเมื่อทำงานตามอัลกอริทึม แล้วจะต้องได้ผลลัพธ์ที่ถูกต้อง ซึ่งถ้าผลลัพธ์ที่ได้จากอัลกอริทึมไม่ถูกต้อง จะถือว่าไม่ใช่อัลกอริทึมที่ดี โดยที่ไม่จำเป็นต้องพิจารณาคุณสมบัติข้ออื่น ๆ
2. ใช้เวลาในการปฏิบัติงานน้อยที่สุด
3. สั้น กระชับ มีเฉพาะขั้นตอนที่จำเป็นเท่านั้น
4. ใช้เนื้อที่ในหน่วยความจำน้อยที่สุด เนื้อที่ในหน่วยความจำจะถูกใช้สำหรับเก็บค่าของตัวแปร และเก็บคำสั่งที่ใช้ในการทำงาน ดังนั้น ถ้าอัลกอริทึมยาวเกินความจำเป็น จะทำให้ใช้เนื้อที่มาก และ ถ้ามีตัวแปรมากเกินความจำเป็น ก็จะทำให้เสียเนื้อที่ในหน่วยความจำไปด้วย
5. มีความยืดหยุ่นในการใช้งาน
6. ใช้เวลาในการพัฒนาน้อยที่สุด เมื่อนำอัลกอริทึมไปแปลงเป็นโปรแกรมภาษาคอมพิวเตอร์แล้วจะต้องใช้เวลาน้อยที่สุด
7. ง่ายต่อการทำความเข้าใจ
ผังงาน (Flowchart)
ผังงาน (Flowchart) คือ รูปภาพ (Image) หรือ สัญลักษณ์ (Symbol) ที่ใช้เขียนแทนขั้น ตอนคำอธิบายข้อความ หรือคำพูด ที่ใช้ในกิจกรรมปฏิบัติงาน เพราะการนำเสนอขั้นตอนของการปฏิบัติงานด้วยรูปภาพหรือสัญลักษณ์สามารถสื่อสารได้ง่ายกว่าคำพูดหรือข้อความ นอกจากนี้การเขียนผังงานสามารถออกแบบได้ง่าย ผู้อื่นสามารถเข้าใจผังงานได้ง่ายเพราะเป็นมาตรฐานสากล และเมื่อนำผังงานไปเขียนโปรแกรมก็จะทำได้สะดวกรวดเร็ว
ประโยชน์ของการเขียนผังงาน (flowchart)
1. สะดวกต่อการพิจารณาถึงลำดับขั้นตอนในการทำงาน
2. ตรวจสอบความถูกต้องของลำดับขั้นตอนได้ง่าย
3. ทำให้มองเห็นรูปแบบของงานได้ทั้งหมด โดยใช้เวลาไม่มาก
4. การเขียนผังงานเป็นสากลสามารถนำไปเขียนโปรแกรมได้ทุกภาษา
5. หากมีการพัฒนาระบบงานในลำดับต่อไป สามารถทำได้อย่างรวดเร็ว โดยศึกษาจากผังงาน จะสามารถศึกษาได้อย่างรวดเร็ว และเข้าใจง่ายกว่าการศึกษาจากโปรแกรม
การเขียนผังงาน (Flowchart) ที่ดี
1. ทุกผังงานต้องมีจุดเริ่มต้นและจุดสิ้นสุดอย่างละ 1 จุดเท่านั้น
2. ลำดับขั้นตอนการทำงานควรจะเริ่มจากบนลงล่าง หรือจากซ้ายไปขวา
3. ในสัญลักษณ์ใด ๆ มีจุดสิ้นสุดเพียงทางเดียว ยกเว้นสัญลักษณ์แสดงการตัดสินใจ หรือ ทางเลือกสามารถมีทางออกได้อย่างน้อยสองทาง
4. เส้นทางเดินในผังงานควรชัดเจน เป็นระเบียบ เส้นลูกศรที่ใช้บอกทิศทางของลำดับขั้นตอนวิธีการทำงาน ไม่ควรเขียนตัดกัน
5. ข้อความหรือคำสั่งใด ๆ ที่อยู่ในสัญลักษณ์ควรสั้น กระชับ ได้ใจความ และสามารถเข้าใจได้ง่าย
6. ใช้สัญลักษณ์ที่มีขนาดเหมาะสมกับคำสั่งและใช้คำอธิบายที่กะทัดรัดและเข้าใจง่าย
7. ไม่ควรเขียนเส้นลูกศร เพื่อทำการโยงลำดับขั้นตอนที่อยู่ห่างกัน ให้ใช้เครื่องหมายในการเชื่อมต่อแทน การเขียนผังงานหากกระบวนการยังไม่จบภายในหน้ากระดาษเดียวกันจะต้องมีการใช้สัญลักษณ์เชื่อมต่อระหว่างหน้ากระดาษ
8. ในกระบวนการทำงานที่ต้องการเพิ่มคำอธิบายเข้าไปเพื่อให้เกิดความเข้าใจ ก็สามารถทำได้โดยการใช้สัญลักษณ์หมายเหตุประกอบ
9. ผังงานต้องครอบคลุม การทำงานทุกขั้นตอน หรือเงื่อนไขของการปฏิบัติงานทั้งหมด ตั้งแต่เริ่มต้นจนถึงจบการทำงาน
ประเภทของผังงาน (Flowchart)
ผังงานทางมี 2 ประเภทคือ ผังงานระบบ (System Flowchart) และ ผังงานโปรแกรม (Program Flowchart)
ผังงานระบบ(System Flowchart) เป็นการแสดงให้เราเห็นว่า ในระบบหนึ่ง ๆ นั้นมีขั้นตอนในการทำงานอย่างไร ซึ่งจะมองเห็นในลักษณะภาพกว้าง ๆ ของระบบ แต่จะไม่เจาะลึกลงไปว่าในระบบว่าในแต่ละงานนั้นมีการทำงานอย่างไร คือ จะให้เห็นว่าจุดเริ่มต้นของงานเริ่มจากส่วนใด เป็นข้อมูลแบบใด มีการประมวลผลอย่างไร และจะได้ผลลัพธ์เป็นอย่างไรและเก็บอยู่ที่ใด
ผังงานโปรแกรม(Program Flowchart) คือ ผังงานที่แสดงถึงขั้นตอนในการทำงาน ของโปรแกรม ตั้งแต่รับ ข้อมูล คำนวณ จนถึงแสดงผลลัพธ์
1. ผังงานแบบเรียงลำดับ (Sequential) เป็นการเขียนที่ง่ายที่สุด กล่าวคือเขียนขั้นตอนการทำงานจากบนลงล่าง เขียนคำสั่งเป็นบรรทัดและทำที่ละบรรทัด เขียนจากบนสุดลงไปจนถึงบรรทัดล่างสุด และไม่มีทางแยกไปทิศทางใด
2. ผังงานแบบมีการกำหนดเงื่อนไข (Condition) เป็นการเลือกกระทำตามเงื่อนไขการตัดสินใจ หรือเลือกเงื่อนไข คือเขียนขั้นตอนเพื่อนำค่าไปเลือกโดยปกติจะมีเหตุการณ์ให้ทำ 2 กระบวนการคือเงื่อนไขใช่ (yes) และไม่ใช่ (No)
3. แบบมีการทำงานวนรอบ (Looping) เป็นการทำซ้ำ (Interaction) การทำกระบวนการหนึ่งหลายครั้งโดยมีเงื่อนไขในการควบคุม
สัญลักษณ์เบื้องต้นของผังงาน
การเขียนผังงานจะประกอบไปด้วยการใช้สัญลักษณ์มาตรฐานต่าง ๆ ที่เรียกว่า สัญลักษณ์ ANSI (American National Standards Institute) ในการสร้างผังงาน ดังตัวอย่างที่แสดงในรูปต่อไปนี้
โปรแกรม C โดยทั่วไป จะประกอบด้วยโครงสร้างส่วนต่างๆ ดังต่อไปนี้
Preprocessor Commands (พรีโปรเซสเซอร์)
Functions (ฟังก์ชั่น)
Variables (ตัวแปร)
Statements & Expressions (ชุดคำสั่งที่ต้องทำงาน & นิพจน์ หมายถึง การนำเอาค่าคงที่ ตัวแปร หรือฟังก์ชัน มากระทำอย่างใดอย่างหนึ่ง)
Comments (ส่วนที่ใช้เขียนอธิบายโปรแกรม มีไว้ให้ Programmer หรือผู้เขียนโปรแกรม เขียนอธิบายไว้ใน source code คอมไพเลอร์จะข้ามส่วนนี้ไปไม่นํามาแปล)
ให้เราดูโค้ดง่ายๆ ที่จะพิมพ์คำว่า ” Hello, World! ”
เรามาดูส่วนต่าง ๆ ของโปรแกรมข้างต้นกันดีกว่า
บรรทัดที่ 1 ของโปรแกรม #include <stdio.h> คือคำสั่งพรีโปรเซสเซอร์ ซึ่งบอกให้คอมไพเลอร์ C รวมไฟล์ stdio.h ก่อนที่จะทำการคอมไพล์จริง
บรรทัดที่ 3 ของโปรแกรม int main() { เป็นฟังก์ชันหลักที่โปรแกรมเริ่มทำงาน การทำงานของฟังก์ชันจะเริ่มต้นที่เครื่องหมาย { และจะสิ้นสุดที่เครื่องหมาย }
บรรทัดที่ 4 ของโปรแกรม /* my first program in C */ จะถูกละเว้นโดยคอมไพเลอร์ ดังนั้นบรรทัดดังกล่าวจึงเรียกว่า คำอธิบายโปรแกรม
บรรทัดที่ 5 ของโปรแกรม printf(“Hello, World! \n”); โดย printf เป็นฟังก์ชันที่มีใน stdio.h ซึ่งทำให้ข้อความ “Hello, World!” แสดงบนหน้าจอ
บรรทัดที่ 7 ของโปรแกรม return 0; หยุดการทำงานของฟังก์ชัน main() และส่งกลับค่า 0
หากเข้าใจในโครงสร้างพื้นฐานโปรแกรมภาษา C แล้ว ที่เหลือมันจะง่ายต่อการทำความเข้าใจโครงสร้างพื้นฐานอื่น ๆ ของภาษาโปรแกรม C Basic Syntax (ไวยากรณ์พื้นฐาน) ได้เลย
โครงสร้างพื้นฐานของภาษาโปรแกรม C Basic Syntax (ไวยากรณ์พื้นฐาน)
Tokens in C (โทเค็นใน C)
โปรแกรม C ประกอบด้วยโทเค็นต่างๆ และโทเค็นเป็นได้ทั้งคีย์เวิร์ด ตัวระบุ ค่าคงที่ สตริง ตัวอักษร หรือสัญลักษณ์ เช่น คำสั่ง C ต่อไปนี้ประกอบด้วยโทเค็น 5 ตัว
โทเค็นแต่ละรายการคือ −
Semicolons ; (เซมิโคลอน)
ในโปรแกรม C เครื่องหมาย ; เซมิโคลอนเป็นตัวสิ้นสุดคำสั่ง กล่าวคือ แต่ละประโยคต้องลงท้ายด้วยเซมิโคลอน มันบ่งชี้จุดสิ้นสุดของเอนทิตีตรรกะหนึ่งรายการ
เซมิโคลอน (Semicolon) (;) เป็นสัญลักษณ์ที่ใช้เพื่อแบ่งแยกคำสั่งภายในโปรแกรม ซึ่งมันหมายถึงการจบคำสั่งนั้นๆ เซมิโคลอนใช้ในภาษาต่างๆ และมันเป็นสิ่งที่บังคับ เพื่อให้ตัวคอมไพเลอร์ของภาษาสามารถแยกแยะคำสั่งในการทำงานได้
- ด้านล่างเป็น 2 ชุดคำสั่ง (Statements) ที่แตกต่างกัน
Comments (คำอธิบายโปรแกรม)
Comments เป็นส่วนของโค้ดที่ไม่มีผลต่อการทำงานของโปรแกรม มันถูกใช้เพื่ออธิบายโปรแกรมสำหรับมนุษย์เข้าใจ ในภาษา C คำอธิบายโปรแกรม เป็นเหมือนข้อความช่วยเหลือในโปรแกรม C ของคุณและคอมไพเลอร์จะละเว้น โดยขึ้นต้นด้วย /* และลงท้ายด้วยอักขระ */ ดังที่แสดงด้านล่าง
Identifier (การตั้งชื่อ)
Identifier คือชื่อที่ใช้ระบุตัวแปร ฟังก์ชัน หรือรายการอื่นๆ ที่ผู้ใช้กำหนด ชื่อเริ่มต้นด้วยตัวอักษร A ถึง Z, a ถึง z หรือขีดล่าง ‘_’ ตามด้วยตัวอักษร และตัวเลขตั้งแต่ 0 ถึง 9)
C ไม่อนุญาตให้ใช้เครื่องหมายวรรคตอน เช่น @, $ และ % ภายในชื่อ ดังนั้น Manpower และ manpower จึงเป็นชื่อที่แตกต่างกันใน C ต่อไปนี้คือตัวอย่างบางส่วนของชื่อที่ยอมรับได้
หลักการตั้งชื่อ
การตั้งชื่อฟังก์ชัน การตั้งชื่อตัวแปร หรือชื่ออื่นๆ ซึ่งถือว่าเป็นชื่อเฉพาะที่กําหนดขึ้นโดยผู้เขียนโปรแกรมเป็นผู้กําหนด (identifiers) การกําหนดชื่อต่างๆ เหล่านี้ สําหรับภาษาซีมีกฎเกณฑ์ดังต่อไปนี้
1. ชื่อต้องขึ้นต้นด้วยตัวอักษรหรือเครื่องหมาย _ (เส้นใต้) เครื่องหมายอื่นใช้ไม่ได้
2. ภายในชื่อไม่มีการเว้นวรรค อาจใช้เครื่องหมาย _ ขั้นระหว่างตัวอักษรให้ดูเหมือนเว้นวรรคได้
3. ถัดจาตัวแรกอาจเป็นตัวอักษร ตัวเลข หรือเครื่องหมาย _ก็ได้
4. ความยาวของชื่อไม่จํากัด แต่จะนําตัวอักษรไปเปรียบเทียบความแตกต่าง เพียง 32 ตัวแรกเท่านั้น
5. ตัวอักษรตัวเล็กและตัวอักษรตัวใหญ่ภาษาซีจะถือว่าต่างกัน หรือจะพูดว่า “ชื่อจะเป็น Case-Sensitive”
6. การตั้งชื่อควรหลีกเลี่ยงชื่อที่มีตัวแรกเป็นเครื่องหมาย _เพราะชื่อชนิดนี้มีใช้อยู่มากในการตั้งชื่อตัวแปรของโปรแกรมระบบ (System Variables) อาจจะตรงกันได้โดยไม่ได้ตั้งใจ จะทําให้โปรแกรมทํางานผิดพลาดได้
ชื่อที่ตั้งขึ้นจะต้องไม่ตรงกับคําสงวน (Reserved Words) หรือบางทีเรียกว่า Keywords เพราะคําสงวนเหล่านี้ได้ถูกใช้เป็นชื่อคําสั่งหรือชื่อของฟังก์ชันในตัวภาษาอยู่แล้ว จะได้ชื่อที่ซํ้ากันอีกไม่ได้
Keywords (คําหลัก)
คําหลัก (Keywords) หรือ คําสงวน (Reserved words) เป็นคําที่มีความหมายพิเศษให้กับคอมไพเลอร์ของ C ดังนั้น นักเขียนโปรแกรม (programmer) จะต้อง ระมัดระวังไม่ควรใช้คำ เหล่านี้มาตั้งชื่อเป็นตัวแปรโดยเด็ดขาด
Keyword เป็นกลุ่มคำที่ถูกสงวนไว้โดยเราไม่สามารถใช้คำเหล่านี้ในการประกาศเป็นชื่อตัวแปร ฟังก์ชัน ซึ่งในโปรแกรมทุกภาษาต่างก็มี keyword นี่เป็น keyword มาตราฐานในภาษา C
Whitespace in C (ช่องว่างใน C)
Whitespace คือตัวอักษรหรือเครื่องหมายที่ใช้แบ่งแยกคำสั่งและ Token ในโค้ดของโปรแกรม ในภาษา C นั้น white space จะประกอบไปด้วย การเว้นวรรค Tab และการขึ้นบรรทัดใหม่ Whitespace ที่เรียงต่อกันเป็นจำนวนมากนั้นไม่มีผลต่อการทำงานของโปรแกรมและคอมไพเลอร์ แต่มันช่วยให้โปรแกรมเมอร์สามารถทำโค้ดให้เป็นระเบียบและสามารถอ่านเข้าใจได้ง่ายขึ้นโดยคนอื่นๆ แต่ Whitespace ยังคงต้องใช้ในบางที่ เช่น ระหว่างคำสั่งของภาษา C และชื่อของตัวแปร เป็นต้น
Whitespace คือคำที่ใช้ในภาษา C เพื่อ แยกส่วนหนึ่งของคำสั่งจากส่วนอื่นและช่วยให้คอมไพเลอร์สามารถระบุที่องค์ประกอบหนึ่งในคำสั่งเช่น int สิ้นสุดและองค์ประกอบถัดไปเริ่มต้น ดังนั้นในข้อความต่อไปนี้
ต้องมีอักขระช่องว่างอย่างน้อยหนึ่งตัว (โดยปกติคือช่องว่าง) ระหว่าง int และ age เพื่อให้คอมไพเลอร์สามารถแยกแยะได้ ในทางกลับกัน ในข้อความต่อไปนี้
ไม่จำเป็นต้องใช้อักขระช่องว่างระหว่าง fruit กับ = หรือระหว่าง = กับ apples แม้ว่าคุณจะมีอิสระที่จะใส่อักขระบางตัวหากต้องการเพิ่มความง่ายในการอ่าน
C – Variables (ตัวแปร)
ตัวแปร ภาษา C เป็นเพียงชื่อที่กำหนดให้กับพื้นที่เก็บข้อมูลที่โปรแกรมของเราสามารถจัดการได้ ตัวแปรแต่ละตัวในภาษา C จะมีชนิดเฉพาะ ซึ่งจะกำหนดขนาดและเลย์เอาต์ของหน่วยความจำของตัวแปร ช่วงของค่าที่สามารถเก็บไว้ในหน่วยความจำนั้น และชุดของการดำเนินการที่สามารถนำไปใช้กับตัวแปรได้
ชื่อของตัวแปรประกอบด้วยตัวอักษร ตัวเลข และเครื่องหมายขีดล่าง ต้องขึ้นต้นด้วยตัวอักษรหรือขีดล่าง ตัวอักษรตัวพิมพ์ใหญ่และตัวพิมพ์เล็กมีความแตกต่างกันเนื่องจาก C คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ ตามประเภทพื้นฐานที่ได้อธิบายไว้ในบทที่แล้ว จะมีประเภทตัวแปรพื้นฐานดังต่อไปนี้
การเขียนโปรแกรมภาษา C ยังช่วยให้กำหนดตัวแปรชนิดอื่นๆ ได้ ซึ่งเราจะกล่าวถึงในบทต่อๆ ไป เช่น การแจงนับ ตัวชี้ อาร์เรย์ โครงสร้าง ยูเนี่ยน ฯลฯ สำหรับบทนี้ ให้เราศึกษาเฉพาะชนิดตัวแปรพื้นฐานเท่านั้น
Variable Definition in C (นิยามตัวแปรใน C)
คำจำกัดความของตัวแปรจะบอกคอมไพเลอร์ว่าจะสร้างที่เก็บข้อมูลของตัวแปรได้ที่ไหนและเท่าใด คำจำกัดความของตัวแปรระบุชนิดข้อมูลและมีรายการตัวแปรชนิดนั้นตั้งแต่หนึ่งตัวขึ้นไปดังนี้
ที่นี่ type ต้องเป็นประเภทข้อมูล C ที่ถูกต้อง รวมถึง char, w_char, int, float, double, bool หรืออ็อบเจกต์ที่ผู้ใช้กำหนด และ variable_list อาจประกอบด้วยชื่อตัวระบุตั้งแต่หนึ่งชื่อขึ้นไปโดยคั่นด้วยเครื่องหมายจุลภาค แสดงประกาศที่ถูกต้องบางส่วนที่นี่
ตัวอย่างด้านบน ประกาศและกำหนดตัวแปร i, j และ k; ซึ่งสั่งให้คอมไพเลอร์สร้างตัวแปรชื่อ i, j และ k เป็นชนิด int
ตัวแปรสามารถเริ่มต้นได้ (กำหนดค่าเริ่มต้น) ในการประกาศ ตัวเริ่มต้นประกอบด้วยเครื่องหมายเท่ากับตามด้วยนิพจน์คงที่ดังต่อไปนี้
ตัวอย่างบางส่วน ได้แก่
สำหรับคำจำกัดความที่ไม่มีตัวกำหนดค่าเริ่มต้น: ตัวแปรที่มีระยะเวลาการจัดเก็บแบบคงที่จะถูกกำหนดค่าเริ่มต้นโดยปริยายด้วยค่า NULL (ไบต์ทั้งหมดมีค่าเป็น 0) ค่าเริ่มต้นของตัวแปรอื่น ๆ ทั้งหมดไม่ได้กำหนดไว้
การประกาศตัวแปรใน C
การประกาศตัวแปรมีประโยชน์เมื่อคุณใช้หลายไฟล์และคุณกำหนดตัวแปรของคุณในไฟล์ใดไฟล์หนึ่งซึ่งจะพร้อมใช้งานในขณะที่ทำการเชื่อมโยงโปรแกรม คุณจะใช้คีย์เวิร์ด extern เพื่อประกาศตัวแปรที่ใดก็ได้ แม้ว่าคุณสามารถประกาศตัวแปรได้หลายครั้งในโปรแกรม C ของคุณ แต่ก็สามารถกำหนดได้เพียงครั้งเดียวในไฟล์ ฟังก์ชัน หรือบล็อกของโค้ด
การใช้ extern เพื่อใช้ตัวแปรร่วมกันระหว่างไฟล์
"ถ้าหากว่าเรามีตัวแปรที่ต้องการใช้ร่วมกันในไฟล์ .c หลายๆไฟล์ เราก็น่าจะเอาไปประกาศใน header ไฟล์ได้เลยหรือไม่ คำตอบคือประกาศเฉยๆ ไม่ได้ แต่ต้องใส่ extern ด้วย เพราะตัวแปรไม่เหมือนกับ function การประกาศ prototype ของ function ใดๆนั้น เป็นแค่การบอกให้ compiler รู้ว่า function นั้นหน้าตาเป็นยังไง ต้องมี input เป็นอะไร และจะ return อะไรกลับมา การกระโดดเข้าไปทำงาน function นั้นแล้วกลับออกมาจะได้ทำได้ถูก แต่การประกาศตัวแปรนั้นเป็นการจองพื้นที่ เป็นการสร้าง object ของตัวแปรนั้นขึ้นมา ซึ่งถ้าเราใส่ใน header แล้วหลายๆไฟล์มีการนำไป include จะทำให้เกิดการสร้าง object ขึ้นมาหลายๆที่โดยมีชื่อที่ซ้ำกัน ทำให้เกิด error ขึ้น วิธีการที่ถูกต้องคือการใส่ extern เข้าไปด้วย compiler จะไม่สร้าง object ขึ้นมาซ้ำกัน เพราะเราได้บอกกับ compiler เอาไว้ว่าตัวแปรนั้น จริงๆแล้วถูกประกาศไว้ที่อื่น
https://blog.thaieasyelec.com/"
การประกาศตัวแปรให้การรับรองแก่คอมไพเลอร์ว่ามีตัวแปรที่มีประเภทและชื่อที่กำหนด เพื่อให้คอมไพเลอร์สามารถดำเนินการรวบรวมต่อไปได้โดยไม่ต้องให้รายละเอียดทั้งหมดเกี่ยวกับตัวแปร คำจำกัดความของตัวแปรมีความหมายในขณะที่คอมไพล์เท่านั้น คอมไพเลอร์ต้องการคำจำกัดความของตัวแปรจริงในขณะที่ทำการเชื่อมโยงโปรแกรม
ตัวอย่าง
ลองตัวอย่างต่อไปนี้ ซึ่งมีการประกาศตัวแปรไว้ที่ด้านบนสุด แต่ถูกกำหนดและเริ่มต้นภายในฟังก์ชันหลักแล้ว
เมื่อโค้ดด้านบนถูกคอมไพล์และรัน มันจะให้ผลลัพธ์ดังต่อไปนี้
แนวคิดเดียวกันนี้ใช้กับการประกาศฟังก์ชันที่คุณระบุชื่อฟังก์ชันในขณะที่มีการประกาศ และสามารถให้คำจำกัดความตามจริงได้จากที่อื่น ตัวอย่างเช่น
Lvalues และ Rvalues ใน C
มีนิพจน์สองประเภทใน C
lvalue – นิพจน์ที่อ้างถึงตำแหน่งหน่วยความจำเรียกว่านิพจน์ “lvalue” lvalue อาจปรากฏเป็นด้านซ้ายหรือด้านขวาของงาน
rvalue – rvalue ระยะหมายถึงค่าข้อมูลที่เก็บไว้ในที่อยู่บางอย่างในหน่วยความจำ rvalue คือนิพจน์ที่ไม่สามารถกำหนดค่าได้ ซึ่งหมายความว่า rvalue อาจปรากฏที่ด้านขวามือ แต่ไม่ปรากฏทางด้านซ้ายของงานที่มอบหมาย
ตัวแปรคือค่า lvalues ดังนั้นจึงอาจปรากฏทางด้านซ้ายมือของงาน ค่าตัวเลขเป็นค่า rvalues ดังนั้นจึงไม่สามารถกำหนดและไม่สามารถปรากฏทางด้านซ้ายมือได้ ดูข้อความที่ถูกต้องและไม่ถูกต้องดังต่อไปนี้
C – Data Types (ชนิดข้อมูล)
ชนิดข้อมูลในภาษา c หมายถึงระบบที่ครอบคลุมซึ่งใช้สำหรับการประกาศตัวแปรหรือฟังก์ชันประเภทต่างๆ ประเภทของตัวแปรกำหนดว่าจะใช้พื้นที่ในการจัดเก็บเท่าใดและจะตีความรูปแบบบิตที่เก็บไว้อย่างไร
ชนิดข้อมูลในภาษา C สามารถจำแนกได้ดังนี้
Integer Types (ชนิดเลขจำนวนเต็ม)
ตารางต่อไปนี้แสดงรายละเอียดของชนิดจำนวนเต็มมาตรฐานพร้อมขนาดการจัดเก็บและช่วงค่า
หากต้องการทราบขนาดที่แน่นอนของชนิดหรือตัวแปรบนแพลตฟอร์มใดแพลตฟอร์มหนึ่ง คุณสามารถใช้ตัวดำเนินการ sizeof นิพจน์ sizeof(type) ให้แสดงขนาดหน่วยเก็บข้อมูลของอ็อบเจ็กต์หรือชนิดเป็นไบต์ ด้านล่างนี้คือตัวอย่างโค้ดเพื่อให้ได้ขนาดของชนิดต่าง ๆ บนเครื่องโดยใช้ค่าคงที่ที่แตกต่างกันซึ่งกำหนดไว้ในไฟล์ส่วนหัวของ limit.h:
เมื่อคอมไพล์และรันโปรแกรมข้างบน มันจะให้ผลลัพธ์ต่อไปนี้
Floating-Point Types (ชนิดเลขทศนิยม)
ตารางต่อไปนี้แสดงรายละเอียดของชนิดเลขทศนิยมมาตรฐานพร้อมขนาดการจัดเก็บและช่วงค่าและความแม่นยำ
ไฟล์ส่วนหัว float.h กำหนดมาโครที่ช่วยให้คุณใช้ค่าเหล่านี้และรายละเอียดอื่นๆ เกี่ยวกับการแทนค่าไบนารีของตัวเลขจริงในโปรแกรมของคุณ ตัวอย่างต่อไปนี้พิมพ์พื้นที่จัดเก็บที่ใช้โดย ชนิด float และค่าช่วงของมัน
เมื่อคอมไพล์และรันโปรแกรมข้างต้น มันจะให้ผลลัพธ์ต่อไปนี้
The void Type
ชนิด void ระบุว่าไม่มีค่า ใช้ในสถานการณ์ 3 ชนิด
C – Decision Making (การตัดสินใจ)
Decision Making การตัดสินใจ ภาษา C
โครงสร้างการตัดสินใจต้องการให้โปรแกรมเมอร์ระบุเงื่อนไขหนึ่งหรือหลายเงื่อนไขที่จะได้รับการประเมินหรือทดสอบโดยโปรแกรม พร้อมกับคำสั่งหรือคำสั่งที่จะดำเนินการหากเงื่อนไขถูกกำหนดให้เป็นจริง และทางเลือกอื่น ๆ ที่จะดำเนินการถ้าเงื่อนไข ถูกกำหนดให้เป็นเท็จ
แสดงด้านล่างเป็นรูปแบบทั่วไปของโครงสร้างการตัดสินใจทั่วไปที่พบในภาษาการเขียนโปรแกรมส่วนใหญ่
ภาษา C จะถือว่าค่าที่ไม่ใช่ศูนย์และไม่ใช่ค่าว่างเป็นจริงและหากเป็นค่าศูนย์หรือค่าว่างระบบจะถือว่าค่านั้นเป็นค่าเท็จ
คำสั่งควบคุมเงื่อนไข ในภาษาซีจะใช้ประโยคเงื่อนไข if เพื่อสร้างเงื่อนไข และตรวจสอบเงื่อนไขว่าเป็นจริงหรือเท็จ ทั้งนี้ประโยค if ดังกล่าว ยังสามารถนำมาใช้งานเพื่อเปรียบเทียบเงื่อนไขอย่างง่าย จนถึงเงื่อนไขที่ซับซ้อนสูงได้
การควบคุมเงื่อนไขด้วย if-statement ในการใช้ประโยคคำสั่ง if-statement เพื่อตรวจสอบเงื่อนไขหลัก ๆ มีอยู่ 3 แบบด้วยกัน คือ
1. if statement
ประโยคเงื่อนไข if อย่างง่ายหรือเรียกว่า if แบบทางเลือกเดียว
Syntax (ไวยากรณ์) ของคำสั่ง ‘if’ ในภาษาซีคือ
หากนิพจน์บูลีนประเมินว่าเป็น จริง (true) บล็อกของโค้ดภายในคำสั่ง ‘if’ จะถูกดำเนินการ หากนิพจน์บูลีนประเมินเป็น เท็จ (false) โค้ดชุดแรกหลังจุดสิ้นสุดของคำสั่ง ‘if’ (หลังวงเล็บปีกกาปิด) จะถูกดำเนินการ
ภาษาซีจะถือว่าค่าที่ไม่ใช่ศูนย์และไม่ใช่ค่าว่างเป็น จริง (true) และหากเป็นค่าศูนย์หรือค่าว่างระบบจะถือว่าค่านั้นเป็นค่า เท็จ (false)
เมื่อโค้ดด้านบนถูกคอมไพล์และรัน มันจะให้ผลลัพธ์ดังต่อไปนี้
2. if…else statement
ประโยคคำสั่งตัดสินใจแบบสองทางเลือกด้วย if…else
Syntax (ไวยากรณ์) ของคำสั่ง ‘if...else’ ในภาษาซี คือ
คำสั่ง if…else เป็นคำสั่งที่เราใช้กำหนดให้โปรแกรมตัดสินใจเลือกทำคำสั่งอย่างใดอย่างหนึ่งจาก 2 ทางเลือก โดยตรวจสอบเงื่อนไขที่กำหนดว่าเป็นจริงหรือเท็จ ถ้าเงื่อนไขที่กำหนดเป็น จริง (true) โปรแกรมจะทำงานที่ชุดคำสั่งที่อยู่ภายใต้คำสั่ง if แต่ถ้าเงื่อนไขที่กำหนดให้เป็น เท็จ (false) โปรแกรมจะทำงานที่ชุดคำสั่งที่อยู่ภายใต้คำสั่ง else ภาษาซีจะถือว่าค่าที่ไม่ใช่ศูนย์และไม่ใช่ค่าว่างเป็น จริง (true) และหากเป็นค่าศูนย์หรือค่าว่างระบบจะถือว่าค่านั้นเป็นค่า เท็จ (false)
เมื่อโค้ดด้านบนถูกคอมไพล์และรัน มันจะให้ผลลัพธ์ดังต่อไปนี้
3. If…else if…else Statement
ถ้า ชุดคำสั่ง สามารถตามด้วยตัวเลือกอื่นถ้า … อื่นคำสั่งซึ่งจะเป็นประโยชน์มากในการทดสอบเงื่อนไขต่าง ๆ โดยใช้เพียงครั้งเดียวถ้า … ถ้ามีคำสั่งอื่น
เมื่อใช้คำสั่ง if…else if..else มีบางประเด็นที่ต้องคำนึงถึง
if สามารถมีศูนย์หรือของอื่นได้และต้องตามหลัง if’s
if สามารถมีค่าเป็นศูนย์ถึง if’s อื่น ๆ และต้องมาก่อนค่าอื่น
อีกครั้งหากสำเร็จ จะไม่มีการทดสอบ if’s หรือ else’s ที่เหลืออีกเลย
Syntax (ไวยากรณ์) ของคำสั่ง if…else if…else ในภาษาซี คือ
ตัวอย่าง
เมื่อโค้ดด้านบนถูกคอมไพล์และรัน มันจะให้ผลลัพธ์ดังต่อไปนี้
C – Loops (คําสั่งวนซ้ำ)
คำสั่งวนลูป หรือ คําสั่งวนซ้ำ เป็นคำสั่งที่ใช้ควบคุมการทำงานของโปรแกรมแบบวนซ้ำ การทำงานเดิมๆตามเงื่อนไขที่ดำหนด เช่น การวนซ้ำการทำงานเดิมเป็นจำนวนหลายๆรอบ ทำงานซ้ำๆจนกว่าเงื่อนไขจะเป็นเท็จ (false)
คำสั่งวนรอบช่วยให้เราสามารถดำเนินการคำสั่งหรือกลุ่มของคำสั่งได้หลายครั้ง ด้านล่างนี้คือรูปแบบทั่วไปของคำสั่งวนซ้ำในภาษาการเขียนโปรแกรมส่วนใหญ่
การเขียนโปรแกรม ภาษา C จัดเตรียมลูปประเภทต่อไปนี้เพื่อจัดการกับข้อกำหนดการวนซ้ำ
1. while loop
คำสั่ง while loop ใช้ในการเขียนโปรแกรม C ซ้ำ ๆ รันคำสั่งเป้าหมายตราบเท่าที่ เป็นความจริง
Syntax (ไวยากรณ์) ของคำสั่ง while loop ในภาษาซี คือ
ในที่นี้ชุดคำสั่ง (statement) อาจเป็นข้อความเดี่ยวหรือกลุ่มข้อความก็ได้ เงื่อนไข (condition) อาจจะแสดงออกใด ๆ และที่แท้จริงคือค่า nonzero ใด ๆ วนซ้ำในขณะที่เงื่อนไขเป็นจริง (true) เมื่อเงื่อนไขกลายเป็นเท็จ (false) ตัวควบคุมโปรแกรมจะส่งผ่านไปยังบรรทัดต่อจากลูปทันที
เมื่อโค้ดด้านบนถูกคอมไพล์และรัน มันจะให้ผลลัพธ์ดังต่อไปนี้
2. for loop
for loop เป็นโครงสร้างควบคุมการทำซ้ำที่ช่วยให้คุณเขียนลูปที่ต้องการดำเนินการตามจำนวนครั้งที่เจาะจงได้อย่างมีประสิทธิภาพ
Syntax (ไวยากรณ์) ของคำสั่ง for loop ในภาษาซี คือ
นี่คือการไหลของการควบคุมในวง ‘ for loop ‘ −
init (คือการประกาศตัวแปรพร้อมกับใส่ค่าให้ตัวแปรในทันทีในบรรทัดเดียวกัน) ขั้นตอนจะถูกดำเนินการครั้งแรกและเพียงครั้งเดียว ขั้นตอนนี้ช่วยให้คุณประกาศและเริ่มต้นตัวแปรควบคุมลูปได้ คุณไม่จำเป็นต้องใส่คำสั่งที่นี่ ตราบใดที่เครื่องหมาย ; ปรากฏขึ้น
ถัดไปเงื่อนไข (condition) จะถูกประเมิน หากเป็นจริง เนื้อหาของลูปจะถูกดำเนินการ หากเป็นเท็จ เนื้อหาของลูปจะไม่ทำงาน และโฟลว์ของการควบคุมจะข้ามไปยังคำสั่งถัดไปหลังจากลูป ‘for’
หลังจากที่เนื้อความของลูป ‘for’ ทำงาน โฟลว์ของการควบคุมจะข้ามกลับไปที่คำสั่ง ตัวดำเนินการเพิ่มและลดค่า (increment) คำสั่งนี้อนุญาตให้คุณอัปเดตตัวแปรควบคุมลูป คำสั่งนี้สามารถเว้นว่างได้ ตราบใดที่มีเครื่องหมาย ; ปรากฏขึ้นหลังเงื่อนไข
ขณะนี้มีการประเมินเงื่อนไขอีกครั้ง หากเป็นจริง ลูปจะดำเนินการและกระบวนการจะทำซ้ำเอง (เนื้อหาของลูป จากนั้นเพิ่มขั้นตอน แล้วจึงสร้างเงื่อนไขอีกครั้ง) หลังจากที่เงื่อนไขกลายเป็นเท็จ วนรอบ ‘for’ จะสิ้นสุดลง
เมื่อโค้ดด้านบนถูกคอมไพล์และรัน มันจะให้ผลลัพธ์ดังต่อไปนี้
3. do…while loop
ไม่เหมือนกับ for และ while loop ซึ่งทดสอบเงื่อนไขลูปที่ด้านบนของลูป แต่ do…while loop ในการเขียนโปรแกรม C จะตรวจสอบเงื่อนไขที่ด้านล่างของลูป
สิ่งที่แตกต่างของ do…while loop คือการตรวจสอบ condition หลังจากการทำงานรอบแรกเสร็จสิ้น นั่นหมายความว่า do…while loop จะต้องทำงานอย่างน้อย 1 รอบ สังเกตุว่า เงื่อนไข (condition) จะอยู่ที่ตอน้ทายของลูป
Syntax (ไวยากรณ์) ของคำสั่ง do…while loop ในภาษาซี คือ
ขอให้สังเกตว่านิพจน์เงื่อนไขปรากฏขึ้นที่ส่วนท้ายของลูป ดังนั้นคำสั่งในลูปจะทำงานหนึ่งครั้งก่อนที่จะทดสอบเงื่อนไข
หากเงื่อนไขเป็นจริง โฟลว์ของการควบคุมจะกระโดดกลับไปทำ และคำสั่งในลูปจะดำเนินการอีกครั้ง กระบวนการนี้ทำซ้ำจนกว่าเงื่อนไขที่กำหนดจะกลายเป็นเท็จ
เมื่อโค้ดด้านบนถูกคอมไพล์และรัน มันจะให้ผลลัพธ์ดังต่อไปนี้
Loop Control Statements
คำสั่งควบคุมลูปเปลี่ยนการดำเนินการจากลำดับปกติ เมื่อการดำเนินการออกจากขอบเขต ออบเจ็กต์อัตโนมัติทั้งหมดที่สร้างขึ้นในขอบเขตนั้นจะถูกทำลาย
C รองรับคำสั่งควบคุมต่อไปนี้
1. คำสั่ง break
break คำสั่งในการเขียนโปรแกรม C มีสองต่อไปนี้
เมื่อพบคำสั่ง break ภายในลูป การวนซ้ำจะสิ้นสุดลงทันที และการควบคุมโปรแกรมจะกลับมาทำงานต่อในคำสั่งถัดไปหลังจาก วนซ้ำ
สามารถใช้เพื่อยุติกรณีและปัญหาในคำสั่ง switch (ครอบคลุมในบทต่อไป)
หากกำลังใช้การวนซ้ำซ้อนกัน คำสั่ง break จะหยุดการทำงานของวงในสุดและเริ่มรันโค้ดบรรทัดถัดไปหลังจากบล็อก
Syntax (ไวยากรณ์) ของคำสั่ง break ในภาษาซี คือ
เมื่อโค้ดด้านบนถูกคอมไพล์และรัน มันจะให้ผลลัพธ์ดังต่อไปนี้
2. คำสั่ง continue
continue คำสั่งในการเขียนโปรแกรม C ทำงานคล้าย break คำสั่ง แทนที่จะบังคับให้ยุติ มันบังคับให้วนซ้ำรอบถัดไปเกิดขึ้น โดยข้ามโค้ดใดๆ ที่อยู่ระหว่างนั้น
สำหรับ for loop , คำสั่ง continue เป็นสาเหตุที่ทำให้การทดสอบและการเพิ่มเงื่อนไขบางส่วนของวงที่จะดำเนินการ สำหรับ while และ do…while loops คำสั่ง continue ที่ทำให้เกิดการควบคุมโปรแกรมที่จะส่งผ่านไปยังการทดสอบเงื่อนไข
Syntax (ไวยากรณ์) ของคำสั่ง continue ในภาษาซี คือ
เมื่อโค้ดด้านบนถูกคอมไพล์และรัน มันจะให้ผลลัพธ์ดังต่อไปนี้
**ขอขอบคุณเจ้าของข้อมูลทุก ๆ แหล่งที่มา รวมไปถึงเจ้าของสื่อการเรียนรู้ทุกชิ้นเป็นอย่างสูง**