Lecture no. 4: Structure Programming C Programming Lecture no. 4: Structure Programming กราบเรียนท่านอาจารย์ และสวัสดีเพื่อนๆ Department of Computer Science 310322 C Programming
ตัวแปรในภาษาซี ตัวแปร (variables) คือ การจองเนื้อที่ในหน่วยความจำและตั้งชื่อไว้ เพื่อเรียกใช้งานในขณะปฏิบัติงาน ค่า (contents) ของตัวแปรเปลี่ยนแปลงได้ ทั้งตัวแปรที่มีชนิดของข้อมูลแบบพื้นฐานและตัวแปรที่มีชนิดของข้อมูลแบบกำหนดโดยผู้ใช้ (user defined variables ) ต้องประกาศก่อนใช้ ควรสร้างนิสัยตั้งชื่อตัวแปรด้วยตัวอักษรตัวเล็ก ตัวอักษรตัวใหญ่ตัวเล็กมีผลแตกต่างกันในภาษา C การประกาศค่าตัวแปรจะเริ่มหลังจากสิ้นประโยค main( ) (แต่สามารถประกาศที่ไหนก็ได้) Department of Computer Science 310322 C Programming
ตัวแปรในภาษาซี (2) การกำหนดชื่อตัวแปร มีหลักการดังนี้ ตัวแปรในภาษาซี (2) การกำหนดชื่อตัวแปร มีหลักการดังนี้ 1. ต้องขึ้นต้นด้วยตัวอักษร 2. ห้ามใช้เครื่องหมายทางคณิตศาสตร์ในชื่อ ตัวแปร 3. สามารถใช้เครื่องหมาย underline ‘_’ ได้ 4. ห้ามใช้ reserved words เช่น int, float,etc. Department of Computer Science 310322 C Programming
คำสงวนในภาษาซี (C’s reserved words) auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while
การประกาศตัวแปรในภาษาซี การประกาศชื่อตัวแปรในภาษาซีสามารถทำได้ดังนี้ <ชนิดข้อมูล> <ชื่อตัวแปร>; ซึ่งชนิดข้อมูล ก็คือ integer, character, float และ double ตัวอย่างเช่น char ch; double height; int num; unsigned int a; float width; long int b; Department of Computer Science 310322 C Programming
Expressions (นิพจน์) คือ องค์ประกอบของประโยคที่มีความหมาย อาจเปรียบได้เหมือนคำหนึ่งคำในประโยคที่เราใช้โดยทั่วไป แบ่งออกเป็น 4 พวก นิพจน์ที่เป็นค่าคงที่ (Constant Expressions) 12, 143.12, ‘A’, “Hello World” นิพจน์ที่เป็นตัวแปร (Variable Expressions) x, y, sum, radius
Expressions (นิพจน์) [2] นิพจน์ที่ประกอบจากนิพจน์สองแบบแรก (Complex Expressions) โดยการใช้ตัวดำเนินการ (operator) หรือ เครื่องหมายอื่นๆ เช่น วงเล็บ เป็นตัวเชื่อม sum = x + y, x = (y-5) * 2 นิพจน์ที่เกิดจากการเรียกใช้ฟังก์ชั่น (Function Calls) add (543, 1991), add(x, 101) ข้อสังเกต: 1. เครื่องหมาย “=“ ในภาษาซีไม่ได้หมายถึงความเป็นสมการดังเช่นที่ใช้กันในคณิตศาสตร์โดยทั่วๆ ไป แต่เป็นการมอบหมายค่า(ผ่านค่า)ให้กับนิพจน์ประเภทตัวแปรที่ปรากฎอยู่ทางด้านซ้ายมือของเครื่องหมาย “=“ ให้มีค่าเท่ากับค่าหรือผลลัพธ์ที่เกิดขึ้นกับนิพจน์ทางขวามือของเครื่องหมาย 2. นิพจน์ที่อยู่ทางซ้ายมือต้องเป็นนิพจน์ประเภทตัวแปรเท่านั้น (ซึ่งเป็นสาเหตุที่ทำให้มีการผ่านค่าให้ได้)
Expressions(นิพจน์) and Statements(คำสั่ง) นิพจน์ (expression) ในภาษา C คือ การผสมผสานของค่าคงที่ (constants) ตัวแปร (variables) ตัวดำเนินการ(operators) และ การเรียกใช้ฟังก์ชั่น (function calls) ตัวอย่างได้แก่: a + b 3.0*x - 9.66553 tan(angle) นิพจน์ส่วนใหญ่จะมีค่าตามสิ่งที่ประกอบขึ้นเป็นนิพจน์นั้น ประโยคคำสั่งในภาษา C เป็นเพียงนิพจน์(expression) ที่มีการกำหนดการสิ้นสุดด้วยเครื่องหมาย ; (terminated with a semicolon) ตัวอย่างได้แก่: sum = x + y + z; printf("Go Buckeyes!"); Department of Computer Science 310322 C Programming
การเขียนประโยคคำสั่ง การเขียนประโยคคำสั่ง (statements) ในภาษาซี แต่ละคำสั่งจะประกอบด้วย ตัวระบุ (identifier) คำสงวน ตัวแปรชื่อฟังก์ชั่น และตัวดำเนินการ (operator) ต่างๆ แต่ละคำสั่งจบลงด้วยเครื่องหมายอัฒภาค (;) เช่น printf ( “Hello” ); printf ( “ C \n” ); อาจเขียนในบรรทัดเดียวกันก็ได้ เช่น printf ( “Hello” );printf ( “ C \n” ); ทั้งสองแบบให้ผลลัพธ์เหมือนกัน Department of Computer Science 310322 C Programming
ชนิดของข้อมูล (Data Types) มีตั้งแต่แบบพื้นฐานไปจนถึงแบบมีโครงสร้างซับซ้อน ต้องเลือกให้เหมาะสมเพื่อความมีประสิทธิภาพและความถูกต้องของการทำงานของโปรแกรม ตัวอย่างปัญหา การแสดงผลลัพธ์ การหารเลขจำนวนเต็ม 2 จำนวน ซึ่งผลรับอาจไม่ใช่จำนวนเต็ม ซึ่งในกรณีถ้ามีการเลือกชนิดของข้อมูลเพื่อเก็บค่าตัวแปรที่เกิดจากการหารเลขจำนวนเต็ม ดังกล่าวเป็นชนิด int ก็จะได้ผลลัพธ์ที่ไม่ถูกต้อง ดังนั้นตัวแปรที่ควรเลือกใช้ในกรณีนี้คือ ... หรือ ... ขอบเขต เช่น printf (“%d %d %d\n”, 32767, 32767+1,32767+2); ผลลัพธ์ที่ได้คือ 32767 -32768 -32767 แทนที่จะเป็น 32767 32768 32769 Department of Computer Science 310322 C Programming
การเปลี่ยนชนิดของข้อมูล ทำได้โดยระบุชนิดที่ต้องการเปลี่ยนภายใน เครื่องหมาย ( ) แล้ววางหน้าตัวแปรหรือข้อมูล ที่ต้องการเปลี่ยนแปลงชนิด ตัวอย่าง ถ้าในโปรแกรมภาษาซีมีการประกาศ ตัวแปรเป็น ต้องการเปลี่ยนตัวแปร float ไปเป็น integer สามารถทำได้ดังนี้ float money; (int) money; Department of Computer Science 310322 C Programming
ตัวอย่างการเปลี่ยนชนิดของข้อมูล int cost; cost = 2.7 + 4.5; ได้ผลรับเท่ากับ ... cost = (int) 2.7+(int) 4.5; Department of Computer Science 310322 C Programming
ตัวดำเนินการกำหนดค่า (The Assignment Operator) ในภาษาซี ตัวดำเนินการในการกำหนดค่า คือ การใช้เครื่องหมายเท่ากับ (equal sign) “ = “ และเป็นการใช้เพื่อกำหนดค่าให้ตัวแปรในนิพจน์นั้นๆ ตัวอย่างได้แก่: i=0; x=34.8; sum=a+b; slope=tan(rise/run); midinit='J'; j=j+3; เมื่อใช้ในลักษณะนี้ เครื่องหมายเท่ากับ จะถูกอ่านว่า “ได้รับค่า” (“gets”) ให้สังเกตว่าเมื่อกำหนดค่าเป็นค่าข้อมูลประเภทตัวอักขระ (character) ตัวอักขระนั้นๆต้องอยู่ภายใต้เครื่องหมาย ‘...‘ (enclosed in single quotes) Department of Computer Science 310322 C Programming
ในประโยคกำหนดค่า (assignment statement) a=7; มีสองสิ่งที่เกิดขึ้น คือ การประเมินค่าของตัวดำเนินการกำหนดค่า The Assignment Operator Evaluation ในประโยคกำหนดค่า (assignment statement) a=7; มีสองสิ่งที่เกิดขึ้น คือ The integer variable ‘a’ gets the value of 7, and the expression a=7 evaluates to 7. ลักษณะเช่นนี้ทำให้สามารถดำเนินการกำหนดค่าแบบ multiple assignments of the same value to several variables in a single statement ได้โดยสะดวก เช่น x=y=z=13.0; Department of Computer Science 310322 C Programming
การเพิ่มค่าและลดค่าตัวแปร สามารถใช้เครื่องหมายต่อไปนี้แทนการเพิ่มหรือ ลดค่าของตัวแปร ++ เป็นการเพิ่มค่าให้กับตัวแปรทีละหนึ่ง -- เป็นการลดค่าตัวแปรทีละหนึ่ง ตัวอย่างเช่น ++n เป็นการเพิ่มค่า n อีก 1 จากค่าปัจจุบัน --n เป็นการลดค่า n ลง 1 จากค่าปัจจุบัน Department of Computer Science 310322 C Programming
การเพิ่มค่าและลดค่าตัวแปร [2] ความแตกต่างระหว่าง y++ และ ++y เช่น สมมุติค่า y = 5; ถ้าในกรณี x = y++; จะมีการกระทำดังต่อไปนี้ คือ มีการผ่านค่าเดิมของ y ซึ่งเท่ากับ 5 ให้กับ X ก่อน ซึ่งจะได้ค่า x เท่ากับ 5 แล้วจึงเพิ่มค่าของ y ขึ้นอีกหนึ่งในภายหลัง ซึ่งจะได้ค่า y เท่ากับ 6 ทำให้ค่า x มีค่าเท่ากับ6 ในการดำเนินการครั้งถัดไป หรือ เปรียบได้กับมีการกระทำ { x = y; y = y+1) แต่ถ้า x = ++y; หมายถึงจะมีเพิ่มค่าให้กับ y ขึ้นอีกหนึ่ง ทำให้ได้ค่า x เท่ากับ 6 ในการดำเนินการในรอบแรก หรือ เปรียบได้กับมีการกระทำ { y = y+1; x = y)
ตัวอย่างการเพิ่มค่าและลดค่าตัวแปร ความแตกต่างระหว่าง count++ และ ++count เช่น count = 5; x = count++; ในการดำเนินการรอบแรก ค่า count จะยังคงมีค่าเท่ากับ 5 ซึ่งจะทำให้ได้ค่า x เท่ากับ 5 แล้วค่า count จึงจะเพิ่มค่าเป็น 6 x = ++count; ในการดำเนินการรอบแรก ค่า count จะถูกเพิ่มค่าเป็น 6 ซึ่งจะทำให้ได้ค่า x เท่ากับ 6 Department of Computer Science 310322 C Programming
ตัวอย่างโปรแกรมการเพิ่มค่าและลดค่าตัวแปร #include <stdio.h> int main(void) { int count,x; printf(“**Example of n++ **\n"); count = 5; printf("%d\n",count); x = count++; printf("%d\n",x); printf(“**Example of ++n **\n"); count = 5; printf("%d\n",count); x = ++count; printf("%d\n",x); return (0); }
การกำหนดค่าเริ่มต้นให้ตัวแปร (Initializing Variables) ตัวแปรภาษาซี (C Variables) สามารถถูกกำหนดค่าเริ่มต้น (initialized with a value) เมื่อมีการประกาศตัวแปรนั้นๆ ได้ เช่น int count = 10; โดยทั่วไป ผู้เขียนโปรแกรมไม่ควรคิดเอาเองว่าตัวแปรจะถูกกำหนดค่าเริ่มต้นให้โดยปริยายอย่างอัตโนมัติโดยตัวคอมไพเลอร์ นักเขียนโปรแกรมต้องทำให้มั่นใจได้ว่าตัวแปรมีค่าที่เหมาะสมก่อนที่มันจะถูกใช้ในนิพจน์ต่างๆ Department of Computer Science 310322 C Programming
ตัวอย่างการกำหนดค่าเริ่มต้น ตัวอย่าง 2 วิธี ในการกำหนดค่าเริ่มต้น: #include <stdio.h> main () { int sum=33; float money=44.12; char letter; double pressure; letter='E'; /* assign character value */ pressure=2.01e-10; /*assign double value */ Department of Computer Science 310322 C Programming
ตัวอย่างการกำหนดค่าเริ่มต้น [2] printf("value of sum is %d\n",sum); printf("value of money is %f\n",money); printf("value of letter is %c\n",letter); printf("value of pressure is %e\n",pressure); } value of sum is 33 value of money is 44.119999 value of letter is E value of pressure is 2.010000e-10 Department of Computer Science 310322 C Programming
ข้อสังเกตุเกี่ยวกับตัวโอเปอร์เรเตอร์ทางคณิตศาสตร์ (Arithmetic Operators) When the divider operator / is used to perform integer division the resulting integer is obtained by discarding (or truncating) the fractional part of the actual floating point value. For example: 1/2 0 3/2 1 Department of Computer Science 310322 C Programming
The modulus operator % only works with integer operands. ข้อสังเกตุเกี่ยวกับตัวโอเปอร์เรเตอร์ทางคณิตศาสตร์ (Arithmetic Operators) [2] The modulus operator % only works with integer operands. The expression a%b is read as “a modulus b” and evaluates to the remainder obtained after dividing a by b. For example 7 % 2 1 12 % 3 0 Department of Computer Science 310322 C Programming
Operator Precedence and Associativity (ลำดับการทำงานของโอเปอร์เรเตอร์) Associativity (การจัดหมู่) () ++(postfix) --(postfix) left to right +(unary) –(unary) ++(prefix) --(prefix) right to left * / % + - = += -= *= /= etc. Department of Computer Science 310322 C Programming
นิพจน์กำหนดเงื่อนไข นิพจน์กำหนดเงื่อนไข ใช้เพื่อการตรวจสอบเงื่อนไขในภาษาซี สามารถทำได้โดยใช้ คำสั่ง if ซึ่งการตรวจสอบเงื่อนไขจะแบ่งเป็น 3 รูปแบบดังนี้ Department of Computer Science 310322 C Programming
การตรวจสอบเงื่อนไข if แบบเงื่อนไขเดียว เงื่อนไขประเภทนี้มีรูปแบบดังนี้ เงื่อนไข คือ เงื่อนไขที่ต้องการตรวจสอบ ข้อความคำสั่ง หมายถึง ถ้าเงื่อนไขเป็นจริง จะสั่งให้โปรแกรมดำเนินการอย่างไร เช่น … if (marks <= 25) printf (“you fail the C Programming test”); if ( เงื่อนไข ) ข้อความสั่ง; Department of Computer Science 310322 C Programming
การตรวจสอบเงื่อนไข if แบบเงื่อนไขเดียว [2] ในส่วนของประโยคคำสั่ง หากมีมากกว่า 1 ประโยคำสั่ง จะต้องอยู่ภายในเครื่องหมาย { } รูปแบบของการใช้ if จึงเปลี่ยนเป็น if ( เงื่อนไข ) { ข้อความสั่งที่ 1; ข้อความสั่งที่ 2; … ; ข้อความสั่งที่ n; } Department of Computer Science 310322 C Programming
การตรวจสอบเงื่อนไข if แบบ 2 เงื่อนไข สองเงื่อนไข การตรวจสอบเงื่อนไขสองเงื่อนไขโดยใช้ if มีรูปแบบดังนี้ if ( เงื่อนไข ) ข้อความสั่งในกรณีที่เงื่อนไขเป็นจริง; else ข้อความสั่งกรณีที่เงื่อนไขเป็นเท็จ; Department of Computer Science 310322 C Programming
การตรวจสอบเงื่อนไข if แบบ 2 เงื่อนไข [2] { ข้อความสั่งในกรณีที่เงื่อนไขเป็นจริง 1; ข้อความสั่งในกรณีที่เงื่อนไขเป็นจริง 2; …; } else ข้อความสั่งในกรณีที่เงื่อนไขเป็นเท็จ 1; ข้อความสั่งในกรณีที่เงื่อนไขเป็นเท็จ 2; Department of Computer Science 310322 C Programming
การตรวจสอบเงื่อนไข if แบบหลายเงื่อนไข มีรูปแบบดังนี้ if ( เงื่อนไขที่ 1 ) ข้อความสั่งในกรณีที่เงื่อนไขที่ 1 เป็นจริง; else if ( เงื่อนไขที่ 2 ) ข้อความสั่งในกรณีที่เงื่อนไขที่ 2 เป็นจริง; else if ( เงื่อนไขที่ 3 ) ข้อความสั่งในกรณีที่เงื่อนไขที่ 3 เป็นจริง; … else ข้อความสั่งในกรณีที่เงื่อนไขสุดท้ายเป็นจริง; Department of Computer Science 310322 C Programming
การตรวจสอบเงื่อนไข if แบบหลายเงื่อนไข (2) ในส่วนของประโยคคำสั่ง หากมีมากกว่า 1 ประโยคำสั่งจะใช้ต้องอยู่ภายในเครื่องหมาย { } รูปแบบของการใช้ if จึงเปลี่ยนเป็น if ( เงื่อนไขที่ 1 ) { ข้อความสั่งในกรณีที่เงื่อนไขเป็นจริง 1; ข้อความสั่งในกรณีที่เงื่อนไขเป็นจริง 2; …; } else if ( เงื่อนไขที่ 2 ) ข้อความสั่งในกรณีที่เงื่อนไขเป็นเท็จ 1; ข้อความสั่งในกรณีที่เงื่อนไขเป็นเท็จ 2; } … Department of Computer Science 310322 C Programming
การตรวจสอบเงื่อนไขแบบซ้อน ในการตรวจสอบเงื่อนไขโดยใช้ if นั้น อาจใช้ if ซ้อน if เพื่อให้การตรวจสอบเงื่อนไข เฉพาะเจาะจงมากยิ่งขึ้น มีรูปแบบดังนี้ if ( เงื่อนไขที่ 1 ) if ( เงื่อนไขที่ 2 ) ข้อความสั่งในกรณีที่เงื่อนไขเป็นจริง 1; หากมีหลายข้อความสั่ง ข้อความสั่งนั้นจะอยู่ใน { } เหมือนกับการใช้ if ทั่วไป Department of Computer Science 310322 C Programming
ผังงานแทนคำสั่ง if เงื่อนไข จริง ประโยคคำสั่ง 1 ประโยคคำสั่ง 2 … เท็จ Department of Computer Science 310322 C Programming
ผังงานแทนคำสั่ง if-else เงื่อนไข จริง เท็จ ประโยคคำสั่งกรณีเป็นจริง 1 ประโยคคำสั่งกรณีเป็นจริง 2 … ประโยคคำสั่งกรณีเป็นเท็จ 1 ประโยคคำสั่งกรณีเป็นเท็จ 2 … Department of Computer Science 310322 C Programming
ตัวดำเนินการตรรกะในการตรวจสอบเงื่อนไข ความหมาย > มากกว่า < น้อยกว่า >= มากกว่าหรือเท่ากับ <= น้อยกว่าหรือเท่ากับ == เท่ากับ != ไม่เท่ากับ Department of Computer Science 310322 C Programming
if ( score >= 80 ) grade = ‘A’; ตัวอย่างการใช้คำสั่งเงื่อนไขกับนิพจน์คณิตศาสตร์ X > 5 A > B X + Y <= a + b 2.0 * x > 5.0 * y + 7.0 B == 5 ตัวอย่างการใช้ if กับนิพจน์คณิศาสตร์ if ( score >= 80 ) grade = ‘A’; if ( totalsale == 1000 ) discount = totalsale * 20/100 Department of Computer Science 310322 C Programming
ตัวดำเนินการเชื่อมตรรกะ ตัวดำเนินการเชื่อมตรรกะช่วยให้เราสามารถเชื่อม นิพจน์ทางตรรกะ ซึ่งแทนด้วยสัญลักษณ์ดังนี้ ตัวดำเนินการเชื่อมตรรกะ ความหมาย && ตัวเชื่อม “และ” (and) || ตัวเชื่อม “หรือ” (or) ! ตัวนิเสธ (Not) Department of Computer Science 310322 C Programming
ตัวอย่างการใช้ตัวดำเนินการเชื่อมตรรกะ ตัวดำเนินการเชื่อมตรรกะช่วยให้เราสามารถเชื่อม นิพจน์ทางตรรกะ ซึ่งแทนด้วยสัญลักษณ์ดังนี้ P Q P && Q P || Q T F Department of Computer Science 310322 C Programming
if ( ( score >= 80 ) || ( score <= 100 ) ) ตัวอย่างนิพจน์เงื่อนไขที่ใช้ตัวดำเนินการเชื่อมตรรกะ ตัวอย่างการใช้ if ร่วมกับตัวดำเนินการเชื่อมตรรกะกับนิพจน์คณิศาสตร์ if ( ( score >= 80 ) || ( score <= 100 ) ) grade = ‘A’; if ( ( total > 2000 ) || ( total < 5000 ) ) discount = totalsale * 20/100 Department of Computer Science 310322 C Programming
ตัวดำเนินการเงื่อนไขแบบย่อ ( ? : ) ตัวดำเนินการเงื่อนไข (?:) เป็นการเขียนอย่างย่อของคำสั่ง if-else ซึ่งมีรูปแบบดังนี้ นิพจน์ 1 ? นิพจน์ 2 : นิพจน์ 3 ความหมายของตัวดำเนินการเงื่อนไขข้างต้นหมายถึง หากนิพจน์ 1 เป็นจริงแล้วให้ดำเนินการตามนิพจน์ 2 แต่ถ้าหากนิพจน์ 1 เป็นเท็จให้ดำเนินการตามนิพจน์ 3 Department of Computer Science 310322 C Programming
ตัวอย่างการใช้ตัวดำเนินการเงื่อนไขแบบย่อ discount = (total > 2000) ? total * 10/100 : 0.0; ความหมายของนิพจน์ข้างต้นเทียบได้กับ if ( total > 2000 ) discount = total * 10/100; else discount = 0.0; Department of Computer Science 310322 C Programming
การตรวจสอบเงื่อนไขโดยใช้ switch คำสั่ง switch เป็นคำสั่งเงื่อนไขที่เหมาะสำหรับเงื่อนไขที่มีตัวเลือกมากกว่าหนึ่งตัวเลือก รูปแบบของคำสั่ง switch เป็นดังนี้ switch ( ตัวแปรที่ต้องการตรวจสอบ ) { case เงื่อนไขที่ 1 : คำสั่งที่ 1; คำสั่งที่ 2; break; case เงื่อนไขที่ 2 : … default : คำสั่งที่ 1; คำสั่งที่ 2; } Department of Computer Science 310322 C Programming
ตัวอย่างการใช้ switch switch ( ch ) { case 1 : printf(“Red\n”); case 2 : printf(“Blue\n”); case 3 : printf(“Yellow\n”); default : printf(“White\n”); } Department of Computer Science 310322 C Programming
ผังงานแทนคำสั่ง switch จริง เงื่อนไขที่ 1 ประโยคคำสั่ง break; เท็จ จริง เงื่อนไขที่ 2 ประโยคคำสั่ง break; . เท็จ จริง เงื่อนไขที่ n ประโยคคำสั่ง break; เท็จ Department of Computer Science 310322 C Programming
END Department of Computer Science 310322 C Programming