- ตัวแปร (variables)


2. ตัวแปร (variables)
                คอมพิวเตอร์มีส่วนประกอบที่สำคัญส่วนหนึ่งคือ หน่วยความจำ หน่วยความจำเปรียบได้กับสมองของมนุษย์ทำหน้าที่เก็บข้อมูลในขณะที่ประมวลผล ในการประมวลผลแต่ละครั้งมักต้องใช้ข้อมูลจำนวนมาก อาทิ ชื่อนักเรียน คะแนนสอบวิชาคอมพิวเตอร์ คะแนนสอบวิชาคณิตศาสตร์ จำนวนหน่วยกิต คะแนนเฉลี่ย เป็นต้น ซึ่งจำเป็นจะต้องนำข้อมูลเหล่านี้ไปเก็บไว้ในหน่วยความจำ และเมื่อเก็บแล้ว จะต้องทราบตำแหน่งที่นำข้อมูลเข้าไปเก็บไว้ภายในของหน่วยความจำด้วย เพื่อให้สามารถนำข้อมูลเหล่านั้นกลับมาประมวลผลได้  ในภาษาคอมพิวเตอร์ระดบสูง เพื่อความสะดวกในการเขียนโปรแกรม การจดจำตำแหน่งที่ใช้ในการเก็บข้อมูล จะทำโดยการตั้งชื่อให้กับตำแหน่งของหน่วยความจำที่ใช้เก็บข้อมูลนั้น จากนั้นระบบปฏิบัติการจะช่วยจัดการในการหาตำแหน่งที่อยู่ที่แจ้จริงของข้อมูลต่อไป
                ตัวแปร เป็น ชื่อของหน่วยความจำที่ตำแหน่งใดๆ เมื่อนำข้อมูลไปเก็บไว้ในหน่วยความจำตำแหน่งนั้น จะกล่าวว่า ตัวแปรนั้นมีค่าเท่ากับข้อมูลที่เก็บไว้ ตัวแปรสามารถเก็บค่าชนิดต่างๆ ตามที่ได้ประกาศไว้ในโปรแกรมเท่านั้น เช่น
-                   ตัวแปรที่ใช้เก็บข้อมูลชนิดจำนวนเต็ม
-                   ตัวแปรที่ใช้เก็บข้อมูลชนิดจำนวนจริง
-                   ตัวแปรที่ใช้เก็บข้อมูลชนิดอักขระ
-                   ตัวแปรที่ใช้เก็บข้อมูลชนิดสายอักขระ
ตัวแปรเหล่านี้จะไม่สามารถเก็บค่าชนิดอื่นนอกเหนือจากชนิดที่ประกาศไว้ และค่าที่เก็บไว้ในตัว
แปรนี้สามารถเปลี่ยนค่าได้ตลอดเวลา ขึ้นกับข้อความสั่งภายในโปรแกรม
กฎการตั้งชื่อตัวแปร
                การตั้งชื่อตัวแปรมีข้อกำหนดดังนี้
-   ประกอบด้วย a ถีง z,  0 ถึง 9 และ _  เท่านั้น
-   อักขระตัวแรกต้องเป็น a ถึง z และ _
-   ห้ามใช้ชื่อเฉพาะ
-    ตัวพิมพ์ใหญ่ ตัวพิมพ์เล็ก มีความหมายที่แตกต่างกัน
-    ยาวสูงสุด 31 ตัวอักษร
หากตั้งชื่อตัวแปรไม่ตรงตามข้อกำหนด ก็จะทำให้ตัวแปลโปรแกรมไม่เข้าใจ ไม่ทราบว่า ชื่อนั้นคืออะไร ซึ่งจะทำให้เกิดข้อผิดพลาดขึ้นในระหว่างการแปลโปรแกรม

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

ชนิดของตัวแปรในภาษาซี
ชนิดของตัวแปร
ขนาด (bits)
ขอบเขต
ข้อมูลที่เก็บ
char
8
-128 ถึง 127
ข้อมูลชนิดอักขระ ใช้เนื้อที่ 1 byte
unsigned char
8
0 ถึง 255
ข้อมูลชนิดอักขระ ไม่คิดเครื่องหมาย
int
16
-32,768 ถึง 32,767
ข้อมูลชนิดจำนวนเต็ม ใช้เนื้อที่ 2 byte
unsigned int
16
0 ถึง 65,535
ข้อมูลชนิดจำนวนเต็ม ไม่คิดเครื่องหมาย
short
8
-128 ถึง 127
ข้อมูลชนิดจำนวนเต็มแบบสั้น ใช้เนื้อที่ 1 byte
unsigned short
8
0 ถึง 255
ข้อมูลชนิดจำนวนเต็มแบบสั้น ไม่คิดเครื่องหมาย
long
32
-2,147,483,648 ถึง 2,147,483,649
ข้อมูลชนิดจำนวนเต็มแบบยาว ใช้เนื้อที่ 4 byte
unsigned long
32
0 ถึง 4,294,967,296
ข้อมูลชนิดจำนวนเต็มแบบยาว ไม่คิดเครื่องหมาย
float
32
3.4*10e(-38) ถึง 3.4*10e(38)
ข้อมูลชนิดเลขทศนิยม ใช้เนื้อที่ 4 byte
double
64
3.4*10e(-308) ถึง 3.4*10e(308)
ข้อมูลชนิดเลขทศนิยม ใช้เนื้อที่ 8 byte
long double
128
3.4*10e(-4032) ถึง 1.1*10e(4032)
ข้อมูลชนิดเลขทศนิยม ใช้เนื้อที่ 16 byte

 
ตัวแปรชนิดตัวเลข (numeric variable types)
                ตัวแปรชนิดตัวเลขแบ่งได้เป็น 2 กลุ่ม คือ
1.  ตัวแปรจำนวนเต็ม (integer variables) หมายถึง ตัวแปรที่ใช้เก็บค่าที่เป็นจำนวนเต็ม
ได้แก่ char, int, short, long, unsigned char, unsigned int, unsigned short และ unsigned long
ตัวอย่าง ลักษณะการจัดเก็บตัวแปรจำนวนเต็ม ใช้เนื้อที่ 16 บิต ประกอบด้วย บิต
เครื่องหมาย (sign bit) 1 บิต และบิตข้อมูล (data bits) 15 บิต


int
 
 



บิตข้อมูล                                             15 บิต
 
บิตเครื่องหมาย
 




เช่น
·        +15
·       -2789
·       30
·       -8
ตัวอย่าง ลักษณะการจัดเก็บตัวแปรจำนวนเต็มไม่มีเครื่องหมาย ใช้เนื้อที่เก็บข้อมูล 16 บิต โดยไม่มี
การเก็บเครื่องหมาย




 


เช่น
·        19
·       1000
·       45
·       8
 

2.  ตัวแปรจำนวนเต็ม (real variables) หรือ ตัวแปรจุดลอยตัว (floating-point variables)
หมายถึง ตัวแปรที่ใช้เก็บค่าที่เป็นจำนวนจริง ซึ่งเป็นตัวเลขที่เป็นเศษส่วน หรือมีจุดทศนิยม ได้แก่
-                   ชนิด float ใช้เนื้อที่เก็บข้อมูล 64 บิต
ตัวอย่าง ลักษณะการจัดเก็บตัวแปรจำนวนจริงชนิด float ใช้เนื้อที่เก็บข้อมูล 32 บิต ประกอบด้วย บิตเครื่องหมาย (sign bit) 1 บิต เลขชี้กำลัง (exponent) 8 บิต และแมนทิสซา 23 บิต
บิตเครื่องหมาย
เลขชี้กำลัง
แมนทิสซา

-     ชนิด double ใช้เนื้อที่เก็บข้อมูล 64 บิต

การประกาศตัวแปร
                การประกาศตัวแปรทำได้โดย เขียนข้อความสั่งขึ้นต้นด้วยชนิดข้อมูล ตามด้วยชื่อตัวแปร และจบข้อความสั่งประกาศตัวแปรด้วยเครื่องหมายอัฒภาค ( ; )  ดังนี้
                                ชนิดข้อมูล    ชื่อตัวแปร;
                ถ้าต้องการประกาศตัวแปรชนิดเดียวกันหลายตัว ต้องคั่นระหว่างตัวแปรด้วยเครื่องหมายจุลภาค ( , ) และจบข้อความสั่งประกาศตัวแปรด้วยเครื่องหมายอัฒภาค ( ; )  ดังนี้
ชนิดข้อมูล    ชื่อตัวแปร 1,ชื่อตัวแปร 2, ….. ;

เช่น
                int  count;                                             //ประกาศตัวแปรชื่อ count  ใช้เก็บข้อมูลชนิด  integer
                int  m,  n;                                             //ประกาศตัวแปรชื่อ  m  และ  n  ใช้เก็บข้อมูลชนิด  integer
                int  no = 10;                                        /*ประกาศตัวแปรที่ใช้เก็บข้อมูลชนิด integer ชื่อ no และเก็บค่า
   10 ไว้ในตัวแปรดังกล่าว*/
                long  number;                                     //ประกาศตัวแปรชื่อ number ใช้เก็บข้อมูลชนิด long integer
                float  percent, total;                           /*ประกาศตัวแปรชื่อ percent และ total ใช้สำหรับเก็บข้อมูลชนิด  
                                                                                   float*/
                              

การกำหนดค่าให้ตัวแปรชนิดตัวเลข
                การกำหนดค่าให้ตัวแปร ทำได้โดยการประกาศตัวแปรและกำหนดค่าให้กับตัวแปรไว้ในคำสั่งเดียวกัน หรือ อาจทำได้อีกวิธีหนึ่งคือ ประกาศตัวแปรก่อน จากนั้นจึงกำหนดค่าให้กับตัวแปรในอีกข้อความสั่งหนึ่ง เช่น
                int  no = 10;          /*ประกาศตัวแปรที่ใช้เก็บข้อมูลชนิด integer ชื่อ  no  และ  เก็บค่า  10  ไว้ในตัว
                                              แปรดังกล่าว*/

                int  no;                  //ประกาศตัวแปรที่ใช้เก็บข้อมูลชนิด integer ชื่อ no
                no = 10;               //เก็บค่า 10 ไว้ในตัวแปร  no

ตัวแปรชนิดอักขระ (character variable types)
                ตัวแปรชนิดอักขระ (char) ถูกจัดเก็บไว้ในหน่วยความจำในรูปแบบจำนวนเต็ม ขนาด 1 ไบต์ ดังนั้น ตัวแปรชนิดอักขระจึงสามารถใช้งานได้ทั้งแบบอักขระ และจำนวนเต็ม
ตัวอย่าง   การใช้ตัวแปรชนิดอักขระ
#include <stdio.h>
void main()
{
               printf("%c  %d\n ", 'a ', 'a ');
}
ผลการกระทำ
                a   97
                printf("%c  %d\n", 'a', 'a');  เป็นฟังก์ชันที่ใช้สำหรับให้แสดงอักขระ  a  ในรูปแบบของ จำนวนเต็ม (%d)  ส่วน  \n  หมายถึง ให้เลื่อนตัวชี้ตำแหน่ง (cursor)  ไปที่ต้นบรรทัดใหม่


ตัวอย่าง  การใช้ตัวแปรชนิดอักขระ
#include <stdio.h>
void main()
{
                char  c1,  c2;                                                       //ประกาศตัวแปรชื่อ  c1  และ  c2
                c1 = 'a';                                                                 //นำ  a  ไปเก็บไว้ใน  c1
                c2 = 'A';                                                                //นำ  A  ไปเก็บไว้ใน  c2
                printf("\n c1 = %c", c1);                                 /*เลื่อนตัวชี้ตำแหน่งไปที่ต้นบรรทัดใหม่ แล้วแสดง
ข้อความ  c1 = a (ค่าของ  c1 คือ  a) */
printf("\n c2 = %c", c2);                                 /*เลื่อนตัวชี้ตำแหน่งไปที่ต้นบรรทัดใหม่ แล้วแสดง
ข้อความ  c2 = A (ค่าของ  c2 คือ  A) */
}