ห้องเรียนออนไลน์ของครูจตุรภัทร
 หน้าแรก  แนะนำการใช้บทเรียน  แหล่งเรียนรู้เพิ่มเติม  กระดานถามตอบ & สมุดเยี่ยม (Facebook)  ผู้พัฒนาบทเรียน
 
 
 
   บทเรียนหลัก
แนะนำรายวิชา
แบบทดสอบก่อนเรียน แบบทดสอบก่อนเรียน
บทที่ 1 การพัฒนาโปรแกรม
บทที่ 2 แนะนำภาษาซี
บทที่ 3 ตัวแปร และตัวดำเนินการ
บทที่ 4 คำสั่งควบคุม
บทที่ 5 โครงงานคอมพิวเตอร์
แบบทดสอบหลังเรียน
 
 
บทที่ 3
3.4 การประกาศตัวแปร
 

ตัวดำเนินการ

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

1.  ตัวดำเนินการเลขคณิต

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

ตารางที่ 3.4.1 ตารางแสดงตัวดำเนินการเลขคณิต

ตัวดำเนินการ กระบวนการ ข้อมูลที่ถูกกระทำ ข้อมูลผลลัพธ์
+ บวก (Addition) จำนวนเต็ม,จำนวนจริง จำนวนเต็ม,จำนวนจริง
- ลบ (Subtraction) จำนวนเต็ม,จำนวนจริง จำนวนเต็ม,จำนวนจริง
* คูณ (Multiplication) จำนวนเต็ม,จำนวนจริง จำนวนเต็ม,จำนวนจริง
/ หาร
(Real Number Division)
จำนวนเต็ม,จำนวนจริง จำนวนจริง
% การหารแบบเอาเศษ
(Modulus)
จำนวนเต็ม จำนวนเต็ม

     ตัวอย่างที่ 3.4.1 โปรแกรมพิมพ์ผลลัพธ์จากการใช้ตัวดำเนินการคำนวณ 1 ตัว

1 //Program: SignOp.c
2 #include <stdio.h>
3 int main() {
4   int a = 4, b, c, d;
5   b = a + 5;
6   c = a - 5;
7   d = -c;
8   printf("a, b, c and d is ");
9   printf("%d, %d, %d and %d. \n", a, b, c, d);
10   b = a * 5;
11   c = a / 5;
12   d = a % 5;
13   printf("a, b, c and d is ");
14   printf("%d, %d, %d and %d. \n", a, b, c, d);
15   printf("7.0/2 is %f. \n", 7.0/2);
16   printf("a/5.0 is %f. \n", a/5.0);
17   printf("b/4.5 is %f. \n", b/4.5);
18   getch();
19 }

     ผลลัพธ์ คือ

a, b, c, and d is 4, 9, -1, and 1.
a, b, c, and d is 4, 20, 0, and 4.
7.0/2 is 3.500000.
a/5.0 is 0.800000.
b/4.5 is 4.444444.

     ตัวอย่างที่ 3.4.2 โปรแกรมพิมพ์ผลลัพธ์จากการใช้ตัวดำเนินการแปลงชนิดข้อมูล

1 //Program: Cast.c
2 #include <stdio.h>
3 int main() {
4   int num1, num2, num3, sum;
5   float average;
6   printf("Enter first integer: ");
7   scanf("%d", &num1);
8   printf("\nEnter second integer: ");
9   scanf("%d", &num2);
10   printf("\nEnter third integer: ");
11   scanf("%d", &num3);
12   sum = num1 + num2 + num3;
13   average = (float) sum / 3;
14   printf("\nAverage of the three number is ");
15   printf("%6.4f. \n", average);
16   getch();
17 }

     ผลลัพธ์ คือ

Enter first integer: 8
Enter second integer: 5
Enter third integer: 13
Average of the three numbers is 8.6667.

    หมายเหตุ
  •   หมายถึง ให้กดปุ่ม Enter บนแป้นพิมพ์

          จากตัวอย่าง 3.4.2 คำสั่ง sum / 3 ควรจะให้ผลลัพธ์เป็นจำนวนเต็ม 8 เนื่องจากตัวถูกดำเนินการทั้งสองตัวมีชนิดเป็นจำนวนเต็ม แต่ในที่นี้เราได้แปลงชนิดข้อมูลของตัวแปร sum แบบชั่วคราว จากจำนวนเต็มให้เป็นจำนวนจริง โดยใช้ (float) ทำให้ sum / 3 ในบรรทัดที่ 13 ให้ผลลัพธ์เป็นจำนวนจริงก่อนนำไปกำหนดให้เป็นค่าของตัวแปร average

กลับสู่ด้านบน

2.  ตัวดำเนินการเปรียบเทียบ

           ตัวดำเนินการเปรียบเทียบ (Relation Operators) จะนำข้อมูลสองค่ามาเปรียบเทียบกัน โดยข้อมูลทั้งสองค่าจะต้องเป็นข้อมูลประเภทเดียวกัน ผลลัพธ์ที่ได้จะเป็นค่าทางลอจิก คือ จริงหรือเท็จ

ตารางที่ 3.4.2 ตารางแสดงตัวดำเนินการเปรียบเทียบ

ตัวดำเนินการ การกระทำ
== เท่ากับ
!= ไม่เท่ากับ
<= น้อยกว่าหรือเท่ากับ
>= มากกว่าหรือเท่ากับ
> มากกว่า
< น้อยกว่า

     ตัวอย่างที่ 3.4.3 โปรแกรมทดสอบการใช้ตัวดำเนินการเปรียบเทียบ

1 //Program: TrueFalse.c
2 #include <stdio.h>
3 int main() {
4   printf("18 > 9 = %d\n", 18 > 9);
5   printf("11 < -9 = %d\n", 11 < -9);
6
7   int result1, result2;
8   float a = 9.0, b = 9.01;
9   result1 = a > b;
10   result2 = a < b;
11   
12   printf("a = %0.2f, b = %0.2f\n", a,b);
13   printf("result1 [a > b] = %d \n", result1);
14   printf("result2 [a < b] = %d \n", result2);
15   getch();
16 }

     ผลลัพธ์ คือ

18 > 9 = 1
11 < -9 = 0

a = 9.00, b = 9.01
result1 [a > b] = 0
result2 [a < b] = 1


กลับสู่ด้านบน

3.  ตัวดำเนินการทางตรรกะ

           ตัวดำเนินการทางตรรกะ (Logical Operator) ประกอบด้วย การทำ AND(และ) , OR(หรือ) และ NOT(นิเสธ) เมื่อกระทำกับค่าใด ผลลัพธ์ที่ออกมาจะเป็นจริงหรือเท็จ ตัวดำเนินการทางตรรกะแสดงได้ ดังตารางต่อไปนี้

ตารางที่ 3.4.3 ตารางแสดงตัวดำเนินการทางตรรกะ

ตัวดำเนินการ การกระทำ
&& ดำเนินการ AND ค่าสองค่า ถ้าค่าทั้งสองเป็นจริง ผลลัพธ์จะเป็นจริง
|| ดำเนินการ OR ค่าสองค่า ถ้าค่าทั้งสองเป็นเท็จ ผลลัพธ์จะเป็นเท็จ
! ดำเนินการ NOT เปลี่ยนค่า จากจริงเป็นเท็จ จากเท็จเป็นจริง

          จากตารางค่าความจริงของนิพจน์ตรรกะ เมื่อ 0 แทนค่าเท็จ และ 1 แทนค่าจริง แสดงดังตาราง

ตารางที่ 3.4.4 ตารางค่าความจริงของนิพจน์ตรรกะ

  • p && q จะมีค่าจริง เมื่อ p และ q มีค่าจริงทั้งคู่ มิฉะนั้นจะมีค่าเป็นเท็จ
  • p || q จะมีค่าจริง เมื่อ p และ q มีค่าเท็จทั้งคู่ มิฉะนั้นจะมีค่าเป็นจริง
  • !p จะมีค่าจริง เมื่อ p มีค่าเท็จ และ !p จะมีค่าเท็จ เมื่อ p มีค่าจริง

     ตัวอย่างที่ 3.4.4 โปรแกรมแสดงค่าของนิพจน์ตรรกะ

1 //Program: Logic.c
2 #include <stdio.h>
3 int main() {
4   int x, y;
5  
6   printf("Enter an value of x: ");
7   scanf("%d", &x);
8   printf("Enter an value of y: ");
9   scanf("%d", &y);
10   
11   printf("\nExample of logical expressions\n");
12   printf("------------------------------\n");
13   printf("        x && y        %d\n", x && y);
14   printf("        x || y        %d\n", x || y);
15   printf("        !x            %d\n", !x);
16   printf("        !y            %d\n", !y);
17   printf("(x > 0) && (y > 0)    %d\n", (x > 0) && (y > 0));
18   printf("(x > 0) || (y > 0)    %d\n", (x > 0) || (y > 0));
19   printf("(x > y) || (y > x)    %d\n", (x > y) || (y > x));
20   printf("(x > y) && (y > x)    %d\n", (x > y) && (y > x));
21   getch();
22 }

     ผลลัพธ์ คือ

Enter an value of x: 6
Enter an value of y: -2

Example of logical expressions
------------------------------
        x && y        1
        x || y        1
        !x            0
        !y            0
(x > 0) && (y > 0)    0
(x > 0) || (y > 0)    1
(x > y) || (y > x)    1
(x > y) && (y > x)    0

    หมายเหตุ
  •   หมายถึง ให้กดปุ่ม Enter บนแป้นพิมพ์
กลับสู่ด้านบน

4.  ตัวดำเนินการแบบบิต

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

ตารางที่ 3.4.5 ตารางแสดงตัวดำเนินการแบบบิต

ตัวดำเนินการ การกระทำ
& ดำเนินการ AND ให้ค่าของบิตผลลัพธ์เป็น 1 ถ้าบิตที่นำมาดำเนินการ And กันเป็น 1 ทั้งคู่ กรณีอื่น ๆ จะให้ค่าของบิตผลลัพธ์เป็น 0
| ดำเนินการ OR ให้ค่าของบิตผลลัพธ์เป็น 0 ถ้าหากบิตที่นำมาดำเนินการ or กันเป็น 0 ทั้งคู่ กรณีอื่น จะให้ค่าของบิตผลลัพธ์เป็น 1
^ ดำเนินการ Exclusive OR (XOR) การกำหนดค่าให้ตัวแปรทางซ้ายมือลดค่าลงเท่ากับค่า (expression) หรือตัวแปรทางขวามือ
~ ดำเนินการ NOT กลับค่าบิตจาก 0 เป็น 1 และจาก 1 เป็น 0 (1's complement)
>> ดำเนินการ Shift right เลื่อนทุกบิตไปทางขวา
<< ดำเนินการ Shift left เลื่อนทุกบิตไปทางซ้าย

กลับสู่ด้านบน

5.  ตัวดำเนินการกำหนดค่าเชิงประกอบ

           การใช้ตัวดำเนินการบางประเภทสามารถนำมารวมกันเป็น ตัวดำเนินการกำหนดค่าเชิงประกอบ (Compound Assisgnment) ได้ มีรูปแบบคือ

a op= b

          มีความหมายเทียบเท่ากับ

a = a op b

          เมื่อ op เป็นตัวดำเนินการคำนวณใดๆ ดังตัวอย่างต่อไปนี้

ตารางที่ 3.4.6 ตารางแสดงตัวอย่างการใช้ตัวดำเนินการกำหนดค่าเชิงประกอบ

ตัวดำเนินการ ตัวอย่าง การประมวลผล
*= a *= 1.25 a = a * 1.25
/= b /= c b = b / c
%= d %= 3 d = d % 3
+= x += 1 x = x + 1
-= y -= z y = y - z

     ตัวอย่างที่ 3.4.5 โปรแกรมแสดงการใช้ตัวดำเนินการกำหนดค่าเชิงประกอบ

1 //Program: ComAssi.c
2 #include <stdio.h>
3 int main() {
4   int a = 0, b = 5;
5  
6   a += 4;
7   printf("a is %d.\n",a);
8   a *= 3;
9   printf("a is %d.\n",a);
10   a /= 4;
11   printf("a is %d.\n",a);
12   a %= 5;
13   printf("a is %d.\n",a);
14   a = 7;
15   a /= a - b;
16   printf("a is %d.\n",a);
17   b *= b + a;
18   printf("b is %d.\n",b);
19   getch();
20 }

     ผลลัพธ์ คือ

a is 4.
a is 12.
a is 3.
a is 3.
a is 3.
a is 40.

          จากโปรแกรม สามารถอธิบายได้ ดังนี้

บรรทัดที่ คำสั่ง ลักษณะการทำงาน
6 a += 4 a = a + 4
8 a *= 3 a = a * 3
10 a /= 4 a = a / 4
12 a %= 5 a = a % 5
15 a /= a - b a = a / (a - b)
17 b *= b + a b = b * (b + a)

กลับสู่ด้านบน

6.  ตัวดำเนินการเพิ่มค่าและลดค่า

          ตัวดำเนินการเพิ่มค่า (Increment Operator) ใช้เครื่องหมาย ++

          ตัวดำเนินการลดค่า (Decrement Operator) ใช้เครื่องหมาย --

          โดยการเพิ่มค่า หรือการลดค่าด้วยตัวดำเนินการดังกล่าว จะเพิ่มทีละหนึ่ง หรือลดทีละหนึ่ง และจะต้องใช้กับตัวแปรโดดๆ โดยสามารถใช้เครื่องหมาย ++ และ -- เขียนนำหน้าตัวแปร (Prefix) หรือหลังตัวแปร (Postfix) ก็ได้ เช่น ++i หรือ i++ แต่ทั้งสองแบบนี้จะมีวิธีการจัดการกับค่าที่แตกต่างกัน ดังตาราง

ตารางที่ 3.4.7 ตารางแสดงตัวดำเนินการเพิ่มค่าและลดค่า

ตัวดำเนินการ นิพจน์ ความหมาย
++ (Prefix) ++a เพิ่มค่าให้กับ a หนึ่งค่าก่อน จึงนำค่าใหม่ของ a ในนิพจน์นี้ไปใช้
++ (Postfix) a++ นำค่าปัจจุบันของ a ในนิพจน์นี้ไปใช้ก่อน จึงเพิ่มค่าให้กับ a หนึ่งค่า
-- (Prefix) --b ลดค่าให้กับ b หนึ่งค่าก่อน จึงนำค่าใหม่ของ b ในนิพจน์นี้ไปใช้
-- (Postfix) b-- นำค่าปัจจุบันของ b ในนิพจน์นี้ไปใช้ก่อน จึงลดค่าให้กับ b หนึ่งค่า
    หมายเหตุ
  • ++i ,i++ หมายถึง i = i + 1
  • --j ,j-- หมายถึง j = j - 1

     ตัวอย่างที่ 3.4.6 โปรแกรมแสดงการเพิ่มและลดค่าตัวแปร

1 //Program: IncDec.c
2 #include <stdio.h>
3 int main() {
4   int x = 8;
5  
6   printf("x is %d.\n" ,x);
7   printf("x++ is %d.\n" ,x++);
8   printf("x is %d.\n" ,x);
9   
10   x = 4;
11   printf("x is %d.\n" ,x);
12   printf("--x is %d.\n" ,--x);
13   printf("x is %d.\n" ,x);
14   getch();
15 }

     ผลลัพธ์ คือ

x is 8.
x++ is 8.
x is 9.

x is 4.
--x is 3.
x is 3.


กลับสู่ด้านบน

นิพจน์

          นิพจน์ (Expression) ในภาษาซีนี้ ประกอบด้วย ค่าคงตัว ค่าคงที่ หรือตัวแปร 1 จำนวน หรือกลุ่มของค่าคงตัว ค่าคงที่ หรือตัวแปรพร้อมด้วยตัวดำเนินการของภาษาซี ตัวดำเนินการที่ใช้ในนิพจน์ที่กล่าวถึงได้แก่ ตัวดำเนินการกำหนดค่า ตัวดำเนินการคำนวณ และตัวดำเนินการบอกตำแหน่งบนหน่วยความจำ

ans = 100 - 50
score = midterm + final +quiz
income = salary + (ot * RATE) + bonus - tax

           จากนิพจน์คณิตศาสตร์ข้างต้น พบว่า ans, score และ income เป็นตัวแปรที่ใช้เก็บผลลัพธ์จากการคำนวณ ส่วนนิพจน์ด้านขวาจะเป็นนิพจน์แบบหลายตัวแปร ซึ่งสามารถมีได้ทั้งตัวแปร และค่าคงที่ รวมถึงตัวดำเนินการคณิตศาสตร์ เช่น + - * / เป็นต้น ซึ่งในการสร้างสูตรคำนวณค่าตัวเลข ซึ่งเป็นสูตรที่มีความซับซ้อน จะต้องระมัดระวังในการจัดลำดับนิพจน์ เพื่อให้คอมพิวเตอร์ประมวลผลได้อย่างถูกต้อง ทั้งนี้ตัวดำเนินการต่างๆ ที่นำมาใช้เพื่อการคำนวณนั้น แต่ละตัวจะมีลำดับความสำคัญที่แตกต่างกัน เช่น เมื่อพบเครื่องหมาย + และ * การประมวลผลจะกระทำที่ตัวดำเนินการ * ก่อน เพราะจะมีลำดับความสำคัญสูงกว่า + นั่นเอง

กลับสู่ด้านบน

ตัวดำเนินการกับลำดับความสำคัญ

           ตัวดำเนินการแต่ละตัวจะมีลำดับความสำคัญก่อนหลังที่แตกต่างกัน โดยการประมวลผลจะกระทำกับตัวดำเนินการที่มีลำดับควาสำคัญสูงก่อน แต่ถ้ากรณีที่มีลำดับความสำคัญเท่ากัน ตามปกติจะกระทำกับตัวดำเนินการจากซ้ายไปขวา

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

ลำดับความสำคัญ ตัวดำเนินการ ความหมาย
1 () เครื่องหมายวงเล็บ
2 ++, -- ตัวดำเนินการเพิ่มค่า/ลดค่า
3 -, ! ยูนารีลบ (เอกภาคลบ) และตรรกะ NOT
4 *, /, % คูณ หาร โมดูลัส
5 +, - บวก ลบ

     ตัวอย่างที่ 3.4.7 โปรแกรมพิมพ์ผลลัพธ์จากการใช้ตัวดำเนินการคำนวณมากกว่า 1 ตัว

1 //Program: MultOp.c
2 #include <stdio.h>
3 int main() {
4   int a = 1, b = 2, c = 3,d,e;
5   
6   d = a * -b + c;
7   e = a * (-b + c);
8   printf("d is %d, e is %d. \n", d, e);
9   
10   d = a + b * c;
11   e = (a + b) * c;
12   printf("d is %d, e is %d. \n", d, e);
13   
14   d = b % c + a;
15   e = b % (c + a);
16   printf("d is %d, e is %d. \n", d, e);
17   
18   d = c - b / a * a;
19   e = (c - b) / (a * a);
20   printf("d is %d, e is %d. \n", d, e);
21   
22   printf("8 + 2 * 6 / 3 - 2 is %d. \n", 8 + 2 * 6 / 3 - 2);
23   printf("5 % 5 + 5 * 5 - 5 / 5 is %d. \n", 5 % 5 + 5 * 5 - 5 / 5);
24   getch();
25 }

     ผลลัพธ์ คือ

d is 1, e is 1.
d is 7, e is 9.
d is 3, e is 2.
d is 1, e is 1.
8 + 2 * 6 / 3 - 2 is 10
5 % 5 + 5 * 5 - 5 / 5 is 24

          จากตัวอย่าง 3.4.6 เมื่อพิจารณาจากลำดับความสำคัญของตัวดำเนินการ จะพบว่า

          ในบรรทัดที่ 18 นิพจน์ c - b / a * a มีค่าเท่ากับ c - ((b / a) * a) ซึ่งมีค่าเท่ากับ 1 และมีค่าเท่ากับค่าของนิพจน์ (c - b) / (a * a) ในบรรทัดที่ 19

          จากบรรทัดที่ 22 ค่าของนิพจน์ 8 + 2 * 6 / 3 - 2 มีค่าเท่ากับนิพจน์ (8 + ((2 * 6) / 3) - 2

          และบรรทัดที่ 23 ค่าของนิพจน์ 5 % 5 + 5 * 5 - 5 / 5 มีค่าเท่ากับนิพจน์ ((5 % 5) + (5 * 5)) - (5 / 5)

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

โรงเรียนคำนาดีพิทยาคม
ตำบลคำนาดี อำเภอโพนทอง จังหวัดร้อยเอ็ด
สำนักงานเขตพื้นที่การศึกษามัธยมศึกษา เขต 27
สำนักงานคณะกรรมการการศึกษาขั้นพื้นฐาน
กระทรวงศึกษาธิการ