การคำนวณทางคณิตศาสตร์ ตัวดำเนินการ การทดลองที่ 5 การคำนวณทางคณิตศาสตร์ ตัวดำเนินการ
ทบทวน โปรแกรม อย่างน้อยมีส่วนประกอบดังนี้ #include <stdio.h> preprocessor void main() { int a, b, c; a = 10; b = 20; c = a + b; printf(“c = %d\n”, c); } int a, b, c; declaration a = 10; input b = 20; c = a + b; process printf(“c = %d\n”, c); output
ทบทวน โปรแกรม อย่างน้อยมีส่วนประกอบดังนี้ #include <stdio.h> preprocessor void main() { } int a, b, c; declaration scanf(“%d”, &a); input scanf(“%d”, &b); c = a + b; process printf(“c = %d\n”, c); output
ต้องการคำนวณว่าพื้นที่ x ไร่ y งาน มีกี่ตารางวา #include <stdio.h> void main() { int x, y, va; x = 5; y = 3; va = x * 400 + 3 * 100; printf(“area in square va = %d\n”, va); } preprocessor declaration input process output
ต้องการคำนวณว่าพื้นที่ x ไร่ y งาน มีกี่ตารางวา #include <stdio.h> void main() { int x, y, va; scanf(“%d”, &x); scanf(“%d”, &y); va = x * 400 + 3 * 100; printf(“area in square va = %d\n”, va); } preprocessor declaration scanf(“%d”, &x); input scanf(“%d”, &y); process output
นิพจน์ (expression) การรวมกันของ อาจมีไม่ครบทุกส่วนก็ได้ ข้อมูล (values) ตัวแปร (variables) ตัวดำเนินการ (operators) ฟังก์ชัน (functions) อาจมีไม่ครบทุกส่วนก็ได้ เมื่อประมวลผลตามกฎการทำก่อน แล้วจะได้ค่าใหม่ออกมา
นิพจน์ (expression) ตัวอย่าง 2, 3 + 4, 5 + 3 * 2 a, a + b, a * b + c 2, 3 + 4, 5 + 3 * 2 a, a + b, a * b + c cos(x) + sin(y)
การกำหนดค่า (assignment) ใช้ตัวดำเนินการ “=” หมายถึงการนำผลลัพธ์ของนิพจน์ทางซ้าย มาเก็บในตัวแปรทางขวา x = y + z; salary = salary + ot; inch = cm / 2.54; cm = m * 100;
ตัวดำเนินการทางคณิตศาสตร์ การคำนวณ ตัวดำเนินการ ตัวอย่าง การทำงาน บวก + c = a + b; นำค่าในตัวแปร a และค่าในตัวแปร b มาบวก กันแล้วเก็บผลลัพธ์ไว้ที่ตัวแปร c ลบ - c = a - b; นำค่าในตัวแปร b มาลบออกจากค่าใน ตัวแปร a แล้วเก็บผลลัพธ์ไว้ที่ตัวแปร c คูณ * c = a * b; นำค่าในตัวแปร a และค่าในตัวแปร b มาคูณ หาร / c = a / b; นำค่าในตัวแปร a เป็นตัวตั้งและนำค่าใน ตัวแปร b เป็นตัวหารแล้วเก็บผลลัพธ์ไว้ที่ ตัวแปร c มอดูลัส % c = a % b; นำค่าที่เก็บไว้ในตัวแปร a เป็นตัวตั้งและค่า ในตัวแปร b เป็นตัวหาร โดยเก็บเศษไว้ที่
ตัวอย่างการพิมพ์ข้อมูลจากตัวแปรหรือผลลัพธ์การคำนวณ #include <stdio.h> void main() { int a=4, b=5; printf(“ a = %d\n”, a); printf(“ b = %d\n”, b); printf(“ Sum = %d\n”, a+b); } ข้อมูลของตัวแปรหรือผลลัพธ์การคำนวณจะถูกดนำไปพิมพ์ที่ตำแหน่งการกำหนดรูปแบบการพิมพ์ (“%d, %f,…”) a = 4 b = 5 Sum = 9
ตัวอย่างการพิมพ์ข้อมูลหรือผลลัพธ์การคำนวณ #include <stdio.h> void main() { int a=4, b=5; printf(“ a = %d b = %d\n”, a, b); printf(“ Sum = %d\n”, a+b); } ข้อมูลของตัวแปรหรือผลลัพธ์การคำนวณจะถูกดึงไปพิมพ์ที่ตำแหน่งการกำหนดรูปแบบการพิมพ์ (“%d, %f,…”) a = 4 b = 5 Sum = 9
จำนวนใดเป็นจำนวนเต็ม √ 0.0 0.2 1 1.0 1. .0 x x √ x x x
ข้อควรระวังในการหาร จำนวนเต็ม หาร จำนวนเต็ม ได้ผลลัพธ์เป็นจำนวนเต็ม จำนวนทศนิยม หารกัน ได้ผลลัพธ์เป็นจำนวนทศนิยม 3/2 = 1 2/3 = 0 22/7 = 3 3/4 = 0 5/2 = 2 3/2.0 = 1.5 2.0/3.0 = 0.666666… 22/7.0 = 3.142… 3.0/4 = 0.75 5/2.0 = 2.5
การกำหนดชนิดไม่ถูกต้อง ภาษาซีไม่เข้มงวดในการกำหนดชนิดข้อมูลตัวเลข int a = 1.5; //OK แต่เมื่อพิมพ์ข้อมูลจะไม่ถูกต้อง printf(“%d\n”, a); 1 Printf(“%f\n”, a); 0.00000 ควรประกาศเป็น float a = 1.5
การกำหนดชนิดไม่ถูกต้อง ภาษาซีไม่เข้มงวดในการกำหนดชนิดข้อมูลตัวเลข int a = 3*2.5; //OK แต่เมื่อพิมพ์ข้อมูลจะไม่ถูกต้อง printf(“%d\n”, a); 6 Printf(“%f\n”, a); 0.00000 ควรประกาศเป็น float a = 3*2.5
ถ้า x%y เท่ากับ 0 แสดงว่า ตัวดำเนินการ % (mod) หมายถึงการคำนวณหาเศษจากการหาร เช่น 3%2 1 5%3 2 7%2 1 3%5 3 4%2 0 10%3 1 5%1 0 ถ้า x%y เท่ากับ 0 แสดงว่า x หารด้วย y ลงตัว
ลำดับการทำก่อนของนิพจน์คณิตศาสตร์ กฎของการดำเนินการ ลำดับสูงกว่า ทำก่อน ลำดับเท่ากัน ทำงานจากซ้ายไปขวา สูง ( ) *, /, % +, - ต่ำ
ตัวอย่างแสดงลำดับการทำก่อน 20 + 30 * 5 – 20 / 2 20 + 150 – 20 / 2 20 + 150 – 10 170 – 10 160
ตัวอย่างแสดงลำดับการทำก่อน 10 % 3 * ( 50 – 200 % 20 / 10 ) * 5 10 % 3 * ( 50 – 0 / 10 ) * 5 10 % 3 * ( 50 – 0 ) * 5 10 % 3 * 50 * 5 1 * 50 * 5 250
ลองทำดู 20 – 3 * 3 – 9 / 3 + 3 * 2 14 12 – 3 + 3 % 9 / (3 + 3 * 2) 9 2 % 5 * 3 / 3 / 9 + 3 * 2 6 (2 * 5 – (10 + 3)) / 4 + 2 * 3 6
ตัวดำเนินการเอกภาค(Unary Operator) ได้แก่ตัวดำเนินการ ++ และ -- การทำงานคือเพิ่ม หรือ ลดค่าตัวแปรครั้งละ 1 รูปแบบการใช้งานมีสองแบบ Prefix Unary Operator (เติมหน้า) เช่น ++a; --x; Postfix Unary Operator (เติมหลัง) เช่น b--; y++;
ตัวดำเนินการเอกภาค(Unary Operator) postfix จะทำงานในส่วนของนิพจน์ให้เสร็จสิ้นก่อน จากนั้นจึงทำการเพิ่มหรือลดค่าให้กับตัวถูกดำเนินการ prefix จะทำการเพิ่มหรือลดค่าให้กับตัวถูกดำเนินการก่อน จากนั้นจึงทำงานในส่วนของนิพจน์
ตัวอย่าง #include <stdio.h> void main() { int a=0 ; printf(“ Value of a is %d\n”,a); a++; } Value of a is 0 Value of a is 1
ตัวอย่าง #include <stdio.h> void main() { int a=0 ; printf(“ Value of a is %d\n”,a); ++a; } Value of a is 0 Value of a is 1
ตัวอย่าง #include <stdio.h> void main() { int a=10 ; printf(“ Value of a is %d\n”,a); a--; } Value of a is 10 Value of a is 9
ตัวอย่าง #include <stdio.h> void main() { int a=10 ; printf(“ Value of a is %d\n”,a); --a; } Value of a is 10 Value of a is 9
ตัวอย่าง int a = 10; int b = ++a; int c = ++a; int d = ++a; a = 11, b = 11 a = 12, c = 12 a = 13, d = 13 int a = 10; int b = a++; int c = a++; int d = a++; b = 10, a = 11 c = 11, a = 12 d = 12, a = 13
ตัวอย่าง int a = 10, b = 20; int x = ++a + b++; x = 31, a = 11, b = 21
ตัวอย่าง int a = 10, b = 20, c = 30; int y = ++c + ++a + b--; y = 62, a = 11, b = 19, c = 31
ตัวอย่าง int a = 10, b = 20; printf(“a = %d b = %d\n”, ++a, b++);
ตัวอย่าง int a = 10, b = 20; printf(“a = %d b = %d\n”, a--, --b);
ลองทำดู x = 1 y = 39 int a = -10, b = 10, c = 50; int x = a++ + ++b; int y = --c - --b; printf(“x = %d y = %d\n”, x, y); x = 1 y = 39
ตัวดำเนินการประกอบ (compound operator) ตัวอย่าง การทำงาน += x+=5 x=x+5 -= x-=5 x=x-5 *= x*=5 x=x*5 /= x/=5 x=x/5 %= x%=5 x=x%5
ตัวดำเนินการประกอบ (compound operator) int x = 10; x += 5; x = x + 5 x = 15 x -= 5; x = x - 5 x = 10 x *= 2; x = x * 2 x = 20 x /= 10; x = x / 10 x = 2 x %= 2; x = x % 2 x = 0
ลำดับการทำก่อน สูง ( ) ++ -- * / % + - += *= /= -= %= ต่ำ
ตัวอย่าง #include <stdio.h> void main() { int a=0 , sum=0 ; printf (“Value a is %d\n”,a); sum+=1; printf(“Value sum is %d\n”,sum); } Value a is 1 Value sum is 1
ตัวอย่าง 10 20 20 19 19 19 18 38 17 18 #include <stdio.h> void main() { int x=10, y=20; printf(“\n%d %d”,x,y); x+=10 ; --y ; printf(“\n%d %d”,x,y); y = --x ; y = x-- + y ; printf(“\n%d %d”,x,y) ; y = x-- ; } 10 20 20 19 19 19 18 38 17 18
ตัวอย่าง คำสั่ง ค่า x ค่า y int x=10, y=20; 10 20 x+=10 ; --y ; 19 18 38 y = x-- ; 17
Go to Laboratory Room now !