ภาษา c - prince of songkla universitystaff.cs.psu.ac.th/noi/cs344-202/doc/c.doc · web...

31
ภภภภ C Data type ภภภภ C ภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภ ภภภภภภภภภภภภภ ภภภภภภภภภ (Data ภภภภ Variable) ภภภภภภภภภภภภภภภภภภภภภภ memory ภภภภภภภภภภภภภภภภภภภภ ภภภภ ภภภภภภภภภภภภภภภภภภภภภภภภภ ภภภภภภภภภ int char float ภภภ double Data type ภภภภภภภภภ ภภภภภภ memory ภภภภภภ ภภภภภภภภภภภภ int char float double ภภภภภภภภภภภภภภภภภภภ ภภภภภภภภภภภภภภภภภภภภภ ภภภภภภภภภภภภภภภภภภ ภภภภภภภภภภภภภภภภภภภภภภภภ ภภภภภภภภภภภภภภภภภภภภภภภ ภภภ float 2 byte 1 byte 4 byte 8 byte ภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภ short ,long ,signed ภภภ unsigned 2. Constant (ภภภภภภภภ) ภภภภภภภภภภภภภภภภภภภภ ภภภภภภ c ภภภภภภภภภภภภภภภภภภภภภภภภภภภภภ ภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภ ภภภภภภภภภภภภภภภภภภภภภภภภภภภภภ ภภภภภภภ ภภภภภภภภภภภภ ภภภภภภภภภภภภภภภภภภภภ ภภภภภภภภภภภภภภภภภภภภภ ภภภ ภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภ ภภภภ ภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภ ภภภภภภ ภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภ ภภภภภภภภภภภภภภภภภภภภ ภภภภภภ . (ภภภภภภ) ภภภภ , (ภภภภภภภภภภภภภภภภภภ) ภภภภภภภภภภ ภภภภภภภภภภภ - (ภภ) ภภภภภภภภภภภภภภภภภภภภ ภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภ ภภภภภภภภภภภภภภภภภภภภภภภภ ภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภ 2.1 ภภภภภภภภภภภภ integer (integer constant) ภภภภภภภภภภภภภภ 3 ภภภภภภภ 2.1.1 ภภภภภภภภภภภภภภภภภภภภภ (Decimal constant) - ภภภภภภภภภภภภภภภภ 0-9 - ภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภภ ภภภภภภภภภภภภภภภภภภภ ภภภภภภภภภภภ 0 (ภภภภภ)

Upload: others

Post on 06-Feb-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ภาษา C - Prince of Songkla Universitystaff.cs.psu.ac.th/noi/cs344-202/doc/C.doc · Web viewgetchar( ) จะร บ input จาก keyboard คร งละ 1 ต วอ

ภาษา 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

(มทศนยม)( มเครองหมาย ,)(มชองวางระหวางตวเลข)( มเครองหมาย -)

Page 2: ภาษา C - Prince of Songkla Universitystaff.cs.psu.ac.th/noi/cs344-202/doc/C.doc · Web viewgetchar( ) จะร บ input จาก keyboard คร งละ 1 ต วอ

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)

Page 3: ภาษา C - Prince of Songkla Universitystaff.cs.psu.ac.th/noi/cs344-202/doc/C.doc · Web viewgetchar( ) จะร บ input จาก keyboard คร งละ 1 ต วอ

คอคาคงทฐานสบทประกอบดวย ตวเลขจำานวนเตม และเลขทศนยม เขยนโดยการใชเครองหมาย

ทศนยม (.) คน เชน

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

Page 4: ภาษา C - Prince of Songkla Universitystaff.cs.psu.ac.th/noi/cs344-202/doc/C.doc · Web viewgetchar( ) จะร บ input จาก keyboard คร งละ 1 ต วอ

\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

ตองไดรบการประกาศกอนการเรยกใชเสมอ

Page 5: ภาษา C - Prince of Songkla Universitystaff.cs.psu.ac.th/noi/cs344-202/doc/C.doc · Web viewgetchar( ) จะร บ input จาก keyboard คร งละ 1 ต วอ

รปแบบการประกาศชอตวแปร

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 ดงรายละเอยดดงน

Page 6: ภาษา C - Prince of Songkla Universitystaff.cs.psu.ac.th/noi/cs344-202/doc/C.doc · Web viewgetchar( ) จะร บ input จาก keyboard คร งละ 1 ต วอ

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) โดยปกตจะเขยนดวยตวอกษรตวใหญ

Page 7: ภาษา C - Prince of Songkla Universitystaff.cs.psu.ac.th/noi/cs344-202/doc/C.doc · Web viewgetchar( ) จะร บ input จาก keyboard คร งละ 1 ต วอ

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 จะกำาหนดลำาดบ ของการทำางานไวในรป แบบทคลายกบการคำานวณทางคณตศาสตร ทวไปเชน

ถาลำาดบความสำาคญของเครองหมายทางคณตศาสตรเทากน จะทำาการคำานวณจากซายไปขวา

Page 8: ภาษา C - Prince of Songkla Universitystaff.cs.psu.ac.th/noi/cs344-202/doc/C.doc · Web viewgetchar( ) จะร บ input จาก keyboard คร งละ 1 ต วอ

อยางไรกตามถาผใชตองการเปลยนแปลงลำาดบความสำาคญของเครองหมายตาง ๆ ทำาไดโดยใช วงเลบ เชน

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 ( จากบรรทดท ) และถาให

Page 9: ภาษา C - Prince of Songkla Universitystaff.cs.psu.ac.th/noi/cs344-202/doc/C.doc · Web viewgetchar( ) จะร บ input จาก keyboard คร งละ 1 ต วอ

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

Page 10: ภาษา C - Prince of Songkla Universitystaff.cs.psu.ac.th/noi/cs344-202/doc/C.doc · Web viewgetchar( ) จะร บ input จาก keyboard คร งละ 1 ต วอ

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

Page 11: ภาษา C - Prince of Songkla Universitystaff.cs.psu.ac.th/noi/cs344-202/doc/C.doc · Web viewgetchar( ) จะร บ input จาก keyboard คร งละ 1 ต วอ

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

Page 12: ภาษา C - Prince of Songkla Universitystaff.cs.psu.ac.th/noi/cs344-202/doc/C.doc · Web viewgetchar( ) จะร บ input จาก keyboard คร งละ 1 ต วอ

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

ซงมความหมายเหมอนกบ

Page 13: ภาษา C - Prince of Songkla Universitystaff.cs.psu.ac.th/noi/cs344-202/doc/C.doc · Web viewgetchar( ) จะร บ input จาก keyboard คร งละ 1 ต วอ

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

ผลของการทำางานคอ

Page 14: ภาษา C - Prince of Songkla Universitystaff.cs.psu.ac.th/noi/cs344-202/doc/C.doc · Web viewgetchar( ) จะร บ input จาก keyboard คร งละ 1 ต วอ

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

Page 15: ภาษา C - Prince of Songkla Universitystaff.cs.psu.ac.th/noi/cs344-202/doc/C.doc · Web viewgetchar( ) จะร บ input จาก keyboard คร งละ 1 ต วอ

ภาษา 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 คอ

Page 16: ภาษา C - Prince of Songkla Universitystaff.cs.psu.ac.th/noi/cs344-202/doc/C.doc · Web viewgetchar( ) จะร บ input จาก keyboard คร งละ 1 ต วอ

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 ตามลำาดบ

Page 17: ภาษา C - Prince of Songkla Universitystaff.cs.psu.ac.th/noi/cs344-202/doc/C.doc · Web viewgetchar( ) จะร บ input จาก keyboard คร งละ 1 ต วอ

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);

Page 18: ภาษา C - Prince of Songkla Universitystaff.cs.psu.ac.th/noi/cs344-202/doc/C.doc · Web viewgetchar( ) จะร บ input จาก keyboard คร งละ 1 ต วอ

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*/

Page 19: ภาษา C - Prince of Songkla Universitystaff.cs.psu.ac.th/noi/cs344-202/doc/C.doc · Web viewgetchar( ) จะร บ input จาก keyboard คร งละ 1 ต วอ

}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):”);

Page 20: ภาษา C - Prince of Songkla Universitystaff.cs.psu.ac.th/noi/cs344-202/doc/C.doc · Web viewgetchar( ) จะร บ input จาก keyboard คร งละ 1 ต วอ

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

Page 21: ภาษา C - Prince of Songkla Universitystaff.cs.psu.ac.th/noi/cs344-202/doc/C.doc · Web viewgetchar( ) จะร บ input จาก keyboard คร งละ 1 ต วอ

การทำางานของโปรแกรมคอมพวเตอรโดยทวไปจะทำางานตามลำาดบคำาสงงาน (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

Page 22: ภาษา C - Prince of Songkla Universitystaff.cs.psu.ac.th/noi/cs344-202/doc/C.doc · Web viewgetchar( ) จะร บ input จาก keyboard คร งละ 1 ต วอ

เมอ 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 {

Page 23: ภาษา C - Prince of Songkla Universitystaff.cs.psu.ac.th/noi/cs344-202/doc/C.doc · Web viewgetchar( ) จะร บ input จาก keyboard คร งละ 1 ต วอ

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

Page 24: ภาษา C - Prince of Songkla Universitystaff.cs.psu.ac.th/noi/cs344-202/doc/C.doc · Web viewgetchar( ) จะร บ input จาก keyboard คร งละ 1 ต วอ

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”);

Page 25: ภาษา C - Prince of Songkla Universitystaff.cs.psu.ac.th/noi/cs344-202/doc/C.doc · Web viewgetchar( ) จะร บ input จาก keyboard คร งละ 1 ต วอ

else if ((time >= 18.00) && (time < 24.00))

printf(“Good Evening \n”); else

printf(“Time is out of range \n”);

(ชดคำาสงนจะพมพคำาสวสดตอนเชา/บาย/ เยน เมอเวลาททดสอบตกอยำาในชวงนนๆมฉะนนจะรายงานวาเวลา

ผดพลาดนนคอ ถาเวลา < 0 หรอ > 24)