หน่วยที่ 3 นิพจน์ในภาษา C
ภาษาซี คณิตศาสตร์ x = 2 + 3*4 + 11*7 – 8/5 x = 2 + 12 + 11*7 – 8/5 ความแตกต่างของนิพจน์ทางคณิตศาสตร์กับนิพจน์ในภาษาซี ภาษาซี คณิตศาสตร์ x = 2 + 3*4 + 11*7 – 8/5 x = 2 + 12 + 11*7 – 8/5 x = 2 + 12 + 77 - 8/5 x = 2 + 12 + 77 – 1 x = 14 + 77 – 1 x = 91 – 1 x = 90 x = 2 + 3*4 + 11*7 – 8/5 x = 2 + 12 + 77 – 1.8 x = 89.2
คุณสมบัติของนิพจน์ในภาษาซี ค่าของนิพจน์ นิพจน์ในภาษาซีจะให้ค่าออกมาค่าหนึ่งเสมอ เช่น 2 + 3*4 + 11*7 – 8/5 /* A program showing a use of expression */ #include <stdio.h> void main(void) { printf("The number is %d.", 2 + 3*4 + 11*7 - 8/5); } The number is 90.
/* A program showing the use of expression*/ #include <stdio.h> void main(void) { int x; x = 2 + 3*4 + 11*7 - 8/5; printf("Value of x is %d.", x); } Value of x is 90.
Value of the expression is 90. Value of x is 90. /* A program showing a use of expression */ #include <stdio.h> void main(void) { int x; printf("Value of the expression is %d.\n", x = 2 + 3*4 + 11*7 - 8/5); printf("Value of x is %d.", x); } Value of the expression is 90. Value of x is 90.
ค่าของนิพจน์ขึ้นอยู่กับตัวดำเนินการและตัวถูกกระทำ หากตัวถูกกระทำเป็นเลขจำนวนเต็มทั้งสองตัว จะได้ผลลัพธ์เป็นเลขจำนวนเต็ม เช่น (3*3)/4 เท่ากับ 9/4 เท่ากับ 2 3*(3/4) เท่ากับ 3*0 เท่ากับ 0 หากตัวถูกกระทำตัวใดตัวหนึ่งเป็นเลขทศนิยม จะได้ผลลัพธ์เป็นเลขทศนิยม เช่น (3*3)/4.0 เท่ากับ 9/4.0 เท่ากับ 2.25 3*(3/4.0) เท่ากับ 3*0.75 เท่ากับ 2.25
ค่าของนิพจน์แบบ จริง/เท็จ (True/False) แต่เมื่อนิพจน์นั้นเป็นการกระทำโดยใช้ตัวดำเนินการเปรียบเทียบ ผลลัพธ์ที่เป็นจริงจะให้ค่าเป็น 1 และผลลัพธ์ที่เป็นเท็จ จะให้ค่าเป็น 0 เช่น 3 > 5 เท่ากับ 0 หรือ false 6 == 8-2 เท่ากับ 1 หรือ true
ในการบวกลบในสมการนั้น จะกระทำจากซ้ายไปขวา + - * / % ในการบวกลบในสมการนั้น จะกระทำจากซ้ายไปขวา 1 2+3-4+5-6 2 5-4+5-6 3 1+5-6 4 6-6 5
การหารเลขจำนวนเต็ม ผลลัพธ์จะเป็นเลขจำนวนเต็มที่ปัดเศษทิ้ง เช่น 23 / 7 มีค่าเท่ากับ 3 เครื่องหมาย % เรียกว่าการมอดูลัส (Modulus) เป็นการหารเลขจำนวนเต็มที่ผลลัพธ์เป็นเศษของการหาร เช่น 23 % 7 มีค่าเท่ากับ 2 ( 23 หาร 7 เท่ากับ 3 เหลือเศษเท่ากับ 2 ) ในการหารเลขทศนิยม ก็จะได้ผลลัพธ์เป็นเลขทศนิยม เช่น 23.0 / 7.0 มีค่าเท่ากับ 3.825714 การหารเลขประเภทต่างกันนั้น เช่น real/int คอมไพเลอร์จะเปลี่ยน int ให้เป็น real ก่อน แล้วจึงทำการหาร ได้ผลลัพธ์เป็น real เช่น 7/2.0 7.0/2.0 3.5
ในการคูณหารและมอดูลัสในสมการนั้น จะกระทำจากซ้ายไปขวา ขั้นตอน การทำงาน 1 8 * 4 / 3 * 5 % 6 2 32 / 3 * 5 % 6 3 10 * 5 % 6 4 50 % 6 5
การใช้เครื่องหมาย +, - , *, /, % ในนิพจน์เดียวกันต้องคำนึงถึงลำดับความสำคัญดังนี้ 1 *, /, % ซ้ายไปขวา 2 +, - ขั้นตอน การทำงาน 1 7 * 5 – 24/2 + 8 2 35 – 24/2 + 8 3 35 - 12 + 8 4 23 + 8 5 31
ให้ผลลัพธ์ของสมการเป็นค่านั้นออกมาด้วย เครื่องหมาย = ให้ตัวแปรที่อยู่ทางซ้ายมือมีค่าเท่ากับค่าที่อยู่ทางขวามือ ให้ผลลัพธ์ของสมการเป็นค่านั้นออกมาด้วย ขั้นตอน การทำงาน a z y x 1 a = z = y = x = 5 - 2 a = z = y = 5 5 3 a = z = 5 4 a = 5
เครื่องหมาย = ลำดับความสำคัญน้อยกว่า +, - , *, /, % ขั้นตอน การทำงาน 1 x = 7 * 5 - 3 * 4 + 8 2 x = 35 - 3 * 4 + 8 3 x = 35 - 12 + 8 4 x = 23 + 8 5 x = 31 6 31
5 < 2 มีค่าเท่ากับ 0 (เป็นเท็จ) 5 <= 7 มีค่าเท่ากับ 1 (เป็นจริง) ตัวดำเนินการ ความหมาย > มากกว่า < น้อยกว่า >= มากกว่าหรือเท่ากับ <= น้อยกว่าหรือเท่ากับ 5 < 2 มีค่าเท่ากับ 0 (เป็นเท็จ) 5 <= 7 มีค่าเท่ากับ 1 (เป็นจริง)
= กำหนดค่า ผลลัพธ์เป็นค่าที่กำหนด ตัวดำเนินการ ความหมาย == เท่ากับ != ไม่เท่ากับ 5 != 2 มีค่าเท่ากับ 1 (เป็นจริง) 5 == 2 มีค่าเท่ากับ 0 (เป็นเท็จ) เครื่องหมายเท่ากับ = กำหนดค่า ผลลัพธ์เป็นค่าที่กำหนด == เปรียบเทียบ ผลลัพธ์เป็นจริงหรือเท็จ
&& หมายถึง AND A B A && B 0 (เท็จ) 1 (จริง) 0 < 6 && 100>50*3
|| หมายถึง OR A B A || B 0 (เท็จ) 1 (จริง) 0 < 6 || 100 > 50*3
! หมายถึง NOT A !A 0(เท็จ) 1(จริง) ! (0 < 6 || 100 > 50 *3)
+=, -=, *=, /=, %=, <<=, >>=, &=, ^=, |= +=, -=, *=, /=, %=, <<=, >>=, &=, ^=, |= x ก่อนกระทำ นิพจน์ x หลังกระทำ หมายเหตุ 10 x += 2 12 คือการทำ x = x + 2 จึงมีค่าเป็น 10 + 2 เท่ากับ 12 x -= 2 8 คือการทำ x = x -2 จึงมีค่าเป็น 10 - 2 เท่ากับ 8 x *= 2 20 คือการทำ x = x * 2 จึงมีค่าเป็น 10 * 2 เท่ากับ 20 x /= 2 5 คือการทำ x = x / 2 จึงมีค่าเป็น 10 / 2 เท่ากับ 5 x %= 2 คือการทำ x = x % 2 จึงมีค่าเป็น 10 % 2 เท่ากับ 0
จะทำให้ x มีค่าเป็น 11 ซึ่งมีความหมายเดียวกับ x = x+1 ตัวดำเนินการ ++ เรียกว่าตัวดำเนินการเพิ่มค่า (Increment) เสมือนการบวกหนึ่งเข้าไปในค่านั้น เช่น สมมติว่า x มีค่าเท่ากับ 10 เมื่อมีการกระทำ x++ หรือ ++x จะทำให้ x มีค่าเป็น 11 ซึ่งมีความหมายเดียวกับ x = x+1 ตัวดำเนินการ - - เรียกว่าตัวดำเนินการลดค่า (Decrement) เสมือนการลบหนึ่งออกจากค่านั้น เช่น สมมติว่า x มีค่าเท่ากับ 10 เมื่อมีการกระทำ x- - หรือ - -x จะทำให้ x มีค่าเป็น 9 ซึ่งมีความหมายเดียวกับ x = x-1
ลำดับความสำคัญ เครื่องหมาย ถ้ามีติดกันหลายตัว 1 ฟังค์ชั่นต่างๆ ซ้ายไปขวา 2 ++, - -, และเครื่องหมาย Unary +, -, !, ~ ขวาไปซ้าย 3 *, /, % 4 เครื่องหมายบวกลบ +, - 5 >>, << 6 >, <, <=, >= 7 ==, != 8 & 9 ^ 10 | 11 && 12 || 13 =, *=, /=, %=, +=, -=, &=, ^=, |=, <<=, >>=
นิพจน์ในวงเล็บ ( ) ขั้นตอน การทำงาน 1 2+3-4+5-6 2 5-4+5-6 3 1+5-6 4 นิพจน์ในวงเล็บ ( ) ขั้นตอน การทำงาน 1 2+3-4+5-6 2 5-4+5-6 3 1+5-6 4 6-6 5 ขั้นตอน การทำงาน 1 2+3-(4+5)-6 2 5-(4+5)-6 3 5 – 9 -6 4 -4 - 6 5 -10
ขั้นตอน การทำงาน หมายเหตุ 1 2 + 3 - ( 4 + (5 - 6)) ถูกมองเป็น 2 + 3 - K1 ซึ่งต้องทำ + ก่อน 2 5 - ( 4 + (5 - 6)) ถูกมองเป็น 5 - K1 ซึ่งต้องหาค่า K1 ก่อน จึงจะทำได้ 3 5- ( 4 + -1) ถูกมองเป็น 5 – (4+ K2) ซึ่งต้องหาค่า K2 ก่อน ซึ่งเท่ากับ 5-6 4 5 - 3 K1 มีค่าเป็น 4 + -1 เท่ากับ 3 5
การเปลี่ยนค่าของข้อมูล (type-name) ( expression ) (int) 3.25 จะเปลี่ยนค่าเป็น 3 ซึ่งเป็นชนิด int (float) 20 จะเปลี่ยนค่าเป็น 20.0 ซึ่งเป็นชนิด float
Please Enter 4 scores: 100 80 90 88 Your average score is 89. #include <stdio.h> void main(void) { int score1, score2, score3, score4, average1; float average2; printf(“Please enter 4 scores: ”); scanf(“%d %d %d %d”, &score1, &score2, &score3, &score4); average1 = (score1+score2+score3+score4)/4; printf(“Your average score is %d. ”, average1); average2 = ((float)(score1+score2+score3+score4))/4; printf(“Your average score is %0.1f. ”, average2); } Please Enter 4 scores: 100 80 90 88 Your average score is 89. Your average score is 89.8.