วันอาทิตย์ที่ 9 เมษายน พ.ศ. 2560

ข้อมูลพื้นฐานและตัวดำเนินการ


2. ข้อมูลพื้นฐานและตัวดำเนินการ
องค์ประกอบพื้นฐานในการเขียนโปรแกรมภาษาซี ได้แก่ คำสงวน การตั้งชื่อ ตัวแปร ชนิดของข้อมูล ค่าคงตัว ค่าคงที่
1. คำสงวน
คำสงวน หมายถึง คำที่สงวนไว้สำหรับเรียกใช้ตามวัตถุประสงค์ที่กำหนดดดยเฉพาะ เช่น คำที่ใช้ในคำสั่งควบคุม และชนิดของข้อมูล เป็นต้น คำสงวนของภาษาซีมีดังนี้
autodoubleintstruct
breakelselongswitch
caseenumregistertypedef
charexternreturnunion
constfloatshortunsigned
continueforsignedvoid
defaultgotosizeofvolatile
doifstaticwhile
2. การตั้งชื่อ
นักเขียนโปรแกรมจะต้องตั้งชื่อให้กับตัวแปร ค่าคงที่ โปรแกรมย่อย พารามิเตอร์ และส่วนต่างๆ ของโปรแกรม กฎเกณฑ์ที่ใช้ในการตั้งชื่อของภาษาซีมีดังนี้
1. ชื่อจะประกอบขึ้นจากตัวอักษร ตัวเลข และเครื่องหมายขีดเส้นใต้(underscore) เท่านั้น
2. อักขระแรกของชื่อจะต้องเป็นตัวอักษร หรือเครื่องหมายขีดเส้นใต้เท่านั้น
3. ตัวพิมพ์ใหญ่ และตัวพิมพ์เล็กถือเป็นตัวอักษรคนละตัวกัน เช่น Salary และ SALARY เป็นชื่อที่แตกต่างกัน เป็นต้น
4. ชื่อมาตรฐาน ANSI C จะมีความยาวไม่จำกัด แต่คอมไพเลอร์ตามมาตรฐาน ANSI C จะต้องสามารถจำแนกชื่อที่แตกต่างกันได้อย่างมาก 31 อักขระแรก
5. ชื่อจะต้องไม่ซ้ำกับคำสงวน
3. ตัวแปร
การกำหนดตัวแปรเป็นการใช้ชื่อตัวแปรแทนตำแหน่งบนหน่วยความจำ สำหรับเก็บข้อมูลระหว่างการประมวลผล ซึ่งอาจเป็นข้อมูลนำเข้า ข้อมูลที่เกิดจากการดำเนินการ หรือข้อมูลผลลัพธ์
การตั้งชื่อให้กับตัวแปรจะเป็นไปตามหลักการตั้งชื่อของภาษาซี และชื่อที่เหมาะสมควรจะเป็นชื่อที่สื่อความหมาย
การประกาศตัวแปรมีรูปแบบ ดังนี้
ชนิดข้อมูล ตัวแปร1, ตัวแปร2, …,ตัวแปรn;
เช่น int age; float salary, overtime; เป็นต้น
4. ชนิดข้อมูล
ชนิดข้อมูลพื้นฐานในภาษาซีเป็นข้อมูลชนิดสเกลาร์ โดยที่ตัวแปรที่มีชนิดสเกลาร์ในขณะใดขณะหนึ่งจะเก็บข้อมูลได้เพียงค่าเดียวเท่านั้น ข้อมูลชนิดสเกลาร์แบ่งออกเป็น
1) ข้อมูลชนิดตัวเลข (arithmetic data type) ซึ่งประกอบด้วย ข้อมูลชนิดจำนวนเต็ม และข้อมูลชนิดจำนวนจริง
2) ข้อมูลชนิดตัวชี้ (pointer data type)
3) ข้อมูลชนิดแจงนับ (enumerated data type)
ในเอกสารนี้จะกล่าวถึงเฉพาะการใช้งานข้อมูลชนิดจำนวนเต็มและข้อมูลชนิดจำนวนจริงเท่านั้น
4.1 ข้อมูลชนิดจำนวนเต็ม
การประกาศข้อมูลชนิดจำนวนเต็มสามารถทำได้ ดังนี้
int age;
ซึ่งเป็นการกำหนดให้ตัวแปร age เป็นชนิด int หรือชนิดจำนวนเต็ม
เมื่อประกาศตัวแปรแล้วจะมีค่าอย่างใดอย่างหนึ่งได้ด้วยการใช้คำสั่งกำหนดค่าให้กับตัวแปร ซึ่งมีรูปแบบ ดังนี้
ตัวแปร = ค่าข้อมูล;
เช่น age = 15;
เครื่องหมาย = เป็นตัวดำเนินการกำหนดค่า และมีผลให้ตัวแปร age มีค่าข้อมูลเท่ากับ 15
ตัวอย่างที่ 4.1 โปรแกรมพิมพ์อายุ
/* 1 */ //Program: PrintArea.c/* 2 */ #include <stdio.h>/* 3 */ void main() {
/* 4 */ int age;
/* 5 */ age = 15;
/* 6 */ printf(“The child age is %d.\n”, age);
/* 7 */ }
ผลลัพธ์ คือ
The child age is 15.
บรรทัดที่ 4 ตัวแปร age ถูกประกาศให้มีชนิดจำนวนเต็ม และถูกกำหนดให้มีค่าเป็น 15 ในบรรทัดที่ 5
บรรทัดที่ 6 ค่าตัวแปร age ซึ่งเป็นอาร์กิวเมนต์ที่สองของคำสั่ง printf() จะถูกจัดรูปแบบให้อยู่ในรูปของจำนวนเต็มฐานสิบก่อนแสดงผล
สังเกตว่าอาร์กิวเมนต์แรกของคำสั่ง printf() จะต้องมีชนิดเป็นสายอักขระเสมอ และคำสั่ง printf() จะมีจำนวนอาร์กิวเมนต์นอกเหนือจากอาร์กิวเมนต์แรกอีกเท่าใดขึ้นอยู่กับจำนวนชุดอักขระจัดรูปแบบในอาร์กิวเมนต์แรก โดยที่อาร์กิวเมนต์ในลำดับถัดไปอาจอยู่ในรูปของค่าคงตัว นิพจน์ หรือตัวแปรก็ได้
ตัวอย่างที่ 4.2 โปรแกรมพิมพ์พิกัดของจุด
/* 1 */ //Program: Coord.c/* 2 */ #include <stdio.h>/* 3 */ void main() {
/* 4 */ int x1, y1;
/* 5 */ int x2 = 5, y2 = 0;
/* 6 */ x1 = 2;
/* 7 */ y1 = 3;
/* 8 */ printf(“The first coordinate is (%d, %d).\n”,x1, y1);
/* 9 */ printf(“The second coordinate is (%d, %d).\n”,x2, y2);
/* 10 */ }
ผลลัพธ์ คือ
The first coordinate is (2, 3).
The second coordinate is (5, 0).
บรรทัดที่ 4 เป็นการประกาศให้ x1 และ y1 เป็นตัวแปรชนิดจำนวนเต็มทั้งสองตัว และบรรทัดที่ 5 เป็นการประกาศให้ x2 และ y2 เป็นตัวแปรชนิดจำนวนเต็ม พร้อมกับกำหนดให่มีค่าเริ่มต้นเป็น 5 และ 0 ตามลำดับ
อาร์กิวเมนต์แรกของคำสั่ง printf() ในบรรทัดที่ 8 เป็นสายอักขระที่ประกอบด้วยชุดอักขระจัดรูปแบบ %d จำนวน 2 ชุด โดย %d แรกใช้จัดรูปแบบการแสดงผลค่าของตัวแปร x1 และ %d ที่สองใช้จัดรูปแบบการแสดงผลค่าของตัวแปร y1
นอกจากชุดอักขระจัดรูปแบบ %d แล้วยังมีชุดอักขระจัดรูปแบบสำหรับจำนวนเต็มในฐานอื่นอีก คือ %o และ %x ซึ่งเป็นชุดอักขระที่ใช้จัดรูปแบบข้อมูลให้อยู่ในรูปจำนวนเต็มฐานแปด (octal) และจำนวนเต็มฐานสิบหก (hexadecimal) ตามลำดับ ดังแสดงในตัวอย่างที่ 4.3
ตัวอย่างที่ 4.3 โปรแกรมพิมพ์ตัวเลขฐานต่างๆ
/* 1 */ //Program: PrnD-O-X.c/* 2 */ #include <stdio.h>/* 3 */ void main() {
/* 4 */ int a = 78;
/* 5 */ printf(“Value %d in decimal is %d.\n”,a, a);
/* 6 */ printf(“Value %d in octal is %o.\n”,a, a);
/* 7 */ printf(“Value %d in hexadecimal is ”,a);
/* 8 */ printf(“%x or %X.\n”,a ,a);
/* 9 */ }
ผลลัพธ์ คือ
Value 78 in decimal is 78.Value 78 in octal is 116.
Value 78 in hexadecimal is 4e or 4E.
4.2 ข้อมูลชนิดจำนวนจริง
ชนิดข้อมูลจำนวนจริงในภาษาซีประกอบด้วย float double และ long double โดยชนิด float จะมีจำนวนตำแหน่งทศนิยมน้อยกว่าชนิด double และชนิด long double ตามลำดับ
ชุดอักขระจัดรูปแบบที่ใช้สำหรับข้อมูลชนิดจำนวนจริงในคำสั่ง printf() ประกอบด้วย %f ใช้เพื่อจัดรูปแบบข้อมูลชนิด float ให้อยู่ในรูปแบบจำนวนจริงฐานสิบ %e และ %E ใช้เพื่อจัดรูปแบบข้อมูลให้อยู่ในรูปของสัญลักษณ์เชิงวิทยาศาสตรสำหรับข้อมูลชนิด double และ long double จะใช้อักขระ lf และ Lf เป็นอักขระที่เพิ่มเข้าไปใช้ชุดอักขระจัดรูปแบบ ตามลำดับ
ตัวอย่างที่ 4.4 โปรแกรมพิมพ์คะแนน
/* 1 */ //Program: PrnScore.c/* 2 */ #include/* 3 */ void main() {
/* 4 */ float score;
/* 5 */ score = 300.545;
/* 6 */ printf(“Score are %f, %e ”,score, score);
/* 7 */ printf(“and %E. ”,score);
/* 8 */}
ผลลัพธ์ คือ
Score are 300.545013, 3.005450e+02 and 3.005450E+02.
การแสดงผลข้อมูลชนิดจำนวนจริงในคำสั่ง printf() โดยใช้ %f %e หรือ %E จะแสดงค่าทศนิยม 6 ตำแหน่ง อย่างไรก็ตามในชุดอักขระจัดรูปแบบจำนวนจริง ยังสามารถกำหนดจำนวนตำแหน่งในการแสดงผลข้อมูลให้กับข้อมูลแต่ละจำนวน เพื่อจัดรูปแบบผลลัพธ์ให้สวยงาม ดังแสดงในตัวอย่างที่ 4.5
ตัวอย่างที่ 4.5 โปรแกรมพิมพ์อุณหภุมิรูปแบบต่างๆ
/* 1 */ //Program: PrnTemps.c
/* 2 */ // พิมพ์อุณหภูมิรูปแบบต่างๆ/* 3 */ #include <stdio.h>
/* 4 */ void main() {
/* 5 */ float tempFri;
/* 6 */ double tempSat;
/* 7 */ tempFri = 12.345;
/* 8 */ printf(“Friday temperature: %7.2f, ”, tempFri);
/* 9 */ printf(%10.3e, %10.3E. \n”, tempFri, tempFri);
/* 10 */ tempSat = 1.2465e-5;
/* 11 */ printf(“Saturday temperature: %7.2lf, ”,tempSat);
/* 12 */ printf(“%7.5le, %7.5lE.\n”, tempSat, tempSat);
/* 13 */}
ผลลัพธ์ คือ
Friday temperature: 12.35, 1.235e+01, 1.235E+01.
Saturday temperature: 0.000, 1.24650e-05, 1.25650E-05.
จากตัวอย่างที่ 5 ในบรรทัดที่ 8 %7.2f มีความหมายว่าจำนวนตำแหน่งที่ใช้แสดงข้อมูลชนิดจำนวนจริงจะมีค่าอย่างน้อยเท่ากับ 7 โดย 1 ตำแหน่งเป็นทศนิยม 2 ตำแหน่งเป็นค่าทศนิยม และ 4 ตำแหน่งที่เหลือเป็นจำนวนเต็มด้านหน้าจุดทศนิยม ดังรูป 4.1
1
2
.
3
5
รูป 4.1 แสดงผลการกำหนดจำนวนตำแหน่งข้อมูลด้วย %7.2f
5. ค่าคงตัวและค่าคงที่
ค่าคงตัว (literal constant) หมายถึง ข้อมูลที่ระบุเป็นค่าอย่างใดอย่างหนึ่งในโปรแกรม และมีชนิดของข้อมูลตามค่าของข้อมูลนั้น เช่น
8,236 เป็นค่าคงตัวชนิดจำนวนเต็ม
5.85 และ 100.00 เป็นค่าคงตัวชนิดจำนวนจริง
‘A’ และ ‘O.K.” เป็นค่าคงตัวชนิดอักขระและสายอักขระตามลำดับ
นอกจากการใช้ค่าคงตัวแล้ว นักเขียนโปรแกรมยังสามารถกำหนดชื่อเพื่อใช้แทนค่าคงตัวในโปรแกรม ซึ่งต่อไปนี้จะเรียกชื่อนี้ว่า ค่าคงที่ (constants) โดยการใช้คำสั่งของตัวประมวลผลก่อนซี #define ตามตัวอย่างที่ 4.6
ตัวอย่างที่ 4.6 โปรแกรมแปลงอุณหภูมิ
/* 1 */ //Program: Degree.c/* 2 */ #define FACTOR 5 / 9/* 3 */ #define FBASE 32
/* 4 */ #include <stdio.h>
/* 5 */ void main() {
/* 6 */ float degF, degC;
/* 7 */ degF = 78.5;
/* 8 */ degC = (degF – FBASE) * FACTOR;
/* 9 */ printf(“%f in Fahrenheit ”, degF);
/* 10 */ printf(“is %f in Celsius. \n”, degC);
/* 11 */ degF = 100.00;
/* 12 */ degC = (degF – FBASE) * FACTOR;
/* 13 */ printf(“%f in Fahrenheit ”, degF);
/* 14 */ printf(“is %f in Celsius. \n”, degC);
/* 15 */}
ผลลัพธ์ คือ
78.500000 in Fahrenheit is 25.833334 in Celsius.
บรรทัดที่ 2 และ 3 เป็นการเรียกใช้คำสั่งของตัวประมวลผลก่อนซี #define ซึ่งใช้สำหรับกำหนดให้ FACTOR และ FBASE มีค่าคงที่ที่มีค่าเป็น 5/9 และ 32 ตามลำดับ ในขั้นตอนการประมวลผลก่อน (preprocessing) ค่าคงที่ทั้งหมดจะถูกแทนที่ด้วยค่าที่กำหนดให้
บรรทัดที่ 11 ค่า 78.5 เป็นค่าคงตัวชนิดจำนวนจริงที่กำหนดให้เป็นค่าของตัวแปร degF
บรรทัดที่ 16 เราสามารถกำหนดให้ตัวแปร degF มีค่าเป็น 100.00 และเรียกใช้ค่าคงที่ FACTOR และ FBASE คำนวณอีกครั้งในบรรทัดที่ 17
การใช้ค่าคงที่ในโปรแกรมอย่างเหมาะสม จะช่วยให้สามารถเข้าใจความหมายของโปรแกรมได้ดียิ่งขึ้น และยังช่วยให้การปรับปรุงโปรแกรมทำได้โดยง่าย

3 ความคิดเห็น:

แนะนำภาษาซี

หน่วยที่  1 แนะนำภาษา C 1. ความเป็นมาของภาษาซี ภาษาซีเป็นภาษาที่ถือว่าเป็นทั้งภาษาระดับสูงและระดับต่ำถูกพัฒนาโดยเดนนิส ริดชี (De...