วิชา การพัฒนาโปรแกรม ภาษาซี)2 ดง น น...

20
0 วิชา การพัฒนาโปรแกรม (ภาษาซี) รหัสวิชา ว31293 หน่วยการเรียนรู้ที่ 6 อาร์เรย์และฟังก์ชันจัดการสตริง ผลการเรียนรู สามารถเลือกใช้ตัวแปรอาร์เรย์ในการเขียนโปรแกรมและประยุกต์ใช้งานฟังก์ชันเพื่อจัดการ ข้อความหรือสตริงได้อย่างถูกต้องและเหมาะสม จุดประสงค์การเรียนรู 1. เข้าใจหลักการอาร์เรย์ และสามารถนาไปประยุกต์ใช้งานได้อย่างถูกต้อง 2. เปรียบเทียบความแตกต่างระหว่างอาร์เรย์ 1 มิติ และอาร์เรย์ 2 มิติได้ 3. สามารถเขียนโปรแกรมเพื่อจัดเก็บข้อมูลลงในตัวแปรอาร์เรย์ได้ 4. สามารถเขียนโปรแกรมเพื่อจัดการกับข้อความหรือสตริงได้ 5. สามารถแปลงข้อความที่เป็นตัวเลข นาไปใช้เพื่อการคานวณได้ สาระการเรียนรู 1. ชนิดของตัวแปรอาร์เรย์ 2. ฟังก์ชันจัดการสตริง 3. การอ่านและแสดงค่าของสตริง 4. การแปลงข้อความที่เป็นตัวเลขเป็นค่าตัวเลขที่นาไปคานวณได้

Upload: others

Post on 11-Jul-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: วิชา การพัฒนาโปรแกรม ภาษาซี)2 ดง น น เม อตอ งการประกาศต วแปร a เป นต วแปรอาร

0

วชา การพฒนาโปรแกรม (ภาษาซ) รหสวชา ว31293

หนวยการเรยนรท 6 อารเรยและฟงกชนจดการสตรง

ผลการเรยนร

สามารถเลอกใชตวแปรอารเรยในการเขยนโปรแกรมและประยกตใชงานฟงกชนเพอจดการขอความหรอสตรงไดอยางถกตองและเหมาะสม

จดประสงคการเรยนร

1. เขาใจหลกการอารเรย และสามารถน าไปประยกตใชงานไดอยางถกตอง 2. เปรยบเทยบความแตกตางระหวางอารเรย 1 มต และอารเรย 2 มตได 3. สามารถเขยนโปรแกรมเพอจดเกบขอมลลงในตวแปรอารเรยได 4. สามารถเขยนโปรแกรมเพอจดการกบขอความหรอสตรงได 5. สามารถแปลงขอความทเปนตวเลข น าไปใชเพอการค านวณได

สาระการเรยนร 1. ชนดของตวแปรอารเรย 2. ฟงกชนจดการสตรง 3. การอานและแสดงคาของสตรง 4. การแปลงขอความทเปนตวเลขเปนคาตวเลขทน าไปค านวณได

Page 2: วิชา การพัฒนาโปรแกรม ภาษาซี)2 ดง น น เม อตอ งการประกาศต วแปร a เป นต วแปรอาร

1

ใบความรท 6 เรอง อารเรยและฟงกชนจดการสตรง

จดท าโดย นางพรพนารตน ชมภนช

เมอเครองคอมพวเตอรมการประกาศตวแปรเกดขน ชอตวแปรจะเปนตวแทนต าแหนงหนวยความจ าของคอมพวเตอร ตวแปรหนงตวจะแทนหนวยความจ าหนงต าแหนง สามารถเกบขอมลไดหนงคา ซงเดมถาหากตองการเกบขอมลหลายคาจะตองประกาศตวแปรขนมาหลายตว ในระบบการประมวลผลขอมลหนวยความจ านน เราสามารถด าเนนการสรางตวแปรทสามารถเกบขอมลชนดเดยวกนแตมหลายคา โดยสรางตวแปรขนมาเพยงตวเดยว แตสามารถเกบคาไดหลายคา เราเรยกตวแปรแบบนวา ตวแปรแถวล าดบ หรอตวแปรอารเรย (Array) และการเกบขอมลแบบอารเรยนน อาจมองอกอยางหนง วาเปนการเกบขอมลแบบตาราง นนเอง

วธการก าหนดตวแปรชด และการใชงาน อารเรยหรอตวแปรชด เปนตวแปรประเภทหนงทเหมาะกบการน าไปใชเพอประมวลผลกลมชดขอมลเดยวกน ถาตองการประกาศตวแปรทมชนดขอมลเดยวกนจ านวน 10 ตว ทมชนดขอมลเปนชนดตวเลขจ านวนเตม (Integer) หากใชวธประกาศตวแปรแบบเดม ๆ กจะตองประกาศดงน

int a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10;

จากตวอยางขางตน เหนไดวา การประกาศตวแปรแบบนท าใหเกดความยงยากในการอางองตวแปรเพอใชงานคาของตวแปรดงกลาวเมอมขอมลมากขน หรอเพอการเรยกใชงานตวแปรภายใตเงอนไขใดเงอนไขหนง ดงนน จงมแนวทางแกไขเพอใหเราสามารถอางองตวแปร เพอน ามาใชไดงายขน ทเรยกวา ตวแปรอารเรย โดยอารเรยจะด าเนนการเสมอนกบแบงหนวยความจ าออกตาราง และภายในตารางกแบงออกเปนชองเซล (Elements) และสามารถอางองถงคาในแตละชองดวยเลข เลขดชน (index number) หรอทเรยกวา ซบสครปต (subscript) เปนตวชต าแหนงขอ งชองอลเมนตนน ๆ ซงภาษาซจะใชสญลกษณ [n] เปนตวชระบต าแหนง

ตวอยางเชน

a[1] หมายถง การอางองถงอลเมนตของอารเรย a ชองหนวยความจ าท 1

Page 3: วิชา การพัฒนาโปรแกรม ภาษาซี)2 ดง น น เม อตอ งการประกาศต วแปร a เป นต วแปรอาร

2

ดงนน เมอตองการประกาศตวแปร a เปนตวแปรอารเรยทมชนดขอมลเปน integer ท าไดโดย

int a[10];

อยางไรกตาม ต าแหนงแรกของอารเรยในภาษาซจะเรมตนทต าแหนงชองท 0 เปนตนไป ดงนน อารเรยจากตวอยางขางตนจะมสมาชกจ านวน 10 ตว และอางองเลขดชนตงแต 0 – 9 ดงน

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

รปท 7.1 อารเรย a ทประกาศไว เพอจดเกบสมาชก 10 ชด

สรปไดวา การก าหนดตวแปรชดมาใชงาน สามารถท าไดเชนเดยวกบการก าหนดตวแปรธรรมดา เพยงแตตอง มสญลกษณ [ ] มาตอทาย (ซงสามารถมเครองหมายดงกลาวตอทายไดมากกวาหนงครง) และภายในสญลกษณดงกลาวตองมการระบขนาดของชดตวแปรดวย ตวอยาง Int i; int j[5]; int m[2][3]; float L[3][4][20]; ค าอธบาย จากตวอยางจะเหนไดวา i เปนตวแปรประเภท Integer j เปนตวแปรชดประเภท integer มขนาดความจได 5 จ านวน m เปนตวแปรชด(สองมต)ประเภท integer มขนาดความจไดh 2 × 3 จ านวน L เปนตวแปรชด(สามมต) ประเภท float มขนาดความจไดh 3 × 4 × 20 จ านวน

Page 4: วิชา การพัฒนาโปรแกรม ภาษาซี)2 ดง น น เม อตอ งการประกาศต วแปร a เป นต วแปรอาร

3

ชนดของตวแปรอารเรย

อารเรยสามารถประกาศใชกบตวแปรไดหลายลกษณะ แตโดยสวนใหญ อารเรย 1 มต และอารเรย 2 มต จะถกน ามาใชงานมากทสด ดงนนจงขอกลาวรายละเอยดถงอารเรย 1 มต และ อารเรย 2 มต เทานน

1. อารเรย 1 มต (One Demension Array)

เปนตวแปรอารเรยแบบมตเดยว มลกษณะเสมอนกบหนวยความจ าทเรยงกนเปนล าดบ โดยมรปแบบค าสงดงน

รปแบบ การประกาศตวแปรชด 1 มต

Type Arrayname [size];

Type คอ ชนดของตวแปร เชน int , char , float Arrayname คอ ชอของตวแปร array size คอ ขนาดของตวแปร

ตวอยาง

กรณท 1 การประกาศตวแปรชนดอารเรย 1 มต ทมชนดขอมลเปน ตวขระ หรอตวอกษร

char name[20];

หมายถง ก าหนดใหตวแปร name จดเกบอกขระไดจ านวน 25 ตวอกษร

การก าหนดคาเรมตนใหกบตวแปรอารเรยชนดตวอกขระ สามารถก าหนดในรปแบบตาง ๆ ดงน

แบบท 1 char name[15] = “ponpanarat”; แบบท 2 char name[15] = {‘p’ , ‘o’ , ‘n’ , ‘p’ , ‘a’ , ‘n’ , ‘a’ , ‘r’ , ‘a’ , ‘t’};

name p o n p a n a r a t \0 \0 \0 \0 \0

name

[0]

name

[1]

name

[2]

name

[3]

name

[4]

name

[5]

name

[6]

name

[7]

name

[8]

name

[9]

name

[10]

name

[11]

name

[12]

name

[13]

name

[14]

รปท 7.2 คาทบรรจอยในแตละอลเมนตของอารเรย name ทประกาศไว เพอจดเกบสมาชก 15 ชด

Page 5: วิชา การพัฒนาโปรแกรม ภาษาซี)2 ดง น น เม อตอ งการประกาศต วแปร a เป นต วแปรอาร

4

ศกษาสงเกต

ส าหรบการประกาศคาตวแปรใหกบตวแปรอารเรยชนดขอความ (Character) นน อกขระแตละตวจะถกบรรจในแตละชองหนวยความจ า โดยในแตละชองหนวยความจ า จะจดเกบไดเพยงหนงอกขระเทานน โดยจะมรหสพเศษ คอ \0 (Null) ซงเปนตวแปรทบงบอกถงจดสนสดของขอความ

กรณท 2 การประกาศตวแปรชนดอารเรย 1 มต ทมขอมลชนด ตวเลข ไดแก integer , float , double เปนตน

int age[10];

หมายถง ก าหนดใหตวแปรชอ age จดเกบอกขระไดจ านวน 10 จ านวน

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

int age[10] = { 25 , 23 , 24 , 27 , 26 , 29 , 30 , 34 , 27 , 23 };

age 25 23 24 27 26 29 30 34 27 23

age[0

]

age[1

]

age[2

] ag

e[3]

age[4

] ag

e[5]

age[6

] ag

e[7]

age[8

] ag

e[9]

รปท 7.3 คาทบรรจอยในแตละชองอลเมนตของอารเรย age ทประกาศไว เพอจดเกบสมาชก 10 ชด

เราสามารถอางองถงขอมลภายในตวแปรขอมลชดแบบ 1 มต ไดโดยใชเลขดชน (Index) เปนตวระบต าแหนงของขอมล ดงตวอยางดงน

ตวอยาง

printf(“ %d ” ,age[2]);

หมายถง แสดงคาภายในตวแปรอารเรยชอ age ในต าแหนงชองอลเมนตท 2 นนคอ คาทไดเทากบ 24 นนเอง

Page 6: วิชา การพัฒนาโปรแกรม ภาษาซี)2 ดง น น เม อตอ งการประกาศต วแปร a เป นต วแปรอาร

5

กจกรรมเสรมทกษะ

ใหนกเรยนทดลองเขยนโปรแกรมเพอหาคะแนนเฉลยของคะแนนเกบในทนจะเปนการปอนคะแนนเกบ 3 ครง ของนกเรยนคนหนงโดยบนทกโปรแกรม ชอ ex07_1.cpp ซงประกอบดวย ตวแปรดงตอไปน

ขอมลน าเขา ไดแก ชอ (name) , คะแนนเกบ (score) ผลลพธทตองการ ไดแก คะแนนรวม (total) , คะแนนเฉลย (average)

1 2 3 4 5 6 7 8 9

10 11 12 13 14 15 16 17 18 19 20 21 22

#include <stdio.h> #include <conio.h> char name[20]; int i , score[3] , total; float average; main( ) { printf(“Input name : ”); scanf(“%s”,name); for (i=0 ; i<=2 ; i++) { printf(“score [%d] is : ”, i+1 ); scanf(“%d”, &score[i] ); total = total + score[i]; average = total / i+1; } printf(“Total is : %d\n”, total ); printf(“Average is : %.2f ”, average ); getche( ); }

รปภาพ แสดงผลลพธทไดจากการท างานของ

โปรแกรม ex07_1.exe

Page 7: วิชา การพัฒนาโปรแกรม ภาษาซี)2 ดง น น เม อตอ งการประกาศต วแปร a เป นต วแปรอาร

6

2. อารเรย 2 มต (Two Demension Array)

ลกษณะของตวแปรชด 2 มตจะเปนในลกษณะของตาราง พจารณาจากตวอยางการเกบขอมล คะแนนสอบของนกเรยนในวชาใดวชาหนง เชน ถาแบงการเกบคะแนนออกเปน 5 ครง จะพบวาในการเกบขอมลคะแนนสอบของนกเรยนแตละคนสามารถใชตวแปรชดมตเดยว ดงรป

25 23 24 27 26

score[

0]

score[

1]

score[

2]

score[

3]

score[

4]

รปท 7.4 แสดงการเกบคะแนนสอบของนกศกษาคนหนง

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

ครงท 1 ครงท 2 ครงท 3 ครงท 4 ครงท 5

นาย ก 23 24 22 21 30

นาย ข 22 33 27 19 25

... ... ... ... ... ...

รปท 7.5 แสดงตวอยางการเกบขอมลคะแนนของนกศกษา

ขอมลทจะจดเกบในตวแปรชดจะตองเปนขอมลชนดเดยวกนเสมอ ในทนจะจดเกบเฉพาะสวนของคะแนนสอบของนกเรยนเทานน จากลกษณะความตองการเกบขอมลดงกลาวจะตองเตรยมตวแปรชดเพอเกบขอมลในลกษณะ 2 มต โดยมรปแบบค าสงดงน

รปแบบ การประกาศตวแปรชด/2 มต

Type Arrayname [Row][Column];

Type คอ ชนดของตวแปร เชน int , char , float Arrayname คอ ชอของตวแปร array Row คอ ขนาดของแถว Column คอ ขนาดของสดมภ หรอคอลมน

Page 8: วิชา การพัฒนาโปรแกรม ภาษาซี)2 ดง น น เม อตอ งการประกาศต วแปร a เป นต วแปรอาร

7

ตวอยาง

การประกาศตวแปรอารเรยเพอเกบขอมลคะแนนของนกเรยน จ านวน 4 คน และมคะแนนสอบ 3 ครง ในรปแบบตวแปรอารเรย 2 มต ดงน

int score [4] [3] ;

หมายถง ก าหนดตวแปรชอ score ทสามารถจดเกบขอมลชนด integer โดยม ลกษณะของชองอลเมนต เทากบ 4 แถว 3 คอลมน

การก าหนดคาเรมตนในกบตวแปร หรอการรบคาใหกบตวแปร score ในรปแบบ ตวแปรอารเรย 2 มต สามารถท าไดโดยการระบต าแหนงของชองอลเมนตทตองการเกบ โดยมรปแบบดงน

ตวอยาง การก าหนดคาเรมตนในกบตวแปร score[4][3]

int score[4][3] = { { 10 , 12 , 14} , {15 , 13 , 16} , {12 , 15 , 19} , {11 , 15 , 18} };

หรอ ก าหนดในลกษณะเรยงเปนแถวเดยวกได

int score[4][3] = { 10 , 12 , 14 , 15 , 13 , 16 , 12 , 15 , 19 , 11 , 15 , 18 };

กรณการก าหนดคาเรมตนใหกบตวแปรอารเรย 2 มต การใชเครองหมาย { } ซอนยอยเพอก าหนดขอมลจดเกบลงในแตละแถว จะท าใหอานไดงายกวา และจากการประกาศขางตน ในแตละอลเมนตจะถกจดเกบขอมลไวในหนวยความจ าในต าแหนงของอลเมนตตาง ๆ ดงรป

score column 0 column 1 column 2 row 0 10 12 14

row 1 15 13 16 row 2 12 15 19 row 3 11 15 18

รปท 7.6 แสดงตวอยางการเกบขอมลคะแนนของนกเรยน

Page 9: วิชา การพัฒนาโปรแกรม ภาษาซี)2 ดง น น เม อตอ งการประกาศต วแปร a เป นต วแปรอาร

8

ตวแปรอารเรย 2 มตจะมองขอมลในลกษณะแถวและคอลมน แถวของขอมลในทนจะเปนคะแนนทนกเรยนแตละคนไดรบ สวนคอลมนจะเปนคะแนนสอบแตละครงของนกเรยนเพราะฉะนนเมอเราอางถงจดใดจดหนงใน ตวแปรชด 2 มต กจะเปนคะแนนทนกเรยนแตละคน ดงนนในการอางถงขอมลภายในตารางขอมล 2 มตของตวแปรอารเรย ดงตารางทกลาวมาขางตนนน สามารถท าไดโดย ระบต าแหนงของแถว และ คอมลมน ของต าแหนงนกเรยนทตองการทราบขอมล ดงตวอยางดงน

ตวอยาง การรบคาทางแปนพมพเพอบนทกขอมลลงในตวแปรอารเรย 2 มต ในต าแหนงอลเมนตทตองการ สามารถท าไดดงตวอยางตอไปน

scanf(“%d”, &score[0][0] );

หมายถง การรบขอมลทางคยบอรดมาจดเกบไวในตวแปรทชอ score ในต าแหนงอลเมนตแถวท 0 คอลมนท 0 ดต าแหนงดงรป

score column 0 column 1 column 2

row 0 10 12 14

row 1 15 13 16 row 2 12 15 19 row 3 11 15 18

รปท 7.7 แสดงตวอยางการเกบขอมลคะแนนของนกเรยนในต าแหนงอลเมนต แถว 0 คอลมน 0

และถาตองการแสดงขอมลทอยภายในอลเมนตทตองการ กสามารถท าไดโดยอางอางถงต าแหนงของขอมลในอลเมนตนน ดงตวอยางตอไปน

ตวอยาง

printf(“%d”, &score[0][0] );

หมายถง การแสดงขอมลทจดเกบไวในตวแปรทชอ score ในต าแหนง อลเมนตแถวท 0 คอลมนท 0 นนกคอ 10 (ดรปท 7.7)

Page 10: วิชา การพัฒนาโปรแกรม ภาษาซี)2 ดง น น เม อตอ งการประกาศต วแปร a เป นต วแปรอาร

9

ในกรณทตองการจดเกบขอมลชนดอกขระ ในรปแบบอารเรย 2 มต สามารถประกาศไดเชนเดยวกบ การประกาศตวแปรอารเรย 2 มต ชนดตวเลข ซงในแตละอลเมนตในหนวยความจ าจะสามารถจดเกบขอมลได 1 ตวอกขระเทานน ดงนน การประกาศตวแปรดงกลาวจงไมใชจดเกบชอของแตละคน แตเปนการจดเกบกลมอกขระนนเอง ดงนนหากตองการประกาศตวแปรชนดอกขระในรปแบบ อารเรย 2 มตสามารถท าได ดงตวอยางตอไปน

ตวอยาง char name [3][10] ;

หมายถง ก าหนดตวแปรชอ name ทสามารถจดเกบขอมลชนด อกขระ โดยมลกษณะของชองอลเมนต เทากบ 3 แถว 10 คอลมน

การก าหนดคาเรมตนในกบตวแปร หรอการรบคาใหกบตวแปร name ในรปแบบ ตวแปรอารเรย 2 มต สามารถท าไดโดย ไมตองระบต าแหนงของชองอลเมนตทตองการเกบ ซงมรปแบบดงน

ตวอยาง การก าหนดคาเรมตนในกบตวแปร name[3][10]

char name[3][10] = {“MALI” , “DOW” , “SOMSAK”};

ซงผลจากการประกาศพรอมการก าหนดคาดงกลาว การจดเกบขอมลในแตละชองอลเมนตในแถวและคอลมนจะไดผลลพธดงรป

name

Colum

n 0

Colum

n 1

Colum

n 2

Colum

n 3

Colum

n 4

Colum

n 5

Colum

n 6

Colum

n 7

Colum

n 8

Colum

n 9

Row 0 M A L I \0 \0 \0 \0 \0 \0

Row 1 D O W \0 \0 \0 \0 \0 \0 \0

Row 2 S O M S A K \0 \0 \0 \0

รปท 7.8 แสดงตวอยางการเกบขอมลชอของนกเรยนทประกาศไวจ านวน 3 คน

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

Page 11: วิชา การพัฒนาโปรแกรม ภาษาซี)2 ดง น น เม อตอ งการประกาศต วแปร a เป นต วแปรอาร

10

ตวอยาง การอางถงเพอแสดงขอมลในตวแปร name[3][10] ท าไดดงน

กรณท 1 แสดงขอมลชอเปนรายคน

printf( “%s”, name[1] );

หมายถง การแสดงขอมลทจดเกบไวในตวแปรทชอ score ในต าแหนง อลเมนตแถวท 1 ผลลพธทได คอ DOW (ดรปท 7.9)

name

Colum

n 0

Colum

n 1

Colum

n 2

Colum

n 3

Colum

n 4

Colum

n 5

Colum

n 6

Colum

n 7

Colum

n 8

Colum

n 9

Colum

n 10

Row 0 M A L I \0 \0 \0 \0 \0 \0 \0

Row 1 D O W \0 \0 \0 \0 \0 \0 \0 \0

Row 2 S O M S A K \0 \0 \0 \0 \0

รปท 7.9 แสดงตวอยางการเกบขอมลชอของนกเรยนทต าแหนงแถวท 1

กรณท 2 แสดงขอมลชอทงหมดทกคนทจดเกบไว

for (i=0 ; i<=2 ; i++) printf(“%s”, name[i] );

Page 12: วิชา การพัฒนาโปรแกรม ภาษาซี)2 ดง น น เม อตอ งการประกาศต วแปร a เป นต วแปรอาร

11

กจกรรมเสรมทกษะ

ใหนกเรยนทดลองเขยนโปรแกรมเพอจดเกบชอนกเรยน โดยจดเกบขอมลของนกเรยน จ านวน 3 คน และน าขอมลทจดเกบไวน ามาแสดงดงรป

1 2 3 4 5 6 7 8 9

10 11 12 13 14 15 16 17 18 19

#include <stdio.h> #include <conio.h> char name[3][15]; int i , j ; main( ) { for (i=0 ; i<=2 ; i++) { printf("Input name : "); scanf("%s", name[i] ); } printf("\n\n=== Name of Student ===\n"); for (j=0 ; j<=2 ; j++) { printf("name[%d] is %s \n", j+1 , name[j]); } getche( ); }

รปภาพ แสดงผลลพธทไดจากการท างาน

ของโปรแกรม ex07_2.exe

Page 13: วิชา การพัฒนาโปรแกรม ภาษาซี)2 ดง น น เม อตอ งการประกาศต วแปร a เป นต วแปรอาร

12

กจกรรมเสรมทกษะ

ใหนกเรยนทดลองเขยนโปรแกรมเพอจดเกบขอมลนกเรยน โดยจดเกบขอมลของนกเรยน จ านวน 3 คน และแตละคนมคะแนนสอบ 2 ครง และหาผลรวมของคะแนนเกบของนกเรยนทง 3 คน ขอมลน าเขา ไดแก ชอ (name) , คะแนนเกบ (score) ผลลพธทตองการ ไดแก คะแนนรวม (total)

1 2 3 4 5 6 7 8 9

10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

#include <stdio.h> #include <conio.h> char name[3][15]; int i , j , a , b , c , score[3][2],total[3][1] ; main( ) { for (i=0 ; i<=2 ; i++) { printf("Input name : "); scanf("%s",name[i] ); for (j=0 ; j<=1 ; j++) { printf("Test [%d] is : ", j+1 ); scanf("%d", &score[i][j] ); total[i][0]=total[i][0]+score[i][j]; } printf("=======================\n\n"); } for(a=0;a<=2;a++); { for (b=0;b<=2;b++) { printf("%s total is ",name[b]); for (c=0;c<=0;c++) { printf("%d \n", total[b][0]); } } } getche( ); }

รปภาพ แสดงผลลพธทไดจากการท างาน

ของโปรแกรม ex07_2.exe

Page 14: วิชา การพัฒนาโปรแกรม ภาษาซี)2 ดง น น เม อตอ งการประกาศต วแปร a เป นต วแปรอาร

13

ฟงกชนจดการสตรง จากเนอหาทผานมาท าใหเขาใจวา สตรงหรอขอความ จะถกจดเกบในลกษณะของอารเรยของอกขระนนเอง อกทงยงมการใชรหส \0 ไวทายขอมลเพอใหทราบวาเปนจดสนสดของขอความนน ๆ ส าหรบการประกาศชนดขอมลพรอมก าหนดคาเรมตนใหกบตวแปรสตรงนน สามารถกระท าได หลายรปแบบดงน Char school[10]= {‘c’ , ‘h’ , ‘a’ , ‘i' , ‘b’ , ‘a’ , ‘d’ , ‘a’ , ‘n’ , ‘\0’}; Char school[10]= “chaibadan”, Char school[ ]= {‘c’ , ‘h’ , ‘a’ , ‘i' , ‘b’ , ‘a’ , ‘d’ , ‘a’ , ‘n’ , ‘\0’}; Char school[ ]= “chaibadan”,

ในกรณทตองการก าหนดคาเรมตนใหกบตวแปรชนดอกขระ โดยปกตจะสามารถเกบไดเพยง 1 อกขระเทานน หากตองการเกบอกขระมากกวา 1 อกขระ จ าเปนตองก าหนดใหตวแปรนน ๆ อยในรปแบบของตวแปรชนดขอความชด หรอทเรยกวา ตวแปรอารเรย (Array) นนเอง และในการท าเกยวกบตวแปรทมชนดเปนแบบ สตรง หรอขอความ ยงมฟงกชนทชวยในการออกแบบโปรแกรมใหท างานไดสะดวกยงขน ฟงกชนทใชงานเกยวกบสตรง (string functions) ในภาษาซ มฟงกชนทใชจดการเกยวกบคาคงทสตรง และตวแปรสตรงอยหลายฟงกชนดงน

• ฟงกชน strcpy( ) • ฟงกชน strcmp( ) • ฟงกชน strlen( ) • ฟงกชน strcat( )

โดยกอนทจะใชฟงกชนเหลานจะตองมการใชค าสง # include<string.h> เขามาในโปรแกรมดวยจงจะสามารถท างานได

Page 15: วิชา การพัฒนาโปรแกรม ภาษาซี)2 ดง น น เม อตอ งการประกาศต วแปร a เป นต วแปรอาร

14

1. ฟงกชน strcpy( )

เปนฟงกชนทน ามาใชเพอคดลอกขอความไปเกบไวในตวแปร หรอคดลอกจากตวแปรสตรงหนงไปเกบไวยงตวแปรของอกสตรงหนง มรปแบบการใชฟงกชนดงน รปแบบ

Strcpy (Destination , Source)

Destination หมายถง ตวแปรทใชจดเกบคาขอมลใน source Source หมายถง ขอความหรอตวแปรสตรงทจะน าไปจดเกบไวในตวแปรทระบ ไวใน Destination ตวอยาง strcpy (bonus, “Television”);

หมายถง การคดลอกขอความค าวา “Television” ไปเกบไวทตวแปรสตรง ทชอวา bonus

strcpy (award , bonus);

หมายถง การคดลอกขอความจากตวแปรสตรงทชอวา bonusไปเกบไวท ตวแปรสตรงทชอวา award

Page 16: วิชา การพัฒนาโปรแกรม ภาษาซี)2 ดง น น เม อตอ งการประกาศต วแปร a เป นต วแปรอาร

15

กจกรรมเสรมทกษะ

ใหนกเรยนทดลองเขยนโปรแกรมเพอเลอกผลลพธการใหรางวล (bonus) จากคะแนน (score) ทปอนเขาไปในโปรแกรมแลวแสดงขอความออกมา ในรปแบบของขอความชอของรางวลทจะไดรบ โดยใชฟงกชน strcpy( )

1 2 3 4 5 6 7 8 9

10 11 12 13 14 15 16 17 18 19 20

#include <stdio.h> #include <conio.h> #include <string.h> char bonus[15]; int score; main( ) { printf ("INPUT SCORE : "); scanf("%d", &score); if (score<=200) strcpy(bonus ,"Electric Fan"); else if (score<=300) strcpy(bonus , "Television"); else if (score<=400) strcpy(bonus , "Refrigerator"); else strcpy(bonus , "Motorcycle"); printf("\nBONUS IS %s", bonus); getche( ); }

รปภาพ แสดงผลลพธทไดจากการท างานของ

โปรแกรม ex07_4.exe

Page 17: วิชา การพัฒนาโปรแกรม ภาษาซี)2 ดง น น เม อตอ งการประกาศต วแปร a เป นต วแปรอาร

16

2. ฟงกชน strlen( )

เปนฟงกชนทน ามาใชนบจ านวนตวอกษร ทบรรจอยในตวแปรอารเรย มรปแบบการใชฟงกชนดงน รปแบบ

Strlen (StringVariable)

StringVariable หมายถง ตวแปร ตวแปรชนดสตรง

ตวอยาง strcpy (bonus, “Television”); printf( “%d”, strlen(bonus));

หมายถง การคดลอกขอความค าวา “Television” ไปเกบไวทตวแปรสตรง ทชอวา bonus และผลลพธทไดจากการนบจ านวนอกขระในตวแปร สตรงทชอวา bonus เทากบ 10 ตวอกษร

Page 18: วิชา การพัฒนาโปรแกรม ภาษาซี)2 ดง น น เม อตอ งการประกาศต วแปร a เป นต วแปรอาร

17

กจกรรมเสรมทกษะ

ใหนกเรยนทดลองเขยนโปรแกรมรบชอของนกเรยน เพอท าการนบอกขระทงหมดและ จ าแนกนบอกขระตวอกษร ‘a’ , ‘e’ , ‘i’ , ‘o’ , ‘ u’ จากชอการปอนชอของนกเรยนโดยใชฟงกชน strlen( )

1 2 3 4 5 6 7 8 9

10 11 12 13 14 15 16 17 18 19 20

#include <stdio.h> #include <conio.h> #include <string.h> char name[30]; int i , j , n1 , n2 , n3 , n4 , n5 ; main( ) { printf("Input name : "); scanf("%s", name); printf("Number is : %d\n", strlen(name)); for (i=0 ; i<=strlen(name) ; i++) { if (name[i]=='a') n1++; else if(name[i]=='e') n2++; else if(name[i]=='i') n3++; else if(name[i]=='o') n4++; else if(name[i]=='u') n5++; } printf("Number of 'a' is %d \n", n1); printf("Number of 'e' is %d \n", n2); printf("Number of 'i' is %d \n", n3); printf("Number of 'o' is %d \n", n4); printf("Number of 'u' is %d \n", n5); getche( ); }

รปภาพ แสดงผลลพธทไดจากการท างานของ

โปรแกรม ex07_5.exe

Page 19: วิชา การพัฒนาโปรแกรม ภาษาซี)2 ดง น น เม อตอ งการประกาศต วแปร a เป นต วแปรอาร

18

3. ฟงกชน strcmp( )

เปนฟงกชนทน ามาใชเพอเปรยบเทยบสตรง 2 ตว วาตรงกนหรอไม โดยหาผลตรวจสอบมผลตรงกนกจะรเทรนคาเปน 0 แตถาไมตรงกน กจะรเทรนคาทเกดจากผลตางของตวอกขระ ซงเปนผลตางระหวางเลขรหสเอสกของคาทงสองนนเอง มรปแบบการใชฟงกชนดงน รปแบบ

Strcmp (String1, String2)

String 1 และ String2 หมายถง ขอความหรอตวแปร ทน ามาเปรยบเทยบวาตรงกนหรอไม กจกรรมเสรมทกษะ

ใหนกเรยนทดลองเขยนโปรแกรมทดสอบการใชงานฟงกชน strcmp( )

1 2 3 4 5 6 7 8 9

10 11 12 13 14 15 16 17

#include <stdio.h> #include <conio.h> #include <string.h> char data1[]="ABC"; char data2[]="ABF"; int a , b , c; main( ) { a=strcmp(data1,"ABC"); b=strcmp(data1,data2); c=strcmp(data2,data1); printf(" Compare %s and %s = %d\n",data1,"ABC", a); printf(" Compare %s and %s = %d\n",data1,data2, b); printf(" Compare %s and %s = %d\n",data2,data1, c); getche( ); }

รปภาพ แสดงผลลพธทไดจากการ

ท างานของโปรแกรม ex07_5.exe

Page 20: วิชา การพัฒนาโปรแกรม ภาษาซี)2 ดง น น เม อตอ งการประกาศต วแปร a เป นต วแปรอาร

19

4. ฟงกชน strcat( )

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

Strcat (Target, Source)

Target หมายถง ขอความหรอตวแปร ทน ามาเปรยบเทยบวาตรงกนหรอไม Source หมายถง ขอความหรอตวแปรสตรง ทตองการน ามาผนวกตอทายรวมกบ ตวแปรใน Target กจกรรมเสรมทกษะ

ใหนกเรยนทดลองเขยนโปรแกรมทดสอบการใชงานฟงกชน strcat( )

1 2 3 4 5 6 7 8 9

10 11

#include <stdio.h> #include <conio.h> #include <string.h> char name[ ]="Ponpanarat "; char surname[ ]="Chompunuch"; main( ) { strcat(name , surname); printf(" My Name is %s", name); getche( ); }

รปภาพ แสดงผลลพธทไดจากการท างานของ

โปรแกรม ex07_7.exe