ในบทความนี้จะเป็นการปูพื้นฐานการเขียนโปรแกรมด้วยภาษา C มีจุดประสงค์เพื่อให้ผู้อ่านสามารถนำไปต่อยอดได้ ภาษา C เป็น low-level language คือ ภาษาระดับที่ใกล้เคียงกับภาษาเครื่อง อย่าง Assembly มากที่สุด ภาษา C จำเป็นต้องใช้สิ่งที่เรียกว่า compiler สำหรับแปลไฟล์ภาษา C ที่เราเขียน กลับไปเป็นภาษา Assembly จึงจะสามารถทำงานได้
ภาษา C ประกอบไปด้วยอย่างน้อย 2 ส่วน คือ ส่วนหัว (header) และส่วนสำหรับเขียน Functions ตัวอย่างโครงสร้างดังนี้
#include <stdio.h>
int main() {
//ทำงานเมื่อโปรแกรมทำงาน
}
#include
| ตัวดำเนินการ | ความหมาย |
|---|---|
| > | มากกว่า |
| < | น้อยกว่า |
| >= | มากกว่า หรือเท่ากับ |
| <= | น้อยกว่า หรือเท่ากับ |
| == | เท่ากับ |
| === | เท่ากับ และเป็นตัวแปรชนิดเดียวกัน |
| != | ไม่เท่ากับ |
ในการเขียนโปรแกรมคอมพิวเตอร์จะมีส่วนที่เรียกว่า เครื่องหมายการดำเนินการ (operations) คือ เครื่องหมายสำหรับเช็คทางคณิตศาสตร์ หรือทางตรรกะศาสตร์ เช่น ห้ามากกว่าสาม 5 > 3, ห้าเท่ากับห้า 5 == 5, หนึ่งไม่เท่ากับศูนย์ 1 != 0
เงื่อนไขทางคอมพิวเตอร์ คือ ถ้า...แล้ว..., ...หรือ, ...และ... ในทางตรรกะศาสตร์
ถ้า...แล้ว... (ตัวอย่าง ถ้า 5 มากกว่า 4 แล้ว...)
if(5 > 4) {
//ทำงานเมื่อเป็นจริง
} else {
//ทำงานหาก 5 น้อยกว่า 4
}
ถ้า...และ...แล้ว... (ตัวอย่าง ถ้า 5 มากกว่า 4 และ 6 มากกว่า 3 แล้ว...)
if(5 > 4 && 6 > 3) {
//ทำงานเมื่อเป็นจริงทั้งคู่
} else {
//ทำงานหาก 5 น้อยกว่า 4 และ 6 น้อยกว่า 3
}
ถ้า...หรือ...แล้ว... (ตัวอย่าง ถ้า 5 มากกว่า 4 หรือ 6 มากกว่า 10 แล้ว...)
if(5 > 4 || 6 > 10) {
//ทำงานเมื่อเป็นจริงเพียงข้างใดข้างหนึ่ง หรือทั้งสองข้าง
}
ในการเก็บข้อมูลต่างๆ ไว้ในตัวแปร เช่น เก็บจำนวนเต็ม (Integer), ตัวเลขทศนิยม (ในภาษา C เรียกว่า float) เก็บตัวหนังสือ (character หรือที่เรียกว่า String ในทางคอมพิวเตอร์), ค่าจริงเท็จ (Boolean), และแบบกลุ่มคล้ายกับเซตในทางคณิตศาสตร์ (Array) ตัวอย่างดังนี้
int a = 14;
float b = 3.14;
char c = "a";
char c[10] = "abcdefghiv";
bool d = true;
int e[] = {1,2,3,4};
char f[10] = {'a','b','c'};
const int pi = 3.14;
การใส่ [] หลังชื่อตัวแปร บ่งบอก ว่ามันคือ array หรือเซท
int ใช้เก็บจำนวนเต็ม แบบไม่มีทศนิยม
float ใช้เก็บตัวเลขที่ประกอบด้วยทศนิยม
char ใช้เก็บตัวอักษร ค่าเริ่มต้นจะสามารถเก็บได้เพียงหนึ่งตัว
bool ใช้เก็บ ค่าความจริงหรือเท็จ (true หรือ false)
const เป็นการกำหนดคุณสมบัติตัวแปรที่ไม่สามารถกำหนดค่าใหม่ได้
Array นั้นเป็นคุณสมบัติของตัวแปรที่สามารถเก็บเซทตัวเลข, ตัวอักษร และตัวแปร เข้าไปได้ โดยจะเริ่มนับจาก 0 เป็นต้นไป เนื่องจากการอ้างอิง ลำดับ (Indexs) ใน Array เป็นการอ้างอิงตำแหน่งของข้อมูล จากความห่างของข้อมูลต้องการ กับข้อมูลตัวแรกของ array
ข้อมูลที่ 1 จึงมีลำดับเท่ากับกับ 0 เนื่องจาก ตัวมันห่างจากตัวข้อมูลที่ 1 ซึ่งคือตัวมันเอง เท่ากับ 0
int e[] ใช้เก็บเซทตัวเลข
char c[10] ใช้เก็บตัวอักษร 10 ตัว
char f[10] ให้ผลลัพท์เหมือนกับ char c[10] เนื่องจากทั้งสองเป็น array, ชุดข้อความ (Strings) ก็คือ array ของ ตัวอักษร (characters)
ในภาษา C การเปรียบเทียบค่าในตัวแปร ที่เป็นตัวเลข, boolean จะตรวจเช็คได้ด้วยเงื่อนไขนี้
if(a == 14) {
//ทำงานเมื่อ a มีค่าเท่ากับ 14
}
if(d == true) {
//ทำงานเมื่อ d มีค่าเป็นจริง
}
ถ้ากับตัวอักษรเพียงตัวเดียวอาจไม่มีปัญหา แต่กับข้อความหรือ Strings มีวิธีที่ต่างออกไป เนื่องจาก ภาษา C มองว่า string คือเซทของตัวอักษร ดังนั้นจึงต้องใช้โมดูลตัวหนึ่งเพิ่มขึ้นมา กลับไปที่ส่วนหัวของโปรแกรม เราต้องเพิ่มโมดูล #include <string.h> เพื่อให้สามารถทำงานร่วมกับเซทของอักษรได้ง่ายขึ้น ซึ่งจะประกอบไปด้วยหลาย functions ตัวอย่างแรกจะเป็นการ เปรียบเทียบข้อความ
if(strcmp(c, "hello") == 0) {
//ทำงานเมื่อตัวแปร c มีค่าเท่ากับ "hello"
}
strcmp ย่อมาจาก "Strings Compare" เป็นชื่อ functions หนึ่งของโมดูล string.h เป็นจริงก็ต่อเมื่อ ค่า parameter ตัวแรกใน strcmp คือ ตัวแปร c ตรงกับ Strings ใน parameter ตัวที่สอง นั่นก็คือ "hello"
| ตัวดำเนินการ | ความหมาย |
|---|---|
| x += y | x = x + y |
| x += 1 | x = x + 1 |
| x -= y | x = x - y |
| x *= x | x = x * x |
| x /= y | x = x / y |
| x %= y | x = x % y |
| x++ | x = x + 1 |
| x-- | x = x - 1 |
เป็นการอัพเดทค่าใหม่ให้กับตัวแปร เช่น
int x = 0;
//ช่วงที่ยังไม่กำหนดค่าใหม่ x ยังคงเท่ากับ 0
x = 1;
//หลังจากนี้ x เท่ากับ 1
นอกจากนี้เรายังสามารถ อ้างอิง ค่าเดิม ของตัวแปรเข้าไปได้ ตัวอย่าง
int x = 2;
x = x + 1;
//x เท่ากับ 3
การทำซ้ำคือการทำงานซ้ำตามเงื่อนไข มีอย่างน้อย 2 รูปแบบคือ for และ while ซึ่งมีการกำหนดเงื่อนไขที่แตกต่างกัน
เริ่มที่ while ตัวอย่าง โค้ดด้านล่าง จะมีการประกาศตัวแปร Integer ชื่อ i ไว้สำหรับ เก็บจำนวนรอบ โดยค่าเริ่มต้นเป็น 1 และเพิ่มค่า i ทุกครั้ง จนกว่า i จะมากกว่า 10 เนื่องจากผมใส่เงื่อนไขว่าให้ทำซ้ำต่อเมื่อ i น้อยกว่า 10 เมื่อ i เท่ากับ 11 โปรแกรมก็จะหยุดการทำซ้ำ
int i = 1;
while(i <= 10) {
printf("counts = %d \n", i);
i++; //เพิ่มค่า i
}
ผลลัพท์ควรได้ได้เป็น
counts = 1
counts = 2
counts = 3
counts = 4
counts = 5
counts = 6
counts = 7
counts = 8
counts = 9
counts = 10
ซึ่งในการใช้ for ก็จะเหมือนกัน แต่ จะประกาศตัวแปร i ที่ใช้นับรอบ ค่าเริ่มต้น และการนับรอบได้เลยใน parameter ของ for function ตัวอย่างดังนี้
for(int c = 1;c <= 10;c++) {
printf("counts = %d \n", c);
}
| ตัวดำเนินการ | ความหมาย |
|---|---|
| %d | ค่าที่เป็นจำนวนเต็ม integer |
| %f | ค่าที่เป็นเลขทศนิยม |
| %u | ค่าที่เป็นจำนวนเต็มบวก |
| %c | ค่าที่เป็นตัวอักษรหนึ่งตัว |
| %s | ค่าที่เป็นตัวอักษรหลายตัวเป็นเซท |
| %10s | ค่าที่เป็นตัวอักษร 10 ตัว |
scanf คือ function หนึ่งของ stdio.h ที่ทำหน้าที่รับ input จากแป้นพิมพ์ (ทาง command-line) เก็บไว้ในตัวแปรต่างๆ ส่วน printf คือคำสั่งที่ใช้แสดงค่าลงใน command-line
printf("Enter Number: ");
scanf("%d", &num);
ใน Command-Line ก็จะแสดงผลแบบนี้ เมื่อใส่ค่าที่เป็น ตัวเลขตัวจำนวนเต็ม จะเก็บลงในตัวแปร num
Enter Number: 54
จากผลลัพท์ข้างต้น num ก็จะเท่ากับ 54 ซึ่งหากต้องการรับตัวอักษรตัวเดียว หรือหลายๆตัว ต้องเขียนแบบนี้
char str[30];
scanf("%29s",str);
ส่วนที่เป็น %d, %s, %c คือการบอกโปรแกรมว่าเรากำลังจะรับค่าประเภทไหนและขนาดเท่าไหร่ เช่นหากต้องการรับค่าตัวเลขความยาว 30 ตัว ก็ควรจะเป็น %29d ซึ่ง 29 คือจำนวนตัวเลขที่รับได้ (กรณีนี้คือ 29 หลัก) และใน parameter ที่สอง จะมีแต่ตัวแปรประเภท strings ที่ไม่จำเป็นต้องใส่เครื่องหมาย "&"
การใช้ printf ตัวอย่างการแสดงข้อความปกติ ไม่มีตัวแปร
printf("Hello World");
การดึงข้อมูลในตัวแปลมาแสดงพร้อมกับ Strings โดย %s อันแรกจะอ้างอิงถึงชนิดตัวแปร และลำดับ
char name[20] = "Sunny";
printf("Hello %s !", name);
Hello Sunny !
เราสามารถแสดงหลายตัวแปรพร้อมกันได้ ตัวอย่าง
char name[20] = "Sunny";
char last[20] = "Jirakit";
printf("Hello %s %s !", name, last);
Hello Sunny Jirakit !
