Download as pdf or txt
Download as pdf or txt
You are on page 1of 15

= C programming By…iamch❀mmy =

บทที่ 9 Operators หน้า 1


= C programming By…iamch❀mmy =

บทที่ 9 Operators

ตัวดาเนินการ (Operators) ในการเขียนโปรแกรมภาษาซี มี 3 ประเภท


คือ 1.ตัวดาเนินการคานวณ 2.ตัวดาเนินการเปรียบเทียบ และ 3.ตัวดาเนินการทางตรรกศาสตร์

1. ตัวดาเนินการคานวณ (Mathematical Operators)


ตัวดาเนินการคานวณ ใช้เพื่อช่วยคานวณค่าตัวเลขด้วยตัวดาเนินการทางคณิตศาสตร์
พื้นฐาน
ตัวดาเนินการคานวณ ได้แก่

+ ตัวดาเนินการ บวก (sum)


- ตัวดาเนินการ ลบ (minus)
* ตัวดาเนินการ คูณ (multiply)
/ ตัวดาเนินการ หาร (divide)
% ตัวดาเนินการมอดูลัส (modulus) หรือหารแล้ว เอาเฉพาะเศษ
เท่านั้น
ตัวอย่างการใช้ตัวดาเนินการคานวณ

5+3=8 6–2=4 5 * 7 = 35
8/3=2 8%3=2
10 / 6 = 1 หารเอาผลลัพธ์ 10%6=4 หารเอาเศษ
7/2=3 7%2=1

7%2=1
เราจะอ่านว่า เจ็ด ม๊อด สอง เท่ากับ หนึ่ง

บทที่ 9 Operators หน้า 2


= C programming By…iamch❀mmy =

เราสามารถใช้ตัวดาเนินการคานวณเหล่านี้ ทาการคานวณแล้วเก็บค่าไว้ในตัวแปรหรือแสดง
ผลลัพธ์ออกมาเลยก็ได้ ดังตัวอย่างต่อไปนี้

โค้ด
int x = 7, y = 3; ประกาศตัวแปร ทั้งหมด 5 ตัว
int sum, mod, div; คือ x, y sum, mod และ div
sum = x + y;
mod = x % y; คานวณแล้วเก็บค่าไว้ในตัวแปร โดยใช้ตัว
ดาเนินการ + % และ / ตามลาดับ
div = x / y;
printf("sum = %d\n", sum);
printf("x + y = %d\n", x + y);
printf("mod = %d\n", mod);
printf("div = %d\n", 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

ถ้าสังเกตดี ๆ จะเห็นว่า div หรือ x / y มีค่าเป็น 2 ไม่ใช่ 2.333 ทั้งนี้เพราะว่า


ตัวแปร int ทาอะไรกับตัวแปร int ก็ต้องได้ตัวแปร int 7 หารด้วย 3 จึงได้คาตอบเป็น 2 โดย
คอมพิวเตอร์จะแปลง 2.333 ให้เป็น int ด้วยการปัดทศนิยมทิ้ง
(int คือประเภทของตัวแปรที่เก็บค่าเป็นตัวเลขจานวนเต็ม)

บทที่ 9 Operators หน้า 3


= C programming By…iamch❀mmy =

หากมีการใช้ตัวดาเนินการคานวณมากกว่า 1 ตัว เราจะทาอย่างไร ?

โค้ด int x = 3 + 4 * 2;
printf("%d", x);

ผลลัพธ์คือ
11

ทาไมผลลัพธ์จึงเป็น 11 ทาไมไม่เท่ากับ 14 !!
นั่นเป็นเพราะว่าคอมพิวเตอร์จะทาการคูณ และหาร ก่อนบวก และลบเสมอ

เช่น 3 + 4 * 2 คอมพิวเตอร์จะทา 4 * 2 ก่อน มีค่าเท่ากับ 8 แล้วค่อยนาไปบวกกับ 3


จึงได้ 11 นั่นเองแต่ถ้าต้องการให้คอมพิวเตอร์ ทาการบวก ก่อนการคูณ ให้ใส่เครื่องหมายวงเล็บ
( ) ครอบไว้ ดังนี้

โค้ด int x =(3 + 4) * 2;


printf("%d", x);

ผลลัพธ์คือ 14

บทที่ 9 Operators หน้า 4


= C programming By…iamch❀mmy =

ลาดับการทางานของตัวดาเนินการคานวณ (Operator Precedence)

• คอมพิวเตอร์จะทาการคานวณในวงเล็บก่อนเสมอ
( )

• ตัวดาเนินการทั้ง 3 ตัวนี้มีความสาคัญเท่ากัน ทางานเรียงจากซ้ายไป


ขวา เจอเครื่องหมายใดก่อน ทาก่อน
* / %

• ตัวดาเนินการทั้ง 2 ตัวนี้มีความสาคัญเท่ากัน ทางานเรียงจากซ้ายไป


ขวา เจอเครื่องหมายใดก่อน ทาก่อน
+ -

ลองมาดูอีกตัวอย่าง

โค้ด int x = 1 + 5 % ( 8 - 4 / 2 * 3 ) * 4;
printf("%d", x);

ผลลัพธ์คือ
5

เห็นตัวเลขและเครื่องหมายดาเนินการหลายตัวแบบนี้อย่าเพิ่งท้อใจนะ
ไปดูคาอธิบายกัน

บทที่ 9 Operators หน้า 5


= C programming By…iamch❀mmy =

นาความรู้เรื่องลาดับการทางานของตัวดาเนินการคานวณมาใช้ ช่วยกันหาคาตอบโจทย์นี้กัน

1+5%(8-4/2 *3)*4 ทาในวงเล็บก่อน เจอเครื่องหมาย / ก่อน


ทาก่อน (จากซ้ายไปขวา) 4/2 ได้ค่าเป็น
2
1+5%(8-2 *3)*4 เจอ * ทาเลย 2 * 3 ได้ค่าเป็น 6

1+5%(8-6)*4 ในวงเล็บ 8 – 6 ได้ค่าเป็น 2

1+5%2*4 จากซ้ายไปขวา เจอเครื่องหมาย % ก่อน


ทาก่อน 5%2 ได้ค่าเป็น 1

1+1*4 จากนั้นทา * ก่อน + คือ 1 * 4 ได้ค่าเป็น


4

1+4 บวกกันเลย

5 เย้ ๆ ๆ ได้ผลลัพธ์ คือ 5

บทที่ 9 Operators หน้า 6


= C programming By…iamch❀mmy =

ตัวอย่างที่ 1 การใช้ตัวดาเนินการคานวณ

เพือ่ น ๆ ลองทบทวนดูนะ
และนาโค้ดโปรแกรมในตัวอย่าง
ไปใช้ในโปรแกรม Dev-C++
ได้ผลลัพธ์เหมือนเราไหมนะ ?

บทที่ 9 Operators หน้า 7


= C programming By…iamch❀mmy =

2. ตัวดาเนินการเปรียบเทียบ (Relational Operators)


เร าส าม าร ถก าห นด กา รท าง าน ขอ งโ ป รแ กร มใ ห้ เ ป็ น ไป ตา มเ งื่ อ นไ ขต่ าง ๆ
ที่ต้องการได้โดยตรวจสอบเงื่อนไขด้วยตัวดาเนินการเปรียบเทียบ
ตัว ดาเนิ นการเปรีย บเทีย บ ใช้ เปรียบเทียบตัวเลขเท่านั้น ผลลัพธ์จากการเปรียบเทียบ
อาจจะเป็นเท็จ (มีค่าเท่ากับ 0) หรือจริง (มีค่าเท่ากับ 1 หรือมีค่าใดๆ ที่ไม่เท่ากับ 0) ในภาษาซี
จะไม่มีข้อมูลชนิด true หรือ false ทั้งนี้เราจะใช้ในคาสั่งประเภทเงื่อนไข
ตัวดาเนินการเปรียบเทียบ ได้แก่
== ตัวดาเนินการ เท่ากัน
!= ตัวดาเนินการ ไม่เท่ากัน
>= ตัวดาเนินการ มากกว่าหรือเท่ากับ
<= ตัวดาเนินการ น้อยกว่าหรือเท่ากับ
> ตัวดาเนินการ มากกว่า
< ตัวดาเนินการ น้อยกว่า
ตัวอย่าง
การดาเนินการ ผลลัพธ์ ค่าที่ให้
5 == (3+2) จริง 1
9 != 9 เท็จ 0
10 >= 6 จริง 1
5 <= 5 จริง 1
6>8 เท็จ 0
1<3 จริง 1
(x<= 8) ถ้าเราให้ x มีค่าเป็น 4
จริง 1
จะได้ว่า 4 <= 8

ตัวดาเนินการ == ใช้ในการเปรียบเทียบ
ส่วน = ใช้กาหนดค่าให้ตัวแปร

บทที่ 9 Operators หน้า 8


= C programming By…iamch❀mmy =

โค้ด printf(“value of true = %d”, 5==5);

ผลลัพธ์คือ
value of true = 1

5 ==5 เป็นการเปรียบเทียบว่า 5 มีค่าเท่ากับ 5 หรือไม่ คาตอบคือใช่ (จริง) ให้ค่าเป็น 1

ลาดับการทางานของตัวดาเนินการเปรียบเทียบ

• ตัวดาเนินการ 4 ตัวนี้มีลาดับความสาคัญเท่ากัน แต่จะต่ากว่าตัว


< <= ดาเนินการคานวณ และทางานจากซ้ายไปขวา

> >=

• ตัวดาเนินการทั้ง 2 ตัวนี้มีลาดับความสาคัญเท่ากัน แต่ต่ากว่าตัว


ดาเนินการ 4 ตัวด้านบน และทางานจากซ้ายไปขวา
== !=

บทที่ 9 Operators หน้า 9


= C programming By…iamch❀mmy =

ตัวอย่างที่ 2 การใช้ตัวดาเนินการเปรียบเทียบ

คาอธิบายโปรแกรม
บรรทัดที่ 5 int x = 4;
ประกาศตัวแปรชื่อ x เป็นประเภทตัวเลขจานวนเต็ม มีค่าเท่ากับ 4
บรรทัดที่ 6 printf("The value of (x==4) is %d.\n", x==4);
ให้เปรียบเทียบค่าว่า x มีค่าเท่ากับ 4 จริงหรือไม่ ในตัวอย่างนี้เราได้กาหนดค่า x เท่ากับ 4
ไว้ในบรรทัดที่ 5 ดังนั้น 4==4 จึงเป็นจริง ให้ค่าเป็น 1 ผลลัพธ์ คือ The value of (x==4) is 1.
บรรทัดที่ 7 printf("The value of (x!=4) is %d.\n", x!=4);
ให้เปรียบเทียบค่าว่า x มีค่าไม่เท่ากับ 4 จริงหรือไม่ (ในตัวอย่างนี้คือไม่จริง) ดังนั้นจึงให้ค่า 0
ออกมา ผลลัพธ์ คือ The value of (x!=4) is 0.
บรรทัดที่ 8 printf("The value of (4*x-2<=3) is %d.\n", 4*x-2<=3);
ให้เปรียบเทียบค่าว่า 4*x-2 มีค่าน้อยกว่าหรือเท่ากับ 3 จริงหรือไม่ (ในตัวอย่างนี้คือไม่จริง)
ให้ค่าเป็น 0 ผลลัพธ์ คือ The value of (4*x-2<=3) is 0.

บทที่ 9 Operators หน้า 10


= C programming By…iamch❀mmy =

บรรทัดที่ 9 printf("The value of (2*x%%3>4) is %d.\n", 2*x%3>4);


ให้เปรียบเทียบค่าว่า 2*x%%3 มีค่ามากกว่า 4 จริงหรือไม่ (ในตัวอย่างนี้คือไม่จริง) ให้ค่า
เป็น 0 ผลลัพธ์ คือ The value of (2*x%%3>4) is 0. และที่ใช้ %2 ตัวเพื่อให้แสดงเครื่องหมาย %
ออกทางหน้าจอ 1 ตัว อีก 1 ตัวหมายถึงการม๊อด (การหารแบบเอาเศษเป็นผลลัพธ์)

เพือ่ น ๆ ลองนาโค้ดโปรแกรม
ในตัวอย่าง
ไปใช้ในโปรแกรม Dev-C++ ดูนะ

3. ตัวดาเนินการทางตรรกศาสตร์ (Logical Operators)

ตัวดาเนินการทางตรรกศาสตร์ ใช้เพื่อเชื่อมประโยคให้เป็นประโยคที่ซับซ้อนขึ้นและช่วยใน
การสร้างประโยคแบบเงื่อนไข

ตัวดาเนินการทางตรรกศาสตร์ ได้แก่

! แทนตัวดาเนินการ not (ไม่)


&& แทนตัวดาเนินการ and (และ)
|| แทนตัวดาเนินการ or (หรือ)

เช่น ประโยค x + 2 น้อยกว่า 8 และ x หาร 3 ลงตัว หรือ x ไม่ น้อยกว่า 2 จะ


สามารถเขียนให้เป็นประโยคเงื่อนไขได้ว่า x + 2 < 8 && x % 3 == 0 || ! (x < 2)
การสร้างประโยคเงื่อนไข จะได้คาตอบจากการเชื่อมแต่ละประโยคเป็นจริงหรือเท็จ อย่างใด
อย่างหนึ่งเท่านั้น เราต้องรู้จักค่าความจริงของการเชื่อมประโยคด้วยตัวดาเนินการทางตรรกศาสตร์แต่
ละตัว ในบทนี้จะกล่าวถึงตัวดาเนินการ && และ || เท่านั้น

บทที่ 9 Operators หน้า 11


= C programming By…iamch❀mmy =

ตารางค่าความจริง ของตัวดาเนินการทางตรรกศาสตร์ ซึ่งนักเรียนควรท่องจาให้ได้


ดังนี้
ประโยคที่ 1 ประโยคที่ 2 && (และ) || (หรือ)
T T T T
T F F T
F T F T
F F F F

T ย่อมาจากคาว่า true (ทรู) แปลว่า จริง


F ย่อมาจากคาว่า False (ฟอลส์) แปลว่า เท็จ

ตัวอย่าง
การดาเนินการ คาตอบ ค่าที่ให้
(2<3) && (3>1) จริง 1
(2>3) || (4<1) เท็จ 0
! (2> 3) จริง 1

เครื่องหมาย ! เรียกว่าเอ็กคลาเมชั่น มาร์ค (exclamation mark)


เครื่องหมาย & เรียกว่า แอมเพอร์แซนด์ (ampersand) เรียกสั้นๆว่า
แอนด์ และเครื่องหมาย | เรียกว่า ไปพ์ (pipe)

บทที่ 9 Operators หน้า 12


= C programming By…iamch❀mmy =

ตัวอย่างที่ 3 การใช้ตัวดาเนินการตรรกศาสตร์

คาอธิบายโปรแกรม
บรรทัดที่ 5 int x = 5;
ประกาศตัวแปรชื่อ x เป็นตัวแปรประเภทตัวเลขจานวนเต็ม มีค่าเท่ากับ 5
บรรทัดที่ 6 if((x + 3 > 7 || (x <= 5 || x % 3 == 0)) && x < 1)
ให้แทนค่า x ด้วยเลข 5 และดาเนินการทีละขั้น ได้ดังนี้
if((1 || (1 || 0)) && 0)
if((1 || 1) && 0)
if(1 && 0)
if(0) ได้ค่าเป็นเท็จ (0) จะไม่เข้าไปทาคาสั่งข้างในวงเล็บปีกกา จึงไม่มีการ
แสดงผลข้อความใด ๆ ออกมาทางหน้าจอ

บทที่ 9 Operators หน้า 13


= C programming By…iamch❀mmy =

จากตัวอย่างนี้ หากเราต้องการเขียนคาว่า That's not true! ออกมาทางหน้าจอ ภาษาซีก็


มีรูปแบบการเขียนดังนี้

นั่นคือ จะเข้าไปทาตามคาสั่งใน else (พิมพ์ประโยค That's not true! ออกทางหน้าจอ)


เมื่อเงื่อนไขใน if ไม่เป็นจริงนั่นเอง นักเรียนจะเข้าใจตัวอย่างนี้ดีขึ้น เมื่อได้เรียนในบทถัดไป

เพือ่ น ๆ ลองนาโค้ดโปรแกรมในตัวอย่าง
ไปใช้ในโปรแกรม Dev-C++ ดูนะ
เมือ่ เข้าใจแล้วก็เข้าไปทาแบบฝึกหัดเลย

บทที่ 9 Operators หน้า 14


= C programming By…iamch❀mmy =

คาศัพท์ภาษาอังกฤษน่ารู้ประจาบทที่ 9

ที่ คาศัพท์ คาอ่าน ความหมายที่เกี่ยวข้องกับภาษาซี


หารตัวเลขแล้วนาผลลัพธ์มาใช้งาน
1 divide ดิไวด
(เรียกสั้น ๆ ว่า div ดิฟ)
2 logical ลอจจิเคิล มีเหตุผล เกี่ยวกับตรรกวิทยา
3 mathematicle แมธธะแมททิเคิล เกี่ยวกับคณิตศาสตร์
4 minus ไมเนิส ลบ
หารตัวเลขแล้วนาเศษมาใช้งาน
5 modulus มอจจะเลิส
(เรียกสั้น ๆ ว่า mod ม๊อด)
6 multiply มัลทะไพล คูณ
7 operator ออพพะเรเทอะ ดาเนินการ
8 precedence พรีซีเดินท ลาดับ
9 relational รีเลชั่นนอล ความสัมพันธ์ ความเกี่ยวข้อง
10 sum ซัม บวก
11 value แวลลิว ค่า

++ จบบทที่ 9 ++

บทที่ 9 Operators หน้า 15

You might also like