โปรแกรมภาษา C เบื้องต้น · # define: ใช้ส า...

Preview:

Citation preview

โปรแกรมภาษา C เบองตน อ. อาจารย ทองออน 1

บทน า

หนวยส ำคญทสดของคอมพวเตอรกคอ หนวยประมวลผลหรอทเรยกกนวำ CPU โดยปกต CPU จะมภำษำของตวเองทเรยกวำ ภำษำเครอง (Machine Language) ซงจะเปนภำษำทประกอบไปดวยเลขฐำนสองมำกมำย ดงนนกำรทจะเขยนโปรแกรมควบคมกำรท ำงำนของคอมพวเตอร โดยใชภำษำเครองโดยตรงนนจงท ำไดยำก จงไดมกำรพฒนำตวแปรภำษำเครองทเรยกวำ โปรแกรมภำษำระดบสงขนมำ หรอทเรยกวำ High Level Languages โดยภำษำในระดบสงเหลำน จะมลกษณะรปแบบกำรเขยน (Syntax) ทท ำใหเขำใจไดงำยตอกำรสอสำรกบผพฒนำ และถกออกแบบมำใหงำยตอกำรใชงำน และจะเปลยนค ำสงจำกผใชงำน ไปเปนเปนภำษำเครอง เพอทจะควบคมกำรท ำงำนของคอมพวเตอรตอไป ตวอยำงของโปรแกรมภำษำระดบสง ไดแก COBOL ใชกนมำกส ำหรบโปรแกรมทำงดำนธรกจ, Fortran ใชกนมำกส ำหรบกำรพฒนำโปรแกรมดำนวทยำศำสตรและวศวกรรมศำสตร เพรำะงำยตอกำรค ำนวณ, Pascal มใชกนทวไป แตเนนส ำหรบกำรพฒนำเครองมอส ำหรบกำรเรยนกำรสอน, C & C++ ใชทวไป

2

กอนทจะลงมอพฒนำโปรแกรมคอมพวเตอร ขนแรก เรำตองศกษำรปแบบควำมตองกำรของโปรแกรมทจะพฒนำ จำกนนกวเครำะหถงปญหำตลอดจนวธกำรแกปญหำ จำกนนจงน ำเอำควำมคดในกำรแกปญหำอยำงเปนขนตอน ไปเขยนในรปแบบของโปรแกรมภำษำในระดบสง ซงจะอยในรปแบบของ Source Program หรอ Source Code จำกนนเรำกจะใช Complier ของภำษำทเรำเลอก มำท ำกำร Compile Source code หรอกลำวงำยๆ คอแปลง Source code ของเรำใหเปนภำษำเครองนนเอง ซงในขนตอนน ผลทได เรำจะเรยกวำ Object code จำกนน Complier กจะท ำกำร Link หรอเชอม Object code เขำกบฟงกชนกำรท ำงำนใน Libraries ตำงๆ ทจ ำเปนตอกำรใชงำน แลวน ำไปไวในหนวยควำมจ ำ แลวเรำกจะสำมำรถ Run เพอดผลของกำรท ำงำนโปรแกรมได หำกโปรแกรมมขอผดพลำด เรำกจะท ำกำรแก หรอทเรยกกนในภำษำคอมพวเตอรวำ กำร Debug นนเอง

บทน า

3

ภำษำ C เปนโปรแกรมภำษำระดบสง ถกพฒนำขนในป 1972 ท AT&T Bell Lab เรำสำมำรถใชภำษำ C มำเขยนเปนค ำสงตำงๆ ทคอมพวเตอรสำมำรถเขำใจได และกลมของค ำสงเหลำน เรำกเรยกกนวำ อลกอรธม ไดมผใหค ำจ ำกดควำมของค ำวำ อลกอรธม วำเปน �

A precise description of a step-by-step process that is guaranteed to terminate after a finite number of steps with a correct answer for

every particular instance of an algorithmic problem that may occur.�

บทน า

4

ตวอยำงกำรเขยนโปรแกรมภำษำซ #include <stdio.h> void main( ) { /* Display message to standard output */ printf(“My first program.”); } ผลกำรท ำงำนของโปรแกรม My first program.

รปแบบโปรแกรมภาษา C

5

ตวอยางการเขยนโปรแกรมภาษาซ

#include <stdio.h>

void main( ) {

/* Display message to standard output */

printf(“My first program.”);

}

รปแบบโปรแกรมภาษา C

6

สวนหว (Header):

จะเปนสวนทอยทตอนตนของโปรแกรม โดยอยนอกสวนทเรยกวาฟงกชน ทสวนหว ของโปรแกรมจะประกอบดวยค า สงทเปนการก าหนดคาหรอก าหนดตวแปรตาง ๆ ค าส ง ในท ขนตนดวยสญลกษณ # เ ปนค า ส ง ท เ รยกวา ตวประมวลผลกอน (Preprocessor) คอค า สงทจะไดรบการท ากอนทจะมการคอมไพลโปรแกรม ตวประมวลผลกอน ทส าคญของภาษาซแบงออกเปน 2 ประเภทดงน # include

# define

7

รปแบบโปรแกรมภาษา C

# include:

ในภำษำซจะมฟงกชนมำตรฐำนทผ ผลตคอมไพเลอรไดจดเตรยมไวให ซงมกจะเกยวของกบกำรรบขอมล กำรแสดงผลขอมล กำรค ำนวณ และอน ๆ ซงผ เขยนโปรแกรมสำมำรถเรยกใชงำนไดทนท โดยไมตองเขยนโปรแกรมแกรมเอง ในตวอยำงจะมกำรใชค ำสง printf( ) ซงเปนค ำ สงทใชแสดงขอควำมออกทำงอปกรณแสดงผลมำตรฐำน เชน จอภำพ ค ำสง printf( ) เปนกำรเรยกใชฟงกชนมำตรฐำนซงอยในกลมทเรยกวำ Standard Input and Output เมอจะเรยกใชฟงกชนใดในกลมดงกลำว จะตองบอกใหคอมไพเลอรไปอำนคำทอยในอนคลชไฟลทชอ stdio.h มำไวทสวนตนของโปรแกรม โดยใชค ำ สง

#include <stdio.h> เพรำะฉะนนผเขยนโปรแกรมควรจะศกษำฟงกชนมำตรฐำนทคอมไพเลอรแตละบรษทไดเตรยมไวใหวำค ำ สงใดใชคกบอนคลชไฟลใด

8

สวนหว (HEADER)

# define: ใชส า หรบการก าหนดคาคงท ตวอยางเชน

#define YES 1

ค าสงดงกลาวเปนการก าหนดวา หากทใดในโปรแกรมมค า วา YES จะถก แทนทดวยคาทางขวามอ ในทนคอ 1

9

สวนหว (HEADER)

ฟงกชน (Function): สวนของฟงกชนคอสวนของค ำ สงทบอกใหคอมพวเตอรท ำงำนตำง ๆ เชน กำรรบ

ขอมล กำรค ำนวณ กำรแสดงผล เปนตน โปรแกรมภำษำซจะประกอบดวยฟงกชนยอยหลำย ๆ ฟงกชน แตจะมฟงกชนหลกฟงกชนหนงทชอวำฟงกชน main( ) เสมอ โดยทกำรท ำ งำนของโปรแกรมจะตองเรมกำรท ำ งำนจำกฟงกชนน

10

รปแบบโปรแกรมภาษา C

กฎพนฐำนทส ำคญในภำษำซ กำรพมพอกษรตวพมพใหญและตวพมพเลกในภำษำซนนในผลลพธทแตกตำงกน

(Case Sensitive) ตวอยำงเชน หำกมกำรพมพ main( ) กลำยไปเปน Main( ) กจะเกดควำมผดพลำดขน

ฟงกชนของภำษำซจะแบงขอบเขตของฟงกชนแตละฟงกชนดวยเครองหมำย { } ในตวอยำงมฟงกชน void main( ) ค ำวำ void จะบอกใหรวำเมอฟงกชนนท ำงำนเสรจจะไมมกำรคนคำกลบไปยงสงทเรยกใชงำนฟงกชน ในกรณของฟงกชน main( ) กคอ จะไมมกำรคนคำใด ๆ กลบไปยงระบบปฏบตกำร หลงฟงกชนจะตองตำมดวย ( ) เสมอ โดยทภำยในวงเลบจะประกอบดวยคำทสงเขำมำยงฟงกชน ทเรยกวำพำรำมเตอร (Parameter) หรออำจจะไมมคำใด ๆ สงเขำมำกได

11

รปแบบโปรแกรมภาษา C

กฎพนฐำนทส ำคญในภำษำซ ค ำสงตำงๆ ซงตองเขยนอยในฟงกชนเสมอ แบงเปน 2 สวนคอสวนของกำร

ประกำศตวแปรทตองกำรใชในฟงกชน และสวนของค ำ สงเพอท ำ งำนใดงำนหนง ในทนมเฉพำะค ำ สงทใชในกำรแสดงผลลพธออกทำงจอภำพ คอ printf( ) ใชส ำ หรบกำรแสดงผลลพธออกทำงจอภำพ หำกตองกำรแสดงขอควำมใด ๆ ออกทำงจอภำพใหเขยนขอควำมนนอยภำยในเครองหมำย “ ”

ค ำสงในภำษำซจะตองปดทำยดวยเครองหมำย ; (Semicolon) เนองจำกภำษำซจะใชเครองหมำย ; ในกำรแยกค ำ สงตำง ๆ ออกจำกกน กำรเวนบรรทดหรอกำรเขยนค ำสงไมตอเนองกนจะไมมผลตอคอมไพเลอร แตเปนกำรชวยใหผเขยนโปรแกรมอำนโปรแกรมไดงำยขนเทำนน

12

รปแบบโปรแกรมภาษา C

ตวอยำง1

#include <stdio.h> void main( ) { /* Display message to standard output */ printf(“My first program.”); }

ตวอยำง2

#include

<stdio.h>

void

main

()

{

/* Display message

to standard

output */

printf

(

“My first program.”

)

;

}

13

รปแบบโปรแกรมภาษา C

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

14

ตวแปรในโปรแกรมภาษา C

a 15

b 30

c

a 15

b 30

c 45

c = a + b

ชนดของตวแปร

ขนำด (ไบต) คำทเกบ รปแบบ

char 1 ตวอกษร ASCII 1 ตว ตงแต 0 ถง 255 %s

int 2 คำจ ำนวนเตมตงแต 32767 ถง -32768 %d

long 4 คำจ ำนวนเตมตงแต 2147483647 ถง -2147483648

%ld

unsigned unsigned int 2 unsigned long 4

คำจ ำนวนเตมตงแต 0 ถง 65535 คำจ ำนวนเตมตงแต 0 ถง 4294967295

%u %lu

float 4 คำจ ำนวนจรงตงแต 3.4 x 10-38 ถง 3.4 x 1038 %f

double 8 คำจ ำนวนจรงตงแต 3.4 x 10-308 ถง 3.4 x 10308 %lf

15

ชนดของตวแปรในโปรแกรมภาษา C

เมอตองกำรใชตวแปร จะตองมกำรประกำศชอตวแปรทตองกำรใชงำนนน มรปแบบคอ ประเภทขอมล ชอตวแปร ; ตวอยำงของกำรประกำศตวแปร เชน float score; int age; char ch; float width, height, length; กรณทมตวแปรมำกกวำ 1 ตวทมชนดเดยวกน สำมำรถประกำศไวในค ำ สงเดยวกนไดโดยใชเครองหมำย , คนระหวำงตวแปรแตละตว

16

การใชตวแปรในโปรแกรมภาษา C

กฎการตงชอ

ในภำษำซมกำรก ำหนดกฎในกำรตงชอ Identifier ตำง ๆ อนไดแก ชอตวแปร ชอฟงกชน ชอคำคงทดงน

ใหใชตวอกษร a ถง z A ถง Z เลข 0 ถง 9 และ _ (Underscore) ประกอบกนเปนชอ ขนตนดวยตวอกษรหรอ _ ตวอกษรตวพมพใหญ ตวพมพเลกมผลตอกำรตงชอและกำรเรยกใชงำน ชอนนจะตองไมซ ำกบค ำ หลก (Keyword) ซงภำษำซจองไวใช คอ

auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned continue for signed void default goto sizeof volatile do if static while

17

การใชตวแปรในโปรแกรมภาษา C

ค าแนะน าในการตงชอ

ในกำรเขยนโปรแกรมทดนนเรำควรท ำ กำรตงชอของตวแปร คำคงท ฟงกชน ใหอยในรปแบบมำตรฐำนดงน

ใหตงชอทสอควำมหมำยบอกใหรวำตวแปรนนใชท ำอะไร ขนตนดวยตวอกษร กรณตงชอตวแปรมกจะหรอฟงกชนมกจะใชตวอกษรตวพมพเลก คำคงทก ำหนดโดย #define มกจะใชตวอกษรตวพมพใหญทงหมด กรณทชอตวแปรประกอบดวยค ำ หลำย ๆ ค ำ อำจจะใชตวอกษรตวพมพใหญ

ขนตนค ำในล ำ ดบตอมำ หรอใช _ แยกระหวำงค ำ เชน totalScore หรอ total_score ตวอยำงกำรตงชอตวแปร เชน totalscore = score1 + score2 + score3; ยอมจะท ำ ควำมเขำใจไดงำยกวำ robert = willy + bird + smith;

18

การใชตวแปรในโปรแกรมภาษา C

เมอมกำรประกำศตวแปร จะเกดกระบวนกำรจองพนทในหนวยควำมจ ำ ใหกบตวแปรตวนนมขนำดเทำกบชนดของขอมลทก ำหนด เมอใดทมกำรอำงถงชอตวแปรกจะเปนกำรอำงถงคำทเกบอยในพนทหนวยควำมจ ำ นน สงทตองระวงคอ ควรจะมกำรก ำหนดคำเรมตนใหกบตวแปรนน ๆ เสมอ เพรำะพนทในหนวยควำมจ ำทถกจองนน อำจจะมคำบำงอยำงอยภำยใน ตวอยำงของกำรก ำหนดคำเรมตนใหกบตวแปร คอ int sum=0; float height=0.0; จำกค ำสงขำงตนระบบจะท ำกำรจองพนทในหนวยควำมจ ำใหกบตวแปรชอ sum มขนำดเทำกบ int (2ไบต) และก ำหนดใหมคำเรมตนเทำกบ 0 เมอมกำรอำงถงชอตวแปรกจะไดคำคอ 0 และจองพนทในหนวยควำมจ ำ ใหกบตวแปร height มขนำดเทำกบ float (4 ไบต) และก ำหนดใหมคำเรมตนเทำกบ 0.0

19

การใชตวแปรในโปรแกรมภาษา C

ในภำษำซเรำสำมำรถสรำงตวแปรชดจำกขอมลพนฐำน ไดแก int float float เปนตน รปแบบของกำรประกำศตวแปรชดท ำ ไดดงน ชนดขอมล ชอตวแปร [ ขนำดขอมล ] ; ตวอยำง float score[10]; score ค ำ สง float score[10]; เปนกำรก ำ หนดตวแปรตวแปรชดชอ score เปนตวแปรชดชนด float ทมสมำชกทงหมด 10 ตว ตงแต score[0], score[1], score[2], ... , score[9] สมำชกภำยในตวแปรชดจะเรมท 0 เสมอ และสมำชกตวสดทำยจะอยทต ำ แหนงของขนำดทประกำศไวลบดวย 1 เชน ประกำศขนำดของตวแปรชดไว n สมำชกตวสดทำยจะอยทต ำ แหนง n-1

20

การใชตวแปรชด

[0] [1] [2] [3] [4] [5] [6] [7] [8] [9]

ฟงกชนในกำรรบขอมล คอ ฟงกชน scanf( ) ฟงกชนในกำรแสดงผลขอมลคอฟงกชน print( ) ในสวนของกำรใชงำนพนฐำน ซงกอนจะใชงำนฟงกชนดงกลำวทสวนหวของ โปรแกรมจะตองมค ำ สง

#include <stdio.h>

21

การรบขอมลและแสดงผลขอมล

ฟงกชนทใชในกำรรบขอมลมรปแบบของกำรใชงำนคอ scanf ( รปแบบ , อำรกวเมนต1, อำรกวเมนต2, … ) ;

ตวอยำงเชนตองกำรรบขอมลเดอนและปเปนจ ำนวนเตม จะตองใชค ำสง int month, year; scanf(“%d %d”, &month, &year);

22

การรบขอมล

ฟงกชนทใชในกำรแสดงผลขอมลมรปแบบของกำรใชงำนคอ printf ( รปแบบ , อำรกวเมนต1, อำรกวเมนต2, … ) ;

ตวอยำงเชน char name[ ] = “Mickey”; int age = 20; printf(“%s is %d years old.”, name, age); ผลลพธทไดคอ Mickey is 20 years old.

23

การแสดงผลขอมล

ตวด ำเนนกำรก ำหนดคำ ตวด ำเนนกำรคณตศำสตร ตวด ำเนนกำรก ำหนดคำแบบผสม ตวด ำเนนกำรเพมคำและลดคำ ตวด ำเนนกำรเปลยนชนดของขอมล ตวด ำเนนกำรควำมสมพนธ ตวด ำเนนกำรควำมเทำกน ตวด ำเนนกำรตรรกะ

24

ตวด าเนนการ

ตวด ำเนนกำรก ำหนดคำเปนตวด ำเนนกำรพนฐำนทใชในกำรก ำหนดคำตำง ๆ ใหกบตวแปร โดยใชเครองหมำย = มรปแบบของนพจนก ำหนดคำคอ

ตวแปร = นพจน ; ตวแปร1 = ตวแปร2 = …. = นพจน ;

ตวอยำงเชน age = 10; speed = distance / time; x = y = z = 45;

25

ตวด าเนนการก าหนดคา

26

ตวด าเนนการคณตศาสตร

ตวด าเนนการ ค าอธบาย ตวอยางการท างาน

ผลลพธ

+ Unary plus +10 +10

- Unary minus -7 -7

* Multiplication 10*3 30

/ Division 10/3 3

% Modulus 10%3 1

+ Addition 10+3 13

- Subtraction 10-3 7

1

2

3

ตวอยางเชน 3 * 2 + 4 % 2 จะไดผลลพธเทากบ (3*2) + (4%2) = 6 + 0 = 6 แตหากตองการใหท าตวด าเนนการในล าดบต ากอน ใหใชเครองหมาย ( ) ครอบค าสงทตองการ เชน 3 * (2 + 4 )% 2 จะไดผลลพธเทากบ 3 * 6 % 2 = 18 % 2 = 0

27

ตวด าเนนการก าหนดคาแบบผสม

ตวด าเนนการ ตวอยางค าสง ค าสงเตม

*= a *= 2; a = a * 2;

/= a /=2; a = a / 2;

%= a %= 2; a = a % 2;

+= a += 2; a = a + 2;

-= a –= 2; a = a – 2;

ตวด ำเนนกำรเพมคำและลดคำ เปนตวด ำเนนกำรเพอใชเพมคำตวแปรขน 1 หรอลดคำตวแปรลง 1 โดยใชเครองหมำย ++ แทนกำรเพมคำขน 1 และ - - แทนกำรลดคำลง 1 และสำมำรถใชตวด ำเนนเพมคำหรอลดคำกบตวแปรได 2 ต ำแหนง คอ วำงตวด ำเนนกำรเพมคำหรอลดคำไวหนำตวแปร และวำงไวหลงตวแปร ดงตวอยำง

a++; ++a;

ทง 2 ค ำ สงจะมคำเทำกบ a = a + 1; สวนค ำ สง

a- -; - - a;

จะมคำเทำกบ a = a – 1;

28

ตวด าเนนการเพมคาและลดคา

กำรเปลยนชนดขอมลโดยใชค ำ สง (Explicit Casting) เชน หำกตองแปลงขอมลชนด float ไปเปนอกขอมลชนด int จะตองใชค ำสง int a; a = (int)12.423; จะไดวำ a มคำเทำกบ 12 กระบวนกำรท ำ งำนจะมกำรเปลยนชนดขอมลทอยใกลกบตวด ำ เนนกำรเปลยนชนดขอมลใหเปนชนดขอมลทระบในวงเลบ แลวจงมกำรก ำหนดคำใหมนนใหกบ a ทงนสำมำรถก ำหนดชนดขอมลทจะเปลยนคำเปนชนดขอมลใด ๆ กได

29

ตวด าเนนการปลยนชนดของขอมล

ผลทไดจำกกำรใชด ำเนนกำรควำมสมพนธ คอ จรง (True) หรอเทจ (False) ซงในภำษำซแทนดวยเลขจ ำนวนเตม กรณเทจจะแทนดวยคำ 0 และกรณจรงจะแทนดวยคำทไมใช 0

30

ตวด าเนนการความสมพนธ

ตวด าเนนการ ความหมาย

> มำกกวำ

< นอยกวำ

>= มำกกวำหรอเทำกบ

<= นอยกวำหรอเทำกบ

ผลลพธของกำรเปรยบเทยบมคำคอจรง หรอเทจ กำรใชงำนจะตองระวงเพรำะมควำมสบสนระหวำงกำรใชตวด ำเนนกำรควำมเทำกน == กบตวก ำหนดคำ = ซงมกำรท ำงำนทตำงกน และตวด ำเนนกำรไมเทำกนใชเครองหมำย != ไมใชเครองหมำย <> เหมอนในภำษำอน ๆ เชน a == 2 เปนกำรเปรยบเทยบวำตวแปร a มคำเทำกบ 2 หรอไม a = 2 เปนกำรก ำหนดคำ 2 ใหกบตวแปร a

31

ตวด าเนนการความเทากน

ตวด าเนนการ ความหมาย

== เทำกน

!= ไมเทำกน

32

ตวด าเนนการตรรกะ

ตวด าเนนการ ความหมาย

&& AND

|| OR

! NOT

P Q P&&Q P||Q P !P

true true true true true false

true false false true false true

false true false true

false false false false

ในกำรเขยนโปรแกรมแบบโครงสรำง จะมรปแบบกำรแกปญหำหรอรปแบบกำรเขยนโปรแกรมอย 3 ลกษณะ คอ กำรเขยนแบบล ำดบ (Sequential) กำรเขยนแบบเงอนไข (Selection) และกำรเขยนแบบวนซ ำ (Repetition) โดยทใชภำษำซมค ำสง if for while do-while

33

ค าสงควบคม

ในกำรเขยนภำษำ C if (เงอนไข){ ค ำสง 1; ค ำสง 2; }

34

ค าสง if

if (เงอนไข){ ค ำสง 1; ค ำสง 2; }else { ค ำสง 3; ค ำสง 4; }

เงอนไข

ค ำสง 1 ค ำสง 2

Y N เงอนไข

ค ำสง 1 ค ำสง 2

ค ำสง 3 ค ำสง 4

Y N

ในกำรเขยนภำษำ C if (เงอนไข 1){ ค ำสง 1; }else if (เงอนไข 2){ ค ำสง 2; }

35

ค าสง if

เงอนไข 1

ค ำสง 1 เงอนไข 2

ค ำสง 2

Y

Y N

ค ำสง for เปนค ำ สงวนซ ำในลกษณะทรจ ำนวนรอบของกำรวนซ ำทแนนอน โดยแบงรปแบบหลกออกเปน 3 สวน ไดแก สวนทใชก ำหนดคำเรมตนหรอก ำหนดคำตวนบของกำรวนซ ำ สวนทตรวจเงอนไขกำรวนซ ำ สวนของกำรจดกำรคำตวนบของกำรวนซ ำ for ( ก ำหนดคำตวนบ ; เงอนไขกำรวนซ ำ ; จดกำรคำตวนบ ){ ค ำสง1; ค ำสง2; } for ( i=0 ; i < 5 ; i++) { scanf(“%d”, number); sum += number; }

36

ค าสง for

ค ำสง 1 ค ำสง 2

For i=1 to 10 Do

หำกแทนผงงำนดงกลำวดวยค ำสง while สำมำรถเขยนรปแบบของค ำสง while ไดดงน while ( เงอนไข ) { ค ำสง1 ; } ค ำสง2 ; ตวอยำง i = 0; while ( i < 10 ) { … i++; } 37

ค าสง while

ค ำสง 1

ค ำสง 2

เงอนไข

Y

N

จำกรปจะเหนวำกำรท ำงำนของค ำสง do-while จะตองมกำรท ำงำนค ำสง1 เสมอหลงจำกนนจะมกำรตรวจสอบเงอนไข หำกเงอนไขเปนจรงกจะกลบไปท ำค ำสงใน do-while อกจนกวำเงอนไขนนจะเปนเทจ เขยนในรปแบบของค ำ สงไดวำ do { ค ำสง1 ; } while ( เงอนไข ) ; ค ำสง2 ; ตวอยำง do { printf(“Enter number (between 10 and 20) : “); scanf(“%d”, &num); } while (num < 10 || num > 20);

38

ค าสง do-while

ค ำสง 2

Y N เงอนไข

ค ำสง 1

ฟงกชนทใชส ำหรบกำรประมวลผลแฟมขอมล ฟงกชน fopen( ) ฟงกชน fclose( ) ฟงกชน fgetc( ) ฟงกชน fputc ( ) ฟงกชน fgets( ) ฟงกชน fputs( ) ฟงกชน fscanf( ) และ fprintf( ) ฟงกชน feof( )

39

การจดการแฟมขอมล

ฟงกชน fopen( ) :

FILE *fileptr;

fileptr = fopen(filename,mode) ในขนตอนแรกเรำตองก ำหนดตวแปรพอยนเตอรชไปยงแฟมขอมล ในทนใหชอตวแปรนวำ fileptr จำกนน ท ำกำรเรยกฟงกชน fopen เพอท ำกำรเปดแฟมขอมล โดยท filename คอ ตวแปรทเกบชอแฟมขอมลทตองกำรเปด mode คอ รปแบบของกำรเปดแฟมขอมล หำกขนตอนของกำรเปดแฟมขอมลโดยฟงกชน fopen( ) ท ำงำนไมส ำเรจ อำจเนองจำกไมพบแฟมขอมลนนในกรณทตองกำรเปดแฟมขอมลเพออำน หรอขอมลในแผนเตม หรอชอแฟมขอมลยำวเกนไป เปนตน คำทสงกลบจำกฟงกชน fopen( ) จะมคำเทำกบวำง (Null)

40

การจดการแฟมขอมล

รปแบบของกำรเปดแฟมขอมลมดงน • “w” ท ำกำรสรำงแฟมขอมลใหมและเปดแฟมขอมลเพอเขยน หำกมแฟมขอมลนนอย

แลว จะท ำกำรลบขอมลเดม และสรำงแฟมขอมลใหม • “r” ท ำกำรเปดแฟมขอมลเพอท ำกำรอำนขอมล • “a” ท ำกำรเปดแฟมขอมลเพอท ำกำรเขยนขอมลใหมตอทำยขอมลทมอยเดม • “r+” ท ำกำรเปดแฟมขอมลทมอยแลวเพอท ำกำรแกไขขอมล • “w+” ท ำกำรสรำงแฟมขอมลใหมและเปดแฟมขอมลนนเพอท ำกำรอำนและเขยนขอมล • “a+” ท ำกำรเปดแฟมขอมลเพอท ำ กำรเขยนขอมลใหมตอทำยขอมลทมอยเดม และท ำ

กำรสรำงแฟมขอมลใหมหำกไมพบแฟมขอมลทระบ

41

การจดการแฟมขอมล

ฟงกชน fclose( )

เมอท ำ กำรประมวลผลแฟมขอมลเสรจเรยบรอยแลว สงทจ ำ เปนจะตองท ำ คอกำรปดแฟมขอมลนนเพอคนคำพนทในหนวยควำมจ ำใหสำมำรถน ำ ไปใชงำนอนตอไปได รปแบบของฟงกชน fclose ( ) มดงน fclose(fileptr); โดยท fileptr คอตวแปรพอยนเตอรชไปยงแฟมขอมลทตองกำรปดทกครงทมกำรเปดแฟมขอมลดวยฟงกชน fopen ( ) ควรจะใชฟงกชน fclose ( ) ดวยเสมอ ฟงกชน fgetc( )

ฟงกชน fgetc ( ) จะท ำกำรอำนคำอกขระทละอกขระจำกแฟมขอมลรปแบบเปนดงน ch = fgetc (fileptr) ; โดยท ch เปนตวแปรทใชรบคำอกขระทไดจำกกำรอำนแฟมขอมล และ fileptr คอตวแปรพอยนเตอรชไปยงแฟมขอมลทตองกำรอำนขอมล

42

การจดการแฟมขอมล

ฟงกชน fputc ( )

ฟงกชนนใชส ำหรบกำรเขยนขอมลทละอกขระลงในแฟมขอมล เมอเขยนขอมลเสรจ 1 อกขระจะท ำกำรเลอนต ำแหนงของพอยนเตอรของแฟมขอมลไป 1 ต ำแหนง รปแบบของฟงกขน fputc ( ) เปนดงน fputc ( ch, fileptr); โดยท ch เปนตวแปรทเกบคำอกขระทตองกำรเขยนลงแฟมขอมล และ fileptr คอตวแปรพอยนเตอรชไปยงแฟมขอมลทตองกำรเขยนขอมล ฟงกชน fgets( )

ฟงกชนนใชส ำหรบอำนขอมลในรปแบบของสตรงจำกแฟมขอมล โดยในกำรอำนคำขอมลตองท ำ กำรระบขนำดของขอมลทตองกำรอำน รปแบบของฟงกชน fgets ( ) เปนดงน fgets ( str , len , fileptr ); โดยท str เปนตวแปรทใชส ำหรบเกบคำสตรงทไดจำกกำรอำนขอมล len คอตวแปรทใชส ำหรบก ำหนดขนำดของขอมลทท ำกำรอำน และ fileptr คอตวแปรพอยนเตอรชไปยงแฟมขอมลทตองกำรอำน

43

การจดการแฟมขอมล

ฟงกชน fputs( )

ฟงกชนนใชส ำหรบกำรเขยนขอมลในรปแบบของสตรงลงในแฟมขอมล รปแบบเปนดงน fputs ( str , fileptr ); โดยท str เปนตวแปรทใชส ำหรบเกบคำสตรงทตองกำรบนทก และ fileptr คอตวแปรพอยนเตอรชไปยงแฟมขอมลทตองกำรเขยน ฟงกชน fscanf( ) และ fprintf( )

หำกตองกำรอำนหรอเขยนขอมลโดยก ำหนดรปแบบของกำรประมวลผลนนสำมำรถท ำไดโดยเรยกใชฟงกชน fscanf ( ) เพอกำรอำนขอมล และเรยกใชฟงกชน fprintf ( ) เพอกำรเขยนขอมลรปแบบของทงสองฟงกชนเปนดงน fscanf (fileptr , format , arg1,arg2, … ); fprintf (fileptr , format , arg1,arg2, … ); fileptr คอ ตวแปรพอยนเ ตอรชไปยงแฟมขอมลทตองกำรอำนหรอเขยน format คอ รปแบบของกำรอำนและเขยนขอมล arg1,arg2,… คอ ตวแปรทตองกำรสงคำเพออำนหรอเขยนขอมล

44

การจดการแฟมขอมล

ฟงกชน feof( )

กำรเกบขอมลในแฟมขอมลทกแฟมนนจะมกำรเกบอกขระพเศษทไมสำมำรถมองเหนไดคอ EOF (End Of File) เพอเปนสงบอกใหทรำบวำเปนจดสนสดของแฟมขอมล ฟงกชนทใชตรวจสอบวำต ำแหนงของไฟลพอยนเตอรปจจบนเปนต ำแหนงสนสดของแฟมขอมลใชหรอไมคอฟงกชน feof ( ) รปแบบกำรใชงำนฟงกชนนคอ retvalue = feof ( fileptr ); fileptr คอ ตวแปรพอยนเตอรทชไปยงแฟมขอมล retvalue คอคำทคนกลบมำเพอบอกใหทรำบวำไฟลพอยนเตอรชอยทต ำแหนง EOF หรอไม ถำ retvalue = 0 แสดงวำไฟลพอยนเตอรไมไดชอยทต ำแหนง EOF ถำ retvalue ไมเทำกบ 0 แสดงวำไฟลพอยนเตอรชอยทต ำแหนง EOF

45

การจดการแฟมขอมล

Recommended