Dev C EP.1 Basic C language program ( โปรแกรมภาษา C ขั้นพื้นฐาน )
ขออณุญาติไม่สอนวิธีการติดตั้งโปรแกรมสำหรับการเขียนโปรแกรม น่ะครับ เเต่ถ้าใครยังไม่รู้ว่าต้องลงโปรแกรมยังไง คลิ้กไปที่ลิ้ง วิธีติดตั้งโปรแกรม Dev-C++ ได้ครับ
ใน Ep นี้ผมจะมาแนะนำ ขั้นตอนในการพัฒนาโปรแกรม โครงสร้างโปรแกรมภาษา C ตัวแปร และ ตัวดำเนินการ จนไปถึงการ แสดงผล และ รับค่า ข้อผิดพลาดที่เกิดขึ้นบ่อย โดยผมจะแนะนำขั้นพื้นฐานสำหรับคนเขียนโปรแกรมและภาษา c เป็นครั้งแรก เพื่อเป็นการเสียเวลาในการอ่าน ทข้างต้นนานจนเกินไป เราไปเริ่มกันเลยดีกว่า
โปรแกรมแรกกับภาษา C
เป็นโปรแกรมสั่งพิมพ์ข้อความ Hello World!!!
มา ต่อไปผมจะอธิบายเเต่ละส่วนให้ฟัง
ส่วนแรก จะเป็นส่วนของ preprocessor คือ
- บรรทัดที่เริ่มต้นด้วย เครื่องหมาย # เรียกว่า preprocessor ตัวอย่างเช่น #include <stdio.h> ซึ่งเป็นตัวบอกว่าให้นำ header file ของมาตราฐานการส่งรับข้อมูล ใน stdio.h เข้ามาในโปรแกรมด้วย เนื่องจากจำเป็นต้องใช้
- โดย header file ตัวนี้มีข้อมูลของคำสั่ง printf() ที่ใช้ในโปรแกรมของเรา
- stdio.h คือ เป็น header file ของไลบรารี่ของฟังก์ชันที่ช่วยให้เราสามารถเขียนโปรแกรมได้โดยไม่จำเป็นต้องเขียนโปรแกรมเดิม ๆ หลาย ๆ ครั้ง§เนื่องจากฟังก์ชันบางตัวนั้นมีขนาดยาวและมีความซับซ้อน การที่ไม่ต้องเขียนฟังก์ชันเหล่านี้เองทำให้การเขียนโปรแกรมง่ายและเร็วขึ้น §การใช้งานฟังก์ชันเหล่านี้ยังเป็นการทำให้ง่ายต่อการเรียนรู้โปรแกรม เนื่องจากทำให้อ่านโปรแกรมง่าย
ส่วนที่ 2 int main ( void )
- ทุกๆโปรแกรมจะต้องมีฟังก์ชันที่ชื่อว่า main. เพราะนี้เป็นส่วนแรกที่โปรแกรมจะเริ่มทำงาน
- ฟังก์ชัน main( ) ถูกกำหนดขึ้นให้เป็นส่วนแรกของโปรแกรมที่จะถูกรันเพื่อให้สะดวกแก่การอ่านโปรแกรม ทุกโปรแกรมต้องมีฟังก์ชันที่มีชื่อนี้ และต้องมีเพียงฟังก์ชันเดียวเท่านั้นเพื่อให้โปรแกรมสามารถ compile และทำงานได้
- คำสงวน “int” ที่นำหน้า main( ) เป็นตัวบอกว่าฟังก์ชันจะมีการส่งค่าออกเป็นชนิดตัวเลขจำนวนเต็ม (int มาจาก integer) เมื่อจบฟังก์ชัน
- วงเล็บ ( )ที่ตามหลังคำสงวน “main” บอกให้ทราบว่านี้คือฟังก์ชัน
- คำสงวน “void” บอกให้ทราบว่าฟังก์ชันดังกล่าวไม่มีการรับค่าเข้าจากภายนอก (parameter/argument)
ส่วนที 3 Comment คำอธิบายโปรแกรม
- comment เป็นข้อมูลที่ช่วยให้ข้อมูลเกี่ยวกับโปรแกรม
- ใช้อธิบายหน้าที่การทำงานของโปรแกรม ฟังก์ชัน หรือคำสั่ง เพื่อความง่ายในการทำความเข้าใจ
- เขียนด้วยภาษาอะไรก็ได้ (ภาษาไทยก็ได้)
- ไม่มีผลกระทบกับการทำงานของโปรแกรม
- ในขณะทดลองแก้ไขโปรแกรม ส่วนใดต้องการข้ามไป ใช้ comment ปิดไว้ก่อน ไม่ต้องลบ code ออกทั้งหมด เผื่อต้องการเรียกกลับมาใช้ใหม่ได้
- เราสามารถเขียนคำอธิบายโปรแกรมได้สองแบบ คือ
ส่วนที่ 4 ส่วนของโปรแกรม
- บรรทัดนี้เป็นส่วนคำสั่งของภาษาซี
- เป็นการเรียกใช้ฟังก์ชันชื่อว่า printf ( ) โดยมีการส่งผ่านค่าเข้าไปในฟังก์ชัน หนึ่งค่า “Hello World!!!” เป็น ค่าชนิด string
- argument (parameter): ค่าที่ส่งผ่านเข้าไปในฟังก์ชั่น
- return 0 ; เนื่องจากฟังก์ชัน main() มีการส่งค่ากลับมา ก่อนจะจบฟังก์ชันจึงต้องมีการใช้คำสั่ง return ตามด้วยตัวเลขที่จะส่งกลับไป โดยค่าที่ส่งกลับไปจะถูกส่งไปให้ระบบปฏิบัติการ (operating systems) ค่า 0 เป็นตัวบอกว่าโปรแกรมทำงานเสร็จสิ้นสมบูรณ์
ส่วนที่ 5 ขอบเขตของฟังก์ชัน
- วงเล็บปีกกาเปิด { บอกให้ทราบว่าส่วนของฟังก์ชันหรือขอบเขตของโค๊ดเริ่มต้นที่ใด
- วงเล็บปีกกาปิด } บอกให้ทราบว่าส่วนของฟังก์ชันหรือขอบเขตของโค๊ดสิ้นสุดที่ใด
- เครื่องหมาย ; บอกให้ทราบว่าคำสั่งหนึ่งจบลง (ต้องใส่ไว้หลังคำสั่งทุกคำสั่ง มิฉะนั้นจะเกิด syntax error
- การย่อหน้าในการเขียนโปรแกรมเป็นลักษณะการเขียนโปรแกรมที่ดี เพื่อให้สะดวกต่อการหาขอบเขตของคำสั่ง
ตัวอย่างโปรแกรม
# include <stdio.h>
int main (void)
{
printf(“My name is Tommy \n”);
return 0;
}
ผลการรันโปรแกรม
My name is Tommy
ตัวแปรและตัวดำเนินการ
•ภาษา C เป็นภาษาที่เข้มงวดกับเรื่องชนิดข้อมูล
- int ตัวเลขจำนวนเต็ม
- float ตัวเลขทศนิยม
- double ตัวเลขทศนิยมที่มีความจุเป็น 2 เท่า
- char ตัวอักษร
ชนิดข้อมูลบางตัว อาจทำงานร่วมกับตัวปรับปรุง signed, unsigned, short และ long
ชนิดข้อมูลพื้นฐาน
ข้อมูล
ข้อมูลภายในโปรแกรม
ค่าคงที่
- ตัวเลขจำนวนเต็ม (ฐานสิบ Decimal) เช่น 10, 20, -5
→เลขฐาน 16 (Hexadecimal) เช่น 0x32, 0x5FB (ขึ้นต้นด้วย 0x)
→เลขฐาน 8 (Octal) เช่น 013, 041, 07 (ขึ้นต้นด้วยศูนย์)
- ตัวเลขทศนิยม เช่น 7.2, 5.6, 0.002, 2e-3, -3.14159e2, -314.159
- ตัวอักษร เช่น ‘c’ ,’1', ‘5’ , ‘ ‘ (space), ‘$’
→ตัวอักษรพิเศษที่ขึ้นต้นด้วย \ เช่น ‘\t’
→อักขระพิเศษสามารถยกเลิกความพิเศษได้โดยใช้ \ นำหน้า เช่น ‘\\’ คืออักขระ \
- ข้อความ String (ไม่ใช่ข้อมูลชนิดพื้นฐาน) เช่น “Hello”
→ ข้อความว่างเปล่า “”
→ ข้อความที่มีตัวอักษรว่าง(space)หนึ่งตัว “ “
ข้อมูลตัวอักษร Character
- ขนาดหนึ่งไบต์ เก็บค่าเป็นจำนวนเต็มได้ 256 ค่า (0_255 หรือ -128_127)
- ค่าจำนวนคือรหัสของตัวอักษร ตามมาตรฐานASCII เรียกว่ารหัสแอสกี้ (ASCII)
ตัวแปร Variable
- ใช้หน่วยความจำของคอมพิวเตอร์ในการจดจำข้อมูล
- ยากที่จะอ้างอิงตำแหน่งในหน่วยความจำ เราจึงใช้ชื่อของตัวแปรในการอ้างอิง
- ตัวแปรต้องถูกประกาศก่อนการใช้งาน
- การประกาศตัวแปร ประกอบด้วย ชนิดข้อมูล ชื่อตัวแปร (อาจจะมีการกำหนดค่าเริ่มต้นด้วย) และตามด้วย ; (semi-colon)
→ เช่น int x; หรือ int x = 2;
→ชื่อตัวแปร เป็นการประกอบกันระหว่าง ตัวอักษร ตัวเลข เครื่องหมาย
_ (underscore) ทั้งนี้ห้ามขึ้นต้นด้วยตัวเลข และไม่เป็นคำสงวน
ตัวอย่างการประกาศใช้งานตัวแปร
- ประกาศตัวแปร c มีชนิดเป็นตัวอักษร 1 ตัว
char c ;
- ประกาศตัวแปร count มีชนิดเป็นเลขจำนวนเต็มพร้อมทั้งกำหนดให้มีค่าเท่ากับ 8
int count=8;
- ประกาศตัวแปร price มีชนิดเป็นเลขทศนิยม
float price;
ตัวอย่างการประกาศตัวแปร
- ประกาศตัวแปรชื่อ happy มีชนิดเป็นตัวอักษร 1 ตัว พร้อมทั้งกำหนดให้มีค่าเป็นตัวอักษร C ( capital letter พิมพ์ใหญ่ )
char happy=‘C’;
- ประกาศตัวแปร easy มีชนิดเป็นเลขจำนวนเต็มพร้อมทั้งกำหนดให้มีค่าเท่ากับ 5 และ ตัวแปร Easy มีชนิดเป็นเลขจำนวนเต็มพร้อมทั้งกำหนดให้มีค่าเท่ากับ 10
int easy=5, Easy=10;
หรือ
int easy=5; int Easy=10;
- ประกาศตัวแปรชื่อ test มีชนิดเป็นเลขทศนิยมมีค่าเท่ากับ 7.5
float test=7.5;
การตั้งชื่อตัวแปร
- อักษรตัวแรกจะต้องเป็นตัวอักษรภาษาอังกฤษหรือเครื่องหมาย
_ (underline character)
สามารถตั้งชื่อตัวแปรโดยใช้ตัวเลขร่วมกับตัวอักษรภาษาอังกฤษ ได้แต่ห้ามใช้ตัวเลขเป็นตัวอักษรตัวแรก
- ตัวอักษรภาษาอังกฤษตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ถือเป็นคนละตัวกัน เช่น name กับ NAME
ห้ามตั้งชื่อซ้ำกับคำสงวน (Keywords) ซึ่งเป็นคำที่มีอยู่แล้วในภาษา C
ตัวอย่าง
คำต่อไปนี้สามารถนำมาตั้งเป็นชื่อตัวแปรได้หรือไม่
number 2value ❌grade1student_idfloat ❌_scorea!ge ❌Number-person ❌$age ❌
ตัวอย่างการใช้งานตัวแปร
#include <stdio.h> #define NUM 5 ----> NUM ไม่ใช่ตัวแปร แต่จะถูกแทนด้วย5 ก่อนการคอมไพล์int main(){int x = NUM; ----> x เป็นตัวแปร ชนิดจำนวนเต็มfloat y;y = x + NUM; ----> ค่า y ถูกกำหนดค่าโดยเครื่องหมาย =ด้านซ้ายเป็นตัวแปรด้านขวา
เป็นการคำนวณตัวเลขprintf(“%.1f\n”, y); return 0;}# ผลลัพธ์ของการคำนวณเป็นไปตามชนิดข้อมูลของตัวถูกดำเนินการที่ใหญ่สุด
int + float => float
ตัวดำเนินการทางคณิตศาสตร์ Arithmetic Operators
- ตัวดำเนินการทางคณิตศาสตร์ มี 5 ตัว คือ บวก ลบ คูณ หาร มอดูลัส ( + — * / % ตามลำดับ)
- มอดูลัสคือการหาเศษของการหาร ใช้ได้กับจำนวนเต็มเท่านั้น
- มอดูลัส คือ เครื่องหมายที่ให้ผลลัพธ์เป็น เศษของการหาร คือ 13%5 ได้ 3
- ผลลัพธ์ของนิพจน์ จะมีชนิดข้อมูล ตามชนิดข้อมูลที่ใหญ่ที่สุดของตัวถูกดำเนินการ
−int x =6; float y = 2.0;
−x*5 ผลลัพธ์ที่ได้คือ นิพจน์ของ int
−x/5 ผลลัพธ์ที่ได้คือ นิพจน์ของ int (เลขทศนิยมจะหายไป)
−x*y ผลลัพธ์ที่ได้ คือ นิพจน์ของ float
ตัวอย่าง
จากคำสั่งต่อไปนี้
int a,b,c;a = 2;b = 3;c = a + b;
จงหาค่าของตัวแปร c
ตอบ C = 5
ตัวดำเนินการทางคณิตศาสตร์ (Arithmetic Operator)
ลำดับของตัวดำเนินการ
ตัวอย่าง การหาค่าของนิพจน์ต่อไปนี้
ความแตกต่างของเครื่องหมาย = และ ==
เครื่องหมาย = เป็นตัวกำหนดค่า
เครื่องหมาย == เป็นเครื่องหมายเปรียบเทียบ
ตัวอย่างเช่น point = 30;
หมายถึง เป็นการกำหนดค่าให้กับตัวแปร point ให้มีค่าเท่ากับ 30
point == 30;
หมายถึง เป็นการตรวจสอบว่าค่า point มีค่าเท่ากับ 30 หรือไม่
ตัวดำเนินการเพิ่มค่าและตัวดำเนินการลดค่า
(Increment & Decrement)
- ตัวดำเนินการ ++ จะบวกหนึ่งเข้ากับตัวแปรที่ถูกดำเนินการ
- ตัวดำเนินการ — จะลบหนึ่งออกจากตัวแปรที่ถูกดำเนินการ
ตัวอย่าง
//increment.c
#include <stdio.h>
int main()
{
int a = 2,b,c;
b = ++a;
printf(“b= %d a= %d\n”,b,a);
c = b++;
printf(“b= %d c= %d\n”,b,c);
return 0;
}
แสดงผล
b= 3 a= 3
b= 4 c=3
การแปลงชนิดข้อมูล
การแปลงชนิดข้อมูล เกิดขึ้นได้ 3 ทางด้วยกัน
- ทางที่ 1 การแปลงผ่านเครื่องหมาย =
int a = 3;
double y=a;
printf(“y %f”,y); // 3.000
- ทางที่ 2 การแปลงเมื่อเกิดการดำเนินการ
− เมื่อ a * b โดย a และ b เป็น intint a = 3,b,c;
float y=1.5;
printf(“%f”,(a*y)); //4.5000
•ทางที่ 3 การแปลงผ่านการทำคาสติ้ง (Casting)
− บังคับให้เป็นชนิดที่ต้องการ
int a=22, b=10; float x = (float)a/b;
ตัวอย่าง Casting
//cast.c
#include <stdio.h>
int main()
{
int a =10, b=4;
double x1,x2,x3;
printf("a/b= %d \n",(a/b));x1=a/b;
printf("x1= %f \n",x1);x2= (double)(a/b);
printf("x2= %f \n",x2);x3= (double)a/b;
printf("x3= %f \n",x3);return 0;}
ผลลัพธ์
ตัวดำเนินการประกอบ (Compound Operator)
- เป็นรูปย่อของตัวดำเนินการและตัวแปรที่ถูกดำเนินการ
ตัวอย่างเช่น
x = x + 1; เขียนแทนได้ด้วย x += 1;
a = a — b; เขียนแทนได้ด้วย a -= b;
x = x * 2; เขียนแทนได้ด้วย x *= 2;
y = y / 5; เขียนแทนได้ด้วย y /= 5;
ตัวอย่างจากคำสั่งต่อไปนี้int num1 = 3,num2 = 1;
num1 *= 4;
num2 += num1–2;
จงหาค่าของตัวแปร num2
ตอบ num 2= 11
ตัวอย่างการใช้ตัวแปร ( ภายใน )
#include <stdio.h>void my_func();
int main()
{
double x = 1.1;
my_func();
printf(“In main x = %f\n”,x);
return 0;
}void my_func()
{
double x;
x = 2.5;
printf(“In my_func x = %f\n”,x);
}
ผลลัพธ์
ตัวอย่างการใช้ตัวแปร ( ภายนอก )
#include <stdio.h>double x;
void my_func();
int main()
{
x = 1.1;
my_func();
printf(“In main x = %f\n”,x);
return 0;
}void my_func()
{
x = 2.5;
printf(“In my_func x = %f\n”,x);
}
ผลลัพธ์
โอเค มาถึงตรงนี้ก็ ผู้อ่านก็คงจะเหนื่อยเเล้ว คนเขียน ก็เริ่ม เหนื่อยเเล้วเหมือนกัน เอาเป็นว่า Ep.1 ก็พอไว้เเค่นี้ก่อนน่ะ ส่วน Ep ต่อไป ก็น่าจะเป็นเรื่อง การแสดงผลและการรับค่า น่ะครับ เอาเป็นว่าก็ลองเอาโค๊ดไปลองหัดเขียนหรือหัด แกะโค๊ดบ่อยๆน่ะครับ สำหรับคนที่พึ่งศึกษาก็อย่าพึ่งท้อน่ะครับ เพราะ ภาษา C++ ถ้าศึกษา และทำความเข้าใจเกี่ยวกับกระบวนการคิด และลักษณะการเขียนโปรแกรม ก็จะทำให้เข้าใจภาษา อื่น ๆ ได้ง่ายยิ่งขึ้นครับ เอาเป็นว่าก็ขอเป็นกำลังใจให้น่ะครับ Ep ถัดไปจะมาเมื่อไหร่ไม่เเน่ใจน่ะครับ อยู๋ที่ความขยัน ของผมเองครับ ก็ขอขอบคุณที่อ่านมาถึงตรงนี้น่ะครับ ขอบคุณมากๆ ครับผม 😊
เอกอ้างอิง
- นราธร สังข์ประเสริฐ, เอกสารประกอบการบรรยายวิชา 04–511–101 การโปรแกรมคอมพิวเตอร์, คณะวิศวกรรมศาสตร์, มหาวิทยาลัยเทคโนโลยีราชมงคลศรีวิชัย , 2558
- Sites.google.com, “รหัสเทียม Psuedo Code — Programming”, 2016. [Online]. Available: https://sites.google.com/site/programmingm42/-rhas-theiym-psuedo-code. [Accessed: 17- Jan- 2016].
- Sites.google.com, “การแก้ปัญหา — Programming”, 2016. [Online]. Available: https://sites.google.com/site/programmingm42/kar-kae-payha. [Accessed: 17- Jan- 2016].