Important Announcement
PubHTML5 Scheduled Server Maintenance on (GMT) Sunday, June 26th, 2:00 am - 8:00 am.
PubHTML5 site will be inoperative during the times indicated!

Home Explore ภาษา C

ภาษา C

Published by aum18400, 2017-09-14 11:02:47

Description: ภาษา C

Search

Read the Text Version

ภาษา 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 (มีช่องวา่ งระหวา่ งตวั เลข) 123-456 (มีเครื่องหมาย -) 0900 (นาหนา้ ดว้ ยเลข 0)2.1.2 ค่าคงทชี่ นิดเลขฐานแปด (Octal integer) ประกอบดว้ ยเลข 0 - 7 ตวั เลข ตวั เลขตวั แรกตอ้ งเป็น 0 เสมอตัวอย่าง 0 01 0743 0777ตวั อย่างทผี่ ดิ743 ไมไ่ ดน้ าหนา้ ดว้ ย 005280 ประกอบดว้ ยเลข 80777.77 ประกอบดว้ ยทศนิยม2.1.3 ค่าคงทชี่ นิดเลขฐานสิบหก (Hexadecimal integer) - ประกอบดว้ ย 0-9 และตวั เลข A-F หรือ a-f เมื่อ A (หรือ a) - F (หรือ f) คือ คา่ 10-15 - เขียนนาหนา้ ดว้ ย 0X เสมอตวั อย่าง

0X1 0X7FFF 0xabcdตวั อย่างทผี่ ดิ 0X12.34 ประกอบดว้ ยทศนิยม 0BE38 ไมม่ ี X 0X.46FF ประกอบดว้ ยทศนิยม 0XDEFG ประกอบดว้ ย 'G'2.1.4 ค่าคงทช่ี นิดทศนิยม (floating point constant) คือค่าคงที่ฐานสิบท่ีประกอบดว้ ย ตวั เลขจานวนเตม็ และเลขทศนิยม เขียนโดยการใช้เคร่ืองหมายทศนิยม (.) คน่ั เช่น 0. 1. 0.2 87.504 หรือการใชเ้ ครื่องหมาย exponential (E หรือ e) เช่น 2E-8 0.006e-3 1.6667E+8ตัวอย่างทผ่ี ดิ 1 ไม่มีทศนิยม 1,000.0 มีเคร่ืองหมาย , 2E+10.2 ตวั เลขหลงั E ตอ้ งเป็นจานวนเตม็ 3E 10 มีช่องวา่ งระหวา่ งตวั เลข2.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 เม่ือ a และ b คือตวั แปร และ + คือ operator x=y c=a+b x<=y ใหค้ า่ true (ไมใ่ ช่ 0) ถา้ x นอ้ ยกวา่ หรือเท่ากบั y และใหค้ ่า false (0) เมื่อ x มากกวา่ y x==y ใหค้ ่า true เมื่อ x มีค่าเทา่ กบั y มิฉะน้นั จะเป็น false I=I+1 เป็นการเพ่มิ คา่ ของตวั แปร 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 \"Susan\" #define TRUE 1 #define FALSE 0 #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 – 1Note ตาแหน่งของเครื่องหมาย ++ และ - - จะมีผลต่อการเปลี่ยนแปลงค่าของตวั แปร นน่ั คือ ถา้เคร่ืองหมาย ++ หรือ - - อยขู่ า้ งหนา้ ตวั แปร ค่าของตวั แปรน้นั จะถูกเปลี่ยน (เพ่ิมข้ึนหรือลดลง)

ก่อนจะถูกนาไปใช้ แต่ถา้ เคร่ืองหมายน้ี อยขู่ า้ งหลงั ตวั แปร คา่ เดิมของตวั แปรจะถูกนาไปใชก้ ่อนแลว้ คอ่ ยเปล่ียนแปลงตัวอย่าง ถา้ ให้ 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 = 5 Expression Value I = 3.3 3 I = 3.9 3 I = -3.9 -3 I=j 5 I=j/2 2 I=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.25

Expression 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 ในการทดสอบเรียกวา่ Conditionexpressionรูปแบบการใช้ 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 แต่อยา่ งไรก็ตาม C compilerส่วนใหญ่จะมี ใหผ้ ใู้ ชเ้ สมอ เพยี ง แตจ่ านวนและชนิดของฟังกช์ นั อาจจะแตกต่างกนั ไป ฟังกช์ นั บางอยา่ งส่งคา่ ท่ีไดจ้ ากการทางานใหผ้ ใู้ ช้ ในขณะท่ีบางฟังกช์ นั ส่งค่า 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) คือการสิ้นสุด input fileหรือคือคา่ 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 จะไดร้ ับเลือกใหท้ างาน

ตัวอย่าง ส่วนหน่ึงของคาส่งั งานในโปรแกรมเมื่อเลือกใชค้ าสั่ง if1. 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)


Like this book? You can publish your book online for free in a few minutes!
Create your own flipbook