ในบทนี้ เราจะเรียนรู้เกี่ยวกับองค์ประกอบพื้นฐานในการเขียนโปรแกรมภาษาซีกัน
Variable
ตัวแปร (Variable) คือ สิ่งที่จะช่วยเราจำค่าต่างๆ ไว้แสดงค่าหรือคำนวณในภายหลัง
โดยตัวแปรเหล่านี้จะเก็บค่าเอาไว้ในหน่วยความจำ (Memory) ของคอมพิวเตอร์นั่นเอง
การประกาศตัวแปร (Declarations) ก่อนที่เราจะนำตัวแปรมาใช้ได้ เราต้องประกาศตัวแปรก่อน (การสร้างมันขึ้นมา) โดยมีรูปแบบดังนี้
int number;
char letter;
int และ char คือประเภทของข้อมูล ที่ตัวแปรนั้นๆสามารถเก็บได้ ส่วน number และ letter คือชื่อของตัวแปร
ซึ่งเวลาเราจะเรียกข้อมูลที่เก็บค่าเอาไว้มาใช้ ก็ใช้ชื่อตัวแปรนี่แหละ ต่อไปมาดูประเภทของข้อมูลกันดีกว่า
Type name | Meaning |
---|---|
char | ใช้เก็บ ตัวอักษร หรืออักขระ 1 ตัว (Character) |
int | ใช้เก็บ เลขจำนวนเต็ม (Integer) |
float | ใช้เก็บ เลขจำนวนจริง (Floating number) |
double | ใช้เก็บ เลขจำนวนจริง มีขนาดใหญ่กว่า float เก็บได้ละเอียดกว่า |
* แนะนำให้ใช้ double ในการเก็บค่าประเภทเลขจำนวนจริงแทน float เสมอ
เพราะ double มีความละเอียดมากกว่า ผิดพลาดน้อยกว่า (แม้จะใช้ Memory มากก็ตาม)
การกำหนดค่าตัวแปร คือการเปลี่ยนค่าที่ตัวแปรนั้นๆ เก็บไว้ในหน่วยความจำ เป็นค่าที่กำหนด
int x; // declare x as a integer variable
x = 5; // assign a value to x
บรรทัดแรกคือการประกาศตัวแปรที่มีชื่อว่า x ไว้เก็บข้อมูลประเภทเลขจำนวนเต็ม (Integer)
บรรทัดที่สอง คือการกำหนดค่าตัวแปร ในที่นี้เป็นการกำหนดค่า 5 ลงในตัวแปร x
เราสามารถกำหนดค่าตัวแปรพร้อมๆ กับการประกาศตัวแปรได้ ดังนี้
int x = 5;
char c = 'A';
การแสดงผลด้่วยคำสั่ง printf() มีรูปแบบดังนี้
int x = 5, y = 7;
float z = 392.65;
char c = 'A';
printf( "x + y = %d\n", x + y ); // %d - integer
printf( "z = %f\n", z ); // %f - floating number
printf( "c = %c\n", c ); // %c - character
ผลลัพธ์
x + y = 12
z = 392.649994
c = A
จะเห็นได้ว่า ใช้ %d กับตัวแปรประเภทเลขจำนวนเต็ม (Integer)
ใช้ %f กับตัวแปรประเภทเลขทศนิยม (Floating number)
ใช้ %c กับตัวแปรประเภทอักขระ (Character)
เรายังสามารถใช้ %o %x %e %g กับตัวแปรประเภทตัวเลขได้อีกด้วย
--------------------------------------------------------
แบบฝึกหัดที่ 3.4
------------------------------------------------------------
จงเขียนโค้ด ประกาศตัวแปรดังรายละเอียดต่อไปนี้
ชื่อตัวแปร: myFirstVar (ตัวใหญ่ตัวเล็กสังเกตให้ดีด้วย)
ค่าในตัวแปร: 23.61
เสร็จแล้ว ให้แสดงผลลัพธ์ออกมาให้เหมือนด้านล่างนี้
ผลลัพธ์
The value of my first variable is: 23.61
หมายเหตุ: ให้เลือกใช้ประเภทของตัวแปรให้เหมาะสมกับประเภทของข้อมูลที่ให้เก็บค่า
Variable naming
ชื่อตัวแปรนั้น หากว่าอยากจะใช้ชื่อไหน ก็สรรหามาประกาศกันได้ คงจะสับสนกันน่าดู
ภาษาซีมีกฏเกณฑ์ในการตั้งชื่อตัวแปรดังนี้
1. ต้องประกอบขึ้นจากตัวอักษรภาษาอังกฤษ ตัวเลข และเครื่องหมาย _ (Underscore) เท่านั้น
2. อักขระตัวแรกจะต้องเป็นตัวอักษรภาษาอังกฤษ หรือเครื่องหมาย _ เท่านั้น (ห้ามเป็นตัวเลข)
3. ตัวพิมพ์ใหญ่ และตัวพิมพ์เล็กถือเป็นคนละตัวกัน เช่น Salary และ SALARY เป็นชื่อที่แตกต่างกัน
4. มีความยาวไม่เกิน 31 อักขระ
5. ชื่อจะต้องไม่ซ้ำกับคำสงวน (Reserved word)
คำสงวนของภาษาซี มีดังนี้
auto | double | int | struct |
break | else | long | switch |
case | enum | register | typedef |
char | extern | return | union |
const | float | short | unsigned |
continue | for | signed | void |
default | goto | sizeof | volatile |
do | if | static | while |
ถ้าเราตั้งชื่อตัวแปร ไม่เป็นไปตามกฏ โปรแกรมก็จะไม่สามารถทำงานได้
นอกจากนี้ยังมีสิ่งที่ควรรู้ในการตั้งชื่ออีกคือ
- ไม่ควรตั้งชื่อตัวแปรโดยใ้ช้ตัวพิมพ์ใหญ่ทั้งหมด เพราะอาจถูกเข้าใจผิดว่าเป็น ค่าคงที่ (มีในบทถัดไป)
- หากชื่อนั้นประกอบขึ้นจากคำหลายคำ ให้ใช้ _ คั่นแต่ละคำ เช่น student_info_nickname
หรือใช้ตัวพิมพ์ใหญ่แทน เช่น studentInfoNickname
- และอีกอันที่ขาดไม่ได้คือ ควรตั้งชื่อให้สื่อความหมาย ว่าตัวแปรนั้นๆ เก็บข้อมูลอะไรไว้อยู่
เช่น student_id เราสามารถทราบได้ทันทีว่าเป็นข้อมูล ID ของนักเรียน
แต่หากตั้งชื่อแค่ว่า data เราไม่สามารถทราบได้ว่าเป็นข้อมูลอะไร
หากมาอ่านในภายหลังจะทำความเข้าใจได้ลำบาก
จงวิเคราะห์ชื่อตัวแปรตามกฎการตั้งชื่อ ว่า ชื่อใด สามารถใช้ได้ และใช้ไม่ได้เพราะเหตุใด
customerName
ID
address1
%available
auto
Int
3rdSubject
_sys_one
address_2
number5
จุดสังเกต: ตัวพิมพ์ใหญ่ หรือตัวพิมพ์เล็ก สังเกตกันให้ดีๆ นะครับ
Constant variable
ตัวแปรค่าคงที่ (Constant variable) คือ ตัวแปรที่สามารถกำหนดค่าได้เพียงครั้งเดียว
นั่นคือตอนประกาศตัวแปร หลังจากนั้น จะไม่สามารถเปลี่ยนแปลงค่าที่ตัวแปรนั้นเก็บไว้ได้อีก
การประกาศตัวแปรค่าคงที่ ทำได้ดังนี้
#include <stdio.h>
#define MAX_NUMBER 10
int main() {
printf( "Value from constant variable: %d", MAX_NUMBER );
}
ผลลัพธ์
Value from constant variable: 10
* โดยเรานิยมตั้งชื่อตัวแปรค่าคงที่ ด้วยตัวพิมพ์ใหญ่ทั้งหมด
คำสั่งต่างๆ รวมถึงการประกาศตัวแปรที่ผ่านมา ล้วนอยู่ระหว่าง { และ } ที่ตามหลัง main() ทั้งสิ้น
แต่การประกาศตัวแปรค่าคงที่นั้น เราจะใส่ไว้เหนือ main() ดังตัวอย่างด้านบน โดยมีรูปแบบคือ
#define ชื่อตัวแปรค่าคงที่ ค่าคงที่ที่ต้องการเก็บ
* ให้สังเกตว่า ไม่ต้องมีเครื่องหมาย ; (Semicolon) ตามหลัง
วิธีนำมาใช้ เหมือนกับตัวแปรปกติทุกประการ ต่างกันตรงที่ไม่สามารถเปลี่ยนแปลงค่าที่เก็บไว้ได้โค๊ด
#include <stdio.h>
#define FACTOR 5
int main() {
int x = 3, y = 4;
x = y + FACTOR;
printf( "x = %d\n", x );
printf( "y = %d\n", y);
printf( "FACTOR = %d", FACTOR );
}
ผลลัพธ์
x = 9
y = 4
FACTOR = 5
Tip: เราสามารถประกาศตัวแปรที่เป็นประเภทเดียวกัน พร้อมกันในบรรทัดเดียวได้ โดยใช้ , (Comma) คั่น
จะเห็นได้ว่า เดิมที ตอนประกาศตัวแปร ตัวแปร x ถูกกำหนดค่าไว้เป็น 3
แต่บรรทัดต่อมาตัวแปร x ได้ถูกกำหนดค่าใหม่อีกครั้ง โดยมีค่าเท่ากับ
ค่าของตัวแปร y บวกด้วย ค่าของตัวแปรค่าคงที่ FACTOR ซึ่งมีค่าเท่ากับ 4 + 5
ทำให้ตัวแปร x มีค่าเปลี่ยนไปเป็น 9 ส่วนตัวแปร y และตัวแปรค่าคงที่ยังมีค่าเท่าเดิมคือ 4, 5 ตามลำดับ
เราไม่สามารถเขียนแบบนี้ได้
FACTOR = 7; หรือ FACTOR = x + y + 5;
เพราะ FACTOR เป็นตัวแปรค่าคงที่ จะกำหนดค่าใหม่ หรือเปลี่ยนแปลงค่ามิได้
--------------------------------------------------------
แบบฝึกหัดที่ 3.5
------------------------------------------------------------
จากโค๊ดเริ่มต้นที่กำหนดให้ จะเห็นได้ว่ามีการใช้ตัวแปร PI ในการคำนวณ
แต่ยังไม่มีการประกาศ และกำหนดค่าให้กับตัวแปร PI แต่อย่างใด
จงแก้ไขโค๊ดที่กำหนดให้ ให้สามารถทำงานได้อย่างถูกต้อง
โดยการ ประกาศให้ PI เป็นตัวแปรค่าคงที่ และมีค่าเท่ากับ 3.1415926
#include <stdio.h>
int main() {
int radius = 14;
double circleArea = PI * radius * radius;
printf("radius: %d\n", radius);
printf("area of circle: %lf", circleArea);
}
Operators
ตัวดำเนินการคำนวณพื้นฐาน มีดังนี้
+ ตัวดำเนินการ บวก
- ตัวดำเนินการ ลบ
* ตัวดำเนินการ คูณ
/ ตัวดำเนินการ หาร
% ตัวดำเนินการมอดูลัส (Modulus) หรือหารแล้วเอาเฉพาะเศษนั่นเอง
เราสามารถใช้ตัวดำเนินการคำนวณเหล่านี้ ทำการคำนวณแล้วเก็บค่าไว้ในตัวแปร
หรือแสดงผลลัพธ์ออกมาเลยก็ได้ ดังตัวอย่างต่อไปนี้
#include <stdio.h>
int main() {
int x = 7, y = 3;
int sum, mod, div;
sum = x + y;
mod = x % y;
div = x / y;
printf("sum = %d\n", sum);
printf("x + y = %d\n", x + y);
printf("mod = %d\n", mod);
printf("div = %d\n", div);
printf("%d + %d + %d = %d", sum, mod, div, sum + mod + div);
}
ผลลัพธ์
sum = 10
x + y = 10
mod = 1
div = 2
10 + 1 + 2 = 13
ถ้าสังเกตดีๆ จะเห็นว่า div หรือ x / y มีค่าเป็น 2 ไม่ใช่ 2.333 ทั้งนี้เพราะว่า
int ทำอะไรกับ int ก็ต้องได้ int
7 / 3 = 2
(โดยคอมพิวเตอร์จะแปลง 2.333 ให้เป็น int ด้วยการปัดทศนิยมทิ้ง)
ในทำนองเดียวกัน
double ทำอะไรกับ double ก็ย่อมได้ double
ข้อมูลจำพวกตัวเลขประเภทอื่นก็เ่ช่นเดียวกัน
แล้วถ้า เลขสองตัวนั้น เป็นคนละประเภทหล่ะ จะเป็นอย่างไร ?
int ทำอะไรกับ double ก็ต้องได้ double
* อันนี้ต้องจำ ระวังคำนวณพลาดเพราะจุดนี้นะครับ
แล้วถ้าอยากให้ 7 / 3 มีค่าเท่ากับ 2.333 หล่ะจะทำอย่างไร
เราก็ต้องแปลง 7 กับ 3 ตัวใดตัวหนึ่ง หรือทั้งสองตัวให้เป็น double ซะก่อน
มี 2 วิธี ดังนี้
7.0 + 3.0 หรีิอ (double) 7 + (double) 3
ใช่แล้วครับวิธีแรกคือการเติม .0 ให้กับเลขจำนวณเต็ม เลขนั้นก็จะกลายเป็นเลขที่มีทศนิยมเป็น 0 ซึ่งเป็น
double ทันที ส่วนอีกวิธีหนึ่งคือการใส่ (double) ไว้ด้านหน้าตัวเลขที่เราต้องการจะแปลง เลขตัึวนั้น
ก็จะถูกเปลี่ยนให้เป็น double ทันที ในทำนองเดียวกัน (int),(long),(float) ก็ทำได้เช่นกัน
แต่ว่าวิธีแรกนั้น จะไม่สามารถใช้กับตัวแปรได้ ต้องใช้วิธีหลังคือการเติม (double) เท่านั้นดังนี้
(double) x + (double) y
โดยจะทำการแปลงค่าที่ถูกเรียกใช้มาจากตัวแปร x และ y เป็น double
แต่ค่าที่เก็บไว้ใน x และ y ยังคงเป็น int เหมือนเดิม ไม่ถูกเปลี่ยนแปลง อย่าสับสนนะครับ
ทีนี้เราลองมาเขียนโค๊ดกันดู
#include <stdio.h>
int main() {
int x = 7, y = 3;
int div = (double) x / (double) y;
printf("result = %d", div);
}
ผลลัพธ์
result = 2
อ้าว ไหนเราอุตส่าห์แปลงค่าจากตัวแปรให้เป็น double แล้วไง ทำไมยังได้ 2 อยู่หล่ะ
ที่เป็นอย่างนี้ เพราะว่า div นั้นเป็นตัวแปรประเภท int นั่นเอง
สิ่งที่จะเก็บเข้าตัวแปรประเภท int จะถูกแปลงให้เป็น int โดยอัตโนมัติ
ดังนั้นเราต้องประกาศ div ให้เป็นตัวแปรประเภท double ด้วย
และอย่าลืมที่เปลี่ยน %d เป็น %lf ด้วยนะครับ เดี๋ยวจะผิดซ้ำสองโค๊ด
int x = 7, y = 3;
double div = (double) x / (double) y;
printf("result = %lf", div);
ผลลัพธ์
result = 2.333333
ก็เป็นอันที่เรียบร้อยสำหรับหน้านี้
--------------------------------------------------------
แบบฝึกหัดที่ 3.6
------------------------------------------------------------
จากโค้ด จงแก้โค้ดให้ได้ผลลัพธ์ตามที่ต้องการแบบฝึกหัดที่ 3.6
------------------------------------------------------------
int x = 7, y = 3;
int div = (double) x / (double) y;
printf("result = %lf", div);
ผลลัพธ์
result = 2.33
----------------------------------------------------------------
Refer: Link
----------------------------------------------------------------