ภาษา C เบื้องต้น ปูพื้นฐานการเขียนโปรแกรม

Programming 30 สิงหาคม พ.ศ. 2565 1,060
Home / Articles / 19

ในบทความนี้จะเป็นการปูพื้นฐานการเขียนโปรแกรมด้วยภาษา C มีจุดประสงค์เพื่อให้ผู้อ่านสามารถนำไปต่อยอดได้ ภาษา C เป็น low-level language คือ ภาษาระดับที่ใกล้เคียงกับภาษาเครื่อง อย่าง Assembly มากที่สุด ภาษา C จำเป็นต้องใช้สิ่งที่เรียกว่า compiler สำหรับแปลไฟล์ภาษา C ที่เราเขียน กลับไปเป็นภาษา Assembly จึงจะสามารถทำงานได้

โครงสร้างของภาษา C

ภาษา C ประกอบไปด้วยอย่างน้อย 2 ส่วน คือ ส่วนหัว (header) และส่วนสำหรับเขียน Functions ตัวอย่างโครงสร้างดังนี้

#include <stdio.h>
int main() {
  //ทำงานเมื่อโปรแกรมทำงาน
}

#include คือคำสั่งเรียกใช้โมดูลใน ส่วนหัว มีหน้าที่เรียก โมดูล (modules) หรือส่วนขยาย อย่าง stdio.h ซึ่งเป็นส่วนขยายพื้นฐานที่รวบรวม functions ที่อำนวยความสะดวกสำหรับการเขียนโปรแกรมภาษา C เช่น printf, scanf (เดิมๆแล้ว ภาษา C ไม่มีคำสั่งพวกนี้)

ตัวดำเนินการ ความหมาย
> มากกว่า
< น้อยกว่า
>= มากกว่า หรือเท่ากับ
<= น้อยกว่า หรือเท่ากับ
== เท่ากับ
=== เท่ากับ และเป็นตัวแปรชนิดเดียวกัน
!= ไม่เท่ากับ

เครื่องหมายการดำเนินการตามเงื่อนไข (operations)

ในการเขียนโปรแกรมคอมพิวเตอร์จะมีส่วนที่เรียกว่า เครื่องหมายการดำเนินการ (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 การเก็บชุดข้อมูล

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

การทำงานแบบทำซ้ำ (Loop, While, For)

การทำซ้ำคือการทำงานซ้ำตามเงื่อนไข มีอย่างน้อย 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 และ printf

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 !

Profile Picture.
  • Name (Pen name): Sunny Jirakit (Sunny420x)
  • Study: Bachelor Degree of Computer Science from Chiang Mai Rajabhat University
  • Personality: Architect (INTJ-T)
  • Experience: JavaScript,  Angular.js, React.js, Next.js  Express.js, Unity C#, Socket.io