|
ข้อมูลที่ใช้ในการเขียนโปรแกรมมีหลายชนิด ซึ่งการเขียนโปรแกรมต้องเลือกใช้ให้เหมาะสมกับการใช้งาน เพราะข้อมูลมีขนาดแตกต่างกันไปตามชนิดของข้อมูล นอกจากนี้ ข้อมูลยังมีความแตกต่างกันโดยขึ้นกับเครื่องคอมพิวเตอร์ และตัวแปลโปรแกรมที่ใช้ในการประมวลผล แต่โดยทั่วไปแล้วในไมโครคอมพิวเตอร์ ชนิดข้อมูลมีการใช้ในโปรแกรม และขนาดดังนี้
ตารางที่ 3.2.1 แสดงชนิดข้อมูลพื้นฐานในภาษาซี
ชนิดข้อมูล |
การใช้ในโปรแกรม |
ความหมาย |
ขนาดข้อมูล (ไบต์) |
ช่วงข้อมูล |
character |
char |
ตัวอัขระ |
1 |
-128 ถึง 127 |
integer |
int |
เลขจำนวนเต็ม |
2 |
-32,768 ถึง 32,767 |
short integer |
short |
เลขจำนวนเต็ม แบบสั้น |
2 |
-32,768 ถึง 32,767 |
long integer |
long |
เลขจำนวนเต็ม แบบยาว |
4 |
-2,147,483,648 ถึง 2,147,483,647 |
unsigned character |
unsigned char |
ตัวอัขระ ไม่รวมเครื่องหมาย |
1 |
0 ถึง 255 |
unsigned integer |
unsigned int |
เลขจำนวนเต็ม ไม่รวมเครื่องหมาย |
2 |
0 ถึง 65,535 |
unsigned short integer |
unsigned short |
เลขจำนวนเต็ม แบบสั้น ไม่รวมเครื่องหมาย |
2 |
0 ถึง 65,535 |
unsigned long integer |
unsigned long |
เลขจำนวนเต็ม แบบยาว ไม่รวมเครื่องหมาย |
4 |
0 ถึง 4,294,967,295 |
single-precision floating-point |
float |
เลขจำนวนจริง มีทศนิยม |
4 |
1.2x10-38 ถึง 3.4x1038 |
double-precision floating-point |
double |
เลขจำนวนจริง 2 เท่า |
8 |
2.2x10-308 ถึง 1.8x10308 |
ชนิดข้อมูลพื้นฐานในภาษาซีเป็นข้อมูลชนิดสเกลาร์ โดยที่ตัวแปรที่มีชนิดสเกลาร์ในขณะใดขณะหนึ่งจะเก็บข้อมูลได้เพียงค่าเดียวเท่านั้น ข้อมูลชนิดสเกลาร์แบ่งออกเป็น
- ข้อมูลชนิดตัวเลข (arithmetic data type) ซึ่งประกอบด้วย ข้อมูลชนิดจำนวนเต็ม และข้อมูลชนิดจำนวนจริง
- ข้อมูลชนิดตัวชี้ (pointer data type)
- ข้อมูลชนิดแจงนับ (enumerated data type)
ในเอกสารนี้จะกล่าวถึงเฉพาะการใช้งานข้อมูลชนิดจำนวนเต็มและข้อมูลชนิดจำนวนจริงเท่านั้น
ข้อมูลชนิดจำนวนเต็ม
การประกาศข้อมูลชนิดจำนวนเต็มสามารถทำได้ ดังนี้
ซึ่งเป็นการกำหนดให้ตัวแปร age เป็นชนิด int หรือชนิดจำนวนเต็ม เมื่อประกาศตัวแปรแล้วจะมีค่าอย่างใดอย่างหนึ่งได้ด้วยการใช้คำสั่งกำหนดค่าให้กับตัวแปร ซึ่งมีรูปแบบ ดังนี้
เช่น age = 15;
เครื่องหมาย = เป็นตัวดำเนินการกำหนดค่า และมีผลให้ตัวแปร age มีค่าข้อมูลเท่ากับ 15
ตัวอย่างที่ 3.2.1 โปรแกรมพิมพ์อายุ
|
|
|
#include <stdio.h> |
|
int main() { |
|
int age; |
|
age = 15; |
|
printf(The child age is %d.\n, age); |
|
getch(); |
|
} |
|
ผลลัพธ์ คือ
บรรทัดที่ 4 ตัวแปร age ถูกประกาศให้มีชนิดจำนวนเต็ม และถูกกำหนดให้มีค่าเป็น 15 ในบรรทัดที่ 5
บรรทัดที่ 6 ค่าตัวแปร age ซึ่งเป็นอาร์กิวเมนต์ที่สองของคำสั่ง printf() จะถูกจัดรูปแบบให้อยู่ในรูปของจำนวนเต็มฐานสิบก่อนแสดงผล
สังเกตว่าอาร์กิวเมนต์แรกของคำสั่ง printf() จะต้องมีชนิดเป็นสายอักขระเสมอ และคำสั่ง printf() จะมีจำนวนอาร์กิวเมนต์นอกเหนือจากอาร์กิวเมนต์แรกอีกเท่าใดขึ้นอยู่กับจำนวนชุดอักขระจัดรูปแบบในอาร์กิวเมนต์แรก โดยที่อาร์กิวเมนต์ในลำดับถัดไปอาจอยู่ในรูปของค่าคงตัว นิพจน์ หรือตัวแปรก็ได้
ตัวอย่างที่ 3.2.2 โปรแกรมพิมพ์พิกัดของจุด
|
|
|
#include <stdio.h> |
|
int main() { |
|
int x1, y1; |
|
int x2 = 5, y2 = 0; |
|
x1 = 2; |
|
y1 = 3; |
|
printf(The first coordinate is (%d, %d).\n,x1 ,y1); |
|
printf(The second coordinate is (%d, %d).\n,x2 ,y2); |
|
getch(); |
|
} |
|
ผลลัพธ์ คือ
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) ตามลำดับ ดังแสดงในตัวอย่างที่ 3.2.3
ตัวอย่างที่ 3.2.3 โปรแกรมพิมพ์ตัวเลขฐานต่างๆ
|
|
|
#include <stdio.h> |
|
int main() { |
|
int a = 78; |
|
printf(Value %d in decimal is %d.\n,a ,a); |
|
printf(Value %d in octal is %o.\n,a ,a); |
|
printf(Value %d in hexadecimal is ,a); |
|
printf(%x or %X.\n,a ,a); |
|
getch(); |
|
} |
|
ผลลัพธ์ คือ
Value 78 in decimal is 78. Value 78 in octal is 116. Value 78 in hexadecimal is 4e or 4E.
|
|
ข้อมูลชนิดจำนวนจริง
ชนิดข้อมูลจำนวนจริงในภาษาซีประกอบด้วย float double และ long double โดยชนิด float จะมีจำนวนตำแหน่งทศนิยมน้อยกว่าชนิด double และชนิด long double ตามลำดับ
ชุดอักขระจัดรูปแบบที่ใช้สำหรับข้อมูลชนิดจำนวนจริงในคำสั่ง printf() ประกอบด้วย %f ใช้เพื่อจัดรูปแบบข้อมูลชนิด float ให้อยู่ในรูปแบบจำนวนจริงฐานสิบ %e และ %E ใช้เพื่อจัดรูปแบบข้อมูลให้อยู่ในรูปของสัญลักษณ์เชิงวิทยาศาสตรสำหรับข้อมูลชนิด double และ long double จะใช้อักขระ lf และ Lf เป็นอักขระที่เพิ่มเข้าไปใช้ชุดอักขระจัดรูปแบบ ตามลำดับ
ตัวอย่างที่ 3.2.4 โปรแกรมพิมพ์คะแนน
|
|
|
#include <stdio.h> |
|
int main() { |
|
float score; |
|
int score = 300.545; |
|
printf(Score are %f, %e ,score ,score); |
|
printf(and %E. ,score); |
|
getch(); |
|
} |
|
ผลลัพธ์ คือ
Score are 300.545013, 3.005450e+02 and 3.005450E+02.
|
|
การแสดงผลข้อมูลชนิดจำนวนจริงในคำสั่ง printf() โดยใช้ %f %e หรือ %E จะแสดงค่าทศนิยม 6 ตำแหน่ง อย่างไรก็ตามในชุออักขระจัดรูปแบบจำนวนจริง ยังสามารถกำหนดจำนวนตำแหน่งในการแสดงผลข้อมูลให้กับข้อมูลแต่ละจำนวน เพื่อจัดรูปแบบผลลัพธ์ให้สวยงาม ดังแสดงในตัวอย่างที่ 3.2.5
ตัวอย่างที่ 3.2.5 โปรแกรมพิมพ์อุณหภุมิรูปแบบต่างๆ
|
|
|
|
|
#include <stdio.h> |
|
int main() { |
|
float tempFri; |
|
double tempSat; |
|
tempFri = 12.345; |
|
printf(Friday temperature: %7.2f, ,tempFri); |
|
printf(%10.3e, %10.3E. \n,tempFri, tempFri); |
|
tempSat = 1.2465e-5; |
|
printf(Saturday temperature: %7.2lf, ,tempSat); |
|
printf(%7.5le, %7.5lE.\n,tempSat, tempSat); |
|
getch(); |
|
} |
|
ผลลัพธ์ คือ
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 ตำแหน่งที่เหลือเป็นจำนวนเต็มด้านหน้าจุดทศนิยม ดังรูป
รูปแสดงผลการกำหนดจำนวนตำแหน่งข้อมูลด้วย
|
|