710130 05 c language

Page 1

การเขียนโปรแกรมด้วยภาษา C อาจารย์สมเกียรติ ช่อเหมือน สาขาวิชาวิศวกรรมซอฟต์แวร์ คณะวิทยาศาสตร์และเทคโนโลยี (tko@webmail.npru.ac.th)


เนื้อหาที่สนใจ • ภาษาซี (C Language) • โครงสร้างภาษาซี – – – –

• • • •

Preprocessor Commands & macro definitions ฟังก์ชันและการค่าส่งกลับ (Functions & Return Value) ตัวแปรและค่าคงที่ (Variables & Typed constant) คาสั่งและนิพจน์ (statement & Expressions)

การแยกไฟล์ของภาษาซี ตัวแปลภาษาซี เครื่องมือที่รองรับการเขียนภาษาซี (IDEs for C/C++ Programming) ตัวอย่างการเขียนโปรแกรมภาษาซี

http://1.bp.blogspot.com/-tw1caa8lBus/Vphe8RV3rwI/AAAAAAAAAKM/wAhp-ds7iQM/s1600/8.png


ภาษา C • ภาษาซีเป็นภาษาที่นิยมในการเขียนโปรแกรมพื้นฐาน • สามารถประยุกต์ใช้กับงานต่างๆ ได้แก่ – ระบบปฏิบัติการคอมพิวเตอร์ – การคานวณทางคณิตศาสตร์ – โปรแกรมทางไฟฟ้า อิเล็กทรอนิกส์และ ไมโครคอนโทรลเลอร์

• ภาษาซีที่เป็นรากฐานของภาษาอื่นๆ • ภาษาซีเป็นภาษาเชิงคาสั่ง

https://th.wikipedia.org/wiki/ภาษาซี


โครงสร้างของโปรแกรมภาษาซี • • • • •

Preprocessor Commands Functions Variables Statements & Expressions Comments

http://siwanatsirilert57170112.blogspot.com/2015/05/c-dennis-ritchie-c-b-ken-thomson-bcpl.html


Preprocessor Commands • จัดการค่าเริ่มต้นของโปรแกรมจาก source code ก่อน compile จริง • ดึงข้อมูลจากไฟล์อื่นมาใช้แทน • เครือ่ งหมาย # หน้า คาสั่ง preprocessor directives

https://www.codingunit.com/cplusplus-tutorial-preprocessor-directives


Preprocessor Commands

https://www.tutorialspoint.com/cprogramming/c_preprocessors .htm http://marcuscode.com/lang/cpp/preprocessor-directives http://www.cs.science.cmu.ac.th/person/areerat/204216/LectureNote/CompilerDirective.pdf


Source file inclusion (#include) • • • • •

#include การรวมไฟล์อื่นเข้ากับ source program รูปแบบการใช้ดังนี้ #include <filename> หรือ #include “filename” เป็นไฟล์ข้อความ (text file) < > หมายถึง ไฟล์ใน system.s จากโฟลเดอร์ (C:\TC\INCLUDE) “” หมายถึง ไฟล์ใน directory เดียวกับ source code #include <stdio.h> #include <iostream> #include<my.cpp>

includes stdio.h from include folder includes cpp class library header iostream includes my.cpp file from include folder

#include “my.h” #include “myfolder/abc.h”

includes my.h file from current working folder includes abc.h file from the myfolder which is available in current working folder

https://www.codingunit.com/cplusplus-tutorial-preprocessor-directives


macro definitions (#define, #undef) • การกาหนดค่าคงที่ด้วยสัญลักษณ์ (Symbolic Constant) คือ การตั้งชื่อ ให้กับข้อมูลที่มีค่าคงที่หรือ แทนคาสั่ง • เพื่อสะดวกในการอ้างถึงและแก้ไขข้อมูล • มักนิยมใช้เป็นตัวพิมพ์ใหญ่เพื่อให้แตกต่างจากตัวแปร • รูปแบบ #define identifier replacement เช่น • #define PI 3.1414 • #define STR1 .C Programming Language • #define PR printf


Predefined Macros


Conditional inclusions (#ifdef, #ifndef, #if, #endif, #else and #elif)

• คาสั่งที่ถูกใช้เพื่อตรวจสอบว่า macro directives ได้ถูกสร้างก่อนหน้านี้ แล้วหรือไม่ และไม่สาคัญไม่ว่าค่ามันจะเป็นอะไร


Line control (#line) • คาสั่งทีอ่ นุญาติให้เราสามารถควบคุมว่าโปรแกรมจะแสดงข้อผิดพลาด อย่างไร


Error directive (#error) • Error directive ถูกใช้เพื่อหยุดการคอมไพล์ในบางโอกาส มักจะถูกใช้กับ conditional directives ถ้ามีเงื่อนไขที่ตรง


ฟังก์ชัน (Functions) • ฟังก์ชันหลัก ค่าเริ่มต้นของโปรแกรมภาษาซี • ฟังก์ชันย่อย – ฟังก์ชันพื้นฐาน – ฟังก์ชันที่สร้างขึ้นเพื่อใช้งาน

• ประโยชน์ของฟังก์ชัน – นากลับมาใช้ซ้าได้ – ลดความซ้าซ้อนในการเขียนโปรแกรม – การแยกส่วนประกอบของโปรแกรม

http://marcuscode.com/lang/c/functions


ฟังก์ชันหลัก Main() • • • • •

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

http://www.businessnewsdaily.com/4686-how-to-start-a-business.html

https://sunisara.wordpress.com/2012/05/25/


ฟังก์ชันที่สร้างขึน้ เพื่อใช้งาน

1

http://marcuscode.com/lang/c/functions


ค่าส่งกลับ (Return Value) • • • •

ฟังก์ชันจะส่งค่ากลับไปให้กับฟังก์ชั่นทีเ่ รียก ผ่านชื่อฟังก์ชัน ผลลัพธ์ของฟังก์ชัน (output) คาสั่ง return ค่าที่ต้องการส่งกลับ ระบุประเภทของผลลัพธ์ที่จะส่งค่ากลับ

http://www.kktrade.co.th/kkicube/faq.php


ฟังก์ชันในภาษา C • ฟังก์ชันรับข้อมูลและฟังก์ชันแสดงผลข้อมูล

NetCDF-C Libraries http://www.unidata.ucar.edu/software/netcdf/docs/winbin.html


การประกาศตัวแปร (Variables) • ตัวแปรและค่าคงที่ • ประเภทของตัวแปร • ขอบเขตของตัวแปร – เฉพาะส่วน (local variable) – ส่วนรวม (global variable)

• การกาหนดค่าตัวแปร

https://www.codecademy.com/en/forum_questions/53a6b2c48c1ccc0d3d0039eb https://www.codecademy.com/en/forum_questions/514900b642e721e65d0003f1


ตัวแปรและค่าคงที่ • ค่าคงที่ (constant) ไม่สามารถเปลี่ยนแปลงค่าในภายหลังได้ • ตัวแปร (Variables) สามารถเปลี่ยนแปลงค่าได้ – ใช้สาหรับเก็บข้อมูลในหน่วยความจา – ใช้ชื่ออ้างถึงข้อมูล (identifier) – ตัวแปรถูกใช้เพื่อเก็บค่าของข้อมูลชนิดต่างๆ ได้ – สามารถสร้างตัวแปรได้เป็นจานวนมากโดยมีชื่อที่แตกต่างกัน

• รูปแบบของการประกาศตัวแปรในภาษา C type identifier; type identifier = value; http://www.whatprogramming.com/Java/java-variable-types-and-scope/

http://www.tenouk.com/Module8.html


ชนิดของตัวแปร

• ตัวแปรที่มีเครื่องหมาย * ไม่ใช่ตัวแปรของภาษา C ตามมาตรฐาน ANSI C

http://www.mcuthailand.com/articles/mcs/Constant.html


ค่าคงที่ (Typed constant) • • • •

ภาษา C สามารถประกาศค่าคงที่ได้ รูปแบบ const data_type identifier = value; ประกาศค่าคงที่เหมือนกับตัวแปร แต่มีคาสั่ง const นาหน้า ทีที่สร้าง ค่าของข้อมูลอาจเป็นค่าคงที่หรือตัวแปรก็ได้

int i ; // สร้างตัวแปรชื่อ i สาหรับเก็บข้อมูลจานวนเต็ม char data ; // สร้่างตัวแปรชื่อ data สาหรับเก็บข้อมูลชนิดตัวอักษร float num ; // สร้างตัวแปรชื่อ num สาหรับเก็บข้อมูลชนิดทศนิยม int num = 1 ; // สร้างตัวแปรชื่อ num สาหรับเก็บข้อมูลจานวนเต็ม และมีค่าเริ่มต้นเท่ากับ 1 char font = 'A' ; // สร้างตัวแปรชื่อ font สาหรับเก็บข้อมูลชนิดตัวอักษร และมีค่าเริ่มต้นเป็น ASCII คือ A int x = 0xFF ; // สร้างตัวแปรชื่อ x สาหรับเก็บข้อมูลจานวนเต็ม และมีค่าเริ่มต้นเป็น 0xFF อยู่ในรูปฐานสิบหก unsigned int x,y,z ; // สร้างตัวแปร 3 ตัว ชื่อ x, y และ z สาหรับเก็บข้อมูลจานวนเต็ม แบบไม่คิดเครื่องหมาย

http://www.mcuthailand.com/articles/mcs/Constant.html


executable statement & Expressions • • • • •

เครื่องคอมพิวเตอร์จะทาตามคาสั่ง (Statements) ในโปรแกรมที่สร้างขึ้น โปรแกรมคอมพิวเตอร์ ประกอบไปด้วยคาสั่งต่าง ๆ แต่ละคาสั่งจะเขียนด้วยตัวอักษรพิมพ์เล็ก ใช้เครื่องหมาย ; เพื่อให้รู้ว่าจบคาสั่ง นิพจน์ (Expressions) หมายถึง การนาตัวแปร (variables) หรือค่าคงที่ (constant) มาสัมพันธ์กันด้วยสัญลักษณ์ต่างๆ เช่น – เครื่องหมายทางคณิตศาสตร์ (เช่น + - * / ) – เครื่องหมายเปรียบเทียบ (เช่น > = <) – เครื่องหมายตรรกะ (เช่น OR, NOR)


Expression statements

http://www.cprogrammingexpert.com/C/Tutorial/fundamentals/expression_statement.aspx


คาสั่ง (Statements) • Statement คือคาสั่งที่ใช้สั่งให้คอมพิวเตอร์ทางานต่างๆ ซึ่งแบ่งออกได้ เป็น 3 ประเภทคือ – Expression Statement (operation) • เครื่องหมายทางคณิตศาสตร์ (เช่น + - * / ) • เครือ่ งหมายเปรียบเทียบ (เช่น > = <) • เครือ่ งหมายตรรกะ (เช่น OR, NOR)

– Compound Statement {} – Control Statement (if else, case, while, do while, for)


นิพจน์ (Expressions) • การแทนค่า หรือการหาค่าของ data เช่น ตัวเลขหรือตัวแปร • ประกอบด้วยสมาชิกเพียงตัวเดียว เช่นค่า constant ตัวแปร • ประกอบด้วยตัวแปรหลายตัว สัมพันธ์กันด้วยเครื่องหมาย (operator) • ตัวดาเนินการแบ่งออกได้เป็นหลายชนิดได้ดังนี้ – Arithmetic operator – Unary operator – Relational and logical operator – Assignment operator – Condition operator


คาอธิบาย (Comments) • //แบบบรรทัดเดียว

• /* • แบบหลายบรรทัด • */


C-Tokens • คาที่ภาษาซี สงวนไว้ในการประมวลผล • ไม่สามารถนาไปตั้งชื่อตัวแปรหรือฟังก์ชันได้ • ตัวอย่างเช่น

http://swamios.com/basic-elements/


การแยกไฟล์ของภาษาซี • • • • • • • • •

ไฟล์นามสกุล *.c เริ่มต้นที่ฟังก์ชัน main() ในโปรแกรมจะมีฟังก์ชัน main() ได้ฟังก์ชันเดียว สร้างฟังก์ชันหรือไลบรารีจัดเก็บไว้ในแต่ละไฟล์ได้ จัดเก็บไว้ภายในโฟลเดอร์เดียวกัน เรียกใช้ผ่านการประกาศไว้ก่อนฟังก์ชัน main() เรียกใช้ผ่านชื่อไฟล์ เรียกใช้ผ่านชื่อฟังก์ชัน สามารถรับส่งค่าระหว่างฟังก์ชันได้


ตัวอย่างการเขียนโปรแกรม


ตัวแปลภาษา • • • •

ชุดแปลโปรแกรมของกนู (GNU Compiler Collection) หรือ (GCC) เป็นชุดโปรแกรมแปลโปรแกรมสาหรับแปลภาษาโปรแกรมต่าง ๆ พัฒนาโดยโครงการกนู (GNU) และแจกจ่ายเป็นซอฟต์แวร์เสรี โดยชุด GCC ถือว่าเป็นชุดคอมไพเลอร์มาตรฐานในระบบปฏิบัติการแบบ ยูนิกซ์ อย่างเช่น ลินุกซ์ หรือ Mac OS X เป็นต้น • ชื่อเดิมของ GCC คือ GNU C Compiler เนื่องจากในระยะแรกถูก พัฒนาขึ้นเป็นคอมไพเลอร์ของภาษาซีเท่านั้น

https://th.wikipedia.org/wiki/ชุดแปลโปรแกรมของกนู


เครื่องมือที่รองรับการเขียนภาษาซี • การวิเคราะห์ภาษาที่ใช้จากนามสกุลของไฟล์ แล้วเรียกพรีโพรเซสเซอร์ คอมไพเลอร์ แอสเซมเบลอร์ และ ลิงเกอร์ ตามลาดับ


Best IDEs for C/C++ Programming 1. Netbeans for C/C++ Development 2. Code::Blocks 3. Eclipse CDT(C/C++ Development Tooling) 4. CodeLite IDE 5. Bluefish Editor 6. Brackets Code Editor 8. Atom Code Editor 9. Sublime Text Editor 10. JetBrains CLion 11. Microsoft’s Visual Studio Code Editor 12. KDevelop 13. Geany IDE 14. Ajunta DeveStudio 15. The GNAT Programming Studio 16. Qt Creator 17. Emacs Editor 18. VI/VIM Editor http://www.tecmint.com/best-linux-ide-editors-source-code-editors/

http://ccm.net/download/c-c-21


ตัวอย่างโปรแกรมที่เขียนด้วยภาษาซี #include "stdio.h" #include "conio.h"

for( i = 0; i<9 && winner==0; i++){ clrscr(); printf("\n\n"); printf("\t\t\t\t %c | %c | %c\n", board[0][0], board[0][1], board[0][2]); printf("\t\t\t\t---+---+---\n"); printf("\t\t\t\t %c | %c | %c\n", board[1][0], board[1][1], board[1][2]); printf("\t\t\t\t---+---+---\n"); printf("\t\t\t\t %c | %c | %c\n", board[2][0], board[2][1], board[2][2]); player = i%2 + 1;

void main(){ int i = 0; int player = 0; int go = 0; do{ printf("\n\t\tPlayer %d, please enter the number [your] %c: ", int row = 0; int column = 0; player,(player==1)?'X':'O'); scanf("%d", &go); int line = 0; row = --go/3; int winner = 0; column = go%3; char board[3][3] = }while(go<0 || go>9 || board[row][column]>'9'); { board[row][column] = (player == 1) ? 'X' : 'O'; {'1','2','3'}, if((board[0][0] == board[1][1] && board[0][0] == board[2][2]) || {'4','5','6'}, (board[0][2] == board[1][1] && board[0][2] == board[2][0])) {'7','8','9'} winner = player; };

clrscr(); printf("\n\n"); printf("\t\t\t\t %c | %c | %c\n", board[0][0], board[0][1], board[0][2]); printf("\t\t\t\t---+---+---\n"); printf("\t\t\t\t %c | %c | %c\n", board[1][0], board[1][1], board[1][2]); printf("\t\t\t\t---+---+---\n"); printf("\t\t\t\t %c | %c | %c\n", board[2][0], board[2][1], board[2][2]); if(winner == 0) printf("\n\t\t\tHow boring, it is a draw\n"); else printf("\n\t\tCongratulations, player %d, YOU ARE THE WINNER!\n", winner); }

else for(line = 0; line <= 2; line ++){ if((board[line][0] == board[line][1] && board[line][0] == board[line][2])|| (board[0][line] == board[1][line] && board[0][line] == board[2][line])) winner = player; }

http://cpe-programming.blogspot.com/2012/10/xo.html

http://www.comscidev.com/howto/ตัวอย่างภาษาซี/


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


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.