1. บทที่ 3
ตัวดาเนินการ (Operators)
ฅัวดาเนินการคานวณพื้นฐานมีดังนี้
+ ตัวดาเนินการ บวก
- ตัวดาเนินการ ลบ
* ตัวดาเนินการ คูณ
/ ตัวดาเนินการ หาร
% ตัวดาเนินการมอดูลัส(Modulus) หรือหารแล้วเอาเฉพาะเศษนั่นเอง
เราสามารถใช้ตัวดาเนินการคานวณเหล่านี้ทาการคานวณแล้วเก็บค่าไว้ในตัวแปรหรือแสดงผลลัพธ์ออกมาเลย
ก็ได้ ดังตัวอย่างต่อไปนี้
int x = 7, y = 3;
int sum, mod, div;
sum = x + y;
mod = x % y;
div = x / y;
printf("sum = %dn", sum);
printf("x + y = %dn", x + y);
printf("mod = %dn", mod);
printf("div = %dn", div);
printf("%d + %d + %d = %d", sum, mod, div, sum + mod + div);
sum = 10
x + y = 10
mod = 1
div = 2
10 + 1 + 2 = 13
โค้ด
ผลลัพธ์
2. เอกสารประกอบการสอน ภาษาซี
โรงเรียนวิสุทธรังษี จังหวัดกาญจนบุรี
หน้า 26
ถ้าสังเกตดีๆ จะเห็นว่า div หรือ x / y มีค่าเป็น 2 ไม่ใช่ 2.333 ทั้งนี้เพราะว่า
int ทาอะไรกับ int ก็ต้องได้ int
7 / 3 = 2
(โดยคอมพิวเตอร์จะแปลง 2.333 ให้เป็น int ด้วยการปัดทศนิยมทิ้ง)
ในทานองเดียวกัน
double ทาอะไรกับ double ก็ย่อมได้ double
ข้อมูลจาพวกตัวเลขประเภทอื่นก็เช่นเดียวกัน
แล้วถ้า เลขสองตัวนั้น เป็นคนละประเภทล่ะ จะเป็นอย่างไร?
int ทาอะไรกับ double ก็ต้องได้ double
* อันนี้ต้องจา ระวังคานวณพลาดเพราะจุดนี้
แล้วถ้าอยากให้ 7 / 3 มีค่าเท่ากับ 2.333 ล่ะจะทาอย่างไร
เราก็ต้องแปลง 7 กับ3 ตัวใดตัวหนึ่งหรือทั้งสองตัวให้เป็น double ก่อน
มี 2 วิธี ดังนี้
7.0 + 3.0 หรือ (double) 7 + (double) 3
วิธีแรกคือการเติม .0 ให้กับเลขจานวณเต็มเลขนั้นก็จะกลายเป็นเลขที่มีทศนิยมเป็น0 ซึ่งเป็นdouble ทันที
ส่วนอีกวิธีหนึ่งคือการใส่(double) ไว้ด้านหน้าตัวเลขที่เราต้องการจะแปลงเลขตัวนั้นก็จะถูกเปลี่ยนให้เป็น
double ทันที ในทานองเดียวกัน(int),(long),(float) ก็ทาได้เช่นกัน
แต่ว่าวิธีแรกนั้น จะไม่สามารถใช้กับตัวแปรได้ต้องใช้วิธีหลังคือการเติม (double) เท่านั้นดังนี้
(double) x + (double) y
โดยจะทาการแปลงค่าที่ถูกเรียกใช้มาจากตัวแปร x และ y เป็น double
แต่ค่าที่เก็บไว้ใน x และ y ยังคงเป็น int เหมือนเดิม ไม่ถูกเปลี่ยนแปลง
3. เอกสารประกอบการสอน ภาษาซี
โรงเรียนวิสุทธรังษี จังหวัดกาญจนบุรี
หน้า 27
ทีนี้เราลองมาเขียนโค้ดกันดู
อ้าว ไหนเราอุตส่าห์แปลงค่าจากตัวแปรให้เป็นdouble แล้วไง ทาไมยังได้ 2 อยู่ล่ะ
ที่เป็นอย่างนี้ เพราะว่า div นั้นเป็นตัวแปรประเภท int นั่นเอง สิ่งที่จะเก็บเข้าตัวแปรประเภท int จะถูกแปลง
ให้เป็น int โดยอัตโนมัติ
ดังนั้นเราต้องประกาศ div ให้เป็นตัวแปรประเภท double ด้วย
และอย่าลืมที่เปลี่ยน %d เป็น %lf ด้วย เดี๋ยวจะผิดซ้าสอง
ผลลัพธ์ result = 2.333333 ก็เป็นอันที่เรียบร้อย
int x = 7, y = 3;
int div = (double) x / (double) y;
printf("result = %d", div);
โค้ด
ผลลัพธ์
result = 2
int x = 7, y = 3;
double div = (double) x / (double) y;
printf("result = %lf", div);
โค้ด
8. เอกสารประกอบการสอน ภาษาซี
โรงเรียนวิสุทธรังษี จังหวัดกาญจนบุรี
หน้า 32
ตัวอย่าง 3.3 โปรแกรมแสดงการเพิ่มค่าและลดค่าตัวแปรในแบบย่อ
/* 1 */ //Program : IncDec2.c
/* 2 */ // เพิ่มและลดค่าตัวแปรในแบบย่อ
/* 3 */
/* 4 */ #include <stdio.h>
/* 5 */ #include <conio.h>
/* 6 */ int main(){
/* 7 */ int x = 3, y;
/* 8 */
/* 9 */ y = x++;
/*10 */ printf(“x is %d, and y is %d.n”,x,y);
/*11 */ y = ++x;
/*12 */ printf(“Now x is %d, and y is %d.n”,x,y);
/*13 */ y = 5 % --x;
/*14 */ printf(“Now x is %d, and y is %d.n”,x,y);
/*15 */ printf(“Now x-- is %d, and ++y is %d.n”,x--,++y);
/*16 */ printf(“Now x is %d, and y is %d.n”,x,y);
/*17 */ getch();
/*18 */ return 0;
/*19 */ }
ผลลัพธ์
……………………………………..
……………………………………..
…………………………………….
……………………………………..
……………………………………..
……………………………………..
9. เอกสารประกอบการสอน ภาษาซี
โรงเรียนวิสุทธรังษี จังหวัดกาญจนบุรี
หน้า 33
ใบงานที่ 3.1
ตัวดาเนินการคานวณ
1. กาหนดให้a, b และ c เป็นตัวแปรชนิดint และมีค่าเท่ากับ 4,5 และ 2 ตามลาดับ จงหา
ผลลัพธ์ของนิพจน์ต่อไปนี้
1.1 a % -b +5 ผลลัพธ์คือ ............................................................
1.2 c - b * a ผลลัพธ์คือ ............................................................
1.3 c * c + b * a / 3 ผลลัพธ์คือ ............................................................
1.4 a – b – c * a % b ผลลัพธ์คือ ............................................................
2. จากโปรแกรมIncDec2.c ในตัวอย่างที่ 3.3 หน้า 32 ถ้าสมมติให้โปรแกรมในบรรทัดที่10 ถูก
แก้ไขเป็น
printf (“x is %d, and y is %d.n”, x--, y++);
ให้นักเรียนเติมผลลัพธ์ของคาสั่งprintf() ในบรรทัดที่10, 12 และ 14-16
บรรทัดที่ ผลลัพธ์
10 x is ____, and y is ____.
12 Now x is ____, and y is ____.
14 Now x is ____, and y is ____.
15 Now x-- is ____, and y++ is ____.
16 Now x is ____, and y is ____.
10. เอกสารประกอบการสอน ภาษาซี
โรงเรียนวิสุทธรังษี จังหวัดกาญจนบุรี
หน้า 34
3. กาหนดให้a, b และc เป็นตัวแปรชนิดint และมีค่าเท่ากับ4, -3 และ9 ตามลาดับ ให้
แสดงผลลัพธ์ของคาสั่งprintf() ต่อไปนี้ โดยแต่ละคาสั่งไม่เกี่ยวข้องกัน
printf(“%d, %dn”, a + 2%a, ++b % a);
...................................................................................................................................................................................
printf(“%d, %d, %dn”, a + b + c++, 4 * b / 2, 4 / 2 * b);
...................................................................................................................................................................................
printf(“%d, %d, %dn”, ++b + ++c, a – 2, 2 * a % 3);
...................................................................................................................................................................................