ภาษา C
ภาษา CData type ภาษา C กาหนดให้มีรูปแบบของข้อมลู หลายชนิดด้วยกนั การกาหนดชนดิ ของตวั แปร(Data หรือ Variable) จะเป็ นการกาหนดขนาดของ memory ท่ีใช้แทนตวั แปรนนั้ ๆ ด้วย ชนิดของตวั แปรท่ีใช้กนั โดยทวั่ ไปคือ int char float และ double Data type คาอธิบาย จานวน memory ท่ีใช้กนั โดยทวั่ ไปint แทนตวั แปรจานวนเตม็ 2 bytechar แทนตวั แปรชนิดตวั อกั ษร 1 bytefloat ตวั เลขจานวนทศนยิ ม 4 bytedouble ตวั เลขจานวนทศนิยมซงึ่ มีจานวน 8 byte ทศนยิ มเป็นสองเทา่ ของ floatนอกจากนีย้ งั มีตวั แปรอย่างอื่นอีกเชน่ short ,long ,signed และ unsigned2. Constant (คา่ คงที่) การประกาศตวั แปรตา่ งๆ ในภาษา c เป็นเพียงการประกาศชื่อและชนดิ ของตวั แปรที่จะใช้ในโปรแกรมเทา่ นนั้ ไมไ่ ด้กาหนดคา่ เร่ิมต้นให้แตอ่ ยา่ งใด อยา่ งไรก็ตาม ตวั แปรเหลา่ นีส้ ามารถกาหนดเป็นคา่ คงท่ีได้ ตามหลกั การประกาศคา่ คงท่ีของตวั แปร เชน่ การกาหนดคา่ คงท่ีของตวัแปรชนิดตวั เลข จะต้องประกอบด้วยตวั เลขเพียงอยา่ งเดียว ไมม่ ีเครื่องหมายอ่ืนใดเชน่ .(ทศนยิ ม) หรือ , (เครื่องหมายวรรคตอน) อาจมีเพียงเครื่องหมาย - (ลบ) นาหน้าได้อยา่ งเดยี ว การประกาศคา่ คงที่ของข้อมลู ชนดิ ตา่ งๆ จะแตกตา่ งกนั ในรายละเอียดขนึ ้ อยกู่ บั ชนิดของตวั คงที่ดงั นี ้ 2.1 ค่าคงท่ชี นิด integer (integer constant) แบง่ ออกได้เป็น 3 ชนดิ คอื2.1.1 ค่าคงท่ชี นิดเลขฐานสิบ (Decimal constant) - ประกอบด้วยตวั เลข 0-9 - ถ้าประกอบด้วยตวั เลขมากกวา่ หนง่ึ ตาแหนง่ ตวั เลขตาแหนง่ แรกจะต้องไมเ่ ป็น 0 (ศนู ย์)ตัวอย่าง 0 1 743 5480 9219
ตัวอย่างท่ผี ิด (มีทศนยิ ม) (มีเครื่องหมาย ,) 10.2 (มีชอ่ งวา่ งระหวา่ งตวั เลข) 15,321 (มีเคร่ืองหมาย -) 10 20 30 (นาหน้าด้วยเลข 0) 123-456 09002.1.2 ค่าคงท่ชี นิดเลขฐานแปด (Octal integer) ประกอบด้วยเลข 0 - 7 ตวั เลข ตวั เลขตวั แรกต้องเป็น 0 เสมอตวั อย่าง 0 01 0743 0777ตัวอย่างท่ผี ิด ไมไ่ ด้นาหน้าด้วย 0 ประกอบด้วยเลข 8 743 ประกอบด้วยทศนิยม 05280 0777.772.1.3 ค่าคงท่ชี นิดเลขฐานสบิ หก (Hexadecimal integer) - ประกอบด้วย 0-9 และตวั เลข A-F หรือ a-f เมื่อ A (หรือ a) - F (หรือ f) คือ คา่ 10-15 - เขียนนาหน้าด้วย 0X เสมอตัวอย่าง 0X1 0X7FFF 0xabcd
ตัวอย่างท่ผี ิด ประกอบด้วยทศนยิ ม ไมม่ ี X 0X12.34 ประกอบด้วยทศนยิ ม 0BE38 ประกอบด้วย 'G' 0X.46FF 0XDEFG2.1.4 ค่าคงท่ชี นิดทศนิยม (floating point constant) คอื คา่ คงท่ีฐานสบิ ที่ประกอบด้วย ตวั เลขจานวนเตม็ และเลขทศนิยม เขียนโดยการใช้เคร่ืองหมายทศนยิ ม (.) คนั่ เชน่ 0. 1. 0.2 87.504 หรือการใช้เคร่ืองหมาย exponential (E หรือ e) เชน่ 2E-8 0.006e-3 1.6667E+8ตัวอย่างท่ผี ิด ไมม่ ีทศนิยม มีเคร่ืองหมาย , 1 ตวั เลขหลงั E ต้องเป็นจานวนเตม็ 1,000.0 มีชอ่ งวา่ งระหวา่ งตวั เลข 2E+10.2 3E 102.1.5 ค่าคงท่ชี นิดตัวอักษร (Character constant) คา่ คงท่ีตวั อกั ษรประกอบด้วยตวั อกั ษรเพียงตวั เดยี ว อยใู่ นเครื่องหมาย ' 'ตัวอย่าง 'A' 'X'
'Z''''?'2.1.6 Escape Sequence ตวั อกั ษรพเิ ศษบางตวั ท่ีมีความหมาย เฉพาะในภาษา C เขียนด้วยเคร่ืองหมาย \ (BackSlash) และตามด้วยตวั อกั ษรอีกตวั หนงึ่ ทาให้เกิดความหมายพิเศษดงั ตวั อยา่ งEscape Sequence Bell ความหมาย \a \b Backspace \t Horizontal tab \v Vertical tab \n Newline \f Form feed \r Carriage return \\" Quotation mark \' Apostrophe \? Question mark \\ Backslash \0 Null2.1.7 String Constant (คา่ คงที่ชนดิ string) เป็นคา่ คงที่ชนิดตวั อกั ษรหลายตวั (String) เขียนด้วยตวั อกั ษรอยา่ งน้อยหนง่ึ ตวั ขนึ ้ ไป อยู่ภายใต้เครื่องหมาย \" \"ตัวอย่าง \"green\" \"Prince of Songkla University\" \"20-30-571\" \"$19.95\" \"2*3-15\"
\"\"\"\"3.ตวั แปร (Variable)ตวั แปรใช้สาหรับ การเรียกแทนคา่ ชนิดตา่ งๆ ในโปรแกรม เชน่ ตวั แปรอยา่ งงา่ ยท่ีใช้เรียกแทนคา่ ข้อมลู ชนิดตา่ งๆ เชน่int a,b,c; ตวั แปรชนดิ integerchar d; ตวั แปรชนิด character การกาหนดช่ือของตวั แปร และชนดิ ของตวั แปรดงั ตวั อยา่ ง ข้างต้นนีเ้รียกวา่ การประกาศชื่อตวั แปร เม่ือตวั แปรใดๆ ได้รับการประกาศชื่อและชนิดแล้ว สามารถกาหนดคา่ ให้กบั ตวั แปรนนั้ ๆ ได้หลายวธิ ี เชน่ กาหนดคา่ โดยตรง โดยการใช้เคร่ืองหมาย = เชน่ a=3 b=5 c=2 d='w' กาหนดคา่ ท่ีได้จากการคานวณ เชน่ a=b-c a=10*24.การประกาศตวั แปร (Variable Declaration) การประกาศตวั แปร คือ การกาหนดชนดิ และชื่อตวั แปรตา่ งๆ ตวั แปรทกุ ตวั ในโปรแกรมภาษา C ต้องได้รับการประกาศก่อนการเรียกใช้เสมอรูปแบบการประกาศช่ือตัวแปร data type variable name; หรือ data type variable name1, variable name2, … ;เชน่ int a; int b,c,d; float root1, root2,square;
char flag;short int x;long int y;5.Expression คือการแทนคา่ หรือการหาคา่ ของ data ตา่ งๆ เชา่ นตวั เลขหรือตวั แปรชนดิ ตา่ งๆexpression อาจจะประกอบด้วยสมาชิกเพียงตวั เดยี ว เชน่ คา่ constant ตวั แปร และอาจจะประกอบด้วยตวั แปรหลายตวั สมั พนั ธ์กนั ด้วยเครื่องหมาย (operator) ตา่ งๆตัวอย่าง เมื่อ a และ b คอื ตวั แปร และ + คือ operator a+b ให้คา่ true (ไมใ่ ช่ 0) ถ้า x น้อยกว่า หรือเทา่ กบั y และให้คา่ false (0) เมื่อ x=y x มากกวา่ y c=a+b ให้คา่ true เมื่อ x มีคา่ เทา่ กบั y มิฉะนนั้ จะเป็น false x<=y เป็นการเพมิ่ คา่ ของตวั แปร I ด้วย 1 x==y I=I+1Expression ยงั สามารถใช้แทนคา่ logical operation ซงึ่ ให้คา่ true หรือ false (อยา่ งใดอยา่ งหนง่ึ ) อย่างไรก็ตามเงื่อนไข (condition) ในภาษา C จะมีคา่ เป็น 1 สาหรับคา่ true และ 0 สาหรับคา่ false6.Statement Statement ในภาษา C คือคาสงั่ ท่ีใช้สงั่ ให้คอมพิวเตอร์ทางานตา่ งๆ ซง่ึ แบง่ ออกได้เป็ น 3ประเภทคือ expression statement, compound statement และ control statement ดงัรายละเอียดดงั นี ้ 6.1 Expression Statement เป็นการเขียนคาสงั่ ในโปรแกรม ซง่ึ ประกอบด้วย expression และเครื่องหมายsemicolon(;) เชน่
a=3; ----------- b=x+y; ----------- printf(\"This line is also an expression\"); ----------- statement และ บางครัง้ เรียกวา่ assignment statement 6.2 Compound Statement คอื การนาเอา expression statement มารวมกนั เป็นกลมุ่ เดยี วกนั ภายใต้เคร่ืองหมาย {และ } เชน่ { a=b; c=a+10; printf(\"Value of c is %d\n\",c); } 6.3 Control Statement เป็น statement อีกรูปแบบหนงึ่ ของภาษา C ที่ใช้ในการควบคมุ การทางานของโปรแกรมตามเงื่อนไขตา่ งๆ ที่กาหนดขนึ ้ (รายละเอียดดไู ด้จากบทตอ่ ไปเร่ือง Control Statement) ตวั อยา่ งControl Statement ในภาษา C เชน่ for while do..while switch etc7.Symbol Constant เป็นการกาหนดคา่ คงที่ให้กบั คา่ ตา่ งๆ โดยปกตจิ ะกาหนดในตอนเริ่มต้นของโปรแกรมคา่ คงท่ีและช่ือเหลา่ นี ้จะได้รับการแทนท่ีในชว่ งของการคอมไพล์โปรแกรมรูปแบบการกาหนด #define name textเมื่อ name คอื ช่ือท่ีใช้เรียก (Symbolic name) โดยปกตจิ ะเขียนด้วยตวั อกั ษรตวั ใหญ่
text คอื คา่ ที่ต้องการกาหนดให้กบั Symbolic name นี ้Note ไมม่ ีเคร่ืองหมาย ; ในบรรทดั #define นี ้ตัวอย่าง 3.141593 #define PI 1 #define TRUE 0 #define FALSE \"Susan\" #define MYFRIENDตวั แปรคา่ คงท่ีนีส้ ามารถนาไปใช้ใน expression ตา่ งๆ ได้ เชน่ area = PI * radius * radius;8.Operator and Expressions Operator แบง่ ออกได้เป็ นหลายชนิดได้ดงั นี ้ Arithmetic operator Unary operator Relational and logical operator Assignment operator Condition operator 8.1 Arithmetic operator ประกอบด้วยเครื่องหมายที่ใช้ในการคานวณ ทางคณิตศาสตร์คอื + (เคร่ืองหมาย + ) แทนการบวก - (เคร่ืองหมาย - ) แทนการลบ * (เคร่ืองหมาย * ) แทนการคณู / (เคร่ืองหมาย / ) แทนการหาร % (เครื่องหมาย % ) การหาคา่ เศษเหลือ (modulus operator)ข้อสังเกต ไมม่ ี Exponential Operator ในภาษา C แตม่ ี library function (เชน่ pow() ) สาหรับการหาคา่ ยกกาลงั (Exponential)
เครื่องหมายการคานวณทางคณิตศาสตร์เหลา่ นีแ้ ละเครื่องหมายอ่ืนๆ ท่ีจะได้กลา่ วถึงตอ่ ไป มีลาดบั ความสาคญั ไมเ่ ทา่ กนั เครื่องหมายท่ีมีลาดบั ความสาคญั (precedence) สงู จะได้รับการคานวณ (หรือการ evaluate) ก่อนเสมอเชน่ เคร่ืองหมาย * และ / จะมีลาดบั ความสาคญั มากกวา่ เคร่ืองหมาย + และ - โดยที่ * และ /จะมีลาดบั ความสาคญั เทา่ กนั (และในทานองเดยี วกนั ที่เครื่องหมาย + และ - มีลาดบัความสาคญั เทา่ กนั ) ในกรณีท่ีเครื่องหมายมีลาดบั ความสาคญั เทา่ กนั ภาษา C จะกาหนดลาดบั ของการทางานไว้ในรูปแบบท่ีคล้ายกบั การคานวณทางคณิตศาสตร์ ทว่ั ไปเชน่ ถ้าลาดบั ความสาคญั ของเคร่ืองหมายทางคณิตศาสตร์เท่ากนั จะทาการคานวณจากซ้ายไปขวา อยา่ งไรก็ตามถ้าผ้ใู ช้ต้องการเปล่ียนแปลงลาดบั ความสาคญั ของเครื่องหมายตา่ ง ๆ ทาได้โดยใช้วงเลบ็ เชน่ a–b/c*d จะมีความหมายทางคณิตศาสตร์คือ a - [(b / c) * d ] แตส่ ามารถเปลี่ยนลาดบั การทางานได้โดยใช้วงเลบ็ ( ) เชน่ (a - b) / c * dหรือ (a - b) / (c * d) 8.2 Unary Operator คอื operator ที่มี operand (ตวั ถกู กระทา) เพียงตวั เดยี วเชน่ Unary minus คือ -743 -0.2 -(x+y) หรือ increment operator คอื ++ (เป็นการเพิม่ คา่ ด้วย 1) และ decrement operator คอื -- (เป็นการลดคา่ ด้วย 1)ตวั อย่าง ++I (หรือ I++) จะมีคา่ ความหมายเทา่ กบั I = I + 1 และ - -I (หรือ I- - ) มีความหมายเทา่ กบั I = I – 1
Note ตาแหนง่ ของเครื่องหมาย ++ และ - - จะมีผลตอ่ การเปล่ียนแปลงคา่ ของตวั แปร นนั่ คือถ้าเครื่องหมาย ++ หรือ - - อยขู่ ้างหน้าตวั แปร คา่ ของตวั แปรนนั้ จะถกู เปลี่ยน (เพม่ิ ขนึ ้ หรือลดลง)ก่อนจะถกู นาไปใช้ แตถ่ ้าเครื่องหมายนี ้อยขู่ ้างหลงั ตวั แปร คา่ เดมิ ของตวั แปรจะถกู นาไปใช้กอ่ นแล้วคอ่ ยเปลี่ยนแปลงตัวอย่าง ถ้าให้ I = 1; ------------ Printf(\"I = %d\n\",i); ------------ Printf(\"I = %d\n\",++i); ------------ Printf(\"I = %d\n\",i); ------------ เมื่อชดุ ของคาสงั่ นีไ้ ด้รับการ execute ผลลพั ธ์ท่ีได้คอื I = 1 (จากบรรทดั ท่ี ) I = 2 (จากบรรทดั ท่ี ) I = 2 (จากบรรทดั ท่ี ) และถ้าให้ I = 1; ------------ Printf(\"I = %d\n\",i); ------------ Printf(\"I = %d\n\",I++); ------------ Printf(\"I = %d\n\",i); ------------ ผลลพั ธ์ที่ได้คอื I =1 (จากบรรทดั ที่ ) I = 1 (จากบรรทดั ที่ ) I = 2 (จากบรรทดั ท่ี )
8.3 Relational and logical Operator เป็นเคร่ืองหมายทางคณิตศาสตร์ ท่ีให้คา่ ของการทางานเป็น คา่ จริง (true) หรือเทจ็(false) โดยท่ีคา่ true ในภาษา C จะมีคา่ เป็นหนง่ึ สว่ นคา่ false คอื คา่ ศนู ย์ เคร่ืองหมายที่ใช้สาหรับ Relational expression คือ > แทนการเปรียบเทียบคา่ มากกวา่ >= แทนการเปรียบเทียบคา่ มากกวา่ หรือเทา่ กนั < แทนการเปรียบเทียบคา่ น้อยกวา่ <= แทนการเปรียบเทียบคา่ น้อยกวา่ หรือเทา่ กนั == แทนการเปรียบเทียบคา่ เทา่ กนั != แทนการเปรียบเทียบคา่ ไมเ่ ทา่ กนั นอกจากนีย้ งั มีเคร่ืองหมาย && แทน logical AND และ || แทน logical ORโดยที่ && จะให้คา่ จริง เมื่อ operand ทงั้ สองมีคา่ จริง || จะให้คา่ เทจ็ เม่ือ operand ทงั้ สองมีคา่ เทจ็เชน่ 101 && 111 จะได้ผลลพั ธ์เป็น 101 101 || 111 จะได้ผลลพั ธ์เป็น 111 หรือจากตวั อยา่ งในตารางข้างลา่ ง AND 1 0 110 000 OR 1 0 111 010
ตัวอย่าง ถ้าให้ I =7 c = w' และ f = 5.5 Expression Interpretation Value (I >= 6) && (c == 'w') True 1 (f > 11) || (I > 100) False 0 (c != ‘p') || ((I + I) <= 10) True 1 นอกจากนีย้ งั มี unary operator ! ซงึ่ แทนคาปฏิเสธ (not ) ของ expression นนั้ ๆเชน่ Expression Interpretation Value f > 5 False 0 !( f > 5) True 1 I <= 3 False 0 !( I <= 3) True 1 I > (f + 1) True 1 !( I > (f + 1)) False 0 8.4 Assignment Operator คอื การใช้เคร่ืองหมาย = เพื่อใช้ในการกาหนดคา่ สดุ ท้ายให้กบั ตวั แปรทางซ้ายมือ โดยมีรูปแบบดงั นีค้ ือ identifier หรือ variable = expressionโดยท่ี expression อาจเป็ นได้ทงั้ คา่ ของ constant variable
หรือ complex expressionตวั อย่าง a=3 x=y delta = 0.001 sum = a + b area = length * width การใช้เครื่องหมาย = (assignment operator) เพ่ือกาหนดคา่ ให้กบั ตวั แปร เชน่ นีเ้รียกวา่assignment expression หรือบางครัง้ เรียกวา่ assignment statementใน expression statement ใดๆ ถ้า operand ทงั้ หมดของ statement มีชนดิ (data type)ตา่ งกนั ค่าสดุ ทา้ ยของ expression จะมีรูปแบบหรือชนิดเดียวกบั operand ทางซ้ายมือเสมอ ดงั นนั้ ผ้เู ขียนโปรแกรมจะต้องระมดั ระวงั เรื่องนีด้ ้วย เนื่องจากผลลพั ธ์ท่ีได้อาจเปล่ียนแปลงไป ตามชนดิ ของตวั แปรทางซ้ายมือดงั นี ้ ถา้ ค่าตวั แปรชนิด floating point ถกู เปลีย่ นใหเ้ ป็นค่าตวั แปรชนิด integer ค่าของ ทศนิยมอาจถูกตดั ทิ้งไป ถา้ ค่าตวั แปรชนิด double precision ถกู เปลีย่ นเป็นค่าตวั แปรชนิด floating point ค่าความถูกตอ้ งของทศนิยมหลกั หลงั ๆ อาจจะถูกปัดทิ้ง ค่าตวั แปรชนิด integer อาจเปลีย่ นแปลงได้ ถา้ ถูกเปลี่ยนใหเ้ ป็นค่าตวั แปร ชนิด signed หรือ short หรือ charตัวอย่าง ถ้าให้ int I,j;และ j = 5Expression ValueI = 3.3 3I = 3.9 3I = -3.9 -3I=j 5I=j/2 2I=2*j/2 5
I=2*j/2 48.5 Multiple Assignmentsรูปแบบ identifier1 = identifier2 = identifier3=…..= expression LRเป็นการกาหนดคา่ เดียวกนั ให้กบั ตวั แปรหรือ identifier หลายๆ ตวัตัวอย่าง I=j=5 นนั้ คือ การกาหนดคา่ 5 ให้แก่ ตวั แปร I และ j8.6 Additional assignment operator นอกจาก assignment operator ที่กลา่ วแล้วยงั มี assignment operator อีกประเภทที่ประกอบด้วยเครื่องหมาย + - * / และเคร่ืองหมาย = ดงั ตวั อยา่ ง += -= *= /= %=รูปแบบการใช้ (ตวั อยา่ งของ += ) expression1 += expression2ซงึ่ มีความหมายเหมือนกบั expression1 = expression1+expression2เชน่ a += b คือ a = a + b และ a += 1 คือ a = a + 1 (หรือนนั้ คือ a++ หรือ ++a นนั้ เอง)
ถ้าให้ I = 5, j = 7, f = 5.5, g = -3.25Expression Equivalent Expression Final valueI += 5 I=I+5 10f -= 9 f=f-9 8.25j *= (I - 3) j = j * ( I - 3) 14I %= (j - 2) I = I % (j - 2) 08.6 Condition Operator (?:) Condition Operator จะใช้ในการทดสอบเงื่อนไขตา่ งๆ แบบงา่ ยๆ ซง่ึ มีทางเลือกเพียง 2 ทางเทา่ นนั้ และ expression ที่ใช้ Condition Operator ในการทดสอบเรียกว่าCondition expressionรูปแบบการใช้ expression1? Expression2: expression3การทางาน expression1 จะถกู ตรวจสอบก่อน ถ้ามีผลเป็นจริง expression2 จะถกู ทางานในกรณีท่ีผลของ expression1 เป็น เทจ็ expression3 จะได้รับเลือกแทน expression2 ผลลพั ธ์การทางานใน expression2 หรือ expression3 คือ ผลของ conditionexpression ทง้ั หมดนนั้ เองตวั อย่าง1. ถ้าให้ int I; และ I = 10 ; (I < 0) ? 0 : 100ผลของการทางานคือ I < 0 เป็นเท็จดงั นนั้ expression3 จะถกู เลือก นนั้ คือคา่ 100 คอื ผลลพั ธ์ของ expressionนี ้
2. ถ้าให้ float f,g;และให้ condition expression คอื (f < g) ? f : gการทางาน ถ้า f < g จริง ผลของ expression นีค้ ือคา่ f มฉิ ะนนั้ ผลของ expression คอื คา่ g โดยทว่ั ไป Condition expression จะปรากฎท่ีด้านขวาของ assignment operator(=) ดงั นนั้ ผลของ condition expression จะกลายเป็นคา่ ของ ตวั แปรทางซ้ายของเครื่องหมาย =นน่ั เอง ดงั ตวั อยา่ ง flag = (I < 0) ? 0 : 100;หรือ min = (f < g) ? f : g;(คือการหาคา่ ต่าสดุ ของตวั แปร 2 ตวั คอื f และ g นนั่ เอง)
9. Library Functions ภาษา C กาหนดให้มีสว่ นของโปรแกรมที่ใช้เฉพาะงานและใช้บอ่ ยๆ โดยการเก็บรวบรวมไว้ให้ผ้ใู ช้เรียกใช้ได้ในการเขียนโปรแกรม สว่ นของโปรแกรมสว่ นนีเ้รียกวา่ library function เชน่ฟังก์ชนั ที่ใช้สาหรับการคานวณคา่ ยกกาลงั (pow( )), การคานวณหาคา่ รากท่ีสอง (sqrt( )) ฯลฯ ถึงแม้วา่ library function ไมไ่ ด้เป็นสว่ นหนงึ่ ของ C compiler แตอ่ ยา่ งไรก็ตาม Ccompiler สว่ นใหญ่จะมี ให้ผ้ใู ช้เสมอ เพียง แตจ่ านวนและชนดิ ของฟังก์ชนั อาจจะแตกตา่ งกนั ไป ฟังก์ชนั บางอยา่ งสง่ คา่ ท่ีได้จากการทางานให้ผ้ใู ช้ ในขณะที่บางฟังก์ชนั สง่ คา่ True หรือFalse (1 หรือ 0) และบางฟังก์ชนั ไมม่ ีการสง่ คา่ ให้แก่ instruction ท่ีเรียกใช้แตอ่ ยา่ งใดตัวอย่าง ของ Libraly Function ท่ีใช้กนั เป็นประจาและมีใน C compiler ทว่ั ไป ฟังก์ชนั ทีใ่ ช้ในการจดั การเกี่ยวกบั File เช่น การเปิ ดไฟล์ (open( )) ปิ ดไฟล์ (close( )) อ่านจากไฟล์ (read( )) และการเขียนลงไฟล์ (write( )) ฟังก์ชนั สาหรับการเปลี่ยนค่าตวั อกั ษรจากรูปแบบต่างๆเช่น จากตวั อกั ษรตวั เล็กเป็น ตวั อกั ษรตวั ใหญ่ (toupper( )) และในทางกลบั กนั (tolower( )) ฟังก์ชนั ทีใ่ ชส้ าหรบั การคดั ลอก string (strcpy( )) ฟังก์ชนั ทีใ่ ช้สาหรบั การคานวณค่าทางคณิตศาสตร์และตรีโกณมิติ เช่น abs( ) , sqrt( ), sin( ), cos( ) ฯลฯ หมายเหตุ ฟังก์ชนั ที่มีในแตล่ ะ compiler (ชื่อและวธิ ีการเรียกใช้) ดจู าก programmer’s referencemanual ของแต่ละ compilerตวั อย่าง ฟังก์ชนั ท่ีใช้เป็นประจาในการเขียนโปรแกรมภาษา C ทวั่ ไป
ตัวอย่างโปรแกรมภาษา c จากข้อกาหนดและนยิ ามของการใช้ตวั แปรและคา่ คงท่ีตา่ งๆเบอื ้ งต้นสามารถเขียนโปรแกรมภาษา C แบบงา่ ยๆได้ดงั ตวั อยา่ งตวั อย่างท่ี 1 โปรแกรมภาษา C สาหรับการหาคา่ รากของสมการทางคณิตศาสตร์ (guadraticequation) ax2 + bx + c = 0 โดยการใช้ well- known quadratic formula คือ x = (- b±b2 – 4ac ) / 2a/* Solution for aquardratic equaton*/#include<stdio.h>main(){double a,b,c,root,x1,x2;/*read value for a,b and c*/root = sqrt(b*b –4*a*c);x1 = (-b+root)/(2*a);x2 = (-b-root)/(2*a);/*display balue for a,b,c,x1and x2*/printf(“Value of a = % f \n\t b = %f \n\t c=%f \n\t x1 = %f \n\t x2=%f\n”, a,b,c,x1,x2);}
10. Data Input and Output ทบทวน ฟังก์ชนั ที่ใช้สาหรับ input และแสดงผลลพั ธ์ท่ีได้กลา่ วถงึ แล้วคือ scanf( ) และprintf( ) ในบทนีจ้ ะได้เรียนรู้เก่ียวกบั ฟังก์ชนั อ่ืนๆที่ใช้จดั การ input และ output data เชน่getchar( ), putchar( ), gets( ) และ puts( ) ฟังก์ชนั เหลา่ นีใ้ ช้ในการรับส่งข้อมลู ระหวา่ งคอมพวิ เตอร์และ standard input/outputdevices ซงึ่ คอื keyboard และ monitor ตามลาดบัgetchar( ) เป็น library function ท่ีใช้ในการรับสง่ ข้อมลู จาก keyboard ครัง้ ละ1 ตวั อกั ษร และสง่ให้กบั ตวั แปรที่กาหนด รูปแบบการใช้ variable = getchar( ); เม่ือ char variable; (กาหนดชนิดและชื่อตวั แปรก่อนการเรียกใช้) เชน่ char c; c = getchar( ); การทางาน getchar( ) จะรับ input จาก keyboard ครัง้ ละ 1 ตวั อกั ษรและสง่ ให้กบั ตวั แปร c และสง่คา่ –1 เมื่อฟังก์ชนั่ รับคา่ end of file (EOF – กาหนดไว้ใน stdio.h เป็นคา่ -1) คอื การสิน้ สดุ inputfile หรือคอื คา่ Ctrl-D เม่ือผ้ใู ช้กดป่ มุ นี ้putchar( ) เป็น library function สาหรับการพิมพ์ผลลพั ธ์ทางจอภาพครัง้ ละ 1 ตวั อกั ษร รูปแบบการใช้ char c; putchar(c);
gets( ) และ puts( ) gets( ) ใช้สาหรับการอา่ นข้อมลู จาก standard input device (file) ครัง้ ละหลาตวั อกั ษรเก็บในตวั แปรชนิด array puts( ) สาหรับพิมพ์ข้อมลู ท่ีเก็บในตวั แปรชนดิ array ออกทาง standard output device(file) หรือจอภาพ รูปแบบการใช้ char line[80]; gets(line); puts(line);11. วธิ ีการเร่ิมเขียนโปรแกรม ในการเร่ิมเขียนโปรแกรมครัง้ แรก จาเป็ นต้องวางแผนการทางาน (การเขียนโปรแกรม)ของแตล่ ะโปรแกรมเป็นอยา่ งดี เพ่ือความสะดวกและง่ายตอ่ การแก้ปัญหาโจทย์และการแก้ไขโปรแกรม รวมทงั้ แก้ไขข้อผิดพลาดท่ีอาจจะเกิดขนึ ้ เน่ืองจากการเขียนโปรแกรม ขนั้ ตอนการเขียนโปรแกรมที่ใช้กนั โดยทวั่ ไป หรือท่ีเรียกวา่ วิธีการเขียนโปรแกรมแบบtop-down 1. กาหนดโครงสร้างของการเขียนโปรแกรมทง้ั หมดก่อนการเขียนคาสง่ั งานจริงโดยมี วิธีการดงั นี้ กาหนดลาดบั การทางานแต่ละขน้ั ตอน ไม่ตอ้ งคานึงถึง program instruction ( ภาษา C) 2. กาหนดรายละเอียดและวิธีการทางานของโครงสร้างขนั้ ตน้ โดยการอธิบายดว้ ยภาษา เขียน เพือ่ บอกขนั้ ตอนการทางาน(เรียกว่า psuedocode )ตัวอย่าง เขียนโปรแกรมสาหรับคานวณจานวนเงินฝากในบญั ชีธนาคารในระยะเวลา n ปี นบั จากวนั ฝากเงินต้นจานวน p บาทโดยกาหนดให้ r = อตั ราดอกเบยี ้ ตอ่ ปี F = จานวนสะสมในระยะเวลา n ปี โดยคานวณจากสตู ร F = P( 1 + I )n
เมื่อ I = r / 10011.1 ตัวอย่างการเร่ิมต้นแก้ปัญหาและการเขียนโปรแกรม 1. กาหนดตวั แปรที่ตอ้ งการใช้ในโปรแกรม 2. อ่านค่าตวั แปรทีต่ อ้ งการคือ ค่า p, r และ n 3. คานวณค่า I จากสตู ร I = r/100 4. คานวณค่าเงินสะสมจากสูตร F = P(1 + i) n 5. พิมพ์ค่าเงินสะสม11.2 การเขียน Psuedocode /*Compound interest Calculation*/ main( ) { /*declare the program variables*/ /*read in values for p,r and n*/ /*calculate a value for i*/ /*calculate a value for F*/ /*display the calculate value for F*/ } psuedocode เบอื ้ งต้นเป็นการกาหนดขนั้ ตอนการทางานอยา่ งคร่าวๆสามารถ เขียนรายละเอียดเพ่มิ เตมิ ได้ เชน่ /*Compound interest calculate*/ main( ) { /* declare p,r,n,I and f to be floating point variables*/ /*write a prompt for p and then read its value*/ /* write a prompt for r and then read its value */ /* write a prompt for n and then read its value */ /*calculate I = r/100*/
/*calculate f = p(1+i) n as follows : f = p*pow((1+i),n) where pow is a library function for exponential*/ /*display the value for f*/ }11.3 ขัน้ ตอนการเขียนเป็ นโปรแกรมภาษา C/*Compound interest calculation*/#include<stdio.h>#include<math.h> /*for pow( ) function*/main( ){ float p,r,n,I,f; /*read input data ,including prompts*/ printf (“Please enter a value for the principal(P):”); scanf(“%f” ,& P); printf(“Please enter a value for the interest rat (r):”); scanf(“%f”, &r); printf(“Please enter a value for the number of year(n):”); scanf(“%f”,&n); /*calculate I ,then f*/ I = r/100; F= P * pow(1+i),n; /*display the output*/ printf(“\n The final value (F) is % 2f\n”,f);}11.4 การหาท่ผี ิดพลาดของโปรแกรม เม่ือเขียนโปรแกรมเสร็จแล้ว (จะได้ source code ) ต้องทาการตรวจสอบ และ compileโปรแกรมเพ่ือท่ีจะได้ โปรแกรมที่สามารถเรียกใช้ ( run หรือ execute ) ได้ตอ่ ไป ขนั้ ตอนการcompile และการเรียกใช้โปรแกรม (ตวั อยา่ ง ในระบบ unix ) คอื compile โปรแกรมภาษาC ด้วย C compiler ซง่ึ ชื่อ cc ดงั นี ้
cc program-file.c ถ้าโปรแกรมไมม่ ีท่ีผดิ ที่เกิดจากการใช้คาสงั่ ผิดข้อกาหนด ( error ประเภทนีเ้รียกวา่syntactic error ) จะได้โปรแกรมท่ีสามารถเรียกใช้ (run) ได้ซง่ึ เรียกวา่ เป็ น executable programหรือ (object file) ในขนั้ ตอนของการ compile นนั้ compiler จะสร้าง object file ท่ีชื่อ “a.out” ให้ทกุ ครัง้ หากในขนั้ ตอนของการ compile ถ้า source code (program listing) มีข้อผิดพลาดcompiler จะรายงานข้อผดิ พลาดพร้อมทงั้ อาจจะแสดงบรรทดั ที่ผิดให้ทาง standard error file(ในท่ีนีค้ ือจอภาพเดยี วกนั กบั standard output file) โดยทวั่ ไป syntactic error อาจจะเกิดจากข้อผิดพลาดดงั นี ้ เรียกใช้ตวั แปรทีไ่ ม่ไดป้ ระกาศ การใชค้ าสงั่ งานต่างๆผิดรูปแบบทีก่ าหนด ฯลฯ12. Control Statements การทางานของโปรแกรมคอมพิวเตอร์โดยทว่ั ไปจะทางานตามลาดบั คาสง่ั งาน (instruction)ท่ีปรากฏใน source code โดยทว่ั ไปคาสงั่ งานที่สิน้ สดุ ในคาสง่ั นนั้ ๆ และระบบจะทางานในคาสงั่ถดั ไปเม่ือทาตามคาสงั่ ก่อนหน้าแล้วเสร็จการทางานในลกั ษณะนีจ้ งึ เป็นการทางานตามลาดบักอ่ นหลงั (sequential execution) อยา่ งไรก็ตามในบางครัง้ ผ้เู ขียนโปรแกรมต้องการให้ระบบคอมพิวเตอร์ทางานชดุ คาสงั่ บางกลมุ่ ซา้ ซ้อน โปรแกรมภาษาคอมพิวเตอร์โดยทง่ั ไปได้กาหนดคาสง่ั งานสาหรับใช้ในการควบคมุ การทางานซา้ ๆ เรียกว่า control statements หน้าที่เฉพาะของคาสงั่ งานกลมุ่ นีค้ อื กาหนดเง่ือนไขในการทางานซา้ ของกลมุ่ คาสง่ั งานปกติ ดงั นนั้ จงึ ต้องมีการทดสอบเง่ือนไขและคบคมุ การทางานของโปรแกมจะประกอบด้วยสว่ นประกอบสาคญั ดงั นี ้ 1. relation operator (< , <= , > , >=) equality operator ( = = และ != ) 2. logical connective (logical operators) && (and) และ || (or)
unary operator not (!) 3. condition operator (? : ) 4. ผลจากการทดสอบเงื่อนไขโดยการใช้ operator ดงั กลา่ วข้างต้นผลของการทดสอบจะ มีคา่ เป็นจริง หรือเท็จ เทา่ นนั้ 5. Expression Statement หรือ Compound Statement สาหรับเป็ นคาสงั่ งานที่ต้อง ทาซา้ Control Statement ในภาษา C มีหลายชนิดเชน่ if, while ,do… while, for และ switch ซงึ่ แตล่ ะคาสง่ั มีรูปแบบและการใช้งานท่ีแตกตา่ งกนั ดงั นี ้ 12.1 Branching : The If-else statement คาสง่ั if ใช้ในการทดสอบเง่ือนไขท่ีจะกาหนดให้โปรแกรมเลือกทางานเพียงกรณี เดียวจากผลของการทดสอบ (เท็จหรือจริง) else เป็น optional (จะมีหรือไมม่ ีก็ได้) นนั้ คอื ในกรณีที่ไมจ่ าเป็ นต้องทาใน ทางเลือกที่สองก็ไมจ่ าเป็นต้องมี statement ตา่ งๆหลงั else (หรือไมต่ ้องกาหนด statemnet else นนั้ เอง) รปแบบการใช้ 1. if (expression) statement1 2. if (expression) statement 1 else statement 2 เม่ือ expression คอื statement ที่ใช้ในการทดสอบเงื่อนไขตามวิธีการดงั กล่าวข้างต้นและ statement 1 และ statement 2 เป็นได้ทงั้ คาสง่ั เดี่ยวหรือชดุ คาสง่ั หลายคาสงั่ การทางาน ถ้าผลของการทดสอบเงื่อนไขใน expression เป็นจริง โปรแกรมจะเลือกทางานใน statement1 มิฉะนนั้ ( กรณีที่มี else ) statement2 จะได้รับเลือกให้ทางาน ตวั อย่าง สว่ นหนงึ่ ของคาสง่ั งานในโปรแกรมเมื่อเลือกใช้คาสง่ั if
1. if (x < 0) printf (“X is less than zero \n”);2. if(I > 0) { y = x/I; printf(“I is more than zero an y = %f \n”,y);}3. if ((balance < 100.00) || (status == ‘R’)) printf(“balance is %f \n”,balance);4. if ((a > 0) && (b<= 5)) { xmid = (a+b)/2; ymid = sqrt(xmid); /*y = a+b/2*/}5. if(status == ‘s’) /*single status*/ tax = 0.02*pay; else tax = 0.14*pay;6. if (x <= 3) y = 3*pow(x,2); else y = 2*pow((x-3),2);7. if (circle) { scanf(“%f”,&radius); area = 3.14159 * radius*radius; printf(“Area of circle = %f”,area);}else { scranf(“%f %f”, &length,&width); area = width *length; printf(“Area of rectangle =%f”,area); }Nested if – else
ในกรณีที่ต้องการทดสอบเงื่อนไขมากกวา่ หนง่ึ เงื่อนไขในขณะเดียวกนั สามารถใช้คาสง่ั if-else ซ้อนกนั หลายชนั้ ได้ เรียกการทางานชนดิ นีว้ า่ nested if โดยรูปแบบการใช้คือ if expression 1 statement 1 if expression 2 else statement 2 else if expression 3 statement 3 else statement 4 จานวน if และ else อาจจะไมเ่ ทา่ กนั ก็ได้ ดงั ตวั อยา่ ง ถา้ ให้ e1 = expression 1 e2 = expression 2 …………….. s1 = statement 1 s2 = statement 2 ……………. ลกั ษณะตา่ งๆท่ีใช้ได้เชน่ กนั if e1 s1 else if e2 s2 หรือ if e1 s1 else if e2 s2 else s3
หรือ if e1 if e2 s1 else s2 else s3 หรือ if e1 if e2 s1 else s2 จะเห็นวา่ การใช้ nested –if … else สามารถใช้ได้หลายๆชนั้ โดยที่ผ้ใู ช้ต้องมน่ั ใจและเข้าใจวา่ Statement แตล่ ะชดุ เป็นของ expression ใดเนื่องจากภาษา C ไมไ่ ด้บงั คบั วา่ จานวนelse จะต้องมีเทา่ กบั จานวนของ if เสมอไป ดงั นนั้ เพื่อป้ องกนั ความสบั สนของการทางานหรือการเขียนดปรแกรมควรจะใช้ {….} ชว่ ยในการกาหนดขอบเขตและความสมั พนั ธ์ของ expression และstatement คตู่ า่ งๆเชน่ if e1 { if e2 s2 else s2 }หรือ if e1 { if e2 s1 } else s2ตัวอย่าง สว่ นของโปรแกรมท่ีใช้ if – else statement if ((time >= 0.00) && (time < 12.00))
printf(“Good morning \n”); else if ((time >= 12.00) && (time < 18.00)) printf(“Good Afternoon \n”); else if ((time >= 18.00) && (time < 24.00)) printf(“Good Evening \n”); else printf(“Time is out of range \n”);(ชดุ คาสง่ั นีจ้ ะพิมพ์คาสวสั ดีตอนเช้า/บา่ ย/เย็น เม่ือเวลาที่ทดสอบตกอย่าในชว่ งนนั้ ๆมฉิ ะนนั้ จะรายงานวา่ เวลาผิดพลาดนนั้ คือ ถ้าเวลา < 0 หรือ > 24)
Search
Read the Text Version
- 1 - 29
Pages: