วิชา การพัฒนาโปรแกรม ภาษาซี)2 ดง น น...
TRANSCRIPT
0
วชา การพฒนาโปรแกรม (ภาษาซ) รหสวชา ว31293
หนวยการเรยนรท 6 อารเรยและฟงกชนจดการสตรง
ผลการเรยนร
สามารถเลอกใชตวแปรอารเรยในการเขยนโปรแกรมและประยกตใชงานฟงกชนเพอจดการขอความหรอสตรงไดอยางถกตองและเหมาะสม
จดประสงคการเรยนร
1. เขาใจหลกการอารเรย และสามารถน าไปประยกตใชงานไดอยางถกตอง 2. เปรยบเทยบความแตกตางระหวางอารเรย 1 มต และอารเรย 2 มตได 3. สามารถเขยนโปรแกรมเพอจดเกบขอมลลงในตวแปรอารเรยได 4. สามารถเขยนโปรแกรมเพอจดการกบขอความหรอสตรงได 5. สามารถแปลงขอความทเปนตวเลข น าไปใชเพอการค านวณได
สาระการเรยนร 1. ชนดของตวแปรอารเรย 2. ฟงกชนจดการสตรง 3. การอานและแสดงคาของสตรง 4. การแปลงขอความทเปนตวเลขเปนคาตวเลขทน าไปค านวณได
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
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 จ านวน
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 ชด
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 นนเอง
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
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 คอ ขนาดของสดมภ หรอคอลมน
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 แสดงตวอยางการเกบขอมลคะแนนของนกเรยน
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)
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 มต ชนดอกขระนน สามารถท าไดโดยระบเฉพาะต าแหนงของแถวของตวแปรเทานน แตการแสดงผลลพธจะแสดงคาในอลเมนตในแถว ๆ นนทกอกขระโดยอตโนมต ดงตวอยางตอไปน
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] );
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
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
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> เขามาในโปรแกรมดวยจงจะสามารถท างานได
14
1. ฟงกชน strcpy( )
เปนฟงกชนทน ามาใชเพอคดลอกขอความไปเกบไวในตวแปร หรอคดลอกจากตวแปรสตรงหนงไปเกบไวยงตวแปรของอกสตรงหนง มรปแบบการใชฟงกชนดงน รปแบบ
Strcpy (Destination , Source)
Destination หมายถง ตวแปรทใชจดเกบคาขอมลใน source Source หมายถง ขอความหรอตวแปรสตรงทจะน าไปจดเกบไวในตวแปรทระบ ไวใน Destination ตวอยาง strcpy (bonus, “Television”);
หมายถง การคดลอกขอความค าวา “Television” ไปเกบไวทตวแปรสตรง ทชอวา bonus
strcpy (award , bonus);
หมายถง การคดลอกขอความจากตวแปรสตรงทชอวา bonusไปเกบไวท ตวแปรสตรงทชอวา award
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
16
2. ฟงกชน strlen( )
เปนฟงกชนทน ามาใชนบจ านวนตวอกษร ทบรรจอยในตวแปรอารเรย มรปแบบการใชฟงกชนดงน รปแบบ
Strlen (StringVariable)
StringVariable หมายถง ตวแปร ตวแปรชนดสตรง
ตวอยาง strcpy (bonus, “Television”); printf( “%d”, strlen(bonus));
หมายถง การคดลอกขอความค าวา “Television” ไปเกบไวทตวแปรสตรง ทชอวา bonus และผลลพธทไดจากการนบจ านวนอกขระในตวแปร สตรงทชอวา bonus เทากบ 10 ตวอกษร
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
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
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