ภาษาโปรแกรม (ภาษาซี)
DESCRIPTION
ภาษาโปรแกรม (ภาษาซี). 1. ประวัติความเป็นมา. ภาษา BCPL. ภาษา B. ภาษา C. Basic Combined Programming Language. พ.ศ. 2515 โดย เดนนิช ริทชี่. บนเครื่อง PDP-7 (UNIX) พ.ศ. 2513. # header ส่วนที่ 1 main( ) - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/1.jpg)
ภาษาโปรแกรม (ภาษาซ)
![Page 2: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/2.jpg)
2
ภาษาBCPL
ภาษา B
ภาษา C
1. ประวตความเปนมา
บนเครอง PDP-7 (UNIX)พ.ศ. 2513
พ.ศ. 2515โดย เดนนช รทช
Basic CombinedProgrammingLanguage
![Page 3: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/3.jpg)
3
# header สวนท 1main( ){ /* เรมโปรแกรม */ declaration สวนท 2 ……… คำาสงตาง ๆ สวนท 3
}
2. โครงสรางพนฐานของภาษาซ
![Page 4: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/4.jpg)
4
สวนท 1 เปนสวนทระบใหซคอมไพเลอรเตรยมการทำางานทกำาหนด ในสวนนไว โดยหนาคำาสงจะมเครองหมาย # เชน # include <stdio.h> เปนการระบใหนำาไฟล stdio.h มารวมกบไฟลน เพอทจะ สามารถใชคำาสงทอยในไฟลนมาใชงานได หรอ # define START 0 เปนการกำาหนดคาคงทใหกบตวแปร START โดยใหมคาเปน 0 หรอ # define temp 37 เปนการกำาหนดใหตวแปร temp มคาเทากบ 37
![Page 5: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/5.jpg)
5
สวนท 2 declaration เปนการกำาหนดชนดขอมลทจะใชใน โปรแกรมซงตวแปรหรอขอมลตาง ๆ นนจะตองถก ประกาศ(declare) ในสวนนกอน จงจะสามารถนำาไปใช ในโปรแกรมได เชน int stdno; เปนการกำาหนดวาตวแปร stdno เปนขอมลชนดจำานวนเตม หรอ interger ซงอาจไดแกคา 0,4,-1,-3,…. เปนตน float score; เปนการกำาหนดวาตวแปร score เปนขอมลชนดเลขมจด ทศนยม (floating point) ซงอาจมคา0.23, 1.34, -21.002, เปนตน
![Page 6: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/6.jpg)
6
สวนท 3 Body คอสวนของตวโปรแกรม โดยจะตองเรมตนดวยฟงกชน main ( ) แลวใสเครองหมายกำาหนดขอบเขตเรมตนของตว โปรแกรมคอ { หลงจากนนใสคำาสงหรอฟงกชนตาง ๆ โดยแต ละคำาสงหรอฟงกชนนน ๆ จะตองปดดวยเครองหมาย ; เมอตองการจบโปรแกรมใหใสเครองหมาย } ปดทาย เชน main ( ) { /* เรมตนโปรแกรม */ คำาสงตาง ๆ ; ฟงกชน; …………… …………... } /* จบโปรแกรม */
![Page 7: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/7.jpg)
7
เครองหมายตาง ๆ
{ } - เปนตวกำาหนดขอบเขตหรอบลอกของฟงกชน ( ) - เปนการระบตวผานคาหรอ
อารกวเมนตใหกบฟงกชน ถาภายในวงเลบไมมขอความใด ๆแสดงวาไมมตวผาน คาทตองการระบสำาหรบฟงกชนนน ๆ/* */ - เปนการกำาหนด comment หรอ
ขอความ ทไม ตองการใหคอมไพเลอรปฏบตงานซงขอความทอย ภายในเครองหมายนจะถอวา ไมใชคำาสงปฏบตงาน
![Page 8: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/8.jpg)
8
# include <stdio.h>int main (void ){ printf(“Hello, Good morning. \n”);}
ตวอยางโปรแกรม
โปรแกรมท 1
เปนโปรแกรมสงพมพขอความ Hello, Good morning.
![Page 9: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/9.jpg)
9
โปรแกรมท 2
# include <stdio.h>main ( ){ float point; printf("\n\nPut your score in\n"); scanf("%f", &point); printf("Your score is %f point\n\n", point);}
เปนโปรแกรมรบคะแนนและเกบคาทตวแปร point หลงจากนนสงใหมการพมพคะแนนออกมา
![Page 10: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/10.jpg)
10
ชนดของขอมลและตวแปรในภาษาซ
การกำาหนดชอตวแปร หลกการมดงน 1. ตองขนตนดวยตวอกษร 2. หามใชเครองหมายทางคณตศาสตรในชอตวแปร 3. สามารถใชเครองหมาย underline ‘_’ ได 4. หามใช reserved words เชนint, float, etc. Note: คอมไพเลอรในภาษาซสามารถเหนความ
แตกตางของชอตวแปรไดยาวไมเกน 8 ตวอกษรและชอตวแปรจะแตกตางกนถาใชรปแบบของตวอกษรตางกน
![Page 11: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/11.jpg)
11
แบบขอมลหรอชนดของตวแปรตาง ๆ ทกำาหนดไวในภาษาซ char ชนดของตวอกษรหรออกขระ
int ชนดจำานวนเตมปกตshort ชนดจำานวนเตมปกตlong ชนดจำานวนเตมทมความ
ยาวเปน 2 เทาunsigned ชนดของเลขทไมคด
เครองหมายfloat ชนดเลขมจดทศนยมdouble ชนดเลขทมจดทศนยมความ
ยาวเปน 2 เทา
แบบขอมลและขนาด
![Page 12: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/12.jpg)
12
ชนดขอมล ( )เนอทสำ�หรบเกบไบต ค�ตวเลขทเกบChar 1 เกบตวอกษรASCII 1 0 255ได ตวหรอจำ�นวนเตมระหว�ง ถงInt 2 –32768 32767ค�ตวเลขระหว�ง ถงShort 2 –32768 32767ค�ตวเลขระหว�ง ถงLong 4 ค�ตวเลขประม�ณ 2000 ล�นUnsigned Unsigned short = 2
Unsigned long = 4 0 65535ค�ตวเลขระหว�ง ถง 0 4000 ค�ตวเลขระหว�ง ถง ล�น
Float 4 10ไดค�ตวเลขยกกำ�ลง x โดย x –37 +38มค�ระหว�ง ถงDouble 8 คว�มถกตองของตวเลขจะมค�สงขน
ตารางแสดงเนอทในหนวยความจำาและคาตวเลขทเกบของขอมลแตละชนด
![Page 13: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/13.jpg)
13
ในการเขยนโปรแกรม แบบขอมลทใชจะแบงออกเปน 4 กลมใหญ ดงน
ขอมลและตวแปรชนดอกขระ
ขอมลและตวแปรชนดจำานวนเตม
ขอมลและตวแปรชนดเลขมจดทศนยม
ขอมลและตวแปรแบบสตรง
![Page 14: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/14.jpg)
14
ขอมลและตวแปรชนดอกขระ1 อกขระแทนดวย char ‘ ’ โดยอยภายในเครองหมาย เชน
# include <stdio.h>main ( ){ char reply;
reply = ‘y’; …………………}
![Page 15: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/15.jpg)
15
การใหคาอกขระทเปนรหสพเศษหรอรหสควบคม อกขระเหลานไมสามารถใหคาโดยตรง แตจะ
ทำาไดโดยการใหคาเปนรหส ASCII ซงจะเขยนใน ‘รปของเลขฐานแปด โดยใชเครองหมาย \’ นำา
หนา หรอใชตวอกขระทกำาหนดใหกบรหสนน ๆ ‘เขยนตามเครองหมาย \’ สำาหรบรหสบางตว เชน
รหส BELL แทนดวย ASCII 007 ซงกำาหนดไดดงน beep = ‘\007’; หรอรหสควบคมการขนบรรทดใหม ตวอกขระท
กำาหนดใหกบรหส คอ n สามารถกำาหนดเปน newline = ‘\n’;
![Page 16: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/16.jpg)
16
ตวอยางโปรแกรม
# include <stdio.h>main ( ){ char newline;
newline = ‘\n’; printf(“Hello, Good morning. %c”,newline);
printf(“Hello, Good morning.\n”);}
![Page 17: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/17.jpg)
17
ขอมลและตวแปรชนดจำานวนเตม จำานวนเตมในภาษาซสามารถใชแทนได 4 รปแบบ
คอ int, short, long และ unsigned สำาหรบการกำาหนดตวแปรแบบ unsigned คอ
จำานวนเตมทไมคดเครองหมายนนจะตองใชควบค กบรปแบบขอมลจำานวนเตมชนดอน ๆ คอ int
หรอ short หรอ long ตวอยางเชน unsigned int plusnum;
unsigned long width; unsigned short absno; /* absolute number */
![Page 18: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/18.jpg)
18
ขอมลและตวแปรชนดเลขมจดทศนยม สำาหรบเลขมจดทศนยมนนแทนได 2 แบบคอ float และdouble โดย double เกบคาไดเปน 2 เทาของ float สำาหรบงานทางวทยาศาสตรทตองการความละเอยดในการเกบคา
มกใชการเกบในรปแบบน คอเกบแบบเอกโพเนนซ ดงตวอยางตอไปน
ตวเลข แสดงแบบวทยาศาสตร แบบเอกโพเนนซ 9,000,000,000 9.0*109 9.0e9 345,000 3.45*105 3.45e5 0.00063 6.3*10-4 6.3e-4 0.00000924 9.24*10-6 9.24e-6
![Page 19: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/19.jpg)
19
ขอมลและตวแปรแบบสตรง
สตรงหมายถงตวอกขระหลาย ๆ ตวมาประกอบกนเปนขอความ ซงการทนำาตวแปรหลาย ๆ ตวมาเกบรวมกนในภาษาซนเรยกวา อะเรย
(array) ดงนนขอมลแบบสตรงคอ อะเรยของตวอกขระ นนเอง เครองหมายของอะเรยคอ [ ] รปแบบการกำาหนดสตรงจงม
ลกษณะดงน char name[30];
หมายถง ตวแปร name เปนชนด char ทมความยาว 30 ตวอกษร โดยเกบเปน อะเรย การเกบนนจะเกบเรยงกนทละไบต และไบตสดทาย
เกบรหส null คอ \0 ดงนนจะเกบไดจรงเพยง 29 ตวอกษร
![Page 20: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/20.jpg)
20
การกำาหนดคาใหตวแปรและการสงผลลพธการกำาหนดคาใหตวแปรอาจทำาไดโดยกำาหนดในโปรแกรม
หรอกำาหนดในขณะทมการกำาหนดชนดกได เชนmain ( ){ int age = 18; float height; height = 172.5; printf(“Mr. Surasak is %d years old”,age); printf(“ and tall %f cms.\n”,height);}
![Page 21: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/21.jpg)
21
ตวอยางของโปรแกรมในการกำาหนดคาและสงคาผลลพธ# include <stdio.h>main ( ){ int sum,valuea; int count = 1; valuea = 4; sum = count + valuea; printf(“Total value is %d.\n”,sum);}ผลลพธจะปรากฏขอความ : Total value is 5.
![Page 22: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/22.jpg)
22
ฟงกชน printf( ) และ scanf( )
รปแบบของ printf ( ) printf( สวนควบคมการพมพ, อารกวเมนต, อารกวเมนต,...)
สวนควบคมการพมพ เปนสตรงทมขอความและ “ รปแบบของการพมพโดยอยในเครองหมาย
”
อารกวเมนต เปนสวนทจะนำาขอมลมาพมพตามรปแบบทกำาหนดมาในสวนควบคมการพมพ
![Page 23: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/23.jpg)
23
รปแบบทใชสำาหรบกำาหนดการพมพในฟงกชน printf %d พมพดวยเลขฐานสบ
%o ” ” เลขฐานแปด %x ” ” เลขฐานสบหก %u ” ” เลขฐานสบแบบไมคดเครองหมาย
%e ” ” ตวเลขแบบวทยาศาสตร เชน 2.13e45%f ” ” ตวเลขมจดทศนยม%g ” ” รปแบบ %e หรอ %f โดยเลอกแบบ
ทสนทสดสำาหรบสตรงมรปแบบการพมพดงน
%c พมพดวยตวอกษรตวเดยว%s ” ”ขอความ
![Page 24: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/24.jpg)
24
เครองหมายสำาหรบปรบเปลยนรปแบบของขอมล
เครองหมายลบ ใหพมพขอมลชดขอบซาย (ปกตขอมลทงหมดจะพมพชดขวา) สตรงตวเลข ระบความกวางของฟลด จดทศนยม เปนการกำาหนดความกวางของจดทศนยม
Note การปรบเปลยนรปแบบของขอมลนทำาไดโดย การใส เครองหมายเหลานระหวางเครองหมาย % และเครองหมาย ทกำาหนดรปแบบการพมพ
![Page 25: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/25.jpg)
25
รปแบบของ scanf ( )
scanf( สวนควบคมขอมล, อารกวเมนต, อารกวเมนต,...)
สวนควบคมขอมล เปนการกำาหนดรปแบบขอมลใน “ ”เครองหมาย
อารกวเมนต เปนสวนทจะนำาขอมลมาเกบ(ในตวแปร) ซงชนดของขอมลตองตรงตามรปแบบทกำาหนดในสวน
ควบคมขอมล การกำาหนดลกษณะอารกวเมนตมได 2 แบบดงน
ถาขอมลนนอาจจะนำาไปใชในการคำานวณ - จะใสเครองหมาย & หนาตวแปร ถาขอมลนนเปนขอความทจะนำาไปเกบไวในตวแปรเลย - ไมจำาเปนตองใสเครองหมาย & หนาตวแปร
![Page 26: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/26.jpg)
26
โอเปอเรเตอรและนพจน
การแทนโอเปอเรเตอรทางคณตศาสตรสำาหรบภาษาซ+ การบวก- การลบ* การคณ/ การหาร% การหารเอาเศษ (โมดลส)
![Page 27: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/27.jpg)
27
การเปลยนชนดของขอมล
ทำาไดโดยระบชนดทตองการเปลยนภายใน เครองหมาย ( )
แลววางหนาตวแปรหรอขอมลทตองการเปลยนแปลงชนด
float money; ตองการเปลยนตวแปร float ไปเปน
integer ทำาไดดงน (int) money;
int cost; cost = 2.7+4.5; cost = (int)2.7+(int)4.5;
![Page 28: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/28.jpg)
28
การเพมคาและลดคาตวแปร ++n เพมคา n อก 1 - -n ลดคา n ลง 1
ความแตกตางระหวาง count++ และ ++count เชน count = 5; x = count++; จะไดคา x เทากบ5 แลวคา count
เทากบ 6 count = 5; x = ++count; จะไดคา x เทากบ6
![Page 29: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/29.jpg)
29
นพจนกำาหนดคา (Assignment expression) เครองหมายทใชกำาหนดคาคอ =
โดยเปนการกำาหนดคาทางขวาของเครองหมายใหกบตวแปรทอย
ทางซาย เชน j = 7+2 หรอ k = k+4
3.4.6 เครองหมายและนพจนเปรยบเทยบ > หรอ >= มากกวา หรอมากกวาเทากบ < หรอ <= นอยกวา หรอนอยกวาเทากบ == เทากบ != ไมเทากบ
![Page 30: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/30.jpg)
30
ความแตกตางของเครองหมาย = และ == เครองหมาย = เปนตวกำาหนดคา
ในขณะทเครองหมาย == เปนเครองหมายเปรยบเทยบ ตวอยางเชน
point = 44; หมายถง เปนการกำาหนดคาใหกบตวแปร point ใหมคาเทากบ 44
point == 44; หมายถง เปนการตรวจสอบวาคา point มคาเทากบ 44 หรอไม
![Page 31: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/31.jpg)
31
เครองหมายและนพจนเปรยบเทยบแบบตรรกศาสตร && และ (and) | | หรอ (or) ! ไม (not)
คาของนพจนเปรยบเทยบเชงตรรก นพจนท 1 && นพจนท 2 เปนจรง เมอนพจนทงสองเปนจรง นพจนท 1 | | นพจนท 2 เปนจรง เมอนพจนใดนพจนหนง เปนจรงหรอ ทงสองนพจนนนเปนจรง ! นพจนเปรยบเทยบ เปนจรง เมอนพจนเปรยบเทยบเปนเทจ
![Page 32: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/32.jpg)
32
คำาสง if รปแบบของคำาสง if (เงอนไข) คำาสงทตองทำา ถาเงอนไขนนเปนจรง; ตวอยางเชน if (score >= 80) grade = ‘A’; /* simple statement */ หรอ if (math >= 60 && eng >= 55) { grade = ‘S’; /* compound statement */ printf(“Your grade is %c\n”,grade); }
![Page 33: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/33.jpg)
33
คำาสง if ….. else ….. รปแบบของคำาสง if (คำาสงหรอนพจนเงอนไข) คำาสงทตองทำาเมอเงอนไขนนเปนจรง else คำาสงทตองทำาเมอเงอนไขนนไมเปนจรง
ตวอยางเชน if (value1 > value2) min = value2; else min = value1;
![Page 34: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/34.jpg)
34
เครองหมายพเศษทใชในการเปรยบเทยบเงอนไข ? : รปแบบทวไปของคำาสงเปรยบเทยบเงอนไข ? : มดงน นพจนท 1 ? นพจนท 2 : นพจนท 3
ความหมายคอ if นพจนท 1 เปนจรง ทำาตามคำาสงในนพจนท 2 else ทำาตามคำาสงในนพจนท 3 เชน x = (y< 0) ? -y : y;
![Page 35: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/35.jpg)
35
คำาสงตรวจสอบเงอนไขหลาย ๆ ทาง : switch และ break
รปแบบคำาสง switch (นพจน) { case label1 : statement1; case label2 : statement2; …………….. …………….. default : statementn; }
![Page 36: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/36.jpg)
36
ตวอยาง switch (ch) { case ‘1’ : printf(“Red\n”); case ‘2’ : printf(“Blue\n”); case ‘3’ : printf(“Yellow\n”); default : printf(“White\n”); }
![Page 37: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/37.jpg)
37
ตวอยาง switch (ch) { case ‘1’ : printf(“Red\n”); break;
case ‘2’ : printf(“Blue\n”); break;
case ‘3’ : printf(“Yellow\n”); break;
default : printf(“White\n”); }
![Page 38: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/38.jpg)
38
คำาสง loop หรอคำาสงวนซำา
คำาสงลป while รปแบบ while (นพจนเงอนไข) { คำาสงทวนลป; ………… compound statements …………. }
![Page 39: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/39.jpg)
39
คำาสงลป for รปแบบ for ( นพจนท 1 ; นพจนท 2 ;
นพจนท 3 ) { คำาสงวนรอบ; ……. } เปนคำาสงทใชในการควบคมใหมการวนรอบคำา
สงหลาย ๆ รอบ โดยนพจนท 1 คอการกำาหนดคาเรมตนใหกบตวแปร
ทใชในการวนรอบ นพจนท 2 เปนการเปรยบเทยบ กอนทจะวนรอบถา
เงอนไขของนพจน เปนจรงจะมการทำางานตามคำาสงวนรอบ นพจนท 3
เปนคำาสงในการกำาหนดคาทจะเปลยนแปลงไปในแตละรอบ
![Page 40: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/40.jpg)
40
คำาสงวนรอบแบบทตรวจสอบเงอนไขทหลง : do while รปแบบ do statement; while (นพจนเงอนไข); เชน num = 2; do { num++; printf(“Now no is %d\n”,num); } while (num == 10)
![Page 41: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/41.jpg)
41
คำาสงควบคมอน ๆ break, continue, goto และ labels
คำาสง break ใชเมอตองการใหการทำางานสามารถหลดออกจากลปและกระโดด
ไปยงคำาสงทอยนอกลปทนท โดยไมตองตรวจสอบเงอนไขใด ๆ
คำาสง continue ใชเมอตองการใหการทำางานนน ยอนกลบไปวนรอบใหมอกครง
ซงมลกษณะทตรงขามกบคำาสง break
![Page 42: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/42.jpg)
42
คำาสง goto และ labels คำาสง goto ประกอบดวย 2 สวน คอ
- ตวคำาสง goto เปนคำาสงใหกระโดดไปยงตำาแหนงทกำาหนด โดยจะกำาหนดเปนชอ เรยกวา label name - ชอ (label name) เปนตวกำาหนดตำาแหนงทคำาสงจะกระโดด ไปทำางาน
ขอควรระวง ! คำาสงนถอเปนคำาสงทควรหลกเลยงในการเขยนโปรแกรม แตถาจำาเปนหรอหลกเลยงไมไดเทานน จงจะใชคำาสงน
![Page 43: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/43.jpg)
43
ตวอยางโปรแกรมทใชคำาสง goto#include<stdio.h> main(){ int sum,n;
for(n=1;n<10;n++)
if (n==5) goto part1; else printf(“%d\n”,n);
part1 : printf(“Interrupt with no. 5\n”);}
![Page 44: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/44.jpg)
44
ฟงกชน ฟงกชน (Function)(Function)
![Page 45: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/45.jpg)
45
ฟงกชน ฟงกชน(Functions)(Functions)
การออกแบบโปรแกรมในภาษาซจะอย บนพนฐานของการออกแบบโมดล
(Module Design) โดยการแบง โปรแกรมออกเปนงานยอย ๆ (หรอโมดล)
แตละงานยอยจะทำางานอยางใดอยางหนง เทานน และไมควรจะมขนาดใหญจนเกนไป
งานยอยเหลานเมอนำาไปเขยนโปรแกรมในภาษาซจะเปนการเขยนในลกษณะของฟงกชน
![Page 46: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/46.jpg)
46
รบขอมล 2 จำานวนจากผใช บวกเลข 2 จำานวนแลวเกบผลลพธแสดงผลลพธของการทำางาน
โปรแกรมเพอบวกเลขสองจำานวนท รบจากผใช และแสดงผลการ
คำานวณ
ตวอยาง
สามารถแบงการทำางานเปนงานยอยไดดงน
![Page 47: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/47.jpg)
47
ฟงกชนการรบขอมลฟงกชนในการบวกเลขฟงกชนแสดงผลลพธ
จะไดวาโปรแกรมประกอบดวยฟงกชน4 ฟงกชนคอฟงกชนหลก
ตวอยาง(ตอ)
![Page 48: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/48.jpg)
48
Source filefunction
functionfunction
Source filefunction
functionfunction
Object file
Object file
Library file
Execute file
compile
compile
link
link
link
ขนตอนการสรางโปรแกรม ดวยภาษา C
![Page 49: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/49.jpg)
49
4.1 รปแบบของฟงกชน
ชนดขอมลทคนคา ชอฟงกชน ( การ ประกาศตวแปร )
{ การประกาศตวแปรภายในฟงกชน;
คำาสง;return (คาขอมลทตองการ
สงคากลบ);}
int , char , float , double ฯลฯ
แบบท 1
![Page 50: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/50.jpg)
50
รปแบบของฟงกชน (ตอ)
void ชอฟงกชน ( การประกาศ ตวแปร )
{การประกาศตวแปรภายใน
ฟงกชน;คำาสง;
}
แบบท 2
![Page 51: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/51.jpg)
51
ตวอยาง4.1
แสดงการทำางานของโปรแกรมการบวกเลขจำานวน
จรง 2 จำานวนทรบจากผใช#include <stdio.h>double InputDouble ( ) {
double x; printf ( “\nInput real
value : “ ); scanf ( “%.2f ”, &x ); return ( x );
}
![Page 52: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/52.jpg)
52
ตวอยาง 41.(ตอ)double SumDouble
( double x, double y ) {
return ( x + y );}void PrintOut ( double x ) {
printf ( “\n Result of sum is : %.2f”, x );}
![Page 53: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/53.jpg)
53
ตวอยาง 41.(ตอ)void main ( )
{ double a1, a2,
sumVal; a1 =
InputDouble( ); a2 =
InputDouble( ); sumVal =
SumDouble ( a1, a2 ); PrintOut ( sumVal );
}
![Page 54: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/54.jpg)
54
42 การประกาศโพรโทไทปของฟงกชน
การประกาศโปรโตไทปเปนสงจำาเปนในภาษาซเนองจากภาษาซเปนภาษาในลกษณะทตองมการประกาศ
ฟงกชนกอนจะเรยกใชฟงกชนนน(Predefined Function)
![Page 55: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/55.jpg)
55
จากตวอยางท 4.1 จะเหนวาฟงกชนmain ( ) จะอยใตฟงกชนอน ๆ ทม
การเรยกใช เปนลกษณะทตองประกาศฟงกชนทตองการเรยกใชกอนจากเรยก
ใชฟงกชนนน แตหากตองการยาย ฟงกชน main ( ) ขนไปไวดานบน จะ
ตองมการประกาศโปรโตไทปของฟงกชนทตองการเรยกใชกอนเสมอ
![Page 56: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/56.jpg)
56
#include <stdio.h>double InputDouble ( );double SumDouble ( double , double );void PrintOut ( double );
ตวอยาง4.2 แสดงการทำางานของ
โปรแกรมการบวกเลขจำานวนจรง 2 จำานวนทรบจากผใช ในลกษณะทมการประกาศโปรโตไทป
![Page 57: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/57.jpg)
57
void main ( ) {
double a1, a2, sumVal;
a1 = InputDouble( );
a2 = InputDouble( );
sumVal = SumDouble ( a1, a2 );
PrintOut ( sumVal );}
ตวอยาง 4.2 (ตอ)
![Page 58: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/58.jpg)
58
จะเหนวาในโปรโตไทปไมมการประกาศชอตวแปร มแตการเขยนประเภทของตวแปรไวภายใน เปนการชวยใหคอมไพเลอรสามารถตรวจสอบจำานวนของตวแปร ประเภทของตวแปร ประเภทของการคนคา ภายในโปรแกรมวามการเรยกใชงานสงตาง ๆ เกยวกบฟงกชนนนถกตองหรอไม นอกจากนเราอาจจะแยกสวนโปรโตไทปไปเขยนไวในอนคลชไฟลกไดเชนเดยวกน
![Page 59: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/59.jpg)
59
4.3 การเรยกใชฟงกชน
การเรยกใชฟงกชนทมการคนคา จะใชรปแบบดงตอไปน
คาทรบ = ฟงกชน (อารกวเมนต)
![Page 60: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/60.jpg)
60
a1 = a1 = InputDouble ( );InputDouble ( );
ใชคกบโปรโตไทปdouble double InputDouble InputDouble ( );( );
ตวอยาง a1 ตองมชนดเปน double เนองจากคาทจะสง
คนกลบมาจากฟงกชนมชนดเปน double
![Page 61: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/61.jpg)
61
sumVal = sumVal = SumDouble (a1,a2 );SumDouble (a1,a2 );
ใชคกบโปรโตไทปdouble double InputDouble ( );InputDouble ( );
ตวอยาง a1 และ a2 ตองมชนดเปน double
เพอใหตรงกบชนดตวแปรของอารกวเมนททประกาศในโปรโตไทป
![Page 62: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/62.jpg)
62
PrintOut( sumVaPrintOut( sumVal );l );
ใชคกบโปรโตไทปvoid PrintOut void PrintOut
( double );( double );
ตวอยาง
ประกาศใหรวาฟงกชนนไมมการคนคา
![Page 63: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/63.jpg)
63
4.4 ขอบเขต( Scope)
การทำางานของโปรแกรมภาษาซจะ ทำางานทฟงกชน main ( ) กอนเสมอ
เมอฟงกชน main ( ) เรยกใชงาน ฟงกชนอน กจะมการสงคอนโทรล
(Control) ทควบคมการทำางานไปยง ฟงกชนนน ๆ จนกวาจะจบฟงกชน
หรอพบคำาสง return
![Page 64: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/64.jpg)
64
เมอมการเรยกใชงานฟงกชนจะมการจองพนทหนวยความจำาสำาหรบ
ตวแปรทตองใชภายในฟงกชนนนและเมอสนสดการทำางานของฟงกชนกจะมการคนพนทหนวย
ความจำาสวนนนกลบสระบบ การใชงานตวแปรแตละตวจะมขอบเขตของการใชงานขนอยกบตำาแหนงท
ประกาศตวแปรนน
![Page 65: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/65.jpg)
65
a1a2
sumVal
main ( )
xInputDouble ( )
a1 = a1 = InputDouble( )InputDouble( )
;;
ตวอยาง
step1step1
จากตวอยาง 4.1 และ 4.2 สามารถแสดงขอบเขตการทำางานไดดงน
![Page 66: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/66.jpg)
66
a1a2
sumVal
main ( )
xInputDouble ( )
a2 = a2 = InputDouble( )InputDouble( )
;;
ตวอยาง(ตอ)
step2step2
![Page 67: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/67.jpg)
67
a1a2
sumVal
main ( )
xsumDouble ( )
sumVal=SumDouble(a1,asumVal=SumDouble(a1,a2)2)
ตวอยาง(ตอ)
Step3Step3
y
![Page 68: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/68.jpg)
68
a1a2
sumVal
main ( )
xPrintSum ( )
PrintSum(sumVal);PrintSum(sumVal);
ตวอยาง(ตอ)
step4step4
![Page 69: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/69.jpg)
69
จะเหนวาตวแปร x ทประกาศในแตละขนตอนจะทำางานอยภายในฟงกชนทมการ
ประกาศคาเทานน และใชพนทในการเกบ ขอมลคนละสวนกน
ขอบเขตการทำางานของตวแปรแตละตวจะกำาหนดอยภายบลอกของคำาสงภายใน
เครองหมายปกกา ( { } ) หรอการ ประกาศในชวงของการประกาศฟงกชน
เรยกตวแปรเหลานวา ตวแปรโลคอล ตวแปรโลคอล(Local Variable)(Local Variable)
![Page 70: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/70.jpg)
70
นอกจากนสามารถประกาศตวแปรไวทภายนอกฟงกชนบรเวณสวนเรมของ
โปรแกรมจะเรยกวา ตวแปรตวแปร โกลบอล โกลบอล (Global Variable)(Global Variable) ซง
เปนตวแปรทสามารถเรยกใชทตำาแหนง ใด ๆ ในโปรแกรมกได ยกเวนในกรณท
มการประกาศตวแปรทมชอเดยวกนตวแปรโกลบอลภายในบลอกหรอ
ฟงกชน
![Page 71: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/71.jpg)
71
#include <stdio.h>int x;void func1 ( ) {
x = x + 10; printf ( “func1 ->
x : %d\n”, x );}
ตวอยาง4.3
แสดงการทำางานของโปรแกรมในลกษณะทมตวแปรโกลบอล แสดงขอบเขตการใชงานของตวแปรภายในโปรแกรม
![Page 72: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/72.jpg)
72
void func2 ( int x ) {
x = x + 10; printf ( “func2 -> x :
%d\n”, x );}void func3 ( ) {
int x=0; x = x + 10; printf ( “func3 -> x :
%d\n”, x );}
ตวอยาง4.3 (ตอ)
![Page 73: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/73.jpg)
73
void main ( ){
x = 10;printf ( “main (start) -> x :
%d\n”, x );func1 ( );
printf ( “main (after func1) -> x : %d\n”, x ); func2 ( x );
printf ( “main (after func2) -> x : %d\n”, x); func3 ( );
printf ( “main (after func3) -> x : %d\n”, x);}
ตวอยาง4.3 (ตอ)
![Page 74: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/74.jpg)
74
main (start) -> x : 10func1 -> x : 20main (after func1) -> x : 20func2 -> x : 30main (after func2) -> x : 20func3 -> x : 10main (after func3) -> x : 20
ตวอยาง4.3 (ตอ) ผลการทำางาน
![Page 75: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/75.jpg)
75
ขอมลแบบโครงสร�งและยเนยน
(Structures and Unions)
![Page 76: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/76.jpg)
76
5.1 คว�มรทวไปเกยวกบโครงสร�ง
(0,0)
(4,3)
ห�กตองก�รเกบขอมลจดบนแกนโคออดเนท จะประกอบไปขอมลแกน x และ y เปนขอมล
จำ�นวนเตมประเภท int ประเภทขอมลทใชได แกประเภทขอมลแบบโครงสร�ง ส�ม�รถ
ประก�ศประเภทขอมลทใชดงน
![Page 77: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/77.jpg)
77
struct point { int x;
int y;
};
การประกาศประเภทขอมลประเภทขอมลแบบโครงสราง
Member
หมายเหต การประกาศชอสมาชกภายในstruct จะใชชอใดกไดอาจจะซำากบชอตวแปรทอย
ภายนอก struct แตชอทอยภายใน struct เดยวกนหามประกาศชอซำากน
![Page 78: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/78.jpg)
78
struct point { int x;
int y;
} x, y , z;
การประกาศตวแปรขอมลตวแปรขอมลแบบโครงสราง
หมายเหต จะเหนวาชอของ struct จะ ประกาศหรอไมกได หากไมมการประกาศจะไม
สามารถนำา struct นนกลบมาใชไดอก
แบบท 1
![Page 79: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/79.jpg)
79
struct point { int x;
int y;
};
struct point x,y,z
แบบท 2 การประกาศ
แบบขอมล
โครงสรางการ
ประกาศ ตวแปร
ขอมลแบบ
โครงสราง
![Page 80: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/80.jpg)
80
struct point pt = {320,200};
การกำาหนดคาเรมตนใหกบตวแปรขอมลแบบโครงสราง
struct_name.member
การอางถงสมาชกภายในตวแปรขอมลแบบโครงสราง
![Page 81: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/81.jpg)
81
เมอตองการอางถงสมาชกภายในstruct
วาอยตรงกบจดใดบนแกนโคออดเนทจะใช
printf ( “%d, %d”, pt.x, pt.y );
หรอหากตองการคำานวณระยะทางจะวา หางจากจดเรมตน (0, 0) เทาใด
สามารถใช double dist, sqrt (double);
dist =sqrt ((double)pt.x * pt.x +(double)pt.y * pt.y );
ตวอยาง
![Page 82: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/82.jpg)
82
หมายเหต สมาชกของขอมลประเภทstruct อาจจะเปนตวแปรประเภทใด
กได ทงขอมลพนฐาน และประเภท ขอมลอน ๆ เชน อาเรย และยง
ประกาศ ตวแปรของขอมลประเภทstruct ไดอกดวยตวอย
าง pt2pt
1
หากตองการเกบขอมลของ
สเหลยมดงรปสามารถทำาการประกาศตวแปร
ไดดงน
![Page 83: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/83.jpg)
83
struct rect {
struct point pt1; struct point pt2; };struct rect screen;int co_x;co_x = screen.pt1.x
การประกาศ
แบบขอมล
โครงสราง
การ ประกาศ
ตวแปรขอมลแบบโครงสรางการอางถง
สมาชก
![Page 84: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/84.jpg)
84
5.2 ก�รเกบขอมลแบบโครงสร�ง
การเกบขอมลแบบโครงสรางภายในหนวยความจำาจะเกบตามลำาดบทมการ
ประกาศสมาชกของขอมลนน โดยทวไปขอมลแบบโครงสรางจะประกอบ
ขนจากขอมลหลาย ๆ ชนด และขอมลแตละชนดมกจะมการจองพนทใชงาน
แตตางกน เนองจากการจองพนทหนวยความจำาในระบบสวนใหญจะจองท
แอดเดรสทหารดวย 2 หรอ 4 ลงตว
![Page 85: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/85.jpg)
85
struct alignment { int num1; char ch; int num2;} example;
ตวอยาง
num1
ch
num2
member
0 2 3 4Byte Offset
จะเหนวา num2 จะไมสามารถใชพนททตดกบ ch ได
เนองจาก num2 เปนขอมลประเภทเลขจำานวนตองใชพนททม
แอดเดรสหารดวย 2 หรอ 4 ลงตว ทำาใหเกดทวางทไมสามารถ
นำามาใชประโยชนได เพราะฉะนนการประกาศสมาชกของโครงสรางจะมผลตอการใชพนทในหนวยความจำาดวย
![Page 86: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/86.jpg)
86
5.3 ก�รใชขอมลแบบโครงสร�งกบ ฟงกชน
การทำางานของตวแปรทเปนประเภท โครงสรางสามารถทำางานตาง ๆ ไดเชน
เดยวกบตวแปรอน ๆ ยกเวนการเปรยบ เทยบตวแปร struct กบตวแปร struct
เนองจากขอมลของตวแปร struct จะเกบ อยในตวแปรทเปนสมาชกของ struct การ
เปรยบเทยบจงตองทำาผานตวแปรทเปน สมาชกของ struct เทานน การใชงาน
ตวแปร struct กบฟงกชนสามารถทำาได หลายลกษณะ ทงการใหฟงกชนคนคาเปน
struct การสงอากวเมนทใหฟงกชนเปน ตวแปร struct
![Page 87: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/87.jpg)
87
ตวอยาง5.1 ฟงกชนใชในการกำาหนดคาใหกบ
ตวแปร structstruct point makepoint ( int x, int y ) { struct point temp; temp.x = x; temp.y = y; return temp;}
หมายเหต ตวอยางนแสดงฟงกชนททำาการสงคากลบเปนรปแบบโครงสราง
![Page 88: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/88.jpg)
88
การเรยกใชงานฟงกชนstruct rect screen;struct point middle;struct point makepoint ( int, int );screen.pt1 = makepoint ( 0, 0 );screen.pt2 = makepoint ( XMAX, YMAX );middle = makepoint ((screen.pt1.x + screen.pt2.x) / 2, (screen.pt1.y + screen.pt2.y) / 2 );
![Page 89: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/89.jpg)
89
ตวอยาง5.2
ฟงกชนการบวก x และ y ของจด2 จด และคนคาผลของการบวก
เปน structstruct point addpoint(struct point p1, struct point p2){ p1.x += p2.x; p1.y += p2.y; return p1;}
หมายเหต ตวอยางนแสดงการสงอารกวเมนทแบบstruct ใหกบฟงกชน
![Page 90: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/90.jpg)
90
ตวอยาง5.3
ฟงกชนการหาวาจดอยในพนทสเหลยมหรอไม
int pinrect ( struct point p, struct rect r ) { return p.x >= r.pt1.x && p.x < r.pt2.x && p.y >= r.pt1.y && p.y < r.pt2.y;}หมายเหต ตวอยางนเปนการหาวาจดทระบอยในพนทสเหลยมหรอไม โดยสงคาจดและพนทสเหลยมเปนอากวเมนทใหกบฟงกชน หากจดอยในพนทสเหลยมจะคนคา1 แตหากจดอยนอกพนทสเหลยมจะคนคาเปน 0
![Page 91: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/91.jpg)
91
ตวชและอ�รเรย(Pointer and Array)
![Page 92: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/92.jpg)
92
รปท 61. ก�รแทนขอมลในหนวยคว�มจำ�ของตวแปรประเภทพนฐ�น
int i; i 40
0402404
i = 10; i 40
0402404
10
int i;i = 10;
6.1 ตวชกบแอดเดรส (Pointers and Address)
![Page 93: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/93.jpg)
93
p
i
360400
40010
p
i10
p
i10
รปท 62 ก�รแทนขอมลในหนวยคว�มจำ�ของตวแปรประเภทตวช
![Page 94: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/94.jpg)
94
6.2 ก�รประก�ศตวแปรประเภทตวช การประกาศตวแปรประเภทพอยนเตอรจะใช
Unary Operator * * ซงมชอเรยกวาIndirection หรอ Dereferencing Operator โดยจะตองประกาศประเภทของตวแปรพอยนเตอรใหสอดคลองกบ
ประเภทของตวแปรทเราตองการ (ยกเวน ตวแปรพอยนเตอรประเภท void ท
สามารถชไปยงตวแปรประเภทใดกได)
![Page 95: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/95.jpg)
95
int *ip; เปนการประกาศตวแปร ip ใหเปนตว
แปรพอยนเตอรทชไปยงตวแปรประเภทint
double *dp, atof(char *);
เปนการประกาศตวแปร dp เปนตวแป รพอยนเตอรทชไปยงตวแปรประเภท
double และประกาศฟงกชน atof มพารามเตอรเปนตวแปรพอยนเตอร
ประเภท char
ตวอยาง
![Page 96: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/96.jpg)
96
6.3 ก�รกำ�หนดค�และก�รอ�นค�ตว แปรประเภทตวช
การกำาหนดคาใหกบตวแปรพอยนเตอรจะเปนการกำาหนดแอดเดรสของตวแปรทมประเภทสอดคลองกบประเภทของ
ตวแปรพอยนเตอรเทานน โดยการใชUnary Operator && เปนโอเปอเรเตอรทอางถงแอดเดรสของออป
เจค (Object) ใด ๆ
![Page 97: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/97.jpg)
97
int x = 1, y = 2;int *ip, *iq;ip = &x;y = *ip;*ip = 0;y = 5;ip = &y;*ip = 3;iq = ip;
รปท 63. ก�รกำ�หนดค�และก�รอ�นค�ตวแปรตวช
![Page 98: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/98.jpg)
98
400
500
402
502
x
ip
y
iq
12 int x = 1, y
= 2;int *ip, *iq;
![Page 99: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/99.jpg)
99
x
ip
400
500
y 402
502iq
12
400
ip = &x;
![Page 100: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/100.jpg)
100
x
ip
400
500
y 402
502iq
11
400
y = *ip;
![Page 101: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/101.jpg)
101
x
ip
400
500
y 402
502
iq
01
400
*ip = 0;
![Page 102: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/102.jpg)
102
x
ip
400
500
y 402
502iq
05
400
y = 5;
![Page 103: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/103.jpg)
103
x
ip
400
500
y 402
502iq
05
402
ip = &y;
![Page 104: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/104.jpg)
104
x
ip
400
500
y 402
502iq
03
402
*ip = 3;
![Page 105: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/105.jpg)
105
x
ip
400
500
y 402
402 502iq
03
402
iq = ip;
![Page 106: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/106.jpg)
106
6.4 ตวชและอ�รกวเมนทของฟงกชน(Pointer and Function
Arguments) เนองจากภาษาซมการสงอากวเมนตให
กบฟงกชนแบบ By Value และ ฟงกชนสามารถคนคา (return) คาได
เพยงหนงคา หากตองการใหฟงกชนมการเปลยนแปลงคาและคนคากลบมายงฟงกชนทเรยกใชมากกวาหนงคาจะตองนำาพอยนเตอรเขามาชวย
![Page 107: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/107.jpg)
107
ตวอยางเชน หากตองการเขยนฟงกชนเพอสลบคาของตวแปร 2 ตว ผลลพธทตองการไดจากฟงกชนนจะม 2คาของตวแปรททำาการสลบคา หากอารกวเมนตเปนตวแปรธรรมดาจะไมสามารถแกปญหานได จงตองใชพอยนเตอรเขามาชวย โดยการสงคาแอดเดรสของตวแปรทง 2 ใหกบฟงกชนทจะสลบคาของตวแปรทง 2 ผานทางตวแปรพอยนเตอรทเปนอารกวเมนตของฟงกชน
![Page 108: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/108.jpg)
108
ตวอยาง6.1 โปรแกรมตวอยางการสลบคาตว
แปร 2 ตวโดยผานฟงกชน จะแสดงการสงอารกวเมนตในเปนพอยนเตอร#include
<stdio.h>void swap (int *, int *);
![Page 109: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/109.jpg)
109
void main ( ) { int x = 5, y = 10; printf(“Before swap : x = %d”, x, “, y = %d\n”, y); swap ( &x, &y); printf(“After swap : x = %d”, x, “, y = %d\n”, y);}
ตวอยาง 6.1 (ตอ)
![Page 110: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/110.jpg)
110
void swap (int *px, int *py) { int temp; temp = *px; *px = *py; *py = temp;}
ตวอยาง 6.1 (ตอ)
![Page 111: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/111.jpg)
111
อารกวเมนททเปนประเภทพอยนเตอรจะชวยใหฟงกชนสามารถเปลยน
คาใหกบตวแปรทสงเขามาได เนองจากอารกวเมนทนนจะเกบแอดเดรส
ของตวแปรทสงเขามา เมอมการ เปลยนแปลงคาของอารกวเมนทผาน
Dereferencing Operator ( * ) คาของตวแปรทสงเขามาจะถก
เปลยนคาพรอมกนในทนท
![Page 112: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/112.jpg)
112
รปท 64. แสดงคว�มสมพนธของก�รสงอ�รกวเมนทแบบพอยนเตอรกบฟงกชน
xy
in main ( )
pxpy
in swap ( )
![Page 113: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/113.jpg)
113
6.5 ตวชกบอ�รเรย (Pointer and Arrays)
อารเรยเปนประเภทขอมลทเกบชดของขอมลประเภทเดยวกน มกใชกบการทำางานทตองทำางานกบตวแปรชนดเดยวกนหลายตวทมการทำางานเหมอนกน เชน คะแนนของนกศกษาภายในหอง 20 คน เปนตน อารเรยในภาษาซจะนำาหลกการของพอยนเตอรเขามาใช การทำางานใด ๆ ของอารเรยสามารถใชพอยนเตอรเขามาแทนท
![Page 114: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/114.jpg)
114
int table[10]; เปนการกำาหนดอารเรยชอ table เปน
อารเรยประเภท int ทมสมาชกทงหมด10 ตว ตงแต table[0], table[1], table[2], ... , table[9] สมาชกภายในอารเรยจะ
เรมท 0 เสมอ และสมาชกตวสดทายจะอยทตำาแหนงของขนาดทประกาศไวลบ
ดวย 1
การประกาศการประกาศอารเรยอารเรย
![Page 115: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/115.jpg)
115
รปท 6.5 แสดงภาพจำาลองของ อารเรยขนาดสมาชก 10 ตว
table[0]
table[1]
table[2]
table[9]
table
![Page 116: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/116.jpg)
116
จะใชระบบดชนโดยผานเครองหมาย [ ] เชน
อางถงสมาชกตวท 3 ของอารเรยดวยtable[2] เปนตน การใชงานสมาชกของอารเรยสามารถใชงานไดเหมอนตวแปรพนฐานทวไป
การอางถงสมาชกในอารเรยการอางถงสมาชกในอารเรย
![Page 117: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/117.jpg)
117
sumThird = table[0] + table[1] + table[2];table[0] = 5;if ( a[0] > a[9] )
printf (“First is greater than last\n” );
ตวอยาง
![Page 118: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/118.jpg)
118
เราสามารถอางถงสมาชกทก ตวภายในอารเรยอยางอสระ
ภายในขอบเขตของขนาดทได ประกาศอารเรยไว แตการใช
อารเรยมกจะเปนการเขาถงสมาชกในลกษณะทวไปโดยใช
ตวแปรประเภท int มาชวย
![Page 119: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/119.jpg)
119
สมมตให i, j, k เปนตวแปรประเภทint
for (int k = 0; k < 9; k++) printf (“Value at %d =
%d\n”, k+1, table[k]);table[i + j] = 0;table[7 – table[j]] = j;
ตวอยาง
![Page 120: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/120.jpg)
120
ในภาษาซจะไมมการกำาหนดใหตรวจ สอบขอบเขตของอารเรย
โปรแกรมเมอรจะตองพยายามเขยนโปรแกรมทเกยวของกบสมาชกของอารเรยภายในขอบเขตทประกาศอารเรย
ไว หากมการอางองถงสมาชกอารเรย นอกขอบเขตทไดระบไว เชน
table[12] สงทไดคอการไปอานขอมลในพนทของหนวยความจำาทอาจจะ
เกบคาของตวแปรตวอน หรอคาอนใด ทไมอาจคาดเดาได
สงทตองระวง
![Page 121: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/121.jpg)
121
ตวอยาง6.2
ใหอานคาของจำานวนเตม 5 จำานวนจากคยบอรด และ
แสดงผลในลำาดบทกลบกน# include <stdio.h>#define SIZE 5main ( ) { int k; int table[SIZE];
for (k = 0; k < SIZE; k++)
scanf (“%d”, &table[k]);
for (k = SIZE-1; k >= 0; k--)
printf (“%d\n”, table[k]);}
![Page 122: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/122.jpg)
122
สมาชกของอารเรยอาจเปน ประเภทขอมลพนฐานใด ๆ กได หรอ
อาจเปนขอมลประเภทEnumeration เชน
#define TSIZE 10
#define NAMESIZE 20#define ADDRSIZE
30enum month { JAN,
FEB, MAR, APR, MAY, JUN, JUL, AUG,
SEP, OCT, NOV, DEC }
![Page 123: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/123.jpg)
123
typedef enum month Month;
int age[TSIZE];float size[TSIZE+1];Month date[8];char name[NAMESIZE],
address[ADDRSIZE];
![Page 124: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/124.jpg)
124
6.6 ก�รใชตวชกบอ�รเรย การทำางานใด ๆ ของอารเรยสามารถใชพอ
ยนเตอรเขามาชวย ซงจะทำาใหมความเรว ในการทำางานสงขน สมมตวามอารเรย a
และพอยนเตอร pa ดงนint a[10];int *pa;
กำาหนดใหพอยนเตอร pa ชไปยงอารเรยa ดวยคำาสง
pa = &a[0]; /* หรอ ใชคำาสง pa = a; */
pa จะเกบคาแอดเดรสเรมตนของ อารเรย a
![Page 125: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/125.jpg)
125
รปท 6.6 แสดงตวชชไปยงแอดเดรสเรมตนของอารเรย
a[0]
a[1]
a[2]
a[9]
a
pa
![Page 126: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/126.jpg)
126
การนำาไปใชงานจะสามารถอานคาอารเรยผานพอยนเตอรไดดงน
x = *pa; จะเปนการกำาหนดคาให x มคาเทากบ
a[0] การเลอนไปอานคาสมาชก ตำาแหนงตาง ๆ ของอารเรยผานทาง
พอยนเตอรสามารถทำาไดโดยการเพม คาพอยนเตอรขน 1 เพอเลอนไปยง
ตำาแหนงถดไป หรอเพมคาขน N เพอเลอนไป N ตำาแหนง หรอ
อาจจะลดคาเพอเลอนตำาแหนงลง
![Page 127: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/127.jpg)
127
กรณท pa ชอยท a[0] คำาสง
pa+1; จะเปนการอางถงแอดเดรสของ
a[1] หากเปน pa+i เปนการ อางถงแอดเดรส a[i] หาก
ตองการอางถงขอมลภายในของ สมาชกของอารเรยตำาแหนงท
a[i] จะใช *(pa+i)
![Page 128: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/128.jpg)
128
รปท 6.7 แสดงการอางถงตำาแหนงในอารเรยผานตวช
a[0]
a[1]
a[2]
a[9]
a
pa
pa+1
pa+2
![Page 129: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/129.jpg)
129
การสงใหบวก 1 หรอบวก i หรอ ลบ i เปนเหมอนการเลอนไปยงสมาชกของ
อารเรยตำาแหนงทตองการ เนองจาก ประเภทของขอมลแตละประเภทของอารเรย
เชน int, float, double และอน ๆ ม ขนาดของขอมลทตางกน ทำาใหขนาดของ
สมาชกภายในอารเรยแตละประเภทมขนาด แตกตางกนดวย การสงใหบวกหรอลบดวย
จำานวนทตองการนนจะมกลไกททำาหนาท คำานวณตำาแหนงทตองการใหสอดคลอง
กบขอมลแตละประเภทโดยอตโนมต
![Page 130: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/130.jpg)
130
นอกจากนยงสามารถใชพอยน เตอรแทนอารเรย การอางโดยใช a[i]
สามารถใช *(a+i) เนองจากทกครงท อางถง a[i] ภาษาซจะทำาหนาทแปลง
เปน *(a+i) เพราะฉะนนการเขยนในรปแบบใดกใหผลลพธในการทำางานเชน
เดยวกน และการอางถงแอดเดรส เชน &a[i] จะมผลเทากบการใช a+i
![Page 131: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/131.jpg)
131
ในลกษณะเดยวกนการใชงานพอยน เตอรกสามารถใชคำาสงในลกษณะอารเรยกได
เชน การอางถง *(pa+i) สามารถเขยน ดวย pa[i] กไดผลเชนเดยวกนสงทแตกตางกนของอารเรยและพอยน เตอร คอ พอยนเตอรเปนตวแปร แต
อารเรยไมใชตวแปร สมมตให a เปน อารเรยและ pa เปนพอยนเตอร การอาง
ถง pa = a หรอ pa++ จะสามารถคอม ไพลได แตจะไมสามารถใชคำาสง a = pa
หรอ a++ ได
![Page 132: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/132.jpg)
132
เมอมการสงชอของอารเรยใหแกฟงกชน จะเปนการสงตำาแหนงแอดเดรสของสมาชกตวแรกของอารเรยใหแกฟงกชน ดงนนพารามเตอรในฟงกชนนนจะเปนตวแปรประเภทพอยนเตอร
![Page 133: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/133.jpg)
133
ตวอยาง6.3
ฟงกชนทรบพารามเตอรเปนพอยนเตอร โดยอารกวเมนททสงมาเปนอารเรยint strlen (char *s)
{ int n; for ( n = 0; *s != ‘\0’; s++ ) n++; return n;}
![Page 134: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/134.jpg)
134
จะเหนวา s เปนพอยนเตอร ในฟงกชนจะ ‘มการตรวจสอบขอมลวามคาเทากบ \0’
หรอไม และมการเลอนตำาแหนงทละ 1 คา(นบวาขอมลมความยาวเพมขนทละ1)
โดยใช s++ การเรยกใชฟงกชนstrlen สามารถทำาไดหลายลกษณะ
strlen (“hello world”); /* string constant */
strlen (array); /* char array[10] */
strlen (ptr); /* char *ptr; */
![Page 135: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/135.jpg)
135
นอกจากนยงอาจจะประกาศ พารามเตอรภายในฟงกชน strlen ได
ใน 2 ลกษณะ คอ char *s char *s แบบใน ตวอยาง หรออาจจะใช char s[ ] char s[ ]
กได โดยทวไปจะใชในลกษณะแรก เพราะชวยในรไดทนทวา s เปนตวแป
รพอยนเตอร และยงสามารถสงสวนใด สวนของอารเรยใหแกฟงกชนกได โดย
ไมจำาเปนตองสงสมาชกตวแรกกไดเชน กน
![Page 136: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/136.jpg)
136
f (&a[2]) หรอ f (a+2)
เปนการสงแอดเดรสของสมาชก a[2] ใหกบฟงกชน f การ
ประกาศฟงกชน f สามารถทำาไดโดยการประกาศ
f (int arr[ ]) { ......... }
หรอ f (int *arr) { ............ }
ตวอยาง
![Page 137: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/137.jpg)
137
6.7 ก �รคำ�นวณกบแอดเดรส
ให p เปนพอยนเตอรชไปยงอารเรยใด ๆ คำาสง p++ เปนการเลอน p ไปยง
สมาชกถดไป และคำาสง p += i เปนการเลอนพอยนเตอรไป i ตำาแหนง
จากตำาแหนงปจจบน นอกจากนยง สามารถใชเครองหมายความสมพนธ
(Relational Operator) เชน==, !=, <, >= และอน ๆ ทำางาน
รวมกบพอยนเตอรได สมมตให p และq ชไปยงสมาชกของอารเรยเดยวกน
![Page 138: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/138.jpg)
138
p < q จะเปนจรงเมอ p ชไปทสมาชกทอย
กอนหนาสมาชกท q ชอย การเปรยบ เทยบในลกษณะจะใชไดตอเมอ p และ
q ชไปทอารเรยเดยวกนเทานนนอกจากนยงสามารถใชการลบ
หรอการบวกกบพอยนเตอรไดเชน เดยวกน แตสงทควรระวงคอ การทำา
เชนนนจะตองอยในขอบเขตขนาดของ อารเรยเทานน
![Page 139: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/139.jpg)
139
ตวอยาง6.3
ฟงกชน strlen( ) ปรบปรงใหกระชบขน
int strlen (char *s) { char *p = s; while (*p != ‘\0’) p++; return p-s;}
![Page 140: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/140.jpg)
140
เนองจาก s ชอยทตำาแหนง เรมตน โดยม p ชไปท s เชน เดยวกน แตจะมการเลอน p ไปท
ละหนงตำาแหนง จนกวาคาท ตำาแหนงท p ‘ชอยจะเทากบ \0’
เมอนำา p คาสดทายมาลบกบ s ทตำาแหนงเรมตนกจะไดความยาวของขอมลทสงเขามา
![Page 141: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/141.jpg)
141
6.8 ตวชตวอกษรและฟงกชน(Character Pointer and
Function) การทำางานกบขอความหรอท
เรยกวา สตรง (String) เปนการ ใชขอมลตวอกษรหลาย ๆ ตว หรอ
อารเรยของขอมลประเภท char หรออาจจะใชพอยนเตอรชไปยง
ขอมลประเภท char การทำางานกบคาคงทสตรง (String Constant) สามารถเขยนภายใน
“ ” เครอง
![Page 142: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/142.jpg)
142
“I am a string”เมอมการใชคาคงทสตรงจะมการพนทในหนวยความจำาเทากบความยาวของคา
คงทสตรงบวกดวย 1 เนองจากลกษณะการเกบขอมลประเภทขอความในหนวย
ความจำาจะมการปะตวอกษร null หรอ‘\0’ ตอทายเสมอเพอใหรวาเปนจดสน
สดของขอมล การจองพนทดงกลาวจะเหมอนการจองพนทของขอมลประเภท
อารเรย เปนอารเรยของ char
ตวอยาง
![Page 143: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/143.jpg)
143
รปท 6.8 แสดงแบบจำาลองการเกบ ขอมลประเภท สตรงในหนวยความจำา
I a m a s t r i n g \0
![Page 144: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/144.jpg)
144
คาคงทสตรงทพบเหนไดเสมอ ไดแกขอความทใชในฟงกชน printf
( ) เชนprintf ( “Hello,
world\n” ); ฟงกชน printf ( ) จะรบ
พารามเตอรเปนพอยนเตอรชไปยงแอดเดรสของขอมลทตำาแหนงเรม
ตนของอารเรย และนำาขอความนนแสดงออกทางอปกรณแสดงขอมล
มาตรฐาน
![Page 145: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/145.jpg)
145
ในการเขยนโปรแกรมจะสามารถใชพอยนเตอรชไปคาคงท
สตรงใด ๆ กได เชนchar *pmessage =
“Hello, world”;pmessage จะเปนพอยน
เตอรประเภท char ชไปทอารเรย ของตวอกษร จะแตกตางจากการใช
อารเรยทวไปเชนchar amessage[ ] =
“Hello, world”;
![Page 146: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/146.jpg)
146
ลกษณะของอารเรยเชนamessage จะมการจองพนทใช
กบอารเรยขนาด 13 ตวอกษรรวม ทง null สวนลกษณะของพอยน
เตอรทชไปยงคาคงทสตรง จะมการ จองพนทใหกบคาคงทสตรงขนาด
13 ตวอกษรเชนเดยวกน แตจะมการจองพนทใหกบพอยนเตอรและทำาการชพอยนเตอรนนไปยงพนท
ของคาคงทสตรงทจองเอาไว
![Page 147: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/147.jpg)
147
รปท 69. การจองพนทใหกบอารเรยและตวชชไปยงคาคงทสตรง
H e l l o , w o r l d \0
H e l l o , w o r l d \0amessage
pmessage
![Page 148: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/148.jpg)
148
void strcpy ( char *s, char *t ) {
int i=0; while ( ( s[i] = t[i] ) != ‘\0’ ) i++;}
ตวอยาง6.5 ฟงกชน strcpy ( ) ทำา
หนาทสำาเนาขอความจากตวแปรหนงไปยงอกตวแปรหนงเขยนในลกษณะอารเรย
![Page 149: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/149.jpg)
149
void strcpy ( char *s, char *t ) { while ( ( *s = *t ) != ‘\0’ ) { s++; t++; }}
ตวอยาง6.6 ฟงกชน strcpy ( )
เขยนในลกษณะพอยนเตอร
![Page 150: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/150.jpg)
150
void strcpy ( char *s, char *t ) { while ( ( *s++ = *t++ ) != ‘\0’ ) ;}
ตวอยาง6.7 ฟงกชน strcpy ( )
เขยนในลกษณะพอยนเตอรแบบสน
![Page 151: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/151.jpg)
151
การประกาศตวแปรช (pointer) ช ไปยง struct กรณการสงอากวเมนทเปนตวแปร struct จะไม
เหมาะกบ struct ทมขนาดใหญ เนองจากทกครงทสงตวแปร
struct จะเปนการสำาเนา ตวแปรตวใหมขนมาในฟงกชน ซงจะทำาใหชาและ
เปลองพนทหนวย ความจำา เราจะใชพอยนเตอรเขามาชวยแกปญหาน
โดยสงแอดเดรสของตวแปร struct มายง
ฟงกชนซงรบอากวเมนท เปนพอยนเตอร อากวเมนทจะชไปยงแอดเดรสเรมตนของ
ตวแปร struct จะชวยใหการทำางานเรวขนและ เปลองหนวยความจำานอยลง แตสงทตองระวงคอ
หากมการเปลยนแปลงคาทอากวเมนทพอยนเตอรช อย คาในตวแปร struct ทสงมายงฟงกชนจะ
เปลยนตามโดยอตโนมต
![Page 152: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/152.jpg)
152
ตวอยาง struct point origin, *pp;
pp = &original;printf ( “origin is (%d, %d)\n”, (*pp).x, (*pp).y );
จะไดตวแปร pp ชไปยงขอมลแบบ โครงสรางชอ struct point การ
เขยน *pp จะเปนการอางถงโครงสรางการอางถงสมาชกสามารถทำาไดการอางถงสมาชกสามารถทำาได
โดยอาง โดยอาง (*pp).x (*pp).x หรอ หรอ(*pp).y (*pp).y
![Page 153: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/153.jpg)
153
หมายเหต สงทตองระวงคอ(*pp).x จะไมเหมอนกบ*pp.x เนองจาก
เครองหมาย . จะมลำาดบความ สำาคญสงกวา * ทำาจะการแปล
ความหมาย *pp.x จะเหมอน กบการอาง *(pp.x) ซงจะ
ทำาใหเกดความผดพลาดขน
![Page 154: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/154.jpg)
154
การอางถงสมาชกอาจเขยนอก ลกษณะหนงโดยใชเครองหมาย ->
สมมต p เปนพอยนเตอร รปแบบการใชเปนดงน
p->member-of-structure
จะสามารถแปลงประโยคการใช พอยนเตอรอางสมาชกของ struct
จากตวอยางขางบนไดวาprintf ( “origin is (%d,
%d)\n”, pp->x, pp->y);
![Page 155: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/155.jpg)
155
หากมพอยนเตอรชไปยง struct rect ดงน
struct rect r, *rp = r;การอางถงสมาชกตอไปนจะมผลเทากบ
การอางถงสมาชกตวเดยวกนr.pt1.xrp->pt1.x(r.pt1).x(rp->pt1).x
ตวอยาง
![Page 156: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/156.jpg)
156
6.9 ตวช (pointer) ชไปยง โครงสร�ง
(pointer to structures) พอยนเตอรเปนตวแปรทเกบแอดเดรสของตวแปรอน สามารถใชชไปยงขอมลประเภทใด ๆ การใชพอยนเตอรชไปยงโครงสรางสามารถทำาไดดงน
![Page 157: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/157.jpg)
157
typedef struct {
int day;
int month;
int year;
} Date;Date today;
Date *ptrdate;
การประกาศ
แบบขอมล
โครงสรางการ
ประกาศตวแปร
ขอมลแบบโครงสรางการประกาศ
ตวแปรpointer ช
ไปยงโครงสราง
แบบท 1
![Page 158: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/158.jpg)
158
struct date { int
day; int
month; int
year;}
*ptrdate;
แบบท 2
![Page 159: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/159.jpg)
159
typedef struct {
int day;
int month;
int year;
} Date;typedef Date *PtrDate;
PtrDate ptrdate;
การประกาศ
แบบขอมล
โครงสรางการประกาศ
ประเภท ตวแปร
pointer ชไปยงโครงสราง
การประกาศ ตวแปร
pointer ช ไปยง
โครงสราง
แบบท 3
![Page 160: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/160.jpg)
160
การประกาศตวแปร ptrdate ทง 3 ลกษณะจะสามารถใชงานได
เหมอนกนทงหมด หากตองการให ptrdate ช
ไปยงตวแปรโครงสรางสามารถทำาไดดงน
ptrdate = &today;
![Page 161: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/161.jpg)
161
การอางถงสมาชกของโครงสรางผานตวแปรพอยนเตอรptrdate->day = 7;if ( ptrdate->day == 31 && ptrdate->month == 12 ) .....
scanf ( “%d”, &ptrdate->year );
การอางถงสมาชกโครงสรางโดยใช เครองหมาย ->
(*ptrdate).day = 7;if ( (*ptrdate).day == 31 && (*ptrdate).month == 12 ) .....
scanf ( “%d”, &((*ptrdate).year) );
![Page 162: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/162.jpg)
162
#include <stdio.h>struct date { /*date template */ int day; int month; int year;};typedef struct date Date;typedef Date *PtrDate;
ตวอยาง6.8
โปรแกรมตวอยางการใชตวช(pointer) ชไปยงโครงสราง
![Page 163: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/163.jpg)
163
main ( ) { Date today; PtrDate ptrdate; ptrdate = &today; ptrdate->day = 27; ptrdate->month = 9; ptrdate->year = 1985; printf ( “Today\’s date is %2d/%2d/%4d\n”,
ptrdate->day, ptrdate->month, ptrdate->year );
}
ตวอยาง 6.8 (ตอ)
![Page 164: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/164.jpg)
164
นอกจากนยงสามารถทำาการกำาหนด คาเรมตนใหกบตวแปรแบบโครงสราง
เชนDate xmas = { 25, 12,
1986 };และหากมการกำาหนดคาเรมตนใหกบ
สมาชกของโครงสรางไมครบทกตว หาก ตวแปรนนเปน external หรอ static
คาของสมาชกทขาดไปจะถกกำาหนดใหเปน0 แตหากเปนประเภท automatic จะไมสามารถคาดไดวาคาของสมาชกทไปจะเปนคาใด
![Page 165: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/165.jpg)
165
6.10 อ�รเรยของโครงสร�งการใชงานโครงสรางนอกจากใชในลกษณะ
ของตวแปรแลว ยงสมารถใชงานใน ลกษณะของอาเรยไดอกดวย เชน การเกบ
ขอมลประวตของพนกงาน จะมโครงสรางท ใชเกบขอมลของพนกงานแตละคน หากใช
ในลกษณะของตวแปรปกตจะสามารถเกบ ขอมลของพนกงานไดเพยง 1 คน ซง
พนกงานทงบรษทอาจจะมหลายสบหรอ หลายรอยคน การเกบขอมลในลกษณะนจะ
ใชอาเรยเขามาชวย เชนPerson staff[STAFFSIZE];
![Page 166: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/166.jpg)
166
การอางโดยใชคำาสงตาง ๆstaff อางถงอาเรยของโครงสรางstaff[i] อางถงสมาชกท i ในอาเรยstaff[i].forename อางถงชอหนาของ
สมาชกท I ของอาเรยstaff[i].surname[j] อางถงตว
อกษรตวท j ในนามสกล ของสมาชกท i ของอาเรย
![Page 167: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/167.jpg)
167
การใชขอมลสมาชกแตละตวจะอางถงโดยการอางผานระบบดชนเหมอน
อารเรยทวไป เชน ฟงกชนทใชในการ พมพชอสมาชกคนทระบ จะเรยกใชโดย
print_person ( staff[k] );
รปแบบฟงกชนสามารถกำาหนดดวยvoid print_person
( Person employee )
การเรยกใชงานสมาชกบางตวในอารเรยของโครงสรางผานฟงกชน
![Page 168: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/168.jpg)
168
หากตองการเรยกใชงานฟงกชนท ทำางานกบทงอารเรย เชน การเรยกใช
งานฟงกชนททำาการเรยงลำาดบอารเรย ตามชอหนา จะตองสงอารเรยและ
ขนาดของอารเรยไปยงฟงกชนนน เชนsort_forename ( staff,
STAFFSIZE );รปแบบฟงกชนสามารถกำาหนดดวย
void sort_forename ( Person staff[ ], int size )
การเรยกใชงานสมาชกทกตวในอารเรยของโครงสรางผานฟงกชน
![Page 169: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/169.jpg)
169
การกำาหนดคาเรมตนใหกบอารเรยของโครงสรางสามารถทำาไดโดย Person staff[ ] = { { “Bloggs”, “Joe”, MALE, 21 },
{ “Smith”, “John”, MALE, 30 },
{ “Black”, “Mary”, FEMALE, 25 } };
การกำาหนดคาเรมตนใหกบอารเรยของโครงสราง
![Page 170: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/170.jpg)
170
6.11 อ�รเรยแบบหล�ยมต(Multi-dimensional
Arrays) จากพนฐานทผานมาเรองอารเรยจะ
เปนลกษณะของอารเรยมตเดยว แต อารเรยอาจจะมมากกวา 1 มตกได เชน
ขอมลคะแนนสอบของนกศกษาแตละคนภายในชนซงแบงเปนคะแนนเกบหลาย
สวน จะพบวาหากตองการเกบขอมลคะแนนสอบของนกศกษาแตละคน
สามารถใชอารเรยมตเดยว ดงตวอยาง
![Page 171: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/171.jpg)
171
#define NUMBER_OF_PAPERS 5
int student [ NUMBER_OF_PAPERS ]; /* int student[5]; */
5.6 8.5 12.6 24.1 16.0student[0]student[1]student[2]student[3]student[4]
![Page 172: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/172.jpg)
172
แตหากเพมเตมวาใหเกบขอมลคะแนนสอบของ
นกศกษาทกคน จะตองใชอารเรย หลายมตเขามาเกยวของ
ตวอยางเชนการเกบขอมลคะแนน สอบของนกศกษา 2 คนโดยม
คะแนนสอบของการสอบทงสน 5 ครง
![Page 173: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/173.jpg)
173
รปท 6.10 แสดงตวอยางการเกบขอมล คะแนนของ นกศกษา
ครงท 1 2 3 4 5 นาย ก นาย ข
5.68.512.624.116.06.07.215.025.018.0
![Page 174: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/174.jpg)
174
การอางองถงขอมลในอารเรย 2 มต เราจะมองอารเรย 2 มตในลกษณะทประกอบดวยแถว(row) และคอลมน(column) โดยขอมลทอางองตว
แรกหมายถง แถว และขอมลถดมาคอ คอลมนmarks[row][column]
row
column
marks[0][0]
marks[0][1]
marks[0][2]
marks[0][8]
marks[1][0]
marks[1][8]
marks[2][0]
marks[2][8]
![Page 175: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/175.jpg)
175
จากลกษณะความตองการเกบขอมลดงกลาวจะตองเตรยมอารเรยเพอเกบ
ขอมลในลกษณะ 2 มต สามารถประกาศอารเรยดงน #define NUMBER_OF_PAPERS 5 #define NUMBER_OF_STUDENTS 50 int marks[NUMBER_OF_STUDENTS][NUMBER_OF_PAPERS]; /* int marks[50][5]; */
![Page 176: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/176.jpg)
176
โปรแกรมการรบคาอารเรย 2 มต#include<stdio.h>main(){ float score[10][3]; int i,j; printf(“Please put score\n”); for(i=0;i<10;i++) for(j=0;j<3;j++) scanf(“%f”,&score[i][j]);}
score[0][0]score[0][1]score[0][2]score[1][0]score[1][1]score[1][2]
score[9][0]score[9][1]score[9][2]
![Page 177: ภาษาโปรแกรม (ภาษาซี)](https://reader034.vdocuments.site/reader034/viewer/2022051702/5681489d550346895db5b3de/html5/thumbnails/177.jpg)
177
score[0][0]score[0][1]score[0][2]score[1][0]score[1][1]score[1][2]
score[9][0]score[9][1]score[9][2]
score[2][0]score[2][1]score[2][2]
ลกษณะขอมล หนวยความจำา
200202204206208210
210212214216218220
220222224226228230
[0][0][0][1][0][2][1][0][1][1][1][2]
[2][0][2][1][2][2][3][0][3][1][3][2]
[4][0][4][1][4][2][5][0][5][1][5][2]