ภาษา c - prince of songkla universitystaff.cs.psu.ac.th/noi/cs344-202/doc/c.doc · web...
TRANSCRIPT
ภาษา C
Data type ภาษา C กำาหนดใหมรปแบบของขอมลหลายชนดดวยกน การกำาหนดชนดของตวแปร (Data
หรอ Variable) จะเปนการกำาหนดขนาดของ memory ทใชแทนตวแปรนนๆ ดวย ชนด
ของตวแปรทใชกนโดยทวไปคอ int char float และ double
Data type คำาอธบาย จำานวน memory ทใชกนโดยทวไป
int char float double
แทนตวแปรจำานวนเตมแทนตวแปรชนดตวอกษรตวเลขจำานวนทศนยมตวเลขจำานวนทศนยมซงมจำานวน
ทศนยมเปนสองเทาของ float
2 byte1 byte4 byte8 byte
นอกจากนยงมตวแปรอยางอนอกเชน short ,long ,signed และ unsigned
2. Constant (คาคงท) การประกาศตวแปรตางๆ ในภาษา c เปนเพยงการประกาศชอและชนดของตวแปรทจะใชใน
โปรแกรมเทานน ไมไดกำาหนดคาเรมตนใหแตอยางใด อยางไรกตาม ตวแปรเหลานสามารถ กำาหนดเปนคา คงทได ตามหลกการประกาศคาคงทของตวแปร เชน การกำาหนดคาคงทของตวแปรชนดตวเลข จะตอง
ประกอบดวยตวเลขเพยงอยางเดยว ไมมเครองหมายอนใดเชน . (ทศนยม) หรอ , (เครองหมายวรรค
ตอน) อาจมเพยงเครองหมาย - (ลบ) นำาหนาไดอยางเดยว การประกาศคาคงทของขอมลชนดตางๆ จะแตกตางกนในรายละเอยดขนอยกบชนดของตวคงท
ดงน
2.1 คาคงทชนด integer (integer constant) แบงออกได
เปน 3 ชนดคอ
2.1.1 คาคงทชนดเลขฐานสบ (Decimal constant)- ประกอบดวยตวเลข 0-9 - ถาประกอบดวยตวเลขมากกวาหนงตำาแหนง ตวเลขตำาแหนงแรกจะตองไมเปน 0 (ศนย)
ตวอยาง
0 1 743 5480 9219
ตวอยางทผด
10.2 15,32110 20 30
(มทศนยม)( มเครองหมาย ,)(มชองวางระหวางตวเลข)( มเครองหมาย -)
123-4560900
( นำาหนาดวยเลข 0)
2.1.2 คาคงทชนดเลขฐานแปด (Octal integer) ประกอบดวยเลข 0 - 7 ตวเลข
ตวเลขตวแรกตองเปน 0 เสมอ
ตวอยาง
00107430777
ตวอยางทผด
743 05280
0777.77
ไมไดนำาหนาดวย 0 ประกอบดวยเลข 8
ประกอบดวยทศนยม
2.1.3 คาคงทชนดเลขฐานสบหก (Hexadecimal integer)- ประกอบดวย 0-9 และตวเลข A-F หรอ a-f เมอ A (หรอ a) - F ( หรอ
f) คอ คา 10-15 - เขยนนำาหนาดวย 0X เสมอ
ตวอยาง
0X10X7FFF0xabcd
ตวอยางทผด
0X12.340BE380X.46FF0XDEFG
ประกอบดวยทศนยม
ไมม Xประกอบดวยทศนยม
ประกอบดวย 'G'
2.1.4 คาคงทชนดทศนยม (floating point constant)
คอคาคงทฐานสบทประกอบดวย ตวเลขจำานวนเตม และเลขทศนยม เขยนโดยการใชเครองหมาย
ทศนยม (.) คน เชน
0.1.0.287.504
หรอการใชเครองหมาย exponential (E หรอ e) เชน
2E-80.006e-31.6667E+8
ตวอยางทผด
11,000.02E+10.23E 10
ไมมทศนยม
มเครองหมาย , ตวเลขหลง E ตองเปนจำานวนเตม
มชองวางระหวางตวเลข
2.1.5 คาคงทชนดตวอกษร (Character constant) คาคงทตวอกษรประกอบดวยตวอกษรเพยงตวเดยว อยในเครองหมาย ' '
ตวอยาง
'A''X''Z'' ''?'
2.1.6 Escape Sequence ตวอกษรพเศษบางตวทมความหมาย เฉพาะในภาษา C เขยนดวยเครองหมาย \ (Back
Slash) และตามดวยตวอกษรอกตวหนง ทำาใหเกดความหมายพเศษดงตวอยาง
Escape Sequence ความหมาย
\a\b\t\v\n\f
BackspaceHorizontal tabVertical tabNewlineForm feed
\r\"\'\?\\\0
Carriage returnQuotation markApostropheQuestion markBackslashNull
2.1.7 String Constant ( คาคงทชนด string) เปนคาคงทชนดตวอกษรหลายตว (String) เขยนดวยตวอกษรอยางนอยหนงตวขนไป อย
ภายใตเครองหมาย " "ตวอยาง
"green""Prince of Songkla University""20-30-571""$19.95""2*3-15"" "" "
3. ตวแปร (Variable) ตวแปรใชสำาหรบ การเรยกแทนคาชนดตางๆ ในโปรแกรม เชน ตวแปรอยางงายทใชเรยกแทนคา
ขอมลชนดตางๆ เชน
int a,b,c; ตวแปรชนด integerchar d; ตวแปรชนด character
การกำาหนดชอของตวแปร และชนดของตวแปรดงตวอยาง ขางตนนเรยกวา การประกาศชอตวแปร เมอตวแปรใดๆ ไดรบการประกาศชอและชนดแลว สามารถกำาหนดคาใหกบตวแปรนนๆ ไดหลายวธ เชน
กำาหนดคาโดยตรง โดยการใชเครองหมาย = เชน
a=3b=5c=2d='w'
กำาหนดคาทไดจากการคำานวณ เชน
a=b-ca=10*2
4. การประกาศตวแปร (Variable Declaration) การประกาศตวแปร คอ การกำาหนดชนด และชอตวแปรตางๆ ตวแปรทกตวในโปรแกรมภาษา C
ตองไดรบการประกาศกอนการเรยกใชเสมอ
รปแบบการประกาศชอตวแปร
data type variable name;หรอ data type variable name1, variable
name2, … ; เชน
int a;int b,c,d;float root1, root2,square;char flag;short int x;long int y;
5.Expression คอการแทนคา หรอการหาคาของ data ตางๆ เชานตวเลขหรอตวแปร
ชนดตางๆ expression อาจจะประกอบดวยสมาชกเพยงตวเดยว เชนคา constant ตวแปร และอาจจะประกอบดวยตวแปรหลายตว สมพนธกนดวยเครองหมาย (operator) ตางๆ
ตวอยาง
a+b เมอ a และ b คอตวแปร และ + คอ operatorx=yc=a+bx<=y ใหคา true (ไมใช 0) ถา x นอยกวา หรอเทากบ y และใหคา false
(0) เมอ x มากกวา yx==y ใหคา true เมอ x มคาเทากบ y มฉะนนจะเปน falseI=I+1 เปนการเพมคาของตวแปร I ดวย 1
Expression ยงสามารถใชแทนคา logical operation ซงใหคา true หรอ false (อยางใดอยางหนง) อยางไรกตามเงอนไข (condition) ในภาษา C จะมคา
เปน 1 สำาหรบคา true และ 0 สำาหรบคา false
6.Statement
Statement ในภาษา C คอคำาสงทใชสงใหคอมพวเตอรทำางานตางๆ ซงแบงออกไดเปน 3 ประเภทคอ expression statement, compound statement และ control statement ดงรายละเอยดดงน
6.1 Expression Statement
เปนการเขยนคำาสงในโปรแกรม ซงประกอบดวย expression และเครองหมาย
semicolon(;) เชน
a=3; ----------- b=x+y; ----------- printf("This line is also an expression"); -----------
statement และ บางครงเรยกวา assignment statement
6.2 Compound Statement คอการนำาเอา expression statement มารวมกนเปนกลมเดยวกน ภายใต
เครองหมาย { และ } เชน
{a=b;c=a+10;printf("Value of c is %d\n",c);
}6.3 Control Statement
เปน statement อกรปแบบหนงของภาษา C ทใชในการควบคมการทำางานของ
โปรแกรมตามเงอนไขตางๆ ทกำาหนดขน ( รายละเอยดดไดจากบทตอไปเรอง Control Statement) ตวอยาง Control Statement ในภาษา C เชน
forwhiledo..whileswitch etc
7.Symbol Constant เปนการกำาหนดคาคงทใหกบคาตางๆ โดยปกตจะกำาหนดในตอนเรมตนของโปรแกรม คาคงทและชอ
เหลาน จะไดรบการแทนทในชวงของการคอมไพลโปรแกรม
รปแบบการกำาหนด
#define name text
เมอ name คอ ชอทใชเรยก (Symbolic name) โดยปกตจะเขยนดวยตวอกษรตวใหญ
text คอ คาทตองการกำาหนดใหกบ Symbolic name น
Note ไมมเครองหมาย ; ในบรรทด #define น
ตวอยาง
#define PI 3.141593#define TRUE 1#define FALSE 0#define MYFRIEND "Susan"
ตวแปรคาคงทนสามารถนำาไปใชใน expression ตางๆ ได เชน
area = PI * radius * radius;
8.Operator and ExpressionsOperator แบงออกไดเปนหลายชนดไดดงน
Arithmetic operatorUnary operatorRelational and logical operatorAssignment operatorCondition operator
8.1 Arithmetic operator ประกอบดวยเครองหมายทใชในการคำานวณ ทางคณตศาสตรคอ
+ ( เครองหมาย + ) แทนการบวก
- ( เครองหมาย - ) แทนการลบ
* ( เครองหมาย * ) แทนการคณ
/ ( เครองหมาย / ) แทนการหาร
% ( เครองหมาย % ) การหาคาเศษเหลอ (modulus operator)
ขอสงเกต ไมม Exponential Operator ในภาษา C แตม library function ( เชน pow() ) สำาหรบการหาคายกกำาลง (Exponential)
เครองหมายการคำานวณทางคณตศาสตรเหลานและเครองหมายอนๆ ทจะไดกลาวถง ตอไป มลำาดบ
ความสำาคญไมเทากน เครองหมายทมลำาดบความสำาคญ (precedence) สงจะไดรบการคำานวณ
( หรอการ evaluate) กอนเสมอเชน
เครองหมาย * และ / จะมลำาดบความสำาคญมากกวาเครองหมาย + และ - โดยท * และ / จะมลำาดบความสำาคญเทากน ( และในทำานองเดยวกนทเครองหมาย + และ - มลำาดบความสำาคญเทากน)
ในกรณทเครองหมายมลำาดบความสำาคญเทากน ภาษา C จะกำาหนดลำาดบ ของการทำางานไวในรป แบบทคลายกบการคำานวณทางคณตศาสตร ทวไปเชน
ถาลำาดบความสำาคญของเครองหมายทางคณตศาสตรเทากน จะทำาการคำานวณจากซายไปขวา
อยางไรกตามถาผใชตองการเปลยนแปลงลำาดบความสำาคญของเครองหมายตาง ๆ ทำาไดโดยใช วงเลบ เชน
a – b / c * d จะมความหมายทางคณตศาสตรคอ a - [(b / c) * d ] แตสามารถเปลยนลำาดบการ
ทำางานไดโดยใชวงเลบ ( ) เชน
(a - b) / c * d หรอ (a - b) / (c * d)
8.2 Unary Operator คอ operator ทม operand (ตวถกกระทำา) เพยงตวเดยวเชน Unary
minus คอ
-743-0.2-(x+y)
หรอ increment operator คอ ++ ( เปนการเพมคาดวย 1) และ decrement operator คอ -- ( เปนการลดคาดวย 1)
ตวอยาง
++I ( หรอ I++) จะมคาความหมายเทากบ I = I + 1 และ - -I (หรอ I- - ) มความหมายเทากบ I = I – 1
Note ตำาแหนงของเครองหมาย ++ และ - - จะมผลตอการเปลยนแปลงคาของตวแปร นน
คอ ถาเครองหมาย ++ หรอ - - อยขางหนาตวแปร คาของตวแปรนนจะถกเปลยน (เพมขนหรอลด
ลง) กอนจะถกนำาไปใช แตถาเครองหมายน อยขางหลงตวแปร คาเดมของตวแปรจะถกนำาไปใชกอน แลวคอยเปลยนแปลง
ตวอยาง ถาให
I = 1; ------------Printf("I = %d\n",i); ------------Printf("I = %d\n",++i); ------------Printf("I = %d\n",i); ------------
เมอชดของคำาสงนไดรบการ execute ผลลพธทไดคอ
I = 1 ( จากบรรทดท )I = 2 ( จากบรรทดท )I = 2 ( จากบรรทดท ) และถาให
I = 1; ------------Printf("I = %d\n",i); ------------Printf("I = %d\n",I++); ------------Printf("I = %d\n",i); ------------
ผลลพธทไดคอ
I =1 ( จากบรรทดท )I = 1 ( จากบรรทดท )I = 2 ( จากบรรทดท )
8.3 Relational and logical Operator
เปนเครองหมายทางคณตศาสตร ทใหคาของการทำางานเปน คาจรง (true) หรอ
เทจ(false) โดยทคา true ในภาษา C จะมคาเปนหนง สวนคา false คอคาศนย
เครองหมายทใชสำาหรบ Relational expression คอ
> แทนการเปรยบเทยบคามากกวา
>= แทนการเปรยบเทยบคามากกวาหรอเทากน
< แทนการเปรยบเทยบคานอยกวา
<= แทนการเปรยบเทยบคานอยกวาหรอเทากน
== แทนการเปรยบเทยบคาเทากน
!= แทนการเปรยบเทยบคาไมเทากน
นอกจากนยงมเครองหมาย && แทน logical AND และ
|| แทน logical OR โดยท && จะใหคาจรง เมอ operand ทงสองมคาจรง
|| จะใหคาเทจ เมอ operand ทงสองมคาเทจ
เชน 101 && 111 จะไดผลลพธเปน 101 101 || 111 จะไดผลลพธเปน 111 หรอจากตวอยางในตารางขางลาง
1 01 1 0
AN
OR
0 0 0
1 01 1 10 1 0
ตวอยาง
ถาให I =7 c = w' และ f = 5.5
Expression Interpretation
Value
(I >= 6) && (c == 'w')(f > 11) || (I > 100)(c != ‘p') || ((I + I) <= 10)
TrueFalseTrue
101
นอกจากนยงม unary operator ! ซงแทนคำาปฏเสธ (not ) ของ
expression นนๆเชน
Expression
Interpretation
Value
f > 5!( f >
5)I <= 3!( I <=
3)I > (f +
1)!( I > (f + 1))
FalseTrueFalseTrueTrueFalse
010110
8.4 Assignment Operator
คอ การใชเครองหมาย = เพอใชในการกำาหนดคาสดทายใหกบตวแปรทางซายมอ โดยมรปแบบ ดงนคอ
identifier หรอ variable = expression โดยท expression อาจเปนไดทงคาของ
constant variable
หรอ complex expression ตวอยาง
a = 3x = ydelta = 0.001sum = a + barea = length * width
การใชเครองหมาย = (assignment operator) เพอกำาหนดคาใหกบ
ตวแปร เชนนเรยกวา assignment expression หรอบางครงเรยกวา
assignment statement ใน expression statement ใดๆ ถา operand ทงหมดของ
statement มชนด (data type) ตางกน คาสดทายของ expression จะม รปแบบหรอชนดเดยวกบ operand ทางซายมอเสมอ
ดงนนผเขยนโปรแกรมจะตองระมดระวงเรองนดวย เนองจากผลลพธทไดอาจเปลยนแปลงไป ตามชนดของตวแปรทางซายมอดงน
ถาคาตวแปรชนด floating point ถกเปลยนใหเปนคาตวแปรชนด
integer คาของทศนยมอาจถกตดทงไป
ถาคาตวแปรชนด double precision ถกเปลยนเปนคาตวแปรชนด floating point คาความถกตองของทศนยมหลกหลงๆ อาจจะถกปดทง
คาตวแปรชนด integer อาจเปลยนแปลงได ถาถกเปลยนใหเปนคาตวแปร ชนด
signed หรอ short หรอ charตวอยาง
ถาให int I,j; และ j = 5Expressio Value
nI = 3.3I = 3.9I = -3.9I = jI = j / 2I = 2 * j / 2I = 2 * j / 2
33-35254
8.5 Multiple Assignmentsรปแบบ
identifier1 = identifier2 = identifier3=…..= expression
L R
เปนการกำาหนดคาเดยวกนใหกบตวแปรหรอ identifier หลายๆ ตวตวอยาง
I = j = 5 นนคอ การกำาหนดคา 5 ใหแก ตวแปร I และ j
8.6 Additional assignment operator
นอกจาก assignment operator ทกลาวแลวยงม
assignment operator อกประเภททประกอบดวยเครองหมาย + - * / และ
เครองหมาย = ดงตวอยาง
+=-=*=/=%=
รปแบบการใช ( ตวอยางของ += )expression1 += expression2
ซงมความหมายเหมอนกบ
expression1 = expression1+expression2เชน
a += bคอ a = a + b
และ a += 1 คอ a = a + 1 ( หรอนนคอ a++ หรอ ++a นนเอง)
ถาให I = 5, j = 7, f = 5.5, g = -3.25
Expression
Equivalent Expression
Final value
I += 5f -= 9j *= (I - 3)I %= (j - 2)
I = I + 5f = f - 9j = j * ( I - 3)I = I % (j - 2)
108.25140
8.6 Condition Operator (?:)Condition Operator จะใชในการทดสอบเงอนไขตางๆ แบบงายๆ ซงม
ทางเลอกเพยง 2 ทางเทานน และ expression ทใช Condition Operator ในการทดสอบเรยกวา Condition expression
รปแบบการใช
expression1? Expression2: expression3การทำางาน
expression1 จะถกตรวจสอบกอน ถามผลเปนจรง expression2 จะถกทำางาน
ในกรณทผลของ expression1 เปน เทจ expression3 จะไดรบเลอกแทน
expression2 ผลลพธการทำางานใน expression 2 หรอ expression 3 คอ ผลของ
condition expression ทงหมดนนเอง
ตวอยาง
1. ถาให int I; และ I = 10 ;(I < 0) ? 0 : 100
ผลของการทำางานคอ
I < 0 เปนเทจ
ดงนน expression3 จะถกเลอก นนคอคา 100 คอผลลพธของ expression น
2. ถาให float f,g; และให condition expression คอ
(f < g) ? f : gการทำางาน
ถา f < g จรง ผลของ expression นคอคา f มฉะนนผลของ
expression คอคา g
โดยทวไป Condition expression จะปรากฎทดานขวาของ
assignment operator (=) ดงนนผลของ condition expression จะกลายเปนคาของ ตวแปรทางซายของเครองหมาย = นนเอง ดงตวอยาง
flag = (I < 0) ? 0 : 100; หรอ min = (f < g) ? f : g;
( คอการหาคาตำาสดของตวแปร 2 ตว คอ f และ g นนเอง)
9. Library Functions
ภาษา C กำาหนดใหมสวนของโปรแกรมทใชเฉพาะงานและใชบอยๆ โดยการเกบรวบรวมไวใหผใช
เรยกใชไดในการเขยนโปรแกรม สวนของโปรแกรมสวนนเรยกวา library function เชน
ฟงกชนทใชสำาหรบการคำานวณคายกกำาลง (pow( )), การคำานวณหาคารากทสอง (sqrt( )) ฯลฯ
ถงแมวา library function ไมไดเปนสวนหนงของ C compiler แต
อยางไรกตาม C compiler สวนใหญจะม ใหผใชเสมอ เพยง แตจำานวนและชนดของฟงกชนอาจจะแตกตางกนไป
ฟงกชนบางอยางสงคาทไดจากการทำางานใหผใช ในขณะทบางฟงกชนสงคา True หรอ False (1 หรอ 0) และบางฟงกชนไมมการสงคาใหแก instruction ทเรยกใชแตอยางใด
ตวอยาง ของ Libraly Function ทใชกนเปนประจำาและมใน C compiler ทวไป
ฟงกชนทใชในการจดการเกยวกบ File เชน การเปดไฟล (open( )) ปดไฟล
(close( )) อานจากไฟล (read( )) และการเขยนลงไฟล (write( )) ฟงกชนสำาหรบการเปลยนคาตวอกษรจากรปแบบตางๆเชน จากตวอกษรตวเลกเปนตวอกษร
ตวใหญ (toupper( )) และในทางกลบกน (tolower( )) ฟงกชนทใชสำาหรบการคดลอก string (strcpy( )) ฟงกชนทใชสำาหรบการคำานวณคาทางคณตศาสตรและตรโกณมต เชน abs( ) ,
sqrt( ), sin( ), cos( ) ฯลฯ
หมายเหต
ฟงกชนทมในแตละ compiler (ชอและวธการเรยกใช) ดจาก programmer’s reference manual ของแตละ compiler
ตวอยาง ฟงกชนทใชเปนประจำาในการเขยนโปรแกรมภาษา C ทวไป
ตวอยางโปรแกรมภาษา c จากขอกำาหนดและนยามของการใชตวแปรและคาคงทตางๆเบองตนสามารถ
เขยนโปรแกรมภาษา C แบบงายๆไดดงตวอยาง
ตวอยางท 1 โปรแกรมภาษา C สำาหรบการหาคารากของสมการทางคณตศาสตร (guadratic equation) ax2 + bx + c = 0 โดยการใช well- known quadratic formula คอ
x = (- b±b2 – 4ac ) / 2a
/* Solution for aquardratic equaton*/#include<stdio.h>main(){double a,b,c,root,x1,x2;/*read value for a,b and c*/root = sqrt(b*b –4*a*c);x1 = (-b+root)/(2*a);x2 = (-b-root)/(2*a);/*display balue for a,b,c,x1and x2*/printf(“Value of a = % f \n\t b = %f \n\t c=%f \n\t x1 = %f \n\t x2=%f\n”, a,b,c,x1,x2);}
10. Data Input and Outputทบทวน ฟงกชนทใชสำาหรบ input และ แสดงผลลพธทไดกลาวถงแลวคอ scanf( )
และ printf( ) ในบทนจะไดเรยนรเกยวกบฟงกชนอนๆทใชจดการ input และ output data เชน
getchar( ), putchar( ), gets( ) และ puts( ) ฟงกชนเหลานใชในการรบสงขอมลระหวางคอมพวเตอรและ standard
input/output devices ซงคอ keyboard และ monitor ตามลำาดบ
getchar( ) เปน library function ทใชในการรบสงขอมลจาก
keyboard ครงละ 1 ตวอกษร และสงใหกบตวแปรทกำาหนดรปแบบการใช
variable = getchar( );เมอ
char variable; (กำาหนดชนดและชอตวแปรกอนการเรยกใช)
เชน
char c;
c = getchar( );
การทำางาน
getchar( ) จะรบ input จาก keyboard ครงละ 1 ตวอกษรและสงให
กบตวแปร c –และสงคา 1 เมอฟงกชนรบคา end of file (EOF – กำาหนดไวใน stdio.h เปนคา -1) คอการสนสด input file หรอคอคา Ctrl-D เมอผใชกดปมน
putchar( ) เปน library function สำาหรบการพมพผลลพธทางจอภาพครงละ
1 ตวอกษร รปแบบการใช
char c;putchar(c);
gets( ) และ puts( )gets( ) ใชสำาหรบการอานขอมลจาก standard input device
(file) ครงละหลาตวอกษรเกบในตวแปรชนด array puts( ) สำาหรบพมพขอมลทเกบในตวแปรชนด array ออกทาง standard
output device (file) หรอจอภาพ
รปแบบการใช
char line[80];
gets(line);puts(line);
11. วธการเรมเขยนโปรแกรม
ในการเรมเขยนโปรแกรมครงแรก จำาเปนตองวางแผนการทำางาน (การเขยนโปรแกรม) ของแตละ โปรแกรมเปนอยางด เพอความสะดวกและงายตอการแกปญหาโจทยและการแกไขโปรแกรม รวมทงแกไขขอ
ผดพลาดทอาจจะเกดขนเนองจากการเขยนโปรแกรม
ขนตอนการเขยนโปรแกรมทใชกนโดยทวไป หรอทเรยกวาวธการเขยนโปรแกรมแบบ top-down
1. กำาหนดโครงสรางของการเขยนโปรแกรมทงหมดกอนการเขยนคำาสงงานจรงโดยมวธการดงน กำาหนดลำาดบการทำางานแตละขนตอน
ไมตองคำานงถง program instruction ( ภาษา C) 2. กำาหนดรายละเอยดและวธการทำางานของโครงสรางขนตน โดยการอธบายดวยภาษาเขยน เพอ
บอกขนตอนการทำางาน( เรยกวา psuedocode )
ตวอยาง เขยนโปรแกรมสำาหรบคำานวณจำานวนเงนฝากในบญชธนาคารในระยะเวลา n ปนบจากวนฝากเงน
ตนจำานวน p บาทโดยกำาหนดให
r = อตราดอกเบยตอป
F = จำานวนสะสมในระยะเวลา n ป โดยคำานวณจากสตร
F = P( 1 + I )n
เมอ I = r / 100
11.1 ตวอยางการเรมตนแกปญหาและการเขยนโปรแกรม
1. กำาหนดตวแปรทตองการใชในโปรแกรม
2. อานคาตวแปรทตองการคอ คา p, r และ n3. คำานวณคา I จากสตร I = r/1004. คำานวณคาเงนสะสมจากสตร F = P(1 + i) n
5. พมพคาเงนสะสม
11.2 การเขยน Psuedocode
/*Compound interest Calculation*/main( ){
/*declare the program variables*//*read in values for p,r and n*//*calculate a value for i*//*calculate a value for F*//*display the calculate value for F*/
}psuedocode เบองตนเปนการกำาหนดขนตอนการทำางานอยางคราวๆสามารถ
เขยนรายละเอยดเพมเตมได เชน
/*Compound interest calculate*/main( ) {/* declare p,r,n,I and f to be floating point variables*//*write a prompt for p and then read its value*//* write a prompt for r and then read its value *//* write a prompt for n and then read its value *//*calculate I = r/100*//*calculate f = p(1+i) n as follows : f = p*pow((1+i),n) where pow is a library function for exponential*//*display the value for f*/}
11.3 ขนตอนการเขยนเปนโปรแกรมภาษา C
/*Compound interest calculation*/#include<stdio.h>#include<math.h> /*for pow( ) function*/main( ){
float p,r,n,I,f;/*read input data ,including prompts*/printf (“Please enter a value for the
principal(P):”);scanf(“%f” ,& P);printf(“Please enter a value for the
interest rat (r):”);
scanf(“%f”, &r);printf(“Please enter a value for the
number of year(n):”);scanf(“%f”,&n);
/*calculate I ,then f*/I = r/100;F= P * pow(1+i),n;
/*display the output*/printf(“\n The final value (F) is % 2f\n”,f);
}
11.4 การหาทผดพลาดของโปรแกรม
เมอเขยนโปรแกรมเสรจแลว ( จะได source code ) ตองทำาการตรวจสอบ และ compile โปรแกรมเพอทจะได โปรแกรมทสามารถเรยกใช ( run หรอ execute ) ไดตอไป ขนตอนการ compile และการเรยกใชโปรแกรม ( ตวอยาง ในระบบ unix ) คอ compile โปรแกรมภาษา C ดวย C compiler ซงชอ cc ดงน
cc program-file.c
ถาโปรแกรมไมมทผดทเกดจากการใชคำาสงผดขอกำาหนด ( error ประเภทนเรยกวา syntactic error ) จะไดโปรแกรมทสามารถเรยกใช (run) ไดซงเรยกวาเปน executable program หรอ (object file) ในขนตอนของการ compile นน compiler จะสราง object file “ทชอ a.out” ใหทกครง
หากในขนตอนของการ compile ถา source code (program listing) มขอผดพลาด compiler จะรายงานขอผดพลาดพรอมทงอาจจะแสดงบรรทดทผดให
ทาง standard error file ( ในทนคอจอภาพเดยวกนกบ standard output file)
โดยทวไป syntactic error อาจจะเกดจากขอผดพลาดดงน
เรยกใชตวแปรทไมไดประกาศ การใชคำาสงงานตางๆผดรปแบบทกำาหนด ฯลฯ
12. Control Statements
การทำางานของโปรแกรมคอมพวเตอรโดยทวไปจะทำางานตามลำาดบคำาสงงาน (instruction) ทปรากฏใน source code โดยทวไปคำาสงงานทสนสดในคำาสงนนๆ และระบบจะทำางานในคำาสงถด
ไปเมอทำาตามคำาสงกอนหนาแลวเสรจการทำางานในลกษณะนจงเปนการทำางานตามลำาดบกอนหลง (sequential execution) อยางไรกตามในบางครงผเขยนโปรแกรมตองการใหระบบ
คอมพวเตอรทำางานชดคำาสงบางกลมซำาซอน โปรแกรมภาษาคอมพวเตอรโดยทงไปไดกำาหนดคำาสงงานสำาหรบ
ใชในการควบคมการทำางานซำาๆ เรย กวา control statements หนาทเฉพาะของคำาสงงานกลมนคอ กำาหนดเงอนไขในการทำางานซำาของกลมคำาสงงานปกต ดงนน
จงตองมการทดสอบเงอนไขและคบคมการทำางานของโปรแกมจะประกอบดวย สวนประกอบสำาคญดงน
1. relation operator (< , <= , > , >=)equality operator ( = = และ != )
2. logical connective (logical operators) && (and) และ || (or)unary operator not (!)
3. condition operator (? : )4. ผลจากการทดสอบเงอนไขโดยการใช operator ดงกลาวขางตนผลของการทดสอบจะ
มคาเปนจรง หรอเทจ เทานน
5. Expression Statement หรอ Compound Statement สำาหรบเปนคำาสงงานทตองทำาซำา Control Statement
ในภาษา C มหลายชนดเชน if, while ,do… while, for และ
switch ซงแตละคำาสงมรปแบบและการใชงานทแตกตางกนดงน
12.1 Branching : The If-else statement
คำาสง if ใชในการทดสอบเงอนไขทจะกำาหนดใหโปรแกรมเลอกทำางานเพยงกรณเดยวจาก
ผลของการทดสอบ (เทจหรอจรง)else เปน optional (จะมหรอไมมกได) นนคอในกรณทไมจำาเปนตองทำาใน
ทางเลอกทสองกไมจำาเปนตองม statement ตางๆหลง else (หรอไมตอง
กำาหนด statemnet else นนเอง)รปแบบการใช
1. if (expression)statement1
2. if (expression)statement 1
else statement 2
เมอ expression คอ statement ทใชในการทดสอบเงอนไขตามวธการดง
กลาวขางตนและ statement 1 และ statement 2 เปนไดทงคำาสงเดยวหรอชดคำาสงหลายคำาสง
การทำางาน ถาผลของการทดสอบเงอนไขใน expression เปนจรง โปรแกรมจะเลอก
ทำางานใน statement1 มฉะนน ( กรณทม else ) statement2 จะไดรบเลอกใหทำางาน
ตวอยาง สวนหนงของคำาสงงานในโปรแกรมเมอเลอกใชคำาสง if1. if (x < 0)
printf (“X is less than zero \n”);2. if(I > 0) {
y = x/I;printf(“I is more than zero an y = %f \
n”,y);}
3. if ((balance < 100.00) || (status == ‘R’))printf(“balance is %f \n”,balance);
4. if ((a > 0) && (b<= 5)) {xmid = (a+b)/2;ymid = sqrt(xmid);/*y = a+b/2*/
}5. if(status == ‘s’) /*single
status*/tax = 0.02*pay;
elsetax = 0.14*pay;
6. if (x <= 3)y = 3*pow(x,2);
elsey = 2*pow((x-3),2);
7. if (circle) {scanf(“%f”,&radius);area = 3.14159 * radius*radius;printf(“Area of circle = %f”,area);
}else {
scranf(“%f %f”, &length,&width);area = width *length;printf(“Area of rectangle =%f”,area);
}Nested if – else
ในกรณทตองการทดสอบเงอนไขมากกวาหนงเงอนไขในขณะเดยวกนสามารถใชคำาสง if-else ซอนกนหลายชนได เรยกการทำางานชนดนวา nested if โดยรปแบบการใชคอ
if expression 1 statement 1
if expression 2else
statement 2else if expression 3
statement 3 else
statement 4 จำานวน if และ else อาจจะไมเทากนกได ดงตวอยาง
ถาให e1 = expression 1e2 = expression 2
……………..s1 = statement 1s2 = statement 2 …………….
ลกษณะตางๆทใชไดเชนกน
if e1s1
else if e2 s2
หรอ if e1s1
else if e2 s2
else
s3 หรอ if e1 if e2
s1 else s2
else s3
หรอ
if e1 if e2 s1
else s2
จะเหนวาการใช nested –if … else สามารถใชไดหลายๆชนโดยทผใชตองมนใจ
และเขาใจวา Statement แตละชดเปนของ expression ใดเนองจากภาษา C ไมได
บงคบวาจำานวน else จะตองมเทากบจำานวนของ if เสมอไป ดงนนเพอปองกนความสบสนของการ
ทำางานหรอการเขยนดปรแกรมควรจะใช {….} ชวยในการกำาหนดขอบเขตและความสมพนธของ
expression และ statement คตางๆเชน
if e1 {if e2 s2else s2
}หรอ
if e1 {if e2 s1}
elses2
ตวอยาง สวนของโปรแกรมทใช if – else statementif ((time >= 0.00) && (time < 12.00))
printf(“Good morning \n”);else if ((time >= 12.00) && (time < 18.00))
printf(“Good Afternoon \n”);
else if ((time >= 18.00) && (time < 24.00))
printf(“Good Evening \n”); else
printf(“Time is out of range \n”);
(ชดคำาสงนจะพมพคำาสวสดตอนเชา/บาย/ เยน เมอเวลาททดสอบตกอยำาในชวงนนๆมฉะนนจะรายงานวาเวลา
ผดพลาดนนคอ ถาเวลา < 0 หรอ > 24)