The words you are searching are inside this book. To get more targeted content, please make full-text search by clicking here.
Discover the best professional documents and content resources in AnyFlip Document Base.
Search
Published by xzibit918, 2021-09-11 11:00:28

chapter 4-Edit

chapter 4-Edit

การเขยี นโปรแกรมคอมพิวเตอร์ C

บทท่ี 4
ตวั ดาเนินการและนพิ จน์ (Operators and Expressions)

การเขียนโปรแกรมคอมพิวเตอร์จาเป็นต้องมีสูตรคานวณ นิพจน์ทางคณิตศาสตร์และ

ตรรกศาสตร์เพ่ือให้โปรแกรมสามารถทางานได้อย่างมีประสิทธิภาพ การคานวณประกอบด้วย

ตัวดาเนินการ ตวั ถูกกระทา และนิพจน์ โดยผ้ศู ึกษาต้องเขา้ ใจหลักการต่างๆ ดงั ตอ่ ไปนี้

Operator คือ ตัวดาเนินการซึ่งมักจะเป็นเคร่ืองหมายหรือสัญลักษณ์พิเศษต่างๆ

ได้แก่ เครอ่ื งหมาย + , – , * , /

Operand คอื ตัวถูกกระทา อาจเปน็ ค่าคงท่ี ตวั แปร นิพจน์ หรือฟงั ก์ชนั กไ็ ด้

Expression คือ นิพจน์ ซ่ึงประกอบด้วย ตัวดาเนินการและตัวถูกกระทาหลายๆ ตัว

มารวมเขา้ ด้วยกนั เช่น 5 + 4 – (2 * 3) เป็นตน้

1. ตัวดาเนินการทางคณติ ศาสตร์ (Arithmetic Operators)

ในภาษา C มตี วั ดาเนินการทางคณติ ศาสตร์อยู่ 5 ตวั ด้วยกัน คือ

ตวั ดาเนนิ การ จุดประสงค์

+ การบวก (Addition)

- การลบ (Subtraction)

* การคูณ (Multiplication)

/ การหาร (Division)

% การหารเอาเศษ (Modulus)

ภาษา C จะไม่มีตัวดาเนินการที่ใช้สาหรับหาค่ายกกาลัง แต่จะใช้ฟังก์ชัน

pow() แทน ซง่ึ จะกลา่ วรายละเอยี ดในบทที่ 8 ในหัวขอ้ ฟังก์ชันทางคณิตศาสตร์

ในขณะที่ตัวถูกดาเนินการหรือโอเปอแรนด์ (Operands) นั้นจะต้องถูกแทน

ด้วยค่าตัวเลข ซ่ึงอาจเป็นตัวแปรหรือค่าคงที่ ทั้งนี้ตัวถูกดาเนินการยังสามารถเป็นได้ทั้งเลข

จานวนเต็ม เลขจานวนจริง และตัวอักขระ เม่ือนาท้ังตัวถูกดาเนินการ และตัวดาเนินการ

ประกอบเข้าด้วยกัน ก็จะเรียกว่านิพจน์น่ันเอง เช่น a/b ถือเป็นนิพจน์ มีการใช้ตัวดาเนินการ

หาร ( / ) โดยท่ี a เปน็ ตวั ถกู ดาเนินการตวั แรกทีใ่ ชเ้ ป็นตัวต้ัง ในขณะท่ี b เป็นตวั ถูกดาเนนิ การ

ตัวท่ีสองท่ีใช้เป็นตัวหาร สาหรับตัวถูกดาเนินการสองตัว ที่นามาคานวณผ่านตัวดาเนินการ

มอดูลัส (%) นั้น จะต้องเป็นเลขจานวนเต็มท้ังคู่ และตัวถูกดาเนินการที่เป็นตัวหารจะต้องไม่

C บทที่ 4 ตัวดาเนนิ การและนพิ จน์ (Operators and Expressions)

เปน็ คา่ ศูนย์ ในทานองเดียวกัน ตวั ถกู ดาเนนิ การท่นี ามาคานวณผ่านตวั ดาเนนิ การหาร ( / ) น้ัน

ตวั ถูกดาเนินการทเ่ี ป็นตวั หาร ตอ้ งไมเ่ ป็นคา่ ศูนย์เช่นกัน

ตัวอย่างที่ 4.1 สมมติว่า a และ b ถูกกาหนดให้เป็นตัวแปรชนิดเลข

จานวนเต็ม ซึ่งถูกกาหนดค่าเป็น 10 และ 3 ตามลาดับ เมื่อนาตัวแปรท้ังสองมาผ่านนิพจน์

คณิตศาสตร์ตามตารางตอ่ ไปนี้

นิพจน์ ผลลัพธ์

a * b 30

a/b 3

a%b 1

ตัวอย่างที่ 4.2 สมมติว่า n1 และ n2 ถูกกาหนดให้เป็นตัวแปรชนิดเลข

จานวนจริง ซ่งึ ถูกกาหนดคา่ เป็น 12.5 และ 2.0 ตามลาดับ เมือ่ นาตวั แปรทั้งสองมาผ่านนพิ จน์

คณติ ศาสตร์ตามดา้ นล่างตอ่ ไปนี้ ก็จะได้

นพิ จน์ ผลลพั ธ์

n1 + n2 14.5

n1 – n2 + 1 10.5

n1 * n2 25.5

n1 / n2 6.25

2. ตวั ดาเนินการยนู ารี (Unary Operators)

ภาษา C ยังผนวกตัวดาเนินการท่ีนามาใช้กับตัวถูกดาเนินการชนิดโดด ๆ ในการ

สร้างค่าใหม่ขึ้นมา นั่นคือ ตัวดาเนินการยูนารี และหนึ่งในน้ันก็คือ ตัวดาเนินการยูนารีติดลบ

(Unary Minus) ตัวอย่างตัวถูกดาเนินการชนิดโดด ๆ เช่น 882 เมื่อมีการนาตัวดาเนินการยู

นารี-นาหน้า ค่าก็จะถูกเปลี่ยนเป็นค่าติดลบในทันทีคือ -882 นั่นเอง อย่างไรก็ตาม

เคร่ืองหมายลบดังกล่าวมีความแตกต่างกันอย่างสิ้นเชิง กับตัวดาเนินการทางคณิตศาสตร์ที่ใช้

สาหรับการลบ (Subtraction)

ตัวอย่างท่ี 4.3 ตัวอยา่ งการใช้ตวั ดาเนินการยูนารคี า่ ติดลบ

-0743 -0X7FFF -0.2

-root1 -(x+y) -3*(x+y)

42

Cการเขียนโปรแกรมคอมพิวเตอร์

จากตัวอย่างข้างต้นจะพบว่า ตัวดาเนินการยูนารีสามารถนามาใช้กับตัวถูก

ดาเนนิ การท่ีเปน็ ค่าคงทแ่ี บบเลขจานวนเตม็ เลขจานวนจริง ตัวแปร และนิพจน์ก็ได้

นอกจากน้ีตัวดาเนินการยูนารี ก็ยังประกอบด้วย ตัวดาเนินการเพิ่มค่า

(Increment Operator) ซ่ึงใช้เครื่องหมาย ++ และตัวดาเนินการลดค่า (Decrement

Operator) ซ่ึงใช้เคร่ืองหมาย -- โดยการเพิ่มค่าหรือการลดค่าด้วยตัวดาเนินการดังกล่าว

จะเพิ่มทีละหนึ่งหรือลดทีละหนึ่ง และตัวถูกดาเนินการที่นาตัวดาเนินการน้ีมาใช้ จะต้องเป็น

ตัวแปรโดด ๆ โดยสามารถใช้เคร่ืองหมาย ++ และ – เขียนนาหน้าตัวแปร (prefix) หรือหลัง

ตัวแปร (postfix) ก็ได้ เช่น ++i หรือ i++ แต่ทั้งสองแบบน้ีจะมีวิธีจัดการกับค่าท่ีแตกต่างกัน

ตามรายละเอียดต่อไปน้ี

ตวั ดาเนินการ นพิ จน์ ความหมาย

++ (prefix) ++a เพิม่ ค่าข้นึ อีกหน่งึ ให้กบั a ก่อน แลว้ จงึ นาคา่ ใหม่

ของ a ในนพิ จนน์ ้ไี ปใช้

++ (postfix) a++ นาค่าปัจจุบนั ของ a ในนพิ จนน์ ี้ไปใชง้ านกอ่ น

แลว้ จึงเพิ่มค่า a ขึ้นอกี หน่ึง

--(postfix) --b ลดคา่ ลงอกี หนึง่ ใหก้ ับ b ก่อน แลว้ จึงนาค่าใหม่

ของ b ในนิพจน์นไ้ี ปใช้

--(postfix) b-- นาค่าปัจจุบันของ b ในนิพจนน์ ้ีไปใช้งานก่อน

แล้วจงึ ลดค่า b ลงอกี หน่ึง

ตวั อย่างท่ี 4.4 โปรแกรมและผลลพั ธท์ ี่ได้ใช้ตัวดาเนินการ ++

43

C บทท่ี 4 ตวั ดาเนนิ การและนิพจน์ (Operators and Expressions)

1: #include <stdio.h>
2: void main()
3: {
4: int count;
5: /* post increment */
6: count = 5;
7: printf(“ %d\n”, count);
8: printf(“%d\n”, count++);
9: printf(“ %d\n\n”, count);
10: /* pre increment */
11: count = 5;
12: printf(“ %d\n”, count);
13: printf(“ %d\n”, ++count);
14: printf(“ %d\n\n”, count);
15: }

อธิบายการทางานของโปรแกรม
บรรทดั ท่ี 8 ใชต้ ัวดาเนนิ การ ++ (postfix) เพ่ิมคา่ ให้ตวั แปร Count
บรรทัดท่ี 9 แสดงผลตัวแปร Count หลังจากใช้ตัวดาเนินการ ++ (postfix)
บรรทัดท่ี 13 ใช้ตวั ดาเนินการ ++ (prefix) เพิ่มค่าให้ตัวแปร Count
บรรทัดท่ี 14 แสดงผลตวั แปร Count หลังจากใช้ตวั ดาเนินการ ++ (prefix)
ผลลัพธ์ของโปรแกรม

5
5
6
5
6
6

44

Cการเขียนโปรแกรมคอมพิวเตอร์

3.ตวั ดาเนินการเปรยี บเทียบและตรรกะ (Comparison and Logical Operators)

ตัวดาเนินการเปรยี บเทยี บในภาษา C ประกอบด้วย

ตวั ดาเนนิ การ ความหมาย

< น้อยกว่า

< = นอ้ ยกว่าหรอื เทา่ กับ

> มากกวา่

> = มากกวา่ หรือเทา่ กบั

== เท่ากบั

!= ไม่เทา่ กับ

โดยสามารถเขียนอยู่ในรูปแบบของนิพจน์เพื่อการเปรียบเทียบค่า โดยผลลัพธ์ที่
ได้จะเป็น ค่าตรรกะที่เป็นจริง (True) หรือเป็นเท็จ (False) อย่างใดอย่างหน่ึง ซึ่งค่าตรรกะ
ดงั กล่าวจะเปน็ ขอ้ มลู ชนิดเลขจานวนเต็ม โดยที่ จริง คือ 1 และ เท็จ คือ 0

ตัวอย่างที่ 4.5 สมมติว่า ตัวแปร i, j และ k ถูกกาหนดชนิดข้อมูลเป็นเลข

จานวนเต็ม และมีค่า 1, 2 และ 3 ตามลาดับ และจากนิพจน์ตรรกะของตัวแปรเหล่านี้ ผล

ตรวจสอบทไี่ ด้ก็จะเปน็

นพิ จน์ ผลการเปรยี บเทียบคา่ ค่า

i < j True 1

(i + j) > = k True 1

(j + k) > (i + 5) False 0

k ! = 3 False 0

j == 2 False 1

นอกจากน้ี ยงั มตี วั ดาเนินการแบบตรรกะ ซง่ึ ประกอบด้วย
ตัวดาเนินการ ความหมาย
&& และ (AND)

45

C บทที่ 4 ตัวดาเนินการและนิพจน์ (Operators and Expressions)

|| หรือ (OR)
! ไมใ่ ช่ (NOT)
ซงึ่ ผลที่ไดจ้ ากตัวดาเนินการดงั กล่าว จะเปน็ ไปตามตารางคา่ ความจรงิ ดงั นี้
a b a && b a || b !a
11110
10010
01011
00001

ตัวอย่างที่ 4.6 กาหนดให้ i เป็นตัวแปรชนิดเลขจานวนเต็ม ซ่ึงมีค่าเท่ากับ 7

และ f เป็นตัวแปรชนิดเลขจานวนจริง ซ่ึงมีค่าเท่ากับ 5.5 ส่วนตัวแปร c คือตัวแปรชนิด

ตัวอกั ษร ที่มคี ่าเท่ากบั 'w' และต่อไปน้เี ปน็ นิพจน์ตรรกะในรปู แบบต่าง ๆ และผลลัพธท์ ่ไี ด้

นพิ จน์ ผลท่ไี ดค้ ือค่า

(i > = 6) && (c == 'w') 1

(i > = 6) || (c == 119) 1

(f < 11) && (i > 100) 0

(c ! = 'p') || ((i + f) < = 10) 1

4. ตัวดาเนนิ การระดบั บติ (Bitwise Operators)

ในภาษา C ได้ผนวกตัวดาเนินการระดับบิตในการจัดการข้อมูลภายในได้

เช่นเดียวกับการโปรแกรมภาษาระดับต่าอย่างภาษาแอสเซมบลี โดยประกอบด้วยตัว

ดาเนินการชนิดตา่ ง ๆ ดังน้ี

ตวั ดาเนนิ การ ความหมาย

& บติ ไวส์ AND

| บติ ไวส์ OR

^ บติ ไวส์ XOR (exclusive OR)

~ คอมพลีเมนต์

>> เล่ือนบิตไปทางขวา

46

Cการเขยี นโปรแกรมคอมพิวเตอร์

<< เลือ่ นบิตไปทางซา้ ย

ซ่ึงผลทไี่ ดจ้ ากตวั ดาเนนิ การดงั กลา่ ว จะเปน็ ไปตามตารางค่าความจรงิ ดังนี้

ตวั ถูกดาเนินการ ผลลพั ธ์

a b a & b a | b a ^ b ~a

111100

100110

010111

000011

5. ตวั ดาเนนิ การกาหนดค่า (Assignment Operators)

ในภาษา C มีการกาหนดค่าให้กับตัวแปร โดยใช้รูปแบบของตัวดาเนินการ

กาหนดค่า สามารถเขยี นได้ตามรูปแบบดังนี้

ตวั ดาเนนิ การ ตัวอย่าง ความหมาย

= x = y x =y

+= x += y x = x+ y

-= x -= y x = x - y

*= x *= y x = x * y

/= x /= y x = x / y

%= x %= y x=x%y

ตัวอย่างที่ 4.7 การกาหนดคา่ นิพจน์ดว้ ยตัวดาเนินการกาหนดค่า

a = 3;
x = y;
delta = 0.001;
sum = a + b;
area = length * width;

ตัวอยา่ งท่ี 4.8 การกาหนดค่านพิ จนแ์ ละผลลัพธท์ ่ีได้

47

C บทท่ี 4 ตวั ดาเนินการและนิพจน์ (Operators and Expressions)

นิพจน์ ผลลพั ธ์
i = 3.3 3.3
i = 4.5 4.5
i =9 9

ตัวอย่างท่ี 4.9 การกาหนดคา่ นพิ จน์และผลลัพธท์ ไ่ี ด้ โดยทต่ี ัวแปร i=10 , j = 3
นพิ จน์ ผลลัพธ์
i = j 10
i += j 13
i -= j 7
i /= j 3.3
i %= j 1

6. ตัวดาเนินการเง่ือนไข (Conditional Operator)
ตัวดาเนนิ การเงื่อนไข จะนามาใชเ้ พ่ือทดสอบคา่ นิพจน์ทางตรรกะวา่ จริงหรือไม่

รูปแบบ
expression1 ? expression2 : expression3 ;

โดยท่ี expression1 หมายถงึ นพิ จน์เงื่อนไข
expression2 หมายถงึ กรณเี ป็นจรงิ
expression3 หมายถึง กรณีเปน็ เทจ็

ตวั อยา่ งท่ี 4.10
ans = (i < 0) ? 0 : 100;

นพิ จน์ (i < 0) : 100;
ถ้านิพจน์มีเงื่อนไขเปน็ จรงิ ตัวแปร ans จะถูกกาหนดค่าเป็น 0
ถา้ นพิ จน์มเี งื่อนไขเป็นเทจ็ ตวั แปร ans ก็จะถูกกาหนดค่าเปน็ 100
48

Cการเขยี นโปรแกรมคอมพิวเตอร์

7. ตวั ดาเนินการบอกขนาดชนิดขอ้ มูล (sizeof Operator)
ตัวดาเนินการประเภทนี้ จะทาให้เราทราบว่า ชนิดข้อมูลแต่ละชนิดท่ีอยู่มีขนาด

เทา่ ใด ทั้งน้ีชนดิ ขอ้ มูลจะมีขนาดเทา่ ใดนนั้ จะสามารถทราบได้จากตัวดาเนินการ sizeof

รปู แบบ sizeof (expression)

โดยท่ี expression หมายถงึ ชนดิ ขอ้ มูล หรือตวั แปร
สว่ นขนาดท่ไี ดจ้ ะบอกหน่วยเป็นไบต์
ตัวอย่างท่ี 4.13

printf(“The size of char is %d byte\n”, sizeof(char));
printf(“The size of int is %d byte\n”, sizeof(int));
printf(“The size of float is %d byte\n”, sizeof(float));
printf(“The size of char is %d byte\n”, sizeof(double));

8. ลาดับความสาคญั ของตัวดาเนินการ (Operator Order of Precedence)

ในการเขียนโปรแกรมเพ่ือใช้งาน จาเป็นต้องเรียนรู้ถึงลาดับการทางานของ

ตัวดาเนินการแต่ละตัว ว่าตัวใดมีความสาคญั สูง ตัวใดมีความสาคัญต่า เพื่อให้ผลลัพธ์ท่ีได้จาก

การคานวณเป็นไปอย่างถูกต้อง กรณีที่ตัวดาเนินการมีลาดับความสาคัญเท่ากัน ให้พิจารณา

จากตวั ดาเนินการท่มี ากอ่ น

ตัวดาเนินการ ความหมาย ลาดับการคานวณ

() Parenthesized expression ซา้ ยไปขวา

+ - Unary + และ – ขวาไปซา้ ย

++ -- Prefix increment and prefix decrement

! Logical NOT and bitwise complement

* / % Multiplication and division and modulus ซ้ายไปขวา

+ - Addition and subtraction ซ้ายไปขวา

49

C บทท่ี 4 ตัวดาเนินการและนิพจน์ (Operators and Expressions)

กรณีที่นิพจน์ประกอบไปด้วยตัวดาเนินการ 2 ตัว ที่มีลาดับความสาคัญเท่ากัน
การคานวณนิพจน์ดังกล่าว ก็อาจเป็นได้ท้ังจากซ้ายไปขวา หรือขวาไปซ้าย ท้ังนี้ก็ข้ึนอยู่กับตัว
ดาเนินการภายในนิพจน์นั้น ๆ เป็นสาคัญ การทาความเข้าใจกับลาดับความสาคัญของตัว
ดาเนินการแต่ละตัว เป็นสิ่งสาคัญทีเดียว เนื่องจากหากใช้งานโดยรู้เท่าไม่ถึงการณ์ ก็จะได้
ผลลพั ธ์แบบผดิ ๆ มา เชน่

num1 = (10 – 2 * 4);

จากนิพจน์ข้างต้น ผลลัพธ์ของ num1 จะได้ค่าเท่ากับ 2 ไม่ใช่ 32 อย่างท่ีเข้าใจ
กัน เพราะว่าลาดับการคานวณในครั้งน้ี จะกระทาท่ีนิพจน์ 2 * 4 = 8 ก่อน จากนั้นจึงค่อย
คานวณ 10 – 8 = 2 ที่เป็นเช่นน้ีก็เนื่องมาจากตัวดาเนินการ * (Multiply) มีความสาคัญสูง
กว่าตัวดาเนินการ – (Subtract) นั่นเอง และกรณีท่ีนิพจน์ประกอบด้วยตัวดาเนินการหลายตัว
และอาจมีความสาคัญเท่ากัน การประมวลผลก็จะพิจารณาถึงตัวดาเนินการที่มีความสาคัญ
สูงสดุ กอ่ นและจะประมวลผลจากซ้ายไปขวา เชน่ total = 10 * 4 * 2 + 21 / 3

มขี นั้ ตอนการประมวลผลดงั นี้ นพิ จนท์ ถ่ี ูกประมวลผลกอ่ น
10 * 4
ลาดบั นิพจน์ 40 * 2
1 total = 10 * 4 * 2 + 21 / 3 21 / 3
2 total = 40 * 2 + 21 / 3 80 + 7
3 total = 80 + 21 / 3
4 total = 80 + 7
5 total = 87

กรณีท่ีนิพจน์หรือสูตรทางคณิตศาสตร์มีความซับซ้อน สามารถใช้ตัวดาเนินการ
( ) เข้ามาช่วยด้วย เนือ่ งจากตวั ดาเนนิ การเครื่องหมายวงเล็บ จะมีลาดับความสาคญั สูงสุด และ
จะถกู นามาประมวลผลกอ่ น เชน่ ans = 5 + (7 – 2) * ((11 – 2) / 3)

50

การเขียนโปรแกรมคอมพิวเตอร์ C

มขี นั้ ตอนการประมวลผลดงั นี้ นิพจนท์ ่ีถูกประมวลผลกอ่ น
ลาดบั นิพจน์ 7–2
11 – 2
1 ans = 5 + (7 – 2) * ((11 – 2) / 3) 9/3
2 ans = 5 + 5 * ((11 – 2) / 3) 5*3
3 ans = 5 + 5 * ((9 / 3) 5 +15
4 ans = 5 + 5 * 3
5 ans = 5 + 15
6 ans = 20

51

C บทท่ี 4 ตัวดาเนินการและนพิ จน์ (Operators and Expressions)

แบบฝกึ หดั ที่ 4

1. นพิ จน์คอื อะไร จงยกตวั อยา่ ง
2. ตัวดาเนินการ (Operators) คอื อะไร มีอะไรบา้ ง
3. ตวั ถูกดาเนินการ (Operand) คืออะไร มคี วามสมั พันธ์อยา่ งไรกับตัวดาเนินการ
4. ตัวดาเนนิ การทางคณิตศาสตร์ ประกอบดว้ ยสัญลักษณ์ใด
5. ตัวดาเนินการเพ่ิมค่าและลดค่า ในรูปแบบ prefix เช่น ++x และรูปแบบ postfix เช่น

x++ มีความแตกตา่ งกนั อยา่ งไร
6. ตัวดาเนินการเปรียบเทยี บ ประกอบดว้ ยสญั ลักษณใ์ ดบ้าง
7. ตัวดาเนนิ การทางตรรกะ ประกอบดว้ ยสัญลักษณใ์ ดบา้ ง
8. ตัวดาเนินการระดับบิต ประกอบด้วยสัญลักษณ์ใดบ้าง
9. กาหนดให้ตวั แปร a, b และ c เป็นตวั แปรชนดิ เลขจานวนเต็ม โดยมคี ่าเท่ากบั 8, 3

และ -5 ตามลาดบั จงหาผลลพั ธท์ ่ีได้จากนิพจนต์ อ่ ไปนี้
9.1. a + b + c
9.2. 2 * b + 3 * (a - c)
9.3. (a * c) % b

52


Click to View FlipBook Version