 |
<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
|
หน้าที่ 3 - การเปรียบเทียบ แบบมีทางเลือก (Selection Structures)
2.การเขียนโปรแกรมแบบมีทางเลือก (Selection Structures)
การเขียนโปรแกรมแบบมีทางเลือก จะสามารถทำให้โปรแกรมสามารถตัดสินใจหรือเปรียบเทียบ จากนั้นก็จะเลือกดำเนินการไปในทิศทางหนึ่งจากสองทิศทาง ขึ้นอยู่กับผลที่ได้จากการเปรียบเทียบนั้น
เงื่อนไข (Condition)
- เป็นตัวกำหนดเงื่อนไขที่ผู้พัฒนาโปรแกรมได้สร้างขึ้นมา
- ผลลัพธ์ที่ได้จากเงื่อนไข จะมีค่า จริงหรือ เท็จ
โครงสร้างของเงื่อนไข (Condition Control Structures)
ประโยคเงื่อนไขสามารถที่จะเขียนให้อยู่ในรูปภาษา C จะเขียนได้ดังนี้
if condition then A else B
ซึ่งหมายความว่า ถ้าเงื่อนไข (condition) มีค่าเป็นจริง ก็จะดำเนินการทำคำสั่ง A มิเช่นนั้นก็จะทำคำสั่ง B
ตัวอย่างของการเขียนโครงสร้างทางเลือกในภาษา C สามารถเขียนได้ดังนี้
if (x < y)
a = x * 2;
else
a = x + y;
ความหมายของ code ดังกล่าว หมายความว่า ถ้า ค่า x มีค่าน้อยกว่า y แล้ว a = x*2
แต่ถ้า x มีค่ามากกว่าหรือเท่ากับ y แล้ว a = x+y นั่นเอง
รูปแบบของเงื่อนไข ส่วนใหญ่จะอยู่ในรูป ตัวแปร โอเปอเรเตอร์ ตัวแปร โอเปอเรเตอร์ที่กล่าวถึงนี้จะมีอยู่ 2 แบบ ด้วยกันคือ โอเปอเรเตอร์สัมพันธ์ (Relational Operator) และ โอเปอเรเตอร์ลอจิก (Logical Operator)
โอเปอเรเตอร์สัมพันธ์ที่ใช้ในภาษา C มีดังต่อไปนี้
if ( condition1 )
statement1 ;
else
if ( condition2 )
statement2 ;
. . .
else if ( condition-n )
statement-n ;
else
statement-e ;
ยกตัวอย่างของโปรแกรม Nested if สามารถเขียนได้ดังนี้
if (x < 0.25)
count1++;
else if (x < 0.5)
count2++;
else if (x < 0.75)
count3++;
else
count4++;
นอกจากรูปแบบของ if-else แล้ว เรายังสามารถใช้เครื่องหมาย ? มาประยุกต์ในการเขียน code เพื่อให้ได้ความหมายเดียวกันกับ if-else ดังแสดงให้เห็นดังนี้
if (x < y)
a = x * 2;
else
a = x + y;
สามารถเขียนได้ในอีกรูปแบบหนึ่งคือ a = x < y ? x*2: x+y ; // ซึ่งจะให้ความหมายเดียวกันกับ code ข้างบนนั่นเอง
ในบางครั้งที่เราต้องเขียนโปรแกรมแบบมีทางเลือก โดยบางครั้งเราต้องการให้มีทางเลือกมากว่า 2 ทาง Nested if เป็นวิธีหนึ่งที่สามารถใช้แก้ปัญหาได้ แต่เพื่อให้ง่ายขึ้น ในภาษา C เราจึงสามารถใช้คำสั่ง switch ได้ โดยรูปแบบการเขียน คำสั่ง switch สามารถเขียนให้อยู่ในรูป
switch (selector)
{
case label1: statement1;
break;
case label2: statement2;
break;
...
case labeln: statementn;
break;
default: statementd; // optional
break;
}
โดยที่ selector จะต้องเป็นจำนวนเต็ม ตัวอักษร หรือผลลัพธ์ของการกระทำที่ให้เลขจำนวนเต็มหรือตัวอักษร ตัวอย่างของการเขียน code โดยมีการเรียกใช้คำสั่ง switch สามารถเขียนได้ดังนี้
switch (i)
{
case 1 : grade = 'A';
break;
case 2 : grade = 'B';
break;
case 3 : grade = 'c';
break;
default : printf("%c not in range", i);
break;
}
โดยหลักการของ switch คือ compiler จะทำการเปรียบเทียบค่าของ selector เทียบกับ label ถ้าไม่ตรงกับ label ใดๆ ก็จะเข้าไปทำในคำสั่งของ default นอกจากนี้ การใส่คำสั่ง break หรือไม่มีคำสั่ง break ก็จะให้ผลลัพธ์ที่แตกต่างกัน ดังแสดงให้เห็นดังตัวอย่างต่อไปนี้ (ทดลอง Run แล้วจะเห็นความแตกต่าง)
การเปรียบเทียบตัวอักษร
คุณผู้อ่านทราบกันหรือไม่ว่า ตัวอักษรสามารถเปรียบเทียบค่ากันได้ เบื้องต้นเราต้องทราบก่อนว่า ตัวอักษรมีค่าอย่างไรกันบ้าง
ตัวอักษรตัวเล็ก a มีค่า 97 ไปจนถึง z มีค่า 122
ตัวอักษรตัวใหญ่ A มีค่า 65 ไปจนถึง Z มีค่า 90
ตัวอย่างของการเปรียบเทียบตัวอักษร สามารถแสดงให้เห็นได้ดังนี้
9 >= 0 มีค่าเป็นจริง (1)
a < e มีค่าเป็นจริง (1)
B <= A มีค่าเป็นเท็จ (0)
a <= A ขึ้นอยู่กับระบบ แต่ส่วนใหญ่ เป็นเท็จ
a <= c && c <= z มีค่าเป็นจริง
คราวนี้เราลองมาดูโจทย์กัน สมมุติว่า เราจะเขียนโปรแกรม เพื่ออ่านค่าตัวอักษร 4 ตัว แล้ว เราต้องการที่จะเปลี่ยนตัวอักษรแต่ละตัว ให้เป็นตัวอักษรใหญ่ หรือเล็กที่ตรงข้ามกับค่าที่รับเข้าไป ยกตัวอย่างเช่น PooH ให้เปลี่ยนเป็น pOOh เราจะเขียนโปรแกรมอย่างไร
คำตอบ วิธีหนึ่งที่สามารถทำได้ คือใช้ Nested-if ดังนี้
#include
void main()
{
char A, B, C, D;
printf("Input 4 characters\n");
scanf("%c %c %c %c", &A, &B, &C, &D);
if((A <= 90)&&(A >= 65)) A = (A - 65) + 97;
else if ((A >= 97)&&(A <= 122)) A = (A-97) + 65;
else A = A;
if((B <= 90)&&(B >= 65)) B = (B - 65) + 97;
else if ((B >= 97)&&(B <= 122)) B = (B-97) + 65;
else B = B;
if((C <= 90)&&(C >= 65)) C = (C - 65) + 97;
else if ((C >= 97)&&(C <= 122)) C = (C-97) + 65;
else C = C;
if((D <= 90)&&(D >= 65)) D = (D - 65) + 97;
else if ((D >= 97)&&(D <= 122)) D = (D-97) + 65;
else D = D;
printf("The answer is %c %c %c %c\n", A, B, C, D);
*หมายเหตุ
งานเขียนชิ้นนี้ ได้รับการคุ้มครองสิทธิตามพระราชบัญญัติคุ้มครองสิทธิทางปัญญา โดยลิขสิทธิเป็นของผู้เขียน ที่ให้เกียรตินำเผยแพร่ผ่าน วิชาการ.คอม เรามีความยินดีและอนุญาตให้ทำซ้ำหรือเผยแพร่ต่อเพื่อประโยชน์ทางการศึกษาเท่านั้น กรุณาให้เกียรติผู้เขียน โดยอ้างชื่อผู้เขียนและ วิชาการ.คอม (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>