บทที่ 3 ข้อมูลและตัวแปรในภาษา C

                สิ่งแรกที่จะต้องเตรียมในการเขียนโปรแกรมก็คือข้อมูล  ดังนั้น  ในบทนี้เราจะมาทำความรู้จักกับข้อมูลในภาษา C  และวิธีการที่จะนำข้อมูลเหล่านั้นเข้ามาใช้ในโปรแกรมภาษา C  สามารถทำได้โดยการสร้างตัวแปร  หรือที่เรียกอีกอย่างหนึ่งว่า  การประกาศตัวแปร  (Variable  Declaration)

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

                ข้อมูลที่มีความหมายและใช้งานกันในภาษา C  แบ่งได้เป็น 6 ชนิด  ดังแสดงรายละเอียดต่อไปนี้
1.ตัวเลขจำนวนเต็ม  (Integer)  ก็คือ  ตัวเลขจำนวนเต็มปกติทั่วไป  ซึ่งเป็นได้ตั้งแต่จำนวนเต็มบวก  จำนวนเต็มศูนย์  และจำนวนเต็มลบ  ตัวอย่างข้อมูลชนิดจำนวนเต็ม  ได้แก่  19,  1500,  299,  -543,  0,  -45000
2.ตัวเลขทศนิยม  (Float)  ก็คือ  ตัวเลขที่ไม่ใช่จำนวนเต็ม  โดยอาจจะเป็นเลขทศนิยมชนิดคงที่  ทศนิยมไม่รู้จบ  หรือทศนิยมที่อยู่ในรูปแบบ  e  ยกกำลังก็ได้  ตัวอย่างข้อมูลชนิดตัวเลขทศนิยมได้แก่  11.25,  -0.58,  -178.26,  2.00,  -1.512,  2.503,  16.66666.....  และ  33.3333...
3.เลขฐานแปด  (Octal)  นอกจากระบบเลขฐานสิบที่เราใช้งานกันเป็นประจำในชีวิตประจำวันแล้วคอมพิวเตอร์ยังใช้ระบบเลขฐานแปดในการทำงานด้วย  ดังนั้น  ข้อมูลชนิดเลขฐานแปดจึงมีความหมายในภาษา C  โดยการเขียนเลขฐานแปดทำได้โดยเขียนเลขศูนย์นำหน้าเลขในระบบฐานะแปด  ยกตัวอย่างเช่น  0124,  077,  0113  และ  042
4.เลขฐานสิบหก  (Hexadecimal)  เลขฐานสิบหกเป็นระบบเลขฐานอีกชนิดหนึ่งที่คอมพิวเตอร์ใช้งาน  ดังนั้น  ข้อมูลชนิดเลขฐานสิบหกจึงมีความหมายในภาษา C  สำหรับการเขียนข้อมูลชนิดเลขฐานสิบหกให้เขียนเลขศูนย์และตัว  x  (0x)  นำหน้าเลขในระบบฐานสิบหก  ยกตัวอย่างเช่น  0×17,  d,  0×5f,  0×33
5.อักขระ  (Character)  ก็คือ  ตัวอักษรหรือสัญลักษณ์อื่น ๆ ที่มีความหมายและมีความยาว  1  อักขระ  (1  byte)  ซึ่งสามารถเป็นได้ตั้งแต่ตัวอักษร  A-Z,  a-z,  0-9  หรือสัญลักษณ์อื่น ๆ  ที่มีความหมายอย่างเช่น  ( #    &  โดยข้อมูลชนิดอักขระจะต้องเขียนไว้ภายในเครื่องหมาย      (single  quote)  ยกตัวอย่างเช่น  ‘C’,  ‘{’,  ‘\n’,  ‘#’,  ‘@’  หรือ  A
อักขระทั้งหมดที่ใช้ได้ในภาษา  C  สามารถตรวจสอบได้จากตารางอักขระรหัส  ASCll  (รายละเอียดอยู่ใน  Appendix  A)  ตัวอย่างอักขระบางส่วนจากตาราง  ASCll  แสดงได้ดังนี้
ข้อมูลชนิดอักขระสามารถนำมาใช้ในการคำนวณได้เหมือนกับข้อมูลชนิดตัวเลข  จากตาราง  ASCll  จะเห็นว่า  อักขระ  1  ตัวมีค่าทั้งในระบบเลขฐานแปด  (Octal)  ฐานสิบ  (Dec)  และฐานสิบหก  (Hex)  ซึ่งการที่ตัวแปลภาษาจะเลือกนำค่าในระบบเลขฐานใดไปคำนวณนั้น  ขึ้นอยู่กับผลลัพธ์ที่ต้องการว่าจะให้ออกมาเป็นค่าตัวเลขในระบบเลขฐานใด
1.ข้อความ  (String)  ก็คือ  อักขระที่มีความยาวมากกว่า  1  ตัวเรียงต่อกันเป็นข้อความ  โดยข้อมูลชนิดข้อความต้องเขียนอยู่ภายในเครื่องหมาย      (Double  quote)  อย่างเช่น  C  Language”  “Dev  Book”,  “BANGKOK”  สำหรับข้อมูลชนิดข้อความจะไม่สามารถนำไปคำนวณได้เหมือนข้อมูลชนิดอักขระ
ตัวแปรและหน้าที่ของตัวแปร
                เมื่อราเตรียมข้อมูลไว้พร้อมแล้ว  การจะนำข้อมูลเข้าไปใช้งานในโปรแกรมเราต้องทำให้ตัวแปลภาษา  C  รู้จักข้อมูลเหล่านั้นเสียก่อนจึงจะใช้งานได้  ซึ่งวิธีการก็คือ  การสร้างตัวแปรสำหรับข้อมูลเหล่านั้นขึ้นมา
                ตัวแปร  (Variable)  คือ  การจองพื้นที่เก็บข้อมูลในหน่วยความจำของเครื่องคอมพิวเตอร์พร้อมกับกำหนดชื่อเรียกแทนหน่วยความจำในตำแหน่งนั้น  เปรียบเทียบได้กับการจองห้องที่มีเลขที่ประจำห้องให้กับข้อมูล  เวลาจะใช้งานข้อมูลใดก็ให้เรียกผ่านชื่อของตัวแปร
                ยกตัวอย่างเช่น  ถ้าเราสร้างตัวแปรขึ้นมา  1  ตัว  โดยชื่อว่า  Num  สำหรับเก็บค่าตัวเลข  16  เมื่อต้องการนำจำนวน  16  นั้นมาใช้งาน  เราก็พียงแต่เรียกชื่อ  Num  ตัวแปลภาษา  C  จะแปลความหมายถูกต้องว่า  Num  ก็คือ  การนำค่าตัวเลข  16  ที่เก็บไว้ในหน่วยความจำมาใช้งาน
                ชนิดของตัวแปรในภาษา C
                ตัวแปรในภาษา C แบ่งเป็น  3  ประเภทใหญ่ ๆ  คือ
·     ตัวแปรพื้นฐาน  (Scalar)  ซึ่งหมายถึง  ตัวแปรที่เก็บข้อมูลได้เพียงค่าเดียวในหนึ่งตัวแปร
·     ตัวแปรชุด  (Array)
·     ตัวแปรโครงสร้าง  (Structure)  ซึ่งก็คือ  ตัวแปรที่สามารถเก็บข้อมูลไว้ได้หลายค่าภายในตัวแปรตัวเดียว
ในบทนี้จะพูดถึงเฉพาะตัวแปรพื้นฐาน  ส่วนตัวแปรชุดและตัวแปรโครงสร้างจะพูดถึงต่อไปในบทที่ 7  เรืองตัวแปรอาร์เรย์  (Array)  และบทที่  11  โครงสร้างข้อมูลในภาษา C
ตัวแปรพื้นฐานในภาษา C  ตามาตรฐาน  ANSI  (American  National  Standard  Institute)  มีอยู่ชนิดด้วยกัน  แต่ละชนิดจะใช้สำหรับเก็บข้อมูลต่างประเภทกันไป  เช่น  ตัวแปรสำหรับเก็บตัวเลขจำนวนเต็ม  ตัวแปรสำหรับเก็บตัวเลขทศนิยม  หรือตัวแปรสำหรับเก็บอักขระ  ซึ่งเราควรเลือกใช้ตัวแปรให้เหมาะสมกับชนิดของข้อมูล  ชนิดของตัวแปรในภาษา  C  ตามมาตรฐาน  ANSI  แสดงดังตารางต่อไปนี้


รูปแบบของการประกาศตัวแปร
                การสร้างตัวแปรขึ้นมาใช้งานในโปรแกรมภาษา C  จะเรียกว่า  การประกาศตัวแปร  (Variable  Declaration)  ซึ่งจะต้องเขียนคำสั่งให้ถูกต้องตามรูปแบบที่ภาษา C  กำหนดไว้  ดังแสดงต่อไปนี้




นอกจากนี้เรายังสามารถกำหนดค่าเริ่มต้นให้กับตัวแปรไปพร้อมกับการประกาศตัวแปรได้ด้วย  ดังแสดงต่อไปนี้


                  ในกรณีที่จะสร้างตัวแปรชนิดเดียวกันมากกว่าหนึ่งตัว  เราสามารถประกาศตัวแปรทั้งหมดพร้อมกันในคำสั่งเดียวได้ดังนี้

หลักการตั้งชื่อตัวแปร
ในการประกาศสร้างตัวแปรต้องมีการกำหนดชื่อ  ซึ่งชื่อนั้นไม่ใช่ว่าจะต้องให้สื่อความหมายถึงข้อมูลที่จะเก็บเพียงอย่างเดียวโดยไม่คำนึงถึงอย่างอื่น  เนื่องจากภาษา C  มีข้อกำหนดในการตั้งชื่อตัวแปรเอาไว้  ถ้าตั้งชื่อผิดหลักการเหล่านี้โปรแกรมจะไม่สามารถทำงานได้  หลักการตั้งชื่อตัวแปรในภาษา C  มีดังนี้
1.ต้องขึ้นต้นด้วยตัวอักษร  A- Z  หรือ  a-z  หรือเครื่องหมาย  _(Underscore)  เท่านั้น
2.ภายในชื่อตัวแปรสามารถใช้ตัวอักษร  A-Z  หรือ  a-z หรือตัวเลข  0-9 หรือเครื่องหมาย_
3.ภายในชื่อห้ามมีการเว้นช่องว่างหรือใช้สัญลักษณ์อื่นนอกเหนือจากที่ระบุไว้ในข้อ 2
4.ตัวอักษรตัวเล็กและตัวใหญ่มีความแตกต่างกัน  โดยชื่อ  Cat  จะไม่เหมือนกับ  cat  หรือ  CAT  ดังนั้นจึงต้องตรวจสอบให้ดี
5.ห้ามตั้งชื่อซ้ำกับคำสงวน  (Reserved  word)  ซึ่งมีดังนี้


ตัวอย่างการตั้งชื่อตัวแปรในภาษา C  ทั้งที่ถูกต้องและไม่ถูกต้องตามหลักการ  แสดงดังต่อไปนี้
ตัวแปรสำหรับข้อมูลชนิดข้อความ
ในภาษา C  ไม่มีตัวแปรสำหรับข้อมูลชิดข้อความโดยเฉพาะ  แต่ถ้าพิจารณากันจริง ๆ  แล้วข้อความก็คือ  การนำอักขระมาเรียงต่อกัน  ดังนั้น  การสร่างตัวแปรชนิดข้อความก็คือ  การสร้างตัวแปรอักขระ  (Char)  เรียงต่อกันหลาย ๆ  ตัวให้พอดีกับจำนวนอักขระในข้อความ  หรือพูดอีกอย่างหนึ่งก็คือ  การสร้างตัวแปรชุดสำหรับเก็บอักขระนั่นเอง
ตัวแปรชุดของอักขระที่สร้างขึ้นมานี้จะเรียกว่า  ตัวแปรสตริง  (String)  ซึ่งรูปแบบการสร้างตัวแปร  String  สำหรับเก็บข้อความมีดังนี้
ตัวอย่างการเขียนคำสั่งเพื่อประกาศตัวแปร  string  สำหรับเก็บข้อความ  แสดงดังต่อไปนี้
ท่อนจบบท
ในบทนี้เป็นการปูพื้นฐานในเรื่องของข้อมูล  ชนิดของข้อมูลที่ใช้งานกันในภาษา  C  ความหมายและการสร้างตัวแปรขึ้นมาใช้งาน  หลักการตั้งชื่อตัวแปรที่ถูกต้อง  ซึ่งทั้งหมดนี้จะทำให้เราสามารถกำหนดข้อมูลและตัวแปรขึ้นมาใช้ในการเขียนโปรแกรมด้วยภาษา C  ต่อไปได้เป็นอย่างดี




เฉลยแบบฝึกหัด
1.    เฉลย
1.1  46                         ข้อมูลชนิดตัวเลขจำนวนเต็ม
1.2  Football club ข้อมูลชนิดข้อความ
1.3  -36.754                 ข้อมูลชนิดตัวเลขทศนิยม
1.4  -112                      ข้อมูลชนิดตัวเลขจำนวนเต็ม
1.5  @                        ข้อมูลชนิดอักขระ
1.6  0x485                  ข้อมูลชนิดตัวเลขจำนวนเต็ม ในระบบเลขฐานสิบหก
1.7  Dev Book         ข้อมูลชนิดข้อความ
1.8  0337                     ข้อมูลชนิดตัวเลขจำนวนเต็ม ในระบบเลขฐานแปด
1.9  37.65                    ข้อมูลชนิดตัวเลขทศนิยม
1.10  -1.5e-02             ข้อมูลชนิดตัวเลขทศนิยม ที่อยู่ในรูปแบบ e ยกกำลัง
2. เฉลย
            2.1  -78                                    ตัวแปรชนิด int หรือ short
            2.2  3.805                    ตัวแปรชนิด  float
          2.3  U                                    ตัวแปรชนิด  char
                2.4  38,400                          ตัวแปรชนิด  long
                2.5  {                                     ตัวแปรชนิด  char
                2.6  -58,735                         ตัวแปรชนิด long
                2.7  #                                    ตัวแปรชนิด  char
                2.8  6.5x1045                        ตัวแปรชนิด  double
                2.9  63,895                          ตัวแปรชนิด  long sinv unsigned long
2.10  15.236                                        ตัวแปรชนิด  float
3.เฉลย
                3.1  char 8 บิต (1 ไบต์)
                3.2 int 16 บิต (2ไบต์)
                3.3 float 32 บิต (4 ไบต์)
                3.4 double 64 บิต (8 ไบต์)
                3.5 long int 32 บิต (4 ไบต์ )
                3.6 long double 128 บิต (16 ไบต์)
4. เฉลย
                4.1 province                        ถูกต้องตามหลักการตั้งชื่อ
                4.2 Num 3                           ผิด เนื่องจากมีการเว้นช่องว่างภายในชื่อ
                4.3 _last                                                ถูกต้องตามหลักการตั้งชื่อ
                4.4 birth#day                       ผิด เนื่องจากมีการใช้เครื่องหมาย#
                4.5 Ex_14                            ถูกต้องตามหลักการตั้งชื่อ
                4.6 case                                 ผิด เนื่องจากเป็นคำสงวน
                4.7 47bits                             ผิด เนื่องจากขึ้นต้นด้วยตัวเลข
                4.8 dog_age                         ถูกต้องตามหลักการตั้งชื่อ
                4.9 t14.30                             ผิด เนื่องจากมี . (จุด) อยู่ภายในชื่อ
                4.10 Year_2008                  ถูกต้องตามหลักการตั้งชื่อ
                4.11 return                           ผิด เนื่องจากเป็นคำสงวน
                4.12 xyz123                         ถูกต้องตามหลักการตั้งชื่อ
                4.13 in 1                               ผิด เนื่องจากการเว้นช่องว่างภายในชื่อ
                4.14 part@3                        ผิด เนื่องจากมีการใช้เครื่องหมาย @
                4.15 G                                   ถูกต้องตามหลักการตั้งชื่อ
5.เฉลย
                5.1 int num;
                5.2 float  total =44.582;
                5.3 char letter = ‘L’;
                5.4 float expo = 1.5e04;
                5.5 char ch = ‘$’;
6.เฉลย
                6.1 float a = -8.2, b= 0.005;
                6.2 int x = 129, y= 87. Z=-22;
                6.3 char c1 = ‘w’, c2 = ‘&’;
                6.4 long bin = 123456789;
                6.5 double c = 0.3333333333;
                6.6 char x = ‘A’;
                6.7 unsiged char y = 250;
                6.8 int count = 4000;
                6.9 double amount = 6379.123456;
               6.10 float income = 34.6;    
         
         



ตัวอย่างการประกาศตัวแปร  แดสงดังต่อไปนี้