 |
<script language="JavaScript" src="http://www.vcharkarn.com/javafeed/article/18065" type="text/javascript"></script> |
|
|
การเขียนโปรแกรมภาษา C เบื้องต้น (Introduction to C Programming)
บทเรียนอย่างง่าย เพื่อเพิ่มความรู้และความเข้าใจ ที่จำเป็นต่อการเป็นโปรแกรมเมอร์มืออาชีพในอนาคต คนที่จะมีใจรัก ที่จะก้าวไปบนถนนแห่งการพัฒนาฝีมือและฝึกฝนการเขียนโปรแกรมด้วยตัวเอง
post ครั้งแรก: Thu 29 March 2007, 11:49 am ปรับปรุงล่าสุด: Wed 4 April 2007, 4:03 pm
|
หน้าที่ 2 - ตัวแปร (Variables)
ตัวแปร (Variables)
ตัวแปรจะเป็นชื่อที่ใช้ในการบอกจำนวนหรือปริมาณ ซึ่งสามารถที่จะทำการเปลี่ยนแปลงจำนวนได้ด้วยโปรแกรมคอมพิวเตอร์ การตั้งชื่อตัวแปร จะต้องตั้งชื่อให้แตกต่างไปจากชื่อของตัวแปรอื่นๆ ยกตัวอย่างชื่อของตัวแปร ได้แก่ x, y, peter, num_of_points และ streetnum เป็นต้น โดยปกติการเขียนโปรแกรมที่ดี ควรจะตั้งชื่อตัวแปรให้สอดคล้องกับการทำงานหรือหน้าที่ของตัวแปรนั้นๆ เพราะเมื่อถึงเวลาต้องมาทำการปรับปรุงแก้ไขโปรแกรม จะสามารถทำได้โดยไม่ยากนัก
ในภาษา C หรือ C++ ได้มีกฏในการตั้งชื่อตัวแปรที่สามารถใช้งานได้ดังนี้
- ชื่อตัวแปรจะต้องขึ้นต้นด้วยตัวอักษร
- ชื่อตัวแปรจะประกอบไปด้วย ตัวอักษร ตัวแลข และ _ ได้เท่านั้น
- ชื่อตัวแปรจะต้องไม่ใช่ชื่อ reserved word (ชื่อที่มีการจองไว้แล้ว)
ตัวอย่างของชื่อตัวแปรที่สามารถนำมาใช้ตั้งชื่อได้ ได้แก่
length, days_in_year, DataSet1, Profit95, Pressure, first_one
และตัวอย่างของชื่อ ที่ไม่สามารถนำมาใช้เป็นชื่อตัวแปรได้ ยกตัวอย่างเช่น
day-in-year, 1data, int, first.val เป็นต้น
reserved word (ชื่อที่มีการจองไว้แล้ว)
Reserved words หรือตัวแปรที่ได้จองไว้แล้วนั้น จะประกอบไปด้วยตัวอักษรตัวเล็กทั้งหมด และจะมีความสำคัญสำหรับภาษา C++ และจะไม่นำมาใช้ด้วยวัตถุประสงค์อื่นๆ ตัวอย่างของ Reserved words ได้แก่ and, bool, break, case, catch, char, class, continue, default, delete, do, double, if , else, enum, export, extern เป็นต้น
นอกจากนี้ในภาษา C หรือ C++ ชื่อตัวแปร ที่ประกอบไปด้วยอักษรเล็ก หรือใหญ่ ก็มีความแตกต่างกัน หรือที่เรียกว่า Case sensitive ยกตัวอย่างเช่น
X และ x เป็นตัวแปรต่างกัน
peter และ Peter เป็นตัวแปรต่างกัน
bookno1 และ bookNo1 เป็นตัวแปรต่างกัน
XTREME และ xtreme เป็นตัวแปรต่างกัน
X1 และ x1 เป็นตัวแปรต่างกัน
int และ Int เป็นตัวแปรต่างกัน
การกำหนดชนิดของตัวแปร (Declaration of Variables)
ในภาษา C หรือ C++ (และโปรแกรมในภาษาอื่นๆ) ตัวแปรทุกตัวที่จะมีการเรียกใช้ในโปรแกรมจำเป็นต้องมีการกำหนดชนิดของตัวแปรนั้นๆ ก่อนที่จะทำการเรียกใช้ตัวแปร
การกำหนดชนิดของตัวแปรมีวัตถุประสงค์หลัก 2 ประการได้แก่
- เป็นการบอกชนิด และตั้งชื่อตัวแปรที่จะเรียกใช้ ชนิดของตัวแปรจะทำให้คอมไพเลอร์สามารถแปลคำสั่งได้อย่างถูกต้อง (ยกตัวอย่างเช่น ใน CPU คำสั่งที่ใช้ในการบวกตัวเลขจำนวนเต็ม 2 จำนวน ย่อมแตกต่างจากคำสั่งที่จะบวกจำนวนจริง 2 จำนวนเข้าด้วยกัน)
- ชนิดของตัวแปร ยังเป็นบ่งบอกคอมไพเลอร์ให้ทราบว่าจะต้องจัดเตรียมเนื้อที่ให้กับตัวแปรตัวนั้นมากน้อยเท่าใด และจะจัดวางตัวแปรนั้นไว้แอดเดรส (Address) ไหนที่สามารถเรียกมาใช้ใน code ได้
สำหรับในบทความนี้จะพิจารณาชนิดตัวแปร 4 ชนิดที่ใช้กันมากได้แก่ int, float, bool และ char
int ชนิดตัวแปรที่สามารถแทนค่าจำนวนเต็มได้ทั้งบวกและลบ โดยปกติสำหรับคอมพิวเตอร์ทั่วไป คอมไพเลอร์ จะจองเนื้อที่ 2 ไบต์ สำหรับตัวแปรชนิด int จึงทำให้ค่าของตัวแปรมีค่าตั้งแต่ -32768 ถึง +32768
ตัวอย่างของค่า int ได้แก่ 123 -56 0 5645 เป็นต้น
floatชนิดของตัวแปรที่เป็นตัวแทนของจำนวนจริง หรือตัวเลขที่มีค่าทศนิยม ความละเอียดของตัวเลขหลังจุดทศนิยมขึ้นอยู่กับระบบคอมพิวเตอร์ โดยปกติแล้ว ตัวแปรชนิด float จะใช้เนื้อที่ 4 ไบต์ นั่นคือจะให้ความละเอียดของตัวเลขหลังจุดทศนิยม 6 ตำแหน่ง และมีค่าอยู่ระหว่าง -1038 ถึง +1038
ตัวอย่างของค่า float ได้แก่ 16.315 -0.67 31.567
bool ชนิดของตัวแปรที่สามารถเก็บค่าลอจิก จริง (True) หรือ เท็จ (False) ตัวแปรชนิดนี้ เป็นที่รู้จักกันอีกชื่อคือ ตัวแปรบูลีน (Boolean)
ตัวอย่างของตัวแปรชนิด bool ได้แก่ 1 0 true false (เมื่อ 1 = true และ 0 = false)
char เป็นชนิดตัวแปรที่เป็นตัวแทนของ ตัวอักษรเพียงตัวเดียว อาจเป็นตัวอักษร ตัวเลข หรือตัวอักขระพิเศษ โดยปกติตัวแปรชนิดนี้จะใช้เนื้อที่เพียง 1 ไบต์ ซึ่งจะให้ตัวอักษรในรูปแบบที่แตกต่างกันได้ถึง 256 ค่า การเขียนรูปแบบของ char หลายๆ ตัว โดยปกติ จะอ้างอิงกับ American Standard Code for Information Interchange (ASCII)
ตัวอย่างของตัวแปรชนิด char ได้แก่ '+' 'A' 'a' '*' '7'
การกำหนดชนิดของตัวแปร สามารถเขียนได้อยู่ในรูป
type identifier-list;
เมื่อ type บ่งบอกชนิดของตัวแปร ส่วน identifier-list เป็นการกำหนดชื่อของตัวแปร ซึ่งอาจจะมีมากกว่า 1 ตัวแปร และจะแยกตัวแปรแต่ละตัวออกจากกันด้วยเครื่องหมาย comma (,)
ตัวอย่าง รูปแบบของการกำหนดชนิดของตัวแปร ได้แก่
int i, j, count;
float sum, product;
char ch;
bool passed_exam;
มาถึงตอนนี้ เราก็จะสามารถปรับปรุงการเขียนโปรแกรมแบบง่ายๆ ได้ดังนี้
#include
main()
{
int its_price;
printf("How much is that ? ");
scanf("%d", &its_price);
printf("oh! %d ?, hmmm...., too expensive\n\n",its_price);
}
จาก code ข้างบน ผู้อ่านจะเห็น %d เมื่อมีการเรียกใช้ฟังก์ชัน scanf และ printf ทั้งนี้ %d จะเป็น format ที่ใช้บ่งบอกชนิดของตำแหน่ง (Place Holders) ที่จะมีการส่งข้อมูล โดยในที่นี้ %d หมายถึงตำแหน่งของจำนวนเต็ม หรือ int นั่นเอง ตัวอย่างของ Place Holders อื่นๆ สามารถแสดงได้ดังตาราง
คราวนี้ลองมาดูตัวอย่างของการใช้ Place Holders
printf("C=%f, F=%f",cel,fah);
printf("He wants to score %d goals today",9);
เมื่อ % เป็นการบ่งบอกตำแหน่งเริ่มต้นของ Place Holder จากนั้น
ตัวอักษร f ตัวแรก จะบ่งบอกถึง ตัวแปรcel ว่ามีค่าเป็นจำนวนจริง (Float)
ส่วน f ตัวทีสอง จะบ่งบอกคอมไพเลอร์ว่า ตัวแปร fah ก็มีค่าเป็นจำนวนจริงเช่นกัน
นอกจากนี้ Place holder %d และ %f ยังสามารถใช้กับการกำหนดตำแหน่งตัวเลขตามต้องการได้ ยกตัวอย่างเช่น สมมุติให้ x=235; และ y=6.54321;
การให้กำหนดค่าตัวแปร (Variable Assignment)
เราสามารถกำหนดค่าให้กับตัวแปรได้ ด้วยเครื่องหมาย = ยกตัวอย่างเช่น
int name; // กำหนดตัวแปร name ที่เก็บค่าจำนวนเต็ม
name = 23; // กำหนดให้ตัวแปร name มีค่าเป็น 23
ในขณะเดียวกัน เราสามารถใช้เครื่องหมาย = ระหว่างตัวแปรกับตัวแปร หรือตัวแปรกับจำนวนใดๆ ได้ อาทิเช่น
change = x1 - x2;
mean = (x1 + x2)/2;
x = x + 1;
ตอนนี้เราลองมาเขียนโปรแกรมอย่างง่าย เพื่อทำการแก้ปัญหาทางคณิตศาสตร์ ด้วยการแปลงค่า อุณหภูมิ ในหน่วยของ ฟาเรนไฮต์ เป็น เซลเซียส เมื่ออุณหภูมิในหน่วยฟาเรนไฮต์ มีค่า = 85 และเป็นที่ทราบกันดีว่า ความสัมพันธ์ระหว่าง องศาฟาเรนไฮต์ และ เซลเซียส สามารถเขียนได้อยู่ในรูปของสมการ
การเขียนโปรแกรม เพื่อแก้ปัญหา การแปลงค่า 85 ฟาเรนไฮต์ให้เป็นเซลเซียส สามารถเขียนได้ดังนี้
#include
void main()
{
float F;
float C;
F = 85;
C = 5*(F-32)/9;
printf("the result is %f",C);
}
อีกตัวอย่าง ของโปรแกรม การบวกค่าจำนวนเต็ม 2 จำนวนเข้าด้วยกัน แล้วแสดงผลลัพธ์ออกทางหน้าจอ การเขียนโปรแกรมเพื่อแก้ปัญหานี้ สามารถเขียนได้ดังนี้
#include
void main()
{
int N1, N2, Sum;
printf("please input an integer number : ");
scanf("%d",&N1);
printf("please input another integer number : ");
scanf("%d",&N2);
Sum = N1 + N2;
printf("so, %d + %d = %d",N1,N2,Sum);
}
จากตัวอย่างการเขียนโปรแกรมข้างต้น จะเห็นว่ามีการคำนวณทางคณิตศาสตร์เข้ามาเกี่ยวข้อง คราวนี้เราลองมาดู การคำนวณในภาษา C กันว่าจะเขียนกันได้อย่างไรบ้าง
*หมายเหตุ
งานเขียนชิ้นนี้ ได้รับการคุ้มครองสิทธิตามพระราชบัญญัติคุ้มครองสิทธิทางปัญญา โดยลิขสิทธิเป็นของผู้เขียน ที่ให้เกียรตินำเผยแพร่ผ่าน วิชาการ.คอม เรามีความยินดีและอนุญาตให้ทำซ้ำหรือเผยแพร่ต่อเพื่อประโยชน์ทางการศึกษาเท่านั้น กรุณาให้เกียรติผู้เขียน โดยอ้างชื่อผู้เขียนและ วิชาการ.คอม (www.vcharkarn.com) ทุกครั้งที่ทำการเผยแพร่ต่อ ห้ามนำส่วนหนึ่งส่วนใดไปเผยแพร่ต่อในสื่อที่เอื้อประโยชน์ทางธุรกิจก่อนได้รับอนุญาต ขอขอบคุณที่ร่วมกันช่วยสร้างให้สังคมไทยเป็นสังคมแห่งปัญญา
จำนวน 36 ความเห็น, หน้า่ |
1| -
2-
ความเห็นเพิ่มเติมที่ 19 19 ธ.ค. 2550 (20:29) ตอบ ค.ห. ที่ 18 อ่ะคับ
ที่คอมไพล์ไม่ผ่านก็คงจะมาจากการเขียนรูปแบบของโปรแกรมผิด
ซึ่งอันที่จริงมันก็คงจะเป็นแค่เส้นผมบังภูเขาอยู่เท่านั้นแล
ค่อยๆหาจุดผิดพลาดนะคับ แล้วความผิดพลาดในคร้งนี้จะทำให้คุณจำมันจนขึ้นใจ
เป็นกำลังใจให้คับ
ความเห็นเพิ่มเติมที่ 20 22 ธ.ค. 2550 (12:17) ความเห็นที่ 18 นั้น ที่เขียนไม่ผ่าน อยู่บรรทัดแรกเลยครับ
#include
ตามจริงจะต้องเป็น
#include<ชื่อไดเรกทอรี่>
ชื่อไดเรกทอรี่ ก็มีเยอะ แต่ที่สำคัญที่สุดก็ stdio.h
ส่วนอื่นๆก็ยังมีอีกเยอะ ลองใช้ help ใน Turbo C ดูครับ (แบบDosนะ)
แบบDos จะใช้ง่ายที่สุดแล้ว ที่ผมเขียนมา
ความเห็นเพิ่มเติมที่ 21 24 ธ.ค. 2550 (23:19) เขียนโปรพอได้บ้างครับแต่ติดที่ภาษาแบบ งง ม๊ากมากทำงัยดี
ความเห็นเพิ่มเติมที่ 22 30 ธ.ค. 2550 (23:11) ขอบคุณมากๆครับ เพิ้งหัดศึกษา
ความเห็นเพิ่มเติมที่ 23 10 ม.ค. 2551 (04:00) คห ที่ 14
ใช้ software จาก หุ่นยนต์นั้นแหละ ง่ายที่สุด ครับ
เพราะผมก็ทำเหมือนกัน มันก็ละเอียดเช่นกันครับ
ปัญหาของหุ่นยนต์อยู่ที่ตัวแปรของอุปสรรคที่ไม่คงที่ครับเช่น
กำหนดให้ แสงน้อยเดินซ้าย ปรากฏว่า บริเวณนั้น มีหลอดไฟส่องอยู่ไม่ตรงตามที่กำหนดไว้
หุ่นยนต์ก็ผ่านไปครับ
เล็งแม่นๆ ตั้งค่าให้กว้างที่สุดเท่าที่จะทำได้
สำคัญอีกส่วนการออกแบบ ครับต้องให้เซ็นเซอร์ เสถียรไว้ก่อน ไม่โยกไปมา เพราะอ่านค่าแปลกไปครับ
ผมลองมาแล้ว ถ้าแสงบนสนามไม่เสถียรแล้วไม่แก้ไขหละก้อ
ดวงล้วนๆ ครับ
ความเห็นเพิ่มเติมที่ 24 21 ก.พ. 2551 (10:38) เติมตัวเลขเข้าไป ๒ จำนวน แล้วรายงานได้ว่าตัวเลขนั้นเท่ากันหรือไม่เท่ากัน
เขียนอย่างไรครับ
ความเห็นเพิ่มเติมที่ 25 16 มี.ค. 2551 (10:15)
ต้องขอขอบคุณเป็นอย่างมากเลยครับ ผมเคยเรียนมานานมากแล้ว ไม่รู้ว่าในสมองจะเหลือความจำบ้างหรือเปล่า ขอบคุณอีกครั้ง
ความเห็นเพิ่มเติมที่ 26 31 มี.ค. 2551 (15:56) ก็น่าสนใจน๊ะครับ แต่ถ้ายังไงผมแนะนำให้ไปดูเพิ่มเติมที่
citecclub.org แล้วจะได้อะไรเพิ่มขึ้นอีกมายมายมากกว่าที่คุณคิดน๊ะครับ
แค่คุณคิดจาสมัครก็ไม่ธรรมดาแล้ว แต่เนื้อหาแน่นน่าชมอย่างงมาก
เชื่อว่าคุณๆ จะต้องไม่ผิดหวังครับ
Os
ร่วมแบ่งปันความรู้และความเห็นแล้ว 1 ครั้ง - ได้รับดาวแล้ว 150 ดวง - โหวตเพิ่มดาว
ความเห็นเพิ่มเติมที่ 27 23 เม.ย. 2551 (15:21) ขอบคุณมากครับ
ความเห็นเพิ่มเติมที่ 28 15 พ.ค. 2551 (01:24) คุณ ช่วยแจ้งลบความเห็นนี้แล้ว ขอบคุณค่ะ ขอบคุณมากค่ะ ได้ความรู้มากเลย
ตอนนี้มีเรียนเรื่องนี้อยู่แต่เพิ่งเปิดเทอมยังไม่ได้ซื้อหนังสือเลยค่ะ ><"
ความเห็นเพิ่มเติมที่ 29 17 พ.ค. 2551 (13:08) ไม่เคยเข้าไปชมเว็บ ก็ดีครับ
ความเห็นเพิ่มเติมที่ 30 17 พ.ค. 2551 (13:26) ช่วยแนนำตัวprogram run ภาษา ซี
ความเห็นเพิ่มเติมที่ 31 20 พ.ค. 2551 (12:19) ตอบคำถาม นะครับ
คำถามที่ 16 ภาษา C เป็นภาษาโครงสร้างครับ แต่ java ถ้าจะให้ถูกหลักต้องเขียนเป็น OOP ครับ
คำถาม 17 ตัวแปรเกิดจากผู้เขียน สร้างขึ้นมาเองนะครับ ดังนั้น การสร้างขึ้นมาผู้เขียนโปรแกรมต้องจำได้สิครับ ที่คุณว่าหมายถึงคำสั่งป่ะครับ
คำถามที่ 18 คุณเขียนแค่นั้นไม่ได้หรอกครับ คุณต้องใช้ <Stdio.h> ตามหลัง include ด้วยครับ เพราะคุณมีการเรียกใช้ คำสั่งในการแสดงผล printf
คำถามที่ 30 ตัวโปรแกรม TC3 ครับ หรือ Turbo C++ ก็ได้ TC3 นี่ไม่ต้อง install Copy ลงไปแล้วเซ็ตาค่านิดหน่อยใช้ได้เลย ส่วน Turbo C++ install ใช้เหมือนโปรแกรมทั่วไป
goah
ร่วมแบ่งปันความรู้และความเห็นแล้ว 1 ครั้ง - ได้รับดาวแล้ว 50 ดวง - โหวตเพิ่มดาว
ความเห็นเพิ่มเติมที่ 32 4 มิ.ย. 2551 (10:19) การรัน คอมไพเลอร์ ระบบ boardland และระบบ turbo c อันไหนดีก่ากันคับ
ความเห็นเพิ่มเติมที่ 33 4 มิ.ย. 2551 (10:44) ผมก็เพิ่งเคยเขียนภาษา C
ผมจะลองเขียนให้ดูง่ายๆนะคับผิดตรงไหนก็ต้องขอโทษด้วยจริงๆ
#include<stdio.h>
void main()
{
int num1,num2,num3;
char[20] no1;
printf("\t\t\t\============\n");
printf("\t\t\t\t\TEST\n");
printf("\t\t\t\============\n");
printf("NUMBER 1 : ");
scanf("%d",num1);
printf("PLEASE + - * / ");
scanf("%d",no1);
printf("NUMBER 2 : ");
scanf("%d",num2);
{
if no1="+"
printf("ANSWER IS : ",num1+num2);
elseif no1="-"
printf("ANSWER IS : ",num1-num2);
elseif no1="*"
printf("ANSWER IS : ",num1*num2);
else
printf("ANSWER IS : ",num1/num2);
}
ผมว่าน่าจะผิดเยอะช่วยหาที่ผิดหน่อยนะคับ
ความเห็นเพิ่มเติมที่ 34 5 มิ.ย. 2551 (13:39)
ผมเด็กใหม่ แต่อยากเรียนภาษา c คับ ช่วยสอนผมหน่อยอยากเขียนโปรแกรมเป็นคับ "."
ความเห็นเพิ่มเติมที่ 35 9 มิ.ย. 2551 (16:34) กระผมขอขอบคุณเป็นอย่างมากๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆ
ถ้ากระผมเข้าใจกระผมจะไม่ลืมพระคุณเลยขอรับ
ความเห็นเพิ่มเติมที่ 37 17 มิ.ย. 2551 (16:55) สวัสดีครับพี่ๆช่วยผมหน่อยนะครับ ผมอยากเขียนภาษา c
เป็นครับ audsadee@hotmail.com
ความเห็นเพิ่มเติมที่ 38 17 มิ.ย. 2551 (23:32) <P>#include<stdio.h></P>
<P>#include<conio.h></P>
<P>main(){</P>
<P> printf("Hello\nMy name is DotA.\n");</P>
<P> //printf();</P>
<P> printf("Good Bye");</P>
<P> getch();</P>
<P> }</P>
<P> </P>
<P>พอได้ป่าวคับ :)</P>