รายวิชา ง40102 หลักการแก้ปัญหาและการโปรแกรม Operator & Expression รายวิชา ง40102 หลักการแก้ปัญหาและการโปรแกรม
นิพจน์ นิพจน์ (expression) คือ การดำเนินการที่ประกอบด้วยตัวดำเนินการ(operator) และตัวถูกดำเนินการ (operand) ตัวดำเนินการ (operator) คือ สัญลักษณ์ที่ใช้ในการแทนการกระทำอย่างใดอย่างหนึ่งกับข้อมูล เช่น + - * / % = > < ตัวถูกดำเนินการ (operand) คือ ข้อมูลที่ถูกกระทำโดยตัวดำเนินการ ซึ่งตัวถูกดำเนินการอาจอยู่ในรูปของ ตัวแปร (variable) , ค่าคงที่ (constant) , ค่าที่ได้รับจากฟังก์ชัน (return function) หรือแม้กระทั่งนิพจน์ (expression) เองก็เป็นตัวถูกดำเนินการได้ เช่น a+b , x++ , a != b , x = (a + b) / 2
operand #2 (Expression) 5 * ( a * b - 3 ) operand #2 (Expression) operator (*) operand #1 (constant) operand ( a * b - 3 ) operator
ตัวดำเนินการชนิดต่างๆ ที่ใช้บ่อย + / * / % ใช้เพื่อกระทำการทางคณิตศาสตร์กับข้อมูลที่เป็นตัวเลข +, -, * , / แทนการ บวก, ลบ, คูณ, หาร ตามลำดับ % แทนการหารเอาเศษ (modulo, mod) ใช้กับข้อมูลชนิดจำนวนเต็มทั้งตัวตั้งและตัวหาร ผลลัพธ์คือ เศษของการหาร 0 % 3 => หารได้ 0 ครั้ง เหลือเศษ 0 1 % 3 => หารได้ 0 ครั้ง เหลือเศษ 1 2 % 3 => หารได้ 0 ครั้ง เหลือเศษ 2 3 % 3 => หารได้ 1 ครั้ง เหลือเศษ 0 4 % 3 => หารได้ 1 ครั้ง เหลือเศษ 1 ผลลัพธ์จะมีค่าตั้งแต่ 0 ถึง ตัวที่นำมาหาร - 1
Implicit type conversion สำหรับภาษาซี operand ที่จะนำมาดำเนินการกันผ่าน operator ใดๆ ต้องเป็นข้อมูลชนิดเดียวกัน และผลลัพธ์ที่ได้ เป็นข้อมูลชนิดเดียวกันด้วย เช่น ถ้าจะหาผลลัพธ์ของ a / b , a และ b ต้องเป็นข้อมูลชนิดเดียวกันจึงจะนำมาหารกันได้ ถ้า a และ b เป็นข้อมูลชนิด int ผลลัพธ์ที่ได้ก็จะเป็น int ด้วย ถ้า a และ b ไม่ใช่ข้อมูลชนิดเดียวกัน ภาษาซีจะแปลงให้เป็นข้อมูลชนิดเดียวกันก่อนคำนวณ โดยอัตโนมัติ
Implicit type conversion แปลงจากชนิดข้อมูลที่ใช้เนื้อที่ในการจัดเก็บลงหน่วยความจำน้อยกว่าไปเป็นชนิดข้อมูลที่ใช้เนื้อที่ในการจัดเก็บลงหน่วยความจำมากกว่า แปลงจากข้อมูลที่เป็นเลขจำนวนเต็มไปเป็นข้อมูลชนิดเลขจำนวนจริง ลำดับการแปลง char , short , int , long , float , double ถ้าในโปรแกรมข้อมูลที่นำมาคำนวณเป็นตัวเลข เลข 5 => ข้อมูลชนิดจำนวนเต็ม เลข 5.0 => ข้อมูลชนิดจำนวนจริง
Implicit type conversion: ตัวอย่าง กำหนดให้ char ch ; int i ; float f ; double d ; result = ( ch / i ) + ( f * d ) - ( f + i ) ; int double float int double float double double double double
float float float int float float float float float จากสูตร C = ( 5 / 9 ) * ( F – 32 ) ในภาษาซีต้องเขียนว่า float degC , degF ; … degC = ( 5.0 / 9.0 ) * ( degF – 32 ) ; float float float int float float float float float
ลำดับความสำคัญของตัวดำเนินการ (operator) ตัวดำเนินการแต่ละตัวในภาษาซีต่างก็มีลำดับความสำคัญแตกต่างกันเหมือนกับตัวดำเนินการทางคณิตศาสตร์ เช่น a + b * c – d / e ( a + ( b * c ) ) – ( d / e ) 5.0 / 9.0 * F – 32 ( ( 5.0 / 9.0 ) * F ) - 32 ลำดับ Operators การกระทำ 1 ( ) ซ้ายไปขวา 2 * / % 3 + -
+= , -= , *= , /= , %= ทำหน้าที่คล้ายกัน เป็นการลดรูป = += -= *= /= %= = คือนำผลลัพธ์ทางขวามือมาใส่ในตัวแปรทางซ้ายมือ (ทำจากขวาไปซ้าย) เช่น a = 3 + 5 / 4 ; += , -= , *= , /= , %= ทำหน้าที่คล้ายกัน เป็นการลดรูป Count += 2 ; ลดรูปจาก Count = Count + 2 ; Score – = 2.53 ; ลดรูปจาก Score = Score – 2.53 ; Stock *= value ; ลดรูปจาก Stock = Stock * value ; Divisor /= 10.0 ; ลดรูปจาก Divisor = Divisor / 10.0 ; remind %= 10 ; ลดรูปจาก remind = remind % 10 ;
++ -- ++ ใช้แทนคำสั่ง a += 1 -- ใช้แทนคำสั่ง a -= 1 ++ -- ++ ใช้แทนคำสั่ง a += 1 -- ใช้แทนคำสั่ง a -= 1 สามารถวาง ++ , -- ไว้ก่อนหรือหลังตัวแปรก็ได้ ถ้าวางไว้หลัง (เช่น a++ , a--) หมายถึง นำ a ไปใช้งานก่อน แล้วจึงทำ a += 1 หรือ a -= 1 ถ้าวางไว้ก่อน (เช่น ++a , --a) หมายถึง ทำ a += 1 หรือ a -= 1 ก่อนแล้วจึงนำ a ไปใช้งาน
i = 3 ; b = i ; i = i + 1 ; i = 3 ; b = i++; มีค่าเท่ากับ a++ หมายถึง นำค่าที่อยู่ในตัวแปร a ไปใช้งานก่อน แล้วจึงทำการเพิ่มค่าของ a ขึ้นมาอีก 1 i = 3 ; b = i ; i = i + 1 ; i = 3 ; b = i++; มีค่าเท่ากับ ได้ผลลัพธ์เป็น b = 3 , i = 4
i = 3 ; i = i + 1 ; b = i; i = 3 ; b = ++i; มีค่าเท่ากับ ++a หมายถึง เพิ่มค่าที่เก็บอยู่ในตัวแปร a ขึ้นมาอีก 1 แล้วจึงค่อยนำตัวแปร a ไปใช้งาน i = 3 ; i = i + 1 ; b = i; i = 3 ; b = ++i; มีค่าเท่ากับ ได้ผลลัพธ์เป็น b = 4 , i = 4
i = 3 ; b = i; i = i - 1 ; i = 3 ; b = i--; มีค่าเท่ากับ a-- หมายถึง นำค่าที่อยู่ในตัวแปร a ไปใช้งานก่อน แล้วจึงทำการลดค่าของ a ลงไปอีก 1 i = 3 ; b = i; i = i - 1 ; i = 3 ; b = i--; มีค่าเท่ากับ ได้ผลลัพธ์เป็น b = 3 , i = 2
i = 3 ; i = i - 1 ; b = i; i = 3 ; b = --i; มีค่าเท่ากับ --a หมายถึง ลดค่าที่เก็บอยู่ในตัวแปร a ลงไปอีก 1 แล้วจึงค่อยนำตัวแปร a ไปใช้งาน i = 3 ; i = i - 1 ; b = i; i = 3 ; b = --i; มีค่าเท่ากับ ได้ผลลัพธ์เป็น b = 2 , i = 2
> , < , >= , <= , == , != ใช้ในการเปรียบเทียบ มักเจอในการทำงานแบบมีเงื่อนไข เช่น ให้พิมพ์คำว่า “pass” เมื่อผู้ใช้ได้คะแนนตั้งแต่ 50 ขึ้นไป ให้พิมพ์คำว่า “fail” เมื่อผู้ใช้ได้คะแนนน้อยกว่า 50 > หมายถึงการเปรียบเทียบ “มากกว่า” < หมายถึงการเปรียบเทียบ “น้อยกว่า” >= หมายถึงการเปรียบเทียบ “มากกว่าหรือเท่ากับ” <= หมายถึงการเปรียบเทียบ “น้อยกว่าหรือเท่ากับ” == หมายถึงการเปรียบเทียบ “เท่ากับ” != หมายถึงการเปรียบเทียบ “ไม่เท่ากับ”
ex4.cpp #include <stdio.h> void main() { int num1,num2; printf("Enter 2 integer, and I will tell you\n"); scanf("%d%d",&num1,&num2); if (num1 < num2) printf("%d is less than %d\n",num1,num2); } } // end program
ลองเพิ่มคำสั่งต่อท้ายว่า if (num1 > num2) { printf("%d is greater than %d\n",num1,num2); } แล้วรันโปรแกรมทดสอบ ลองเพิ่มคำสั่ง if ในการเช็คเงื่อนไข <= , >= , == , != แล้วรันโปรแกรมทดสอบ