ชุดท2ี่ โครงสร้างของโปรแกรมภาษาซี ตัวดาเนนิ การ บตั รเนอื้ หาที่ 3 ในภาษาซี ในหัวข้อเรือ่ งการเขยี นโปรแกรมจะกล่าวถึงเนื้อหา 2 ส่วน คอื ความหมายของโปรแกรมคอมพวิ เตอร์ และภาษาคอมพิวเตอรด์ งั มีรายละเอยี ดต่อไปนี้ ตวั ดาเนินการ (operators) ตวั ดาเนนิ การบางครั้งเรียกวา่ “เครอื่ งหมาย” จะเขา้ ใจงา่ ยกว่า ในภาษาซี สามารถแบ่งตัว ดาเนินการไดห้ ลายประเภทดงั น้ี 1. ตวั ดาเนินการคณิตศาสตร์ (mathematical operators) สัญลักษณ์ (symbol) ตัวดาเนินการ (operators) ตัวอย่าง + บวก (addition) a+b - ลบ (subtraction) a-b * คูณ (multiplication) a*b / หาร (division) a/b % หารเอาเศษ (remainder) a%b 2. ตัวดาเนนิ การความสมั พนั ธ์ (relational operators) ตัวอย่าง สญั ลักษณ์ (symbol) ตัวดาเนินการ (operators) A<b a>b < น้อยกว่า (less than) A<=b > มากกว่า (greater than) <= น้อยกว่าหรือเท่ากับ a>=b (less than or equal) A==b >= มากกวา่ หรอื เทา่ กบั a!=b (greater than or equal) == เท่ากบั (equal) != ไมเ่ ท่ากับ (not equal) ชดุ กจิ กรรมการเรียนรูก้ ารเขยี นโปรแกรมภาษาคอมพวิ เตอร์ 1 รายวชิ าภาษาซี ง30243 ชั้นมธั ยมศกึ ษาปีท่ี 5
ชดุ ท2่ี โครงสรา้ งของโปรแกรมภาษาซี 3. ตัวดาเนนิ การเชงิ ตรรกะ (logical operators) ตวั อยา่ ง สญั ลักษณ์ (symbol) ตวั ดาเนินการ (operators) A<b && c>d a<b || c>d && และ (AND) || หรอื (OR) !(a<b) ! ไม่ (NOT) 4. ตวั ดาเนินการเพิ่มคา่ และลดค่า (increment and decrement operators) สัญลกั ษณ์ (symbol) ตวั ดาเนินการ (operators) ตวั อย่าง ++ เพ่ิมค่า (increment) a++ หรือ ++a -- ลดคา่ (decrement) a-- หรอื --a 5. ตวั ดาเนินการบติ ไวส์ (bitwise operators) ตัวอยา่ ง สญั ลกั ษณ์ (symbol) ตัวดาเนนิ การ (operators) a&b a|b & AND a^b | inclusive OR ~a ^ exclusive OR a>>2 ~ Complement a<<3 >> right shift << left shift 6. ตัวดาเนินการกาหนดคา่ (compound assignment operators) สัญลกั ษณ์ (symbol) ตวั ดาเนินการ (operators) ตัวอย่าง = Assignment a=b += Addition a+=b หมายถึง (a=a+b) -= Subtraction a-=b หมายถงึ (a=a-b) *= Multiplication a*=b หมายถึง (a=a*b) /= Division a/=b หมายถึง (a=a/b) %= Remainder a%=b หมายถึง (a=a%b) &= bitwise AND a&=b หมายถึง (a=a&b) |= bitwise Inclusive OR a|=b หมายถงึ (a=a|b) ^= bitwise exclusive OR a^=b หมายถึง (a=a^b) <<= right shift a<<2 หมายถึง (a=a<<2) >>= left shift a>>3 หมายถงึ (a=a>>3) ชุดกจิ กรรมการเรยี นรกู้ ารเขยี นโปรแกรมภาษาคอมพิวเตอร์ 2 รายวชิ าภาษาซี ง30243 ช้นั มัธยมศกึ ษาปีท่ี 5
ชุดท2่ี โครงสร้างของโปรแกรมภาษาซี 7. ตัวดาเนินการแบบเง่ือนไข (conditional operators) ตวั อย่าง สัญลักษณ์ (symbol) ตัวดาเนินการ (operators) Max = (a>b) ? a: b; Result = (expression) Conditional Operators ? Value1 : vaule2 ; ลาดบั การทางานของตวั ดาเนินการ (precedence and associativity of operators) ลาดับที่ ตัวดาเนนิ การ ลกั ษณะการทางาน (Operator) (Associativity) 1 ( ) [ ] . -> Left to right 2 - ~!*& Light to left 3 ++ - - Right to left 4 */% Left to right 5 +- Left to right 6 << >> Left to right 7 < > < = >= Left to right 8 = = != Left to right 9 & (bitwise AND) Left to right 10 ^ (bitwise exclu OR) Left to right 11 | (bitwise inclu OR) Left to right 12 && Left to right 13 || Left to right 14 ?: Left to right 15 = += -= /= %= Right to left 16 <<= >>= Right to left ตัวดาเนินการท่ีมีลาดับการทางานอนั ดบั ท่ี 1 จะทางานก่อนอนั ดบั ท่ี 2 โดยทางานไปเร่อื ย ๆ จนกระทง่ั หมดตวั ดาเนินการ สว่ นลกั ษณะการทางานของตัวดาเนินการแตล่ ะอันดบั นั้นแตกต่างกนั ไป ซง่ึ จะ เป็นการทางานจากซ้ายไปขวา (left to rigth) หรือขวาไปซา้ ย (rigth to left) ก็ได้ ชุดกิจกรรมการเรียนร้กู ารเขยี นโปรแกรมภาษาคอมพิวเตอร์ 3 รายวชิ าภาษาซี ง30243 ช้ันมัธยมศึกษาปที ่ี 5
ชุดท2่ี โครงสรา้ งของโปรแกรมภาษาซี ตัวอยา่ งท่ี 2.5 แสดงขัน้ ตอนการทางานของตัวดาเนินการ 8+5*3 ตวั ดาเนนิ การ * อยูล่ าดับสูงกว่าตัว 4 +15 ดาเนินการ + จึงตอ้ งคูณเลขกอ่ นแลว้ ทาการ 19 การบวกเลขทหี ลัง 10 / 2 + 5 – 3 ตวั ดาเนินการ / อยู่ลาดบั สงู กว่าตวั 5+5–3 ดาเนนิ การ + และ - สว่ นตัว 10 - 3 ดาเนินการ + และ - อยลู่ าดบั เดียวกัน แตใ่ ห้ ทา 7 จากซา้ ยไปขวา จงึ ทาบวกกอ่ นแล้วจงึ ทาลบ 9 * 3 - 20 / 5 + 6 ตัวดาเนนิ การ * และ / อยลู่ าดับเดยี วกันให้ทา จากซ้ายไปขวา คอื คูณเลขกอ่ น แล้วหาร จาก 27 - 4 + 6 ซ้ายไปขวา คอื คูณเลขกอ่ น แล้วหาร 23 + 6 ตวั ดาเนินการ + และ – อยูล่ าดบั เดยี วกันใหท้ า 29 จากซ้ายไปขวา คอื ลบเลขกอ่ นแล้ว จงึ บวกทหี ลงั ชดุ กิจกรรมการเรยี นรู้การเขยี นโปรแกรมภาษาคอมพวิ เตอร์ 4 รายวชิ าภาษาซี ง30243 ช้นั มัธยมศึกษาปที ่ี 5
ชุดท2่ี โครงสร้างของโปรแกรมภาษาซี นิพจน์ (expression) นพิ จน์ คือ การนาคา่ คงทต่ี ัวแปรและตวั ดาเนินการมาเขียนประกอบกนั เพือ่ ใหต้ วั แปรภาษาสามารถ เข้าใจและคานวณหาผลลพั ธไ์ ด้ตามที่เราต้องการ ตัวอยา่ งท่ี 2.6 ถ้าตอ้ งการหาคา่ จากสตู ร a2+2ab+b2 เมอื่ a=2, b=3 เราจะต้องเขยี นสตู รดังกล่าวใหเ้ ป็น นพิ จนด์ ังนี้ a*a+2 *a *b+b*b ……………………..…………………………… แบบที่ 1 หรือ pow(a,2) + 2 *a *b + pow(b,2) ……………………………… แบบท่ี 2 สาหรบั ฟงั กช์ นั pow(x,y) เป็นฟังกช์ ันทใ่ี ชห้ าคา่ ตวั เลขทอ่ี ยู่ในรปู เลขยกกาลัง โดยที่ x เป็นเลขฐานซ่ึงจะต้องมคี า่ เป็นเลขจานวนเต็มบวกหรอื ศนู ย์ก็ได้ y เป็นเลขยกกาลงั ซง่ึ อาจจะเป็นเลขจานวนเต็มบวกหรอื ลบกไ็ ด้ ดงั น้ัน pow(x,y) หมายถงึ xy สว่ น pow(a,2) หมายถึง a2 และ pow(b,2) หมายถงึ b2 ขอ้ ควรระวงั กอ่ นทเี่ ราจะใช้ฟงั กช์ นั pow(x,y) น้ีจะตอ้ งใช้คาสั่ง #include<math.h> อยบู่ นส่วนตน้ ของ โปรแกรม เพ่ือนาแฟม้ math.h เข้ามาไวใ้ นโปรแกรมภาษาซี ก่อน มิฉะนนั้ อาจเกดิ ขอ้ ผดิ พลาดในการแปล โปรแกรมไดเ้ พราะไม่สามารถหาฟงั ก์ชัน pow(x,y) ได้ ตัวอยา่ งท่ี 2.7 แสดงนพิ จน์ตวั อยา่ ง ซ่ึงมีอยหู่ ลายชนดิ ตังต่อไปนี้ 1. a+b*10+(3*c)*8 /* นพิ จนท์ างคณิตศาสตร*์ / 2. (m>=n)&&(x<y) /* นิพจน์เชิงตรรกะและนิพจน์เชิงเปรียบเทยี บความสมั พันธ์*/ 3. !(k==25) /* นพิ จน์เชงิ ตรรกะและนพิ จน์เชิงเปรียบเทยี บความสัมพนั ธ*์ / 4. !(p) /* นพิ จนเ์ ชงิ ตรรกะ*/ 5. (i>10)||(j<5) /* นพิ จน์เชิงตรรกะและนพิ จนเ์ ชงิ เปรียบเทียบ*/ 6. if (y==z) /* นิพจน์เงอื่ นไข*/ ตัวอยา่ งที่ 2.8 แสดงการหาค่าผลลพั ธจ์ ากนพิ จนใ์ นภาษาซี กาหนดให้ int x=5, y=8, z=9; 1. x+(y*z) ผลลัพธค์ อื 77 2. x+y*z+x*3 ผลลัพธ์คือ 92 ชดุ กจิ กรรมการเรยี นรู้การเขยี นโปรแกรมภาษาคอมพิวเตอร์ 5 รายวชิ าภาษาซี ง30243 ช้ันมัธยมศึกษาปีท่ี 5
ชดุ ท2ี่ โครงสร้างของโปรแกรมภาษาซี การแปลงชนดิ ข้อมูลของภาษาซี (C type conversion) เมอ่ื เราเขยี นโปรแกรมมกั จะพบว่า ใช้ตัวดาเนนิ การกบั ตัวแปรของชนดิ ข้อมลู แตกต่างกัน เพอื่ อานวย ความสะดวกในการเขยี นโปรแกรมภาษาซี จงึ ไดก้ าหนดกฎเกณฑ์ดังน้ี ถา้ คา่ ตวั แปร หรือค่าคงที่ต่างชนดิ กัน ให้ทาการเปลย่ี นชนดิ ของข้อมลู ทมี่ ีขนาดเล็กใหเ้ ป็นชนิดของข้อมลู ท่ีใหญข่ น้ึ ชนดิ ของข้อมูล x ชนิดของขอ้ มูล y x ชนดิ ของข้อมูล y int long long char int int int float float int double double float double double long double double ชนิดขอ้ มูลต่าง ๆ long double long double --- --- --- กาหนดให้ x เปน็ ตัวแปรชนดิ ขอ้ มูลแบบ int และ y เปน็ ตัวแปรข้อมูลแบบ long เมอื่ นา x และ y มา บวก ลบ คูณ และหารกนั ผลลพั ธท์ ไ่ี ดจ้ ะเป็นชนิดขอ้ มลู แบบ long (เพราะ long มีพสิ ัยในการ เก็บขอ้ มลู กว้างกวา่ int) เช่น int x = 7; float y = 2; ถ้า x/2 จะไดผ้ ลลัพธเ์ ปน็ 3 (ชนดิ ข้อมลู แบบ int) ถา้ x/y จะไดผ้ ลลพั ธเ์ ปน็ 3.500000 (ชนดิ ขอ้ มูลแบบ float) ขอ้ สังเกต ภาษาซี เป็นภาษาทดี่ มี าก ทอ่ี านวยความสะดวกในการแปลงชนดิ ขอ้ มูลของตวั แปรให้ ใหญข่ ้ึน ทาให้ไม่มปี ัญหาในการเกบ็ ขอ้ มูลและเราไมต่ ้องกังวลผลทไ่ี ด้จากการดาเนนิ การของตัวแปรในนพิ จน์ ตา่ ง ๆ นอกจากนี้ภาษาซี ยังอนุญาตใหเ้ ราแปลงชนิดขอ้ มลู ได้ช่ัวคราวด้วยตวั ผู้เขียนโปรแกรมเอง โดยให้ ศึกษาโปรแกรมตัวอย่างที่ 2.4 และโปรแกรมตวั อยา่ งที่ 2.5 โดยโปรแกรมตัวอยา่ งที่ 2.4 แสดงการคานวณ ค่าจา้ งที่ผดิ ส่วนโปรแกรมตวั อย่างที่ 2.5 แสดงการคานวณคา่ จา้ งทีถ่ กู โดยการเปลีย่ นแปลงชนิดข้อมลู ชว่ั คราว ชดุ กจิ กรรมการเรียนรกู้ ารเขยี นโปรแกรมภาษาคอมพวิ เตอร์ 6 รายวชิ าภาษาซี ง30243 ชั้นมธั ยมศึกษาปที ี่ 5
ชดุ ท2ี่ โครงสร้างของโปรแกรมภาษาซี โปรแกรมตวั อยา่ งที่ 2.4 แสดงโปรแกรมการคานวณคา่ จ้างทีผ่ ดิ /* errcal.c */ /* This program calculate emloyees share */ #include<stdio.h> #include<conio.h> void main(void) { int profits, employees; /* บรรทัดท่ี 1 */ clrscr(); /* บรรทดั ที่ 2 */ profits = 9; /* บรรทดั ที่ 3 */ employees = 2; /* บรรทัดท่ี 4 */ printf(\"Each employee gets %d\\n\",profits/employees); /* บรรทัดที่ 5 */ getch(); } ผลลพั ธท์ ่ีได้จากโปรแกรม Each employee gets 4 (ซงึ่ เป็นคาตอบท่ีผดิ ) คาอธิบายโปรแกรม จากโปรแกรมตวั อยา่ งท่ี 2.4 สามารถอธิบายการทางานของโปรแกรมทีส่ าคัญ ๆ ไดด้ ังน้ี บรรทัดท่ี 1 เป็นการประกาศตัวแปร profits และ employees ใหเ้ ป็นชนดิ int บรรทดั ที่ 2 เปน็ คาส่ังใหล้ บจอภาพ บรรทัดท่ี 3 และ 4 กาหนดค่าใหก้ บั ตวั แปร โดย profits มีค่า 9 และ employees มีค่า 2 บรรทดั ท่ี 5 ใหพ้ มิ พข์ ้อความ Each employee gets 4 ออกแสดงที่จอภาพ โดยตัวเลข 4 ได้ จากการคานวณ 9/2 คือค่าของตวั แปร porfits/ employees ชดุ กิจกรรมการเรียนรูก้ ารเขยี นโปรแกรมภาษาคอมพิวเตอร์ 7 รายวชิ าภาษาซี ง30243 ชั้นมธั ยมศกึ ษาปีท่ี 5
ชุดท2่ี โครงสรา้ งของโปรแกรมภาษาซี จากโปรแกรมตวั อยา่ งที่ 2.4 เราคงเห็นแลว้ วา่ ผลหารทไี่ ด้จะเป็นจานวนเต็ม สว่ นทีเ่ ป็นเลขทศนิยม จะตดั ท้ิงไป เมื่อภาษาซี ทางานกบั ข้อมูลชนดิ จานวนเต็ม เพ่ือแกป้ ญั หาทีเ่ กิดการผดิ พลาด ในกรณีน้ีเรา สามารถเปล่ยี นชนดิ ข้อมูลได้ช่ัวคราว คอื เปล่ียนตวั แปร profits จากชนดิ ขอ้ มูลแบบ int ไปเปน็ float ช่ัวคราว ดังตวั อย่างโปรแกรมท่ี 2.5 ตอ่ ไปน้ี โปรแกรมตวั อยา่ งท่ี 2.5 แสดงโปรแกรมการเปลย่ี นแปลงชนดิ ข้อมลู ชวั่ คราว /* change.c */ /* This program calculates employee share. */ #include<stdio.h> #include<conio.h> void main(void) { int profits, employees; clrscr(); profits = 9; employees = 2 ; printf(\"Each employee gets %f\", (float) profits/employees); /* บรรทัดที่ 1 */ getch(); } ผลลัพธ์ทไ่ี ด้จากโปรแกรม Each employee gets 4.500000 คาอธบิ ายโปรแกรม โปรแกรมข้างตน้ จะเหมือนกบั โปรแกรมท่ี 2.4 ทุกประการยกเว้น บรรทัดท่ี 1 ในการคานวณ (float) profits / employees เป็นการเปลย่ี นตัวแปร profits จากชนิดข้อมูล int ใหเ้ ป็น float ช่วั คราว ดังนั้นผลลัพธท์ ไ่ี ด้จากโปรแกรมจึงเป็น 4.500000 และใช้ %f ในการควบคุมการแสดงผล ชดุ กจิ กรรมการเรยี นรู้การเขยี นโปรแกรมภาษาคอมพวิ เตอร์ 8 รายวชิ าภาษาซี ง30243 ชนั้ มัธยมศกึ ษาปที ่ี 5
ชดุ ท2ี่ โครงสร้างของโปรแกรมภาษาซี จากโปรแกรมตัวอย่างที่ 2.5 ข้างต้นได้ใช้ฟังก์ชัน printf( ) เพื่อแสดงให้อยู่ในรูปแบบท่ี ต้องการ โดยใช้รหัสรูปแบบ %f (format code) %f เป็นรหัสรูปแบบการพิมพ์ข้อมูลชนิด float (ซึ่ง รายละเอียดกล่าวไว้ในบทที่ 3 ตารางที่ 3.2) ได้สรุปรหัสรูปแบบการพิมพ์ข้อมูลทั้งหมดที่ใช้กับฟังก์ชัน printf( ) ผู้เขียนโปรแกรมควรจาให้ได้ทั้งหมด เพื่อความสะดวกและรวดเร็วในการใช้เขียนโปรแกรมใน โอกาสต่อไป ชดุ กจิ กรรมการเรยี นรกู้ ารเขยี นโปรแกรมภาษาคอมพวิ เตอร์ 9 รายวชิ าภาษาซี ง30243 ช้ันมัธยมศึกษาปที ่ี 5
Search
Read the Text Version
- 1 - 11
Pages: