cc32 www/61.91.86.252/home
www/113.5
3.232.212/~
pcc32
Programming 2
Mr.Chaowalert polrat
หน่วยการเรียนรู้ที่ 1
เรื่อง ตัวแปรชุดชนิดตัวเลข
เนื้อหา
1. ความหมายของตัวแปรชุด
2. ตัวแปรชุดหนึ่งมิติ
ผลการเรียนรู้
Programming 2
1. อธิบายความหมายของตัวแปรชุด (Array) ได้
2. เขียนโปรแกรมประกาศตัวแปรชุดแบบหนึ่งและสองมิติเพื่อเก็บ
ข้อมูลชนิดพื้นฐานได้แก่ จ านวนเต็ม จ านวนทศนิยม และอักขระ
และก าหนดค่าเริ่มต้นให้กับตัวแปรนั้น ๆ ได้
3. อธิบายวิธีการอางถึงสมาชิกของตัวแปรชุดได
1
ความหมายของตัวแปรชุด
ตัวแปรชุด เปนโครงสรางขอมูลที่ใชเก็บขอมูลชนิดเดียวกัน เปนกลุมหรือชุดที่เรียง ติดต
อกันเปนแถว มีขอบเขตจ ากัดและมีขนาดคงที่
ขอมูลชนิดเดียวกัน คือ ขอมูลทุกตัวที่อยูในตัวแปรชุดจะตองเปนขอมูลชนิดเดียวกันเทานั้น
เชน ถาเปนตัวแปรชุดชนิดจ านวนเต็ม ขอมูลทุกตัวในตัวแปรชุดก็ตองเปนชนิดจ านวนเต็ม ไมสามารถ
เก็บขอมูลตางชนิดกันได
1. ตัวแปรชดุ มิติ ( 1 One-Dimension Array)
1.1 การประกาศตัวแปร
ชนิดขอมูล ชื่อตัวแปร ขนาดของตัวแปรชุด] ];
เชน float score[5];
Programming 2 score
score[0] score[1] score[2] score[3] score[4]
4byte 4 byte 4byte 4byte 4byte
int a[50];
char name[30];
long value[100];
โดยที่ขนาดของตัวแปรชุด สามารถก าหนดเปนตัวเลขจ านวนเต็มหรือคาคงที่ก็ได
2. ตัวแปรชดุ 1 มิติ (One-Dimension Array)
สามารถก าหนดคาเริ่มตนใหกับ array ไดตั้งแตตอนประกาศตัวแปร
คาที่ก าหนดต้องอยู่ในเครื่องหมาย { } และถามีมากกวา 1 คา ตองแยกจากกันดวย
เครื่องหมาย ,(comma)
เชน int a[5] = {10,20,30,40, 50 } ;
A[0] A[1] A[2] A[3] A[4]
2 A
10 20 30 40 50
ถาในตอนประกาศตัวแปรตัวแปรชุดไมก าหนดคาเริ่มตนให คาที่อยู่ในตัวแปรจะเปนค่าที่คางอยู
ในหนวยความจ าชวงที่เราจองไวเปนตัวแปรชุดนั้น
ถาก าหนดคาเริ่มตนตั้งแต่ตอนประกาศตัวแปรแตก าหนดไมครบ ในกรณีที่เปนตัวแปรชุดแบบ
0
ตัวเลขทั้งจ านวนเต็มและจ านวนจริง คาที่เหลือจะถูกก าหนดเปน โดยอัตโนมัติ
เชน float price[5] = {50.5,2.25,10.0} ;
price[0] price[1] price[2] price[3] price[4]
price 50.5 2.25 10.0 0.0 0.0
4 bytes 4 bytes 4 bytes 4 bytes 4 bytes
บางครั้งถาก าหนดคาเริ่มตนใหแกตัวแปรชุดเลย เราไมจ าเปนตองใสขนาดของตัวแปรชุดก็ได
เชน float a[ ] = {1,2,3,4,5} ;
ความหมายคือ เปนการก าหนดตัวแปรตัวแปรชุดของจ านวนจริงแบบ float ขนาด 5 ชอง
แตถาเราก าหนดตัวแปรตัวแปรชุดโดยไมใสขนาดของตัวแปรชุด และไมไดก าหนดคาเริ่มตน
Programming 2
เชน int a[ ] ; ประกาศผิด!!!
นั่นคือ เราไมสามารถประกาศตัวแปรตัวแปรชุดโดยไมใสขนาดของตัวแปรชุดได
ยกเวนมีการก าหนดคาเริ่มตนใหกับมันตั้งแตแรก
3. การอ้างอิงถึงสมาชิก
ใชเลขจ านวนเต็มท าหนาที่เปนดัชนี (index) เพื่อระบุถึงขอมูลนั้น โดยระบุชื่อตัวแปรตัวแปร
ชุดแลวตามดวยคาต าแหนงที่อยูของสมาชิก
ในภาษาซี ดัชนีเริ่มตั้งแต [0] ถึง [n-1] ( n = จ านวนของสมาชิกในตัวแปรชุด (
ตัวอยาง ให a เปนตัวแปรชุดของ int ขนาด 5 ชอง โดยแตละชองมีขอมูล 1, 2, 3, 4, 5
ตามล าดับ
a[0] a[1] a[2] a[3] a[4]
a 1 2 3 4 5
3
เขียนไดเปน
int a[5]; a[0] = 1; a[1] = 2; a[2] = 3; a[3] = 4; a[4] = 5;
ข้อสังเกต
1. a[0] , ... , a[4] เปรียบเสมือนตัวแปร int ธรรมดา 5 ตัว นั่นคือสามารถน ามากระท าการตางๆ ได
เหมือนตัวแปรธรรมดา เชน
• รับขอมูลเขาไปเก็บไวในตัวแปรชุด a ต าแหนงที่ 3 สามารถเขียนเปน ค าสั่งไดดังนี้
scanf ( “%d” , &a[3] ( ;
• i = 3;
a[i] = a[i+1] + a[4] ;
จะหมายถึง
1) ก าหนดคาใหตัวแปร i เทากับ 3
2( น าขอมูลในตัวแปรชุด a ต าแหนงที่ i+ มูลในตวั แปรชุด อ มาบวกกับข 1 a
ต าแหนงที่ 4 แลวเก็บผลลัพธที่ไดไว้ในตัวแปรชุด a ต าแหนงที่ i
Programming 2 4. ขนาดของตัวแปรชุดจะคงที่ เชน ก าหนดใหตัวแปรชุด N เก็บเลขจ านวนเต็มโดยมีขนาด 50
นั่นคือ น า (a[4] + a[4] แลวเกบ็ ผลลัพธนี้ไว้ใน a[3] นั่นเอง(
ชอง ก็หมายความวา ตัวแปรชุด N จะไปจองเนื้อที่ในหนวยความจ าขนาดที่เก็บจ านวนเต็ม
ได อกัน องติดต 50 ช จ านวน โดยที่จะเรียงกันไป 50 และจะเก็บมากกวา 50 ช่องไมได
ตัวอยาง 1 จากสวนของโปรแกรม เมื่อ run เสร็จสิ้นแลว จะมีขอความใดปรากฏบนหนาจอ
int n[5] = { 5, 3, 2, 6, 1 }, i , j;
for ( i = 0; i < 5; i++ )
{ ผลลัพธคือ
for ( j = 1; j <= n[i]; j++ ) *****
printf( “*” ); ***
printf( "\n" ); **
} ******
*
4
ตัวอยาง 2 จากสวนของโปรแกรม เมื่อ run เสร็จสิ้นแลว ตัวแปรชุด a จะมีคาเทาไร
#define N 10
main() ผลลัพธคือ
{ a[0] = 10
int a[N] = {1,2,3,4,5,6,7,8,9,10}; a[1] = 9
int i = 1 , j = 9; a[2] = 8
while ( i != 11) a[3] = 7
{ a[4] = 6
If ( i % 2 == 0) a[5] = 5
{ a[6] = 4
a[11 - i] = a[11 - i] – j ; a[7] = 3
j=j–4;
} a[8] = 2
else a[9] = 1
a[i -1] = a[i -1] + j ;
i++; Programming 2
}
}
ตัวอยาง 3
main()
{
int number[5] , i ;
for ( i = 0 ; i < 5 ; i++)
{
printf( “input number %d : ” , i+1) ;
scanf( “%d” , &number[i]) ;
}
printf(“Show number descending from your input : ”);
for ( i = 4 ; i >= 0 ; i--)
{
printf(“ %d\t” , number[i]) ;
} 5
}
ชื่อ – สกุล ……………………………………………………………….. ห้อง …………. เลขที่ ………….
ใบงานที่ 1
เรื่อง ตัวแปรชุดชนิดตัวเลข
ค าชี้แจง
ใบงานแบ่งออกเป็น 2 ตอน ดังนี้
- ตอนที่ 1 เป็นค าถามแบบให้เขียนตอบ
- ตอนที่ 2 เป็นการเขียนโปรแกรมแก้ปัญหาตามที่โจทย์ก าหนดให้
------------------------------------------------------------------------------------------------------------------
ตอนที่ 1 จงตอบค าถามต่อไปนี้
1. จงบอกลักษณะการท างานในการประกาศตัวแปร int sum; กับ int sum[10];
Programming 2
2. ให้นักเรียนประกาศตัวแปร(high) เก็บส่วนสูงของนักเรียนจ านวน 20 คน
3. ประกาศตัวแปร int gpa[50]; เพื่อเก็บค่าคะแนนเฉลี่ยจ านวน 50 คน เป็นการประกาศตัว
แปรที่ถูก หรือผิด เพราะเหตุใด ถ้าคิดว่าผิดจงแก้ไขให้ถูกต้อง
4. ก าหนดให้ float x[10] ={3.8,2.5,3.2,4.6,5.8}; แล้ว printf(“%2f”,x[4]); ผลลัพธ์ที่ได้คือ
อะไร
6
ตอนที่ 2 ให้นักเรียนเขียนโปรแกรมแก้โจทย์ปัญหาตามกลุ่มที่ก าหนดให้
กลุ่มที่ 1
ชั้นมัธยมศึกษาปีที่ 4 /………….. ชื่อกลุ่ม ………………………
สมาชิกในกลุ่ม
1……………………………………………………………………. เลขที่ ……………..
2……………………………………………………………………. เลขที่ ……………..
3……………………………………………………………………. เลขที่ ……………..
4……………………………………………………………………. เลขที่ ……………..
5……………………………………………………………………. เลขที่ ……………..
6……………………………………………………………………. เลขที่ ……………..
Programming 2
ให้นักเรียนเขียนโปรแกรมในการเก็บค่าตัวเลขชนิดจ านวนเต็ม 10 จ านวน โดยการรับค่า
ทางคีย์บอร์ด แล้วแสดงผลออกทางจอภาพ พร้อมผลรวม
Ex1
Input number 1 : 10
Input number 2 : 20
Input number 3 : 30
Input number 4 : 40
Input number 5 : 50
Input number 6 : 60
Input number 7 : 70
Input number 8 : 80
Input number 9 : 90
Input number 10 : 100
7
Output : 10 20 30 40 50 60 70 80 90 100
Sum : 550
กลุ่มที่ 2
ชั้นมัธยมศึกษาปีที่ 4 / ………… ชื่อกลุ่ม ………………………
สมาชิกในกลุ่ม
1……………………………………………………………………. เลขที่ ……………..
2……………………………………………………………………. เลขที่ ……………..
3……………………………………………………………………. เลขที่ ……………..
4……………………………………………………………………. เลขที่ ……………..
5……………………………………………………………………. เลขที่ ……………..
6……………………………………………………………………. เลขที่ ……………..
Programming 2 ให้นักเรียนเขียนโปรแกรมในการเก็บค่าตัวเลขชนิดจ านวนทศนิยม 7 จ านวนโดย
การรับค่าทางคีย์บอร์ด แล้วแสดงผลออกทางจอภาพ พร้อมหาค่าเฉลี่ย
Ex1
Input number 1 : 1.5
Input number 2 : 3.5
Input number 3 : 4.5
Input number 4 : 3.8
Input number 5 : 3.2
Input number 6 : 1.2
Input number 7 : 5.8
Output : 1.5 3.5 4.5 3.8 3.2 1.2 5.8
Average : 3.35
8
กลุ่มที่ 3
ชั้นมัธยมศึกษาปีที่ 4 / ……….ชื่อกลุ่ม ………………………
สมาชิกในกลุ่ม
1……………………………………………………………………. เลขที่ ……………..
2……………………………………………………………………. เลขที่ ……………..
3……………………………………………………………………. เลขที่ ……………..
4……………………………………………………………………. เลขที่ ……………..
5……………………………………………………………………. เลขที่ ……………..
6……………………………………………………………………. เลขที่ ……………..
ให้นักเรียนเขียนโปรแกรมในการเก็บค่าตัวเลขชนิดจ านวนเต็ม 10 จ านวนโดยการรับค่าทาง Programming 2
คีย์บอร์ด แล้วแสดงผลออกทางจอภาพเฉพาะที่หารด้วย 20 ลงตัว
Ex1
Input number 1 : 10
Input number 2 : 20
Input number 3 : 30
Input number 4 : 40
Input number 5 : 50
Input number 6 : 60
Input number 7 : 70
Input number 8 : 80
Input number 9 : 90
Input number 10 : 100
Output : 20 40 60 80 100 9
กลุ่มที่ 4
ชั้นมัธยมศึกษาปีที่ 4 / ………..ชื่อกลุ่ม ………………………
สมาชิกในกลุ่ม
1……………………………………………………………………. เลขที่ ……………..
2……………………………………………………………………. เลขที่ ……………..
3……………………………………………………………………. เลขที่ ……………..
4……………………………………………………………………. เลขที่ ……………..
5……………………………………………………………………. เลขที่ ……………..
6……………………………………………………………………. เลขที่ ……………..
Programming 2 ค่าทางคีย์บอร์ด แล้วแสดงผลออกทางจอภาพเฉพาะ 5 จ านวน หลังสุดเท่านั้น
ให้นักเรียนเขียนโปรแกรมในการเก็บค่าตัวเลขชนิดจ านวนทศนิยม10 จ านวน โดยการรับ
Ex1
Input number 1 : 10
Input number 2 : 20
Input number 3 : 30
Input number 4 : 40
Input number 5 : 50
Input number 6 : 60
Input number 7 : 70
Input number 8 : 80
Input number 9 : 90
Input number 10 : 100
Output : 60 70 80 90 100
10
กลุ่มที่ 5
ชั้นมัธยมศึกษาปีที่ 4 / ………….ชื่อกลุ่ม ………………………
สมาชิกในกลุ่ม
1. ……………………………………………………………………. เลขที่ ……………..
2. ……………………………………………………………………. เลขที่ ……………..
3. ……………………………………………………………………. เลขที่ ……………..
4. ……………………………………………………………………. เลขที่ ……………..
5. ……………………………………………………………………. เลขที่ ……………..
6. ……………………………………………………………………. เลขที่ ……………..
Programming 2
ให้นักเรียนเขียนโปรแกรมในการเก็บค่าตัวเลขชนิดจ านวนเต็ม 10 จ านวนโดยการรับค่าทาง
คีย์บอร์ด แล้วแสดงผลออกทางจอภาพ เฉพาะจ านวนคี่
Ex1
Input number 1 : 11
Input number 2 : 12
Input number 3 : 13
Input number 4 : 14
Input number 5 : 15
Input number 6 : 16
Input number 7 : 17
Input number 8 : 18
Input number 9 : 19
Input number 10 : 20
11
Output : 11 13 15 17 19
ใบงานกลุ่มที่ 6
ชั้นมัธยมศึกษาปีที่ 4 /…………ชื่อกลุ่ม ………………………
สมาชิกในกลุ่ม .
1. ……………………………………………………………………. เลขที่ ……………..
2. ……………………………………………………………………. เลขที่ ……………..
3. ……………………………………………………………………. เลขที่ ……………..
4. ……………………………………………………………………. เลขที่ ……………..
5. ……………………………………………………………………. เลขที่ ……………..
6. ……………………………………………………………………. เลขที่ ……………..
Programming 2 แล้วแสดงผลออกทางจอภาพ พร้อมค่าผลรวม
ให้นักเรียนเขียนโปรแกรมในการเก็บค่าตัวเลขชนิดจ านวนทศนิยม 5 จ านวนโดยการรับค่าทางคีย์บอร์ด
Ex1
Input number 1 : 10.5
Input number 2 : 20.5
Input number 3 : 30.5
Input number 4 : 40.5
Input number 5 : 50.5
Output : 10.5 20.5 30.5 40.5 50.5
Sum : 152.5
12
แบบทดสอบประจ าหน่วยที่ 1
เรื่อง ตัวแปรชุดกับข้อมูลชนิดตัวเลข
-----------------------------------------------------------------------------------------------------------------------
ผลการเรียนรู้ที่คาดหวัง
1. อธิบายความหมายของตัวแปรชุด (Array) ได้
2. เขียนโปรแกรมประกาศตัวแปรชุดหนึ่งมิติเก็บข้อมูลชนิดตัวเลขได้
3. อธิบายวิธีการอ้างถึงสมาชิกของตัวแปรชุดได้
ค าชี้แจง
1. ข้อสอบเป็นแบบเลือกตอบ 4 ตัวเลือก มีทั้งหมด 5 ข้อ
2. จงเลือกค าตอบที่ถูกที่สุดเพียงข้อเดียว
-----------------------------------------------------------------------------------------------------------------------
Programming 2
โปรแกรม 1
int i[5];
int j;
for(j=0;j<5;j++)
{
i[j]=j+1;
printf(“%d ”,i[j]);
}
จากส่วนของโปรแกรม ใช้ประกอบการตอบค าถาม
13
1. ข้อใดกล่าวถึงตัวแปรประเภทอาร์เรย์ (Array) ได้ถูกต้อง
ก. ตัวแปรที่เก็บข้อมูลแบบข้อมูลเดี่ยว
ข. ตัวแปรที่เก็บข้อมูลเป็นกลุ่มและข้อมูลเป็นประเภทเดียวกัน
ค. ตัวแปรที่เก็บข้อมูลเป็นกลุ่มและข้อมูลต่างชนิดกันได้
ง. ตัวแปรที่เก็บข้อมูลเป็นกลุ่มและเป็นชนิดตัวเลขเท่านั้น
2. ถ้าหากประกาศตัวแปรอาร์เรย์เป็น int x[9] ข้อใดไม่ถูกต้อง
ก. มีตัวแปรย่อยทั้งหมด 9 ตัว
ข. แต่ละเชลล์เก็บเลขจ านวนเต็ม
ค. ใช้หน่วยความจ าทั้งหมด 18 ไบต์
ง. ตัวแปรตัวสุดท้ายคือ x[9]
3. จากโปรแกรม 1 ค่าที่อยู่ใน i[2] คือ ค่าใด
ก. 1
ข. 2
Programming 2 ง. 4
ค. 3
4. การก าหนดค่าให้กับอาร์เรย์ ข้อใดผิด
ก. int x[4] = {1,2,3,4};
ข. int x[4] = {‘A’,’1’,’B’,’2’};
ค. float x[2] = {1.8,2.4};
ง. float x[8] = {1,2,3,4};
5. ตัวเลขที่ใช้อ้างอิงข้อมูลในตัวแปรชุด เรียกว่าอะไร
ก. index
ข. cell
ค. array
ง. element
14
ใบความรู้หน่วยที่ 2
เรื่อง สตริง (String) หรือ ตัวแปรชุด 1 มิติ ชนิดอักขระ
เนื้อหา
1. การก าหนดค่าเริ่มต้นให้กับสตริง
2. การรับและแสดงผลสตริง
ผลการเรียนรู้ที่คาดหวัง
1. อธิบายความหมายของตัวแปรชุดสตริง (String) ได้
2. เขียนโปรแกรมประกาศตัวแปรชุดหนึ่งมิติเก็บข้อมูลชนิดอักขระได้
3. อธิบายวิธีการอ้างถึงสมาชิกของตัวแปรชุดได้
สตริง (String) หรือ ตัวแปรชุด 1 มิติ ชนิดอักขระ
เราสามารถรวมอักขระแต่ละตัวเข้าด้วยกันเป็นสตริง (string) หรือข้อความ โดยประกาศให้
ตัว
แปรที่จะเก็บสตริงหรือข้อความเป็นตัวแปรตัวแปรชุด 1 มิติ ชนิดอักขระ
เช่น char code[6]; Programming 2
[0] [1] [2] [3] [4] [5]
code
1 byte 1 byte 1 byte 1 byte 1 byte 1 byte
หมายถึงประกาศให้ตัวแปร code เป็นตัวแปรชุด 1 มิติขนาด 6 ช่อง แต่ละช่องเก็บข้อมูลประเภท
อักขระ
1. การก าหนดค่าเริ่มต้นให้กับสตริง
Char name[ ] = “MWIT School”; จะได้
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11]
name
โดยที่ต าแหน่ง name[11] จะเก็บค่า \0 ไว้อัตโนมัติ เพื่อแสดงการสิ้นสุดข้อความ 15
หรือ char name[13] = “MWIT School”; จะได้
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11]
name
โดยที่ต าแหน่ง name[11] จะเก็บค่า \0 ไว้อัตโนมัติ เพื่อแสดงการสิ้นสุดข้อความ และ
ต าแหน่งที่
12 จะเป็น \0 ด้วยเช่นเดียวกัน
ดังนั้นในการประกาศให้ตัวแปรเป็นสตริง จะต้องค านึงถึงจ านวนตัวอักขระที่ต้องการจัดเก็บ
ด้วย
เช่น หากต้องการเก็บชื่อซึ่งมีความยาวไม่เกิน 20 ตัวอักษร จะต้องประกาศตัวแปรให้เป็นตัวแปรชุด
ขนาด 21 ช่อง (ส าหรับเก็บค่า \0 หรือค่า null) นั่นคือ char name[21];
2. การรับและแสดงผลสตริง
รับค่า จากเนื้อหาที่นักเรียนได้เรียนไปแล้วเรื่อง ค าสั่งรับและแสดงผล จะปรากฏค าสั่งที่ใช้ในการ
Programming 2 ค าสั่งรับค่า ตัวอย่าง
และแสดงผลสตริงหรือข้อความ ดังนี้
scanf(“%s”,ชื่อตัวแปรสตริง);
gets(name);
gets(ชื่อตัวแปร); scanf(“%s”,name); //สังเกตว่าไม่ต้องใส่ & หน้าตัวแปร name
ค าสั่งรับค่า ตัวอย่าง
printf(“%s”,ชื่อตัวแปรสตริง); printf(“%s”,name);
puts(ชื่อตัวแปร); puts(name);
3. ฟังก์ชันสตริงพื้นฐาน
ชื่อฟังก์ชัน ความหมาย Library
gets(ชื่อตัวแปร) รับสตริงหรือข้อความจากคีย์บอร์ด stdio.h
16
strlen(ชื่อตัวแปร) หาความยาวสตริงของตัวแปรที่ระบุ string.h
strcpy(ชื่อตัวแปร1,ข้อความ/ชื่อตัวแปร2) คัดลอกข้อความหรือค่าในตัวแปร 2 ไปเก็บไว้ใน string.h
ตัวแปร 1
strcmp(ชื่อตัวแปร1, ชื่อตัวแปร2) เปรียบเทียบล าดับสตริงระหว่าง ตัวแปร 1 และตัว string.h
แปร 2 โดยถ้าล าดับตัวอักษรใน ตัวแปร1 มาก่อน
ตัวแปร2
แสดงว่า ตัวแปร1 < ตัวแปร2 ดังนั้นจะได้เงื่อนไข
ดังนี้
ตัวแปร1 < ตัวแปร2 ฟังก์ชันจะให้ค่าติดลบ
ตัวแปร1 == ตัวแปร2 ฟังก์ชันจะให้ค่าเท่ากับ 0
ตัวแปร1 > ตัวแปร2 ฟังก์ชันจะให้ค่าเป็นบวกที่
มากกว่า 0
strcat(ชื่อตัวแปร1, ชื่อตัวแปร2) รวมสตริงในตัวแปร 2 ไปต่อท้าย ตัวแปร 1 แล้ว string.h
เก็บสตริงที่ต่อกันแล้วไว้ในตัวแปร 1 Programming 2
ตัวอย่าง โปรแกรมรับชื่อและหาความยาวชื่อ แล้วแสดงผลออกทางจอภาพ
1 #include<stdio.h>
2 #include<string.h>
3 void main()
4 { char name[20]; ประกาศตัวแปรตัวแปรชุด name เป็นสตริง
5 int size;
6 printf(“Please enter your name: ”);
7 gets(name); รับค่า name จากผู้ใช้ทางคีย์บอร์ด
8 size = strlen(name); หาความยาวสตริงของ name แล้วเก็บไว้ใน size
9 printf(“Hello %s\n”, name); พิมพ์ชื่อออกทางหน้าจอ
10 printf(“Your name has %d พิมพ์จ านวนตัวอักษร (ความยาวชื่อ) ออกทาง
characters”,size); หน้าจอ
17
11 }
ตัวอย่าง โปรแกรมรับชื่อและคัดลอกข้อความ แล้วแสดงผลออกทางจอภาพ
1 #include<stdio.h>
2 #include<string.h>
3 void main()
4 { char s1[30], s2[30];
5
6 printf(“Please enter string1: ”);
7 gets(s1);
8 strcpy(s2, “Thailand”); คัดลอกค าว่า Thailand ไปเก็บไว้ในตัวแปร s2
9 printf(“s1 : %s\n”, s1);
10 printf(“s2 : %s\n”, s2);
11 }
ตัวอย่าง โปรแกรมรับข้อความ 2 ข้อความแล้วตรวจสอบว่าค าใดมาก่อน-หลัง แล้วแสดงผลทาง
Programming 2 1 #include<stdio.h>
จอภาพ
2 #include<string.h>
3 void main()
4 { char s1[30], s2[30];
5 int x;
6 printf(“Please enter string1: ”);
7 gets(s1);
8 printf(“Please enter string2: ”);
9 gets(s2);
10 x = strcmp(s1, s2); เปรียบเทียบ s1 กับ s2 โดยเก็บผลลัพธ์ไว้
ใน x
11 if (x < 0) ตรวจสอบ x ว่าน้อยกว่า 0 หรือไม่ ถ้าน้อย
12 printf(“%s\n%s”, s1, s2); กว่าคือs1 มาก่อน s2 ถ้า s1 มาก่อน s2
13 else if(x > 0) ให้พิมพ์ s1 ตามด้วย s2 แต่ถ้า s1 มาหลัง
18 14 printf(“%s\n%s”, s2, s1); s2 ให้พิมพ์ s2ตามด้วย s1 แต่ถ้า
15 else
16 printf(“similar strings”); นอกจากนี้ให้พิมพ์ว่าทั้งสองค าเป็นค า
เดียวกัน
17 }
ตัวอย่าง โปรแกรมต่อข้อความโดยใช้ strcat แล้วแสดงผลออกทางจอภาพ
1 #include<stdio.h>
2 #include<string.h>
3 void main()
4 { char s1[20], s2[]=”School”; ก าหนดค่าเริ่มต้นให้ s2 เก็บ School
5 strcpy(s1,”MWIT ”); คัดลอกค าว่า MWIT ไปเก็บไว้ในตัวแปร s1
6 printf(“s1 : %s\n”, s1);
7 printf(“s2 : %s”, s2);
Programming 2
8 strcat(s1, s2); น าข้อความใน s2 มาต่อท้าย s1 แล้วเก็บไว้ใน s1
9 printf(“After strcat\n”);
10 printf(“s1 : %s\n”, s1);
11 printf(“s2 : %s”, s2);
12 }
19
ใบความรู้หน่วยที่ 2
เรื่อง สตริง (String) หรือ ตัวแปรชุด 1 มิติ ชนิดอักขระ
เนื้อหา
1. การก าหนดค่าเริ่มต้นให้กับสตริง
2. การรับและแสดงผลสตริง
ผลการเรียนรู้ที่คาดหวัง
Programming 2 3. อธิบายวิธีการอ้างถึงสมาชิกของตัวแปรชุดได้
1. อธิบายความหมายของตัวแปรชุดสตริง (String) ได้
2. เขียนโปรแกรมประกาศตัวแปรชุดหนึ่งมิติเก็บข้อมูลชนิดอักขระได้
สตริง (String) หรือ ตัวแปรชุด 1 มิติ ชนิดอักขระ
เราสามารถรวมอักขระแต่ละตัวเข้าด้วยกันเป็นสตริง (string) หรือข้อความ โดยประกาศให้
ตัว
แปรที่จะเก็บสตริงหรือข้อความเป็นตัวแปรตัวแปรชุด 1 มิติ ชนิดอักขระ
เช่น char code[6];
[0] [1] [2] [3] [4] [5]
code
1 byte 1 byte 1 byte 1 byte 1 byte 1 byte
หมายถึงประกาศให้ตัวแปร code เป็นตัวแปรชุด 1 มิติขนาด 6 ช่อง แต่ละช่องเก็บข้อมูลประเภท
20
อักขระ
1. การก าหนดค่าเริ่มต้นให้กับสตริง
Char name[ ] = “MWIT School”; จะได้
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10]
[11]
name
1 byte 1 byte 1 byte 1 byte 1 byte 1 byte 1 byte 1 byte 1 byte 1 byte 1 byte 1
byte
โดยที่ต าแหน่ง name[11] จะเก็บค่า \0 ไว้อัตโนมัติ เพื่อแสดงการสิ้นสุดข้อความ
หรือ char name[13] = “MWIT School”; จะได้
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] Programming 2
name
1 byte 1 byte 1 byte 1 byte 1 byte 1 byte 1 byte 1 byte 1 byte 1 byte 1 byte 1 byte 1
byte
โดยที่ต าแหน่ง name[11] จะเก็บค่า \0 ไว้อัตโนมัติ เพื่อแสดงการสิ้นสุดข้อความ และ
ต าแหน่งที่
12 จะเป็น \0 ด้วยเช่นเดียวกัน
ดังนั้นในการประกาศให้ตัวแปรเป็นสตริง จะต้องค านึงถึงจ านวนตัวอักขระที่ต้องการจัดเก็บ
ด้วย
เช่น หากต้องการเก็บชื่อซึ่งมีความยาวไม่เกิน 20 ตัวอักษร จะต้องประกาศตัวแปรให้เป็นตัวแปรชุด
ขนาด 21 ช่อง (ส าหรับเก็บค่า \0 หรือค่า null) นั่นคือ char name[21];
2. การรับและแสดงผลสตริง
จากเนื้อหาที่นักเรียนได้เรียนไปแล้วเรื่อง ค าสั่งรับและแสดงผล จะปรากฏค าสั่งที่ใช้ในการ 21
รับค่า
และแสดงผลสตริงหรือข้อความ ดังนี้
ค าสั่งรับค่า ตัวอย่าง
scanf(“%s”,ชื่อตัวแปรสตริง); scanf(“%s”,name); //สังเกตว่าไม่ต้องใส่ & หน้าตัวแปร name
gets(ชื่อตัวแปร); gets(name);
ค าสั่งรับค่า ตัวอย่าง
printf(“%s”,ชื่อตัวแปรสตริง); printf(“%s”,name);
puts(ชื่อตัวแปร); puts(name);
3. ฟังก์ชันสตริงพื้นฐาน
ชื่อฟังก์ชัน ความหมาย Library
Programming 2
strlen(ชื่อตัวแปร)
string.h
หาความยาวสตริงของตัวแปรที่ระบุ
gets(ชื่อตัวแปร) รับสตริงหรือข้อความจากคีย์บอร์ด stdio.h
strcpy(ชื่อตัวแปร1,ข้อความ/ชื่อตัวแปร2) คัดลอกข้อความหรือค่าในตัวแปร 2 ไปเก็บไว้ใน
ตัวแปร 1 string.h
strcmp(ชื่อตัวแปร1, ชื่อตัวแปร2) เปรียบเทียบล าดับสตริงระหว่าง ตัวแปร 1 และตัว string.h
แปร 2 โดยถ้าล าดับตัวอักษรใน ตัวแปร1 มาก่อน
ตัวแปร2
แสดงว่า ตัวแปร1 < ตัวแปร2 ดังนั้นจะได้เงื่อนไข
ดังนี้
ตัวแปร1 < ตัวแปร2 ฟังก์ชันจะให้ค่าติดลบ
ตัวแปร1 == ตัวแปร2 ฟังก์ชันจะให้ค่าเท่ากับ 0
ตัวแปร1 > ตัวแปร2 ฟังก์ชันจะให้ค่าเป็นบวกที่
มากกว่า 0
22
strcat(ชื่อตัวแปร1, ชื่อตัวแปร2) รวมสตริงในตัวแปร 2 ไปต่อท้าย ตัวแปร 1 แล้ว string.h
เก็บสตริงที่ต่อกันแล้วไว้ในตัวแปร 1
ตัวอย่าง โปรแกรมรับชื่อและหาความยาวชื่อ แล้วแสดงผลออกทางจอภาพ
1 #include<stdio.h>
2 #include<string.h>
3 void main()
4 { char name[20]; ประกาศตัวแปรตัวแปรชุด name เป็นสตริง
5 int size;
6 printf(“Please enter your name: ”);
7 gets(name); รับค่า name จากผู้ใช้ทางคีย์บอร์ด
8 size = strlen(name); หาความยาวสตริงของ name แล้วเก็บไว้ใน size
9 printf(“Hello %s\n”, name); พิมพ์ชื่อออกทางหน้าจอ
10 printf(“Your name has %d พิมพ์จ านวนตัวอักษร (ความยาวชื่อ) ออกทาง
characters”,size); หน้าจอ Programming 2
11 }
ตัวอย่าง โปรแกรมรับชื่อและคัดลอกข้อความ แล้วแสดงผลออกทางจอภาพ
1 #include<stdio.h>
2 #include<string.h>
3 void main()
4 { char s1[30], s2[30];
5 printf(“Please enter string1: ”);
6 gets(s1);
7 strcpy(s2, “Thailand”); คัดลอกค าว่า Thailand ไปเก็บไว้
ในตัวแปร s2
8 printf(“s1 : %s\n”, s1);
9 printf(“s2 : %s\n”, s2);
10 } 23
ตัวอย่าง โปรแกรมรับข้อความ 2 ข้อความแล้วตรวจสอบว่าค าใดมาก่อน-หลัง แล้วแสดงผลทาง
จอภาพ
1 #include<stdio.h>
2 #include<string.h>
3 void main()
4 { char s1[30], s2[30];
5 int x;
6 printf(“Please enter string1: ”);
7 gets(s1);
8 printf(“Please enter string2: ”);
9 gets(s2);
10 x = strcmp(s1, s2); เปรียบเทียบ s1 กับ s2 โดยเก็บผลลัพธ์ไว้
ใน x
Programming 2 12 printf(“%s\n%s”, s1, s2); กว่าคือs1 มาก่อน s2 ถ้า s1 มาก่อน s2
11 if (x < 0) ตรวจสอบ x ว่าน้อยกว่า 0 หรือไม่ ถ้าน้อย
13 else if(x > 0)
s2 ให้พิมพ์ s2ตามด้วย s1 แต่ถ้า
14 printf(“%s\n%s”, s2, s1); ให้พิมพ์ s1 ตามด้วย s2 แต่ถ้า s1 มาหลัง
15 else นอกจากนี้ให้พิมพ์ว่าทั้งสองค าเป็นค า
16 printf(“similar strings”); เดียวกัน
17 }
ตัวอย่าง โปรแกรมต่อข้อความโดยใช้ strcat แล้วแสดงผลออกทางจอภาพ
1 #include<stdio.h>
2 #include<string.h>
3 void main()
4 { char s1[20], s2[]=”School”; ก าหนดค่าเริ่มต้นให้ s2 เก็บ School
24
5 strcpy(s1,”MWIT ”); คัดลอกค าว่า MWIT ไปเก็บไว้ในตัวแปร s1
6 printf(“s1 : %s\n”, s1);
7 printf(“s2 : %s”, s2);
8 strcat(s1, s2); น าข้อความใน s2 มาต่อท้าย s1 แล้วเก็บไว้ใน s1
9 printf(“After strcat\n”);
10 printf(“s1 : %s\n”, s1);
11 printf(“s2 : %s”, s2);
12 }
ใบความรู้หน่วยที่ 3
เรื่อง ตัวแปรชุด 2 มิติ (Two-Dimension Array)
เนื้อหา
1. การประกาศตัวแปล
2. การก าหนดค่าเริ่มต้นให้กับตัวแปรชุด 2 มิติ
3.ข้อควรระวังในการจัดการกับตัวแปรชุด
Programming 2
ผลการเรียนรู้ที่คาดหวัง
1. เขียนโปรแกรมประกาศตัวแปรชุดแบบหนึ่งและสองมิติเพื่อเก็บข้อมูลชนิดพื้นฐานได้แก่
จ านวนเต็ม จ านวนทศนิยม และอักขระ และก าหนดค่าเริ่มต้นให้กับตัวแปรนั้นๆ ได้
2. อธิบายวิธีการอ้างถึงสมาชิกของตัวแปรชุดได้
ตัวแปรชุด 2 มิติ (Two-Dimension Array)
โครงสร้างตัวแปรชุด 2 มิติจะเป็นตัวแปรชุดของตัวแปรชุด 1 มิติ โดยสามารถอธิบายได้ใน
รูปแบบของตารางที่ประกอบด้วยแถว (row) และคอลัมน์ (column)
1. การประกาศตัวแปร
รูปแบบ
ชนิดข้อมูล ชื่อตัวแปร [row][column];
25
2. การก าหนดค่าเริ่มต้นให้กับตัวแปรชุด 2 มิติ
ตัวอย่างรูปแบบที่ 1 int num[2][3] = {11,12,13,21,22,23};
ตัวอย่างรูปแบบที่ 2 int num[2][3] = {{11,12,13},{21,22,23}};
ตัวอย่างรูปแบบที่ 3 int num[ ][3] = {{11,12,13},{21,22,23}};
โดยที่การประกาศตัวแปรทั้ง 3 รูปแบบให้ผลลัพธ์เหมือนกัน คือ
ข้อสังเกต
ตัวแปรชุดขนาด 2 มิติขึ้นไป จะไม่ระบุขนาดได้เฉพาะมิติที่ 1 เท่านั้น ส่วนมิติอื่นๆ ต้องมีการ
ระบุขนาดด้วยทุกครั้ง
ตัวอย่างโปรแกรม
Programming 2 void main()
#include <stdio.h>
{
int table[12][11] , row , col ;
printf("*** multiplication table ***");
for ( row = 1 ; row <= 12 ; row++ )
{
printf("\n");
for ( col = 2 ; col <= 12 ; col++ )
{
table[row - 1][col - 2] = row * col ;
printf(" %3d “ , table [row - 1][col - 2] ) ;
}
}
}
26
ตัวอย่าง จากส่วนของโปรแกรม เมื่อ run เสร็จแล้วมีข้อความใดปรากฏบนหน้าจอ
int i , j ;
int num[3][3] = { { 1,2,3 } , { 4,5,6 } , { 7,8,9 } } ;
for ( j = 2 ; j >= 0 ; j-- )
{
for ( i = 0 ; i <= 2 ; i++ )
printf( “ %d \t ” , num[i][j] ) ;
printf( “\n” ) ;
}
ข้อควรระวังในการจัดการกับตัวแปรชุด
ภาษาซีไม่มีการตรวจสอบขอบเขตของตัวแปรชุด
เช่น int x[3] = {1,2,3} , i;
for ( i=1 ; i<=3 ; i++)
printf( “ %d\t ” , x[i] ) ;
สามารถท าได้ แต่ค่า x[3] ไม่มีจริง
การก าหนดค่าให้ตัวแปรชุดแบบเป็นกลุ่ม (เช่น x[]={1,2,3} ) สามารถท าได้เฉพาะ Programming 2
ตอนประกาศตัวแปรเท่านั้น ในส่วนอื่นของโปรแกรม ไม่สามารถก าหนดค่าแบบนี้ได้
27
ใบงานประจ าหน่วยที่ 3
เรื่อง ตัวแปรชุดกับฟังก์ชันสตริงพื้นฐาน
-----------------------------------------------------------------------------------------------------------------------
ผลการเรียนรู้ที่คาดหวัง
1. เขียนโปรแกรมโดยใช้ฟังก์ชันสตริงพื้นฐานได้
-----------------------------------------------------------------------------------------------------------------------
1. ให้นักเรียนตอบค าถามต่อนี้
ก าหนดให้ char city[30]={"CHONBURI"};
char title[30],add[30];
int len;
1.1 ค าสั่งคัดลอกข้อมูลที่อยู่ใน city ไปยัง title คือ
1.2 ค าสั่งในการแสดงข้อมูลในตัวแปร title คือ
1.3 ค าสั่งในการรับค่าทางคีย์บอร์ดเก็บไว้ที่ตัวแปร add คือ
Programming 2 1.4 ค าสั่งในการน าข้อมูลที่อยู่ใน add เชื่อมต่อกับข้อมูล city
คือ
1.5 ค าสั่งในการเปรียบเทีระหว่าง add กับ title คือ
1.6 ค าสั่งในการหาความยาว ของข้อมูลที่อยู่ใน title เก็บไว้ในตัวแปร len
คือ
2.ให้นักเรียนเติมค าสั่งในช่องว่างของโปรแกรมต่อไปนี้
#include………………………
#include……………………….
#include……………………….
main( )
28
{ char ch1[20]={"Hoo!"};
char ch2[20]={"My"};
char ch3[ ]={"Goddddd!"};
char name[30];
int len;
printf("Enter name");
…………………………………………………….. /* รับค่ามาเก็บที่ตัวแปร name
............................. /* หาความยาวชื่อ เก็บไว้ที่ตัวแปร len
…………………………………………………… /* น าค่าที่อยู่ใน name ไปต่อกับค่าในตัวแปร ch3
………………………………………………….. /* คัดลอกข้อมูลที่อยู่ใน ch3 ไปเก็บที่ name
int x=strcmp(ch1,ch2(;
if(………………………………………) /* ตรวจสอบค่าใน ch1 กับ ch2
printf("%s",ch2(;
else printf("%s",ch1(;
printf("%s",ch2(;
printf("%s",name);
printf("\n long name : %d",……………); /*แสดงความยาวชื่อ
getch( );
} Programming 2
ผลการรันโปรแกรม คือ
29
ใบความรู้หน่วยที่ 4
เรื่อง ตัวแปรชุดหลายมิติ (Multi-Dimension Array)
เนื้อหา
1. ตัวแปรชุดหลายมิติ (Multi-Dimension Array)
2. การอ้างถึงข้อมูลย่อยแต่ละตัว
ผลการเรียนรู้ที่คาดหวัง
1. อธิบายหลักการใช้ตัวแปรชุดแบบหลายมิติได้
2. เขียนโปรแกรมประมวลผลตัวแปรชุดด้านการแวะผ่านและการค้นหาได้
ตัวแปรชุดหลายมิติ (Multi-Dimension Array)
สมมติประกาศให้ k เป็นตัวแปรตัวแปรชุด 2 มิติ ขนาด 3x2 ( หมายถึง 3 แถวและ 2
คอลัมน์)
เก็บข้อมูลประเภทจ านวนเต็ม
ดังนั้น จะได้ int k[3][2]; นั่นคือ
Programming 2
ซึ่งตัวแปร k ที่จัดเก็บอยู่ในหน่วยความจ าหลักจริงๆนั้นจะเรียงติดต่อกันไปเป็นแถวยาว
(ไม่ได้จัดเก็บอยู่ในรูปแบบตารางจริงๆ) ดังนี้
ดังนั้น เราสามารถสร้างตัวแปรชุดซึ่งมีหลายมิติได้ ไม่ว่าจะเป็นตัวแปรชุด 3 มิติ ตัวแปรชุด 4
มิติหรือ 5 มิติ แต่ทั้งนี้ การที่เราประกาศตัวแปรชุดที่มีจ านวนมิติมากๆ ก็จะเป็นผลให้โปรแกรมมี
ความ
ซับซ้อนมากยิ่งขึ้น ส่งผลให้การแก้ไขต่างๆ เป็นไปได้อย่างล าบาก
30
ตัวอย่าง การประกาศตัวแปรชุด 3 มิติ
int G[4][2][3]; ประกาศตัวแปรชุด G เก็บจ านวนเต็ม
มี 4 แถว
แถวละ 2 คอลัมน์
และ 3 ชั้น (1 ชั้นจะมี 4 แถว)
การอ้างถึงข้อมูลย่อยแต่ละตัว
การอ้างถึงข้อมูลย่อยแต่ละตัวจะคล้ายกับตัวแปรชุด 1 มิติและ 2 มิติ นั่นคือ ใช้ดัชนีในการ
อ้างถึง
โดยในที่นี้จะมีทั้งสิ้น 3 ตัวคือ แถว คอลัมน์ และชั้น
เช่น G[0][1][2] = 50; หมายถึง ให้เก็บ 50 ไว้ในตัวแปรชุด G ต าแหน่งแถว Programming 2
ที่ 0 คอลัมน์ที่ 1 และชั้นที่ 2
ตัวอย่างโปรแกรม
โปรแกรมรับค่าตัวเลขเก็บไว้ในตัวแปร key แล้วค้นหาว่าในตัวแปรชุด data มีข้อมูลที่เท่ากับ
ตัวแปร key อยู่หรือไม่
#include<stdio.h>
#include<conio.h>
main()
{
int data[10]={1,3,4,6,10,15,16,18,21,25};
int i, key;
printf("Enter key: ");
31
scanf("%d", &key);
for(i=0; i<10; i++)
{ if(data[i]==key)
{ printf("Found %d at position %d", key, i);
break;
}
}
if(i==10)
printf("Not found %d", key);
getch();
}
Programming 2
32
ใบงานประจ าหน่วยที่ 4
เรื่อง ตัวแปรชุดตัวแปรชุดหลายมิติ
-----------------------------------------------------------------------------------------------------------------------
ผลการเรียนรู้ที่คาดหวัง
1. อธิบายหลักการใช้ตัวแปรชุดแบบหลายมิติได้
2. เขียนโปรแกรมประมวลผลตัวแปรชุดด้านการแวะผ่านและการค้นหาได้
-----------------------------------------------------------------------------------------------------------------------
1. จงประกาศตัวแปร(num)เก็บคะแนนจ านวนเต็มขนาด 4 x 4
2. จากข้อ 1 จงก าหนดค่าให้กับตัวแปร num จ านวน 16 ค่า(นักเรียนก าหนดค่าเอง(
3. จากการก าหนดค่าในข้อ 2 ถ้าใช้ค าสั่ง printf(“%d”,num[2][3]); ผลลัพธ์ที่ได้คือ
4. จงประกาศตัวแปร(name) เก็บชื่อนักเรียนจ านวน 20 คน ชื่อแต่ละคนความยาวไม่เกิน 90
ตัวอักษร
5. ค าสั่งในการวนรอบในการรับชื่อทางคีย์บอร์ดจ านวน 20 คน คือ
6. จงเขียนโปรแกรมในการรับชื่อจังหวัด มา 5 จังหวัด ความยาวไม่เกิน 50 ตัวอักษร และ
แสดงผลออกทางจอภาพ ดังนี้
Ex1 1 Input Province : CHONBURI
2 Input Province : RAYONG Programming 2
3 Input Province : PATOOMTHANI
4 Input Province : SURATTHANI
5 Input Province : NAKONPATOM
แสดงการรับข้อมูลทางแป้นพิมพ์แสดงข้อมูลทางจอภาพ
REPORT Province 5 Record
===================================================
ID Province
===================================================
1 CHONBURI
2 RAYONG
3 PATOOMTHANI
4 SURATTHANI 33
5 NAKONPATOM
ใบความรู้หน่วยที่ 5
เรื่อง การประกาศตัวแปรแบบโครงสร้าง
เนื้อหา
1. ความหมายของตัวแปรแบบโครงสร้าง
2. การประกาศชื่อโครงสร้าง
3. การประกาศตัวแปรแบบโครงสร้าง
4. การก าหนดค่าเริ่มต้น
5. การอ้างถึงสมาชิกของตัวแปรแบบโครงสร้าง
ผลการเรียนรู้ที่คาดหวัง
1. อธิบายความหมายของตัวแปรแบบโครงสร้างได้
2. เขียนโปรแกรมประกาศตัวแปรแบบโครงสร้างได้
3. อธิบายวิธีการอ้างถึงสมาชิกของตัวแปรแบบโครงสร้างได้
4. เขียนโปรแกรมเพื่อแก้ปัญหาโจทย์ที่ก าหนดให้โดยใช้ตัวแปรแบบโครงสร้างได้
Programming 2 ประกาศตัวแปรขึ้นมาใหม่ได้ ที่ผ่านมาเราได้รู้จักกับตัวแปรที่เก็บข้อมูลเป็นกลุ่มในลักษณะตัวแปรชุด
ในการเขียนโปรแกรมด้วยภาษาซี สามารถประกาศตัวแปรให้เก็บข้อมูลได้หลายแบบ หรือ
โดยกลุ่มข้อมูลของตัวแปรชุดนั้น ๆ ต้องเป็นข้อมูลประเภทเดียวกัน
ในบทนี้จะกล่าวถึงตัวแปรที่เก็บกลุ่มของข้อมูลที่เรียกว่า ตัวแปรแบบโครงสร้าง (Structures)
โดยจะเป็นตัวแปรประเภทใหม่ที่ผู้ใช้ประกาศขึ้นให้เก็บข้อมูลสมาชิกหลายๆ ตัวรวมกันอยู่ภายใต้ชื่อ
เดียวกัน และข้อมูลแต่ละตัวอาจเป็นข้อมูลที่มีชนิดต่างกัน เช่น char, int, float เป็นต้น ตัวอย่าง
เช่น ในการเก็บข้อมูลของพนักงานแต่ละคนในบริษัทจะประกาศชื่อตัวแปรแบบโครงสร้างเป็นชื่อ
พนักงาน และภายในนั้นจะประกอบด้วยข้อมูลที่เป็นชื่อ วันเกิด ที่อยู่ เงินเดือน เป็นต้น
1. ความหมายของตัวแปรแบบโครงสร้าง
ข้อมูลแบบโครงสร้าง (Structure) เป็นข้อมูลชนิดหนึ่งที่มีลักษณะส าคัญ คือ สามารถ
รวบรวมข้อมูลหลายๆ ชนิดเข้ามาเก็บไว้ด้วยกัน เพื่อความสะดวกในการจัดการข้อมูลต่างชนิดกัน
จากข้อจ ากัดบางประการของตัวแปรชุด(Arrays) ที่จะจองใช้หน่วยความจ ายาวติดกันตามจ านวน
ที่จอง และช่องแต่ละช่องจะสามารถเก็บข้อมูลชนิดเดียวกันได้เท่านั้น เช่น double fix[5]; แสดงว่า
ตัวแปร fix จะจองใช้หน่วยความจ า 5 ช่องส าหรับไว้เก็บข้อมูลและข้อมูลที่รับได้คือชนิด double
เท่านั้น
ดังนั้นข้อมูลแบบโครงสร้าง (Structure) จะสามารถแก้ปัญหาดังที่ได้กล่าวมาได้ คือจะมีตัว
34 แปรเพียงชื่อเดียว แต่ตัวแปรเพียงชื่อเดียวนี้สามารถเก็บข้อมูลหลายชนิดกันได้
2. การประกาศชื่อโครงสร้าง
การประกาศชื่อโครงสร้างสามารถท าได้โดยเริ่มต้นด้วยค าว่า struct และตามด้วยชื่อ
โครงสร้าง
จากนั้นจะเป็นชื่อสมาชิกแต่ละตัวในโครงสร้างดังรูปแบบต่อไปนี้
struct ชื่อโครงสร้าง
{
ชนิดข้อมูล ชื่อสมาชิก[,ชื่อสมาชิก,...];
ชนิดข้อมูล ชื่อสมาชิก[,ชื่อสมาชิก,...];
…
ชนิดข้อมูล ชื่อสมาชิก[,ชื่อสมาชิก,...];
} ;
Programming 2
โดยภายใน [ ] จะมีหรือไม่มีก็ได้
ตัวอย่างที่ 1 การประกาศชื่อโครงสร้าง catalog
ถ้าต้องการประกาศชื่อโครงสร้างชื่อ catalog ภายในประกอบด้วยสมาชิกต่างๆ ได้แก่ ชื่อผู้
แต่ง
ชื่อหนังสือ ส านักพิมพ์ วันที่พิมพ์ และครั้งที่พิมพ์ อาจเขียนได้ดังนี้
struct catalog
{ char name[30];
char title[30];
char pub[20];
int year;
} ;
โครงสร้างนี้มีชื่อว่า catalog มีสมาชิก 4 ตัว เป็นสตริง (name[30] title[30] และ
pub[20]) และเลขจ านวนเต็ม(year) ในหัวข้อถัดไป เราจะมาเรียนรู้วิธีประกาศตัวแปรแบบโครงสร้าง
ชื่อ book
35
3. การประกาศตัวแปรแบบโครงสร้าง
ในการประกาศตัวแปรแบบโครงสร้างสามารถกระท าได้หลายวิธี เช่น
วิธีที่ 1 ประกาศโครงสร้างและประกาศตัวแปรเข้าไว้ด้วยกัน ดังแสดงต่อไปนี้
struct ชื่อโครงสร้าง
{
ชนิดข้อมูล ชื่อสมาชิก;
ชนิดข้อมูล ชื่อสมาชิก;
…
ชนิดข้อมูล ชื่อสมาชิก;
} ชื่อตัวแปร1, ชื่อตัวแปร2,… ;
ตัวอย่างที่ 2 การประกาศ book เป็นตัวแปรแบบโครงสร้างประเภท catalog วิธีที่ 1
struct catalog
{ char name[30];
Programming 2 int year;
char pub[20];
char title[30];
} book;
วิธีที่ 2 เมื่อประกาศชื่อโครงสร้างแล้วจึงประกาศตัวแปรแบบโครงสร้าง (เหมือนกับการประกาศ
ตัวแปรทั่วไป)
struct ชื่อโครงสร้าง ชื่อตัวแปร1, ชื่อตัวแปร2,… ;
ตัวอย่างที่ 3 การประกาศ book เป็นตัวแปรโครงสร้างประเภท catalog วิธีที่ 2
struct catalog
{ char name[30];
char title[30];
char pub[20];
int year;
};
36
struct catalog book;
4. การก าหนดค่าเริ่มต้น
ในการก าหนดค่าเริ่มต้นให้กับตัวแปรแบบโครงสร้างสามารถท าได้ดังนี้
struct ชื่อตัวแปรแบบโครงสร้าง = { ค่าเริ่มต้น1 [,ค่าเริ่มต้น2, ...] };
เช่น struct catalog book = {“Tony”, “C++”, “SE-ED”, 2001};
5. การอ้างถึงสมาชิกของตัวแปรแบบโครงสร้าง
ในการเข้าถึงสมาชิกแต่ละตัวในตัวแปรแบบโครงสร้างจะใช้ชื่อตัวแปรน าหน้า ตามด้วย
เครื่องหมายจุด(.) และชื่อสมาชิกของตัวแปร
ชื่อตัวแปรแบบโครงสร้าง.ชื่อสมาชิก
การเข้าถึงสมาชิกแต่ละตัวเราสามารถกระท าได้คล้ายกับตัวแปรทั่ว ๆ ไป ตัวอย่างเช่น จาก
ตัวแปร book ถ้าต้องการระบุว่าพิมพ์ปี 1994 สามารถท าได้ดังนี้
book.year = 1994;
ถ้าหากต้องการพิมพ์ออกทางจอสามารถท าได้ดังนี้ Programming 2
printf(“Publication year : %d”, book.year);
ถ้าหากต้องการรับค่าปีที่พิมพ์จากแป้นพิมพ์สามารถท าได้ดังนี้
scanf(“%d”, &book.year);
ถ้าต้องการเขียนค าสั่งส าหรับรับชื่อผู้แต่งหนังสือและให้พิมพ์ชื่อหนังสือออกทางจอภาพ
สามารถ ท าได้ดังนี้
gets(book.name);
. . . . .
printf(“%s”, book.title);
โปรแกรมที่ 1
โปรแกรมนี้เป็นตัวอย่างการใช้ตัวแปรประเภทโครงสร้างอย่างง่าย โดยรับข้อมูลทุกตัวเข้าไป
ทางแป้นพิมพ์และแสดงผลทางจอภาพ
#include<stdio.h>
#include<conio.h>
37
struct s_type // ประกาศ s_type ให้เป็นชื่อโครงสร้าง
{ char id[6];
char name[30];
int age;
};
main()
{ struct s_type student; // ประกาศตัวแปรแบบโครงสร้างชื่อ student
printf("Enter ID: ");
gets(student.id);
printf("Enter Name: ");
gets(student.name);
printf("Enter Age: ");
scanf("%d",&student.age);
printf("\nOutput: ");
printf("%s | %s | %d", student.id, student.name, student.age);
getch();
}
เราสามารถประกาศชื่อโครงสร้างไว้ภายใน main() หรือภายนอก main() ก็ได้
Layout………
Programming 2
38
ใบงานประจ าหน่วยที่ 5
เรื่อง ความหมายและการประกาศตัวแปรโครงสร้าง
-----------------------------------------------------------------------------------------------------------------------
ผลการเรียนรู้ที่คาดหวัง
1. อธิบายความหมายของตัวแปรแบบโครงสร้างได้
2. เขียนโปรแกรมประกาศตัวแปรแบบโครงสร้างได้
-----------------------------------------------------------------------------------------------------------------------
1. จงท าเครื่องหมายถูก (√( หน้าข้อที่ถูกต้อง และท าเครื่องหมายผิด(X) หน้าข้อที่ไม่ถูกต้อง
1.1 ………… ตัวแปรแบบโครงสร้างทุกตัวมีขนาดเท่ากัน
1.2 …………เราสามารถประกาศให้สมาชิกของตัวแปรเป็นข้อมูลประเภทโครงสร้างได้
1.3 …………ในตัวแปรอาร์เรย์สามารถมีสมาชิกเป็นตัวแปรแบบโครงสร้างได้
1.4 …………สมาชิกทุกตัวในตัวแปรแบบโครงสร้างต้องเป็นข้อมูลประเภทเดียวกัน
1.5 …………ในการประกาศตัวแปร ชื่อประเภทโครงสร้างจะไม่มีก็ได้
2. จงประกาศตัวแปรแบบโครงสร้าง เพื่อเก็บข้อมูลที่ก าหนดให้ดังนี้
2.1 ก าหนดให้ profile เป็นโครงสร้างข้อมูล ซึ่งมีสมาชิก เพื่อจัดเก็บข้อมูลนักเรียนที่เข้า
Programming 2
ร่วมงาน international Science Fair 2012 ซึ่งประกอบไปด้วยชื่อนักเรียน (name)
ความยาวไม่เกิน 120 ตัวอักษร ชื่อโรงเรียน (school) ความยาวไม่เกิน 150 ตัวอักษร
และอายุ(age)
……………………………………………………………………………………………………………………………….
……………………………………………………………………………………………………………………………….
2.2 ก าหนดให้ std เป็นตัวแปรแบบโครงสร้างเพื่อเก็บข้อมูล จ านวน 5 คน
……………………………………………………………………………………………………………………………….
……………………………………………………………………………………………………………………………….
2.3 การวนลูปรับข้อมูลทางคีย์บอร์ดมาเก็บที่สมาชิก name, school และ age จ านวน 5
รายการ
……………………………………………………………………………………………………………………………….
……………………………………………………………………………………………………………………………….
2.4 การวนลูปแสดงข้อมูลทางคีย์บอร์ดมาเก็บที่สมาชิก name, school และ age จ านวน
5 รายการ
………………………………………………………………………………………………………………………………. 39
……………………………………………………………………………………………………………………………….
ใบความรู้หน่วยที่ 6
เรื่อง ตัวแปรชุดของโครงสร้าง
เนื้อหา
1. ตัวแปรชุดของโครงสร้าง
2. การ Copy ตัวแปรแบบโครงสร้าง
ผลการเรียนรู้ที่คาดหวัง
1. อธิบายความหมายของตัวแปรแบบโครงสร้างได้
2. เขียนโปรแกรมประกาศตัวแปรแบบโครงสร้างได้
3. อธิบายวิธีการอ้างถึงสมาชิกของตัวแปรแบบโครงสร้างได้
4. เขียนโปรแกรมเพื่อแก้ปัญหาโจทย์ที่ก าหนดให้โดยใช้ตัวแปรแบบโครงสร้างได้
1. ตัวแปรชุดของโครงสร้าง
ถ้าหากต้องการเก็บข้อมูลแบบโครงสร้างจ านวนมาก ๆ สามารถก าหนดเป็นตัวแปรชุดของ
โครงสร้างได้ ตัวอย่างเช่น ถ้าต้องการเก็บข้อมูลจ านวน 50 ชุด ให้ประกาศตัวแปรชุดที่มีสมาชิก 50
Programming 2 โดยที่สมาชิกแต่ละตัวจะเป็นข้อมูลชนิดโครงสร้าง
ตัว
จากตัวอย่าง ตัวแปรแบบโครงสร้างชื่อ book ที่ผ่านมา ถ้าเราต้องการประกาศตัวแปรให้เก็บ
ข้อมูลรายการหนังสือจ านวน 100 เล่ม โดยประกาศเป็นตัวแปรชุดชื่อ cat สามารถท าได้ดังนี้
struct catalog
{ char name[30];
char title[30];
char pub[20];
int year;
} ;
struct catalog cat[100];
โดยข้อมูลเล่มแรกจะเริ่มที่ cat[0] ดังนั้นถ้าหากเราต้องการใส่ปีที่พิมพ์ให้กับหนังสือเล่มที่ 34
อาจท าได้ดังนี้ cat[33].year = 2004;
ถ้าต้องการพิมพ์ชื่อหนังสือเล่มที่ 20 อาจเขียนค าสั่งได้ดังนี้
printf(“%s”, cat[19].title);
40
2. การ Copy ตัวแปรแบบโครงสร้าง
ตัวแปรแบบโครงสร้างหนึ่งตัว สามารถมองเป็นตัวแปรใด ๆ ได้ ถ้าหากมีการประกาศตัวแปร
แบบโครงสร้างขึ้นมา 2 ตัว และให้มีการโอนย้ายข้อมูลระหว่างตัวแปรทั้งสอง สมาชิกทุกตัวจะถูก
โอนย้ายพร้อมกันหมด พิจารณาชุดค าสั่งต่อไปนี้
struct player
{ int x, y;
char status;
} a,b;
a.x = 10;
a.y = 20;
a.status = '1';
b = a;
หลังจากท าชุดค าสั่งนี้แล้ว ข้อมูลในตัวแปรแบบโครงสร้าง b จะเหมือนกับตัวแปร a ทุกประการ
โปรแกรมที่ 1
โปรแกรมนี้เป็นตัวอย่างการใช้ตัวแปรชุดของโครงสร้าง โดยก าหนดค่าเริ่มต้นให้กับตัวแปร Programming 2
ชุด
ของโครงสร้างชื่อ robots แล้วแสดงผลทางจอภาพ
#include <stdio.h>
#include<conio.h>
struct my_robot
{ char name[20];
int energy;
};
main()
{ int i;
struct my_robot robots[3] = { {"Lunar", 50},
{"Pat", 20},
{"Martin", 30} };
for(i=0 ; i<3 ; i++)
{ printf("Robot %d is called %s ", i, robots[i].name);
printf("and has %d units of energy.\n", robots[i].energy);
} 41
getch();
}
เมื่อรันโปรแกรมจะได้ผลลัพธ์ดังนี้
Robot 0 is called Lunar and has 50 units of energy.
Robot 1 is called Pat and has 20 units of energy.
Robot 2 is called Martin and has 30 units of energy.
โปรแกรมที่ 2
โปรแกรมนี้เป็นตัวอย่างการใช้ตัวแปรชุดของโครงสร้าง โดยรับข้อมูลทุกตัวเข้าทางแป้นพิมพ์
แล้วแสดงผลทางจอภาพ
#include<stdio.h>
#include<conio.h>
#define N 2
struct s_type
Programming 2 char str[80];
{ int no;
main() } s[N];
{ int i, j;
for(i=0;i<N;i++)
{ printf("Enter an integer #%d: ", i+1);\
scanf("%d", &s[i].no);
printf("Enter a string #%d: ", i+1);
scanf(“%s”, s[i].str);|
}
for(j=0;j<N;j++)
printf("\ndata#%d: %d\t%s", j+1, s[j].no, s[j].str);
getch();
}
42 ตามที่ได้ทราบมาแล้วว่าในตัวแปรแบบโครงสร้าง เราสามารถก าหนดสมาชิกกี่ตัวก็ได้ ดังนั้นตัวแปร
แบบโครงสร้างแต่ละประเภทที่สร้างขึ้นจะมีขนาดไม่เท่ากัน เราสามารถค านวณขนาดของตัวแปรแบบ
โครงสร้างได้โดยน าประเภทของข้อมูลของสมาชิกแต่ละตัวมารวมกัน หรือใช้ sizeof หาขนาดของตัว
แปรแบบโครงสร้างก็ได้ ดังตัวอย่างโปรแกรมที่ 4
โปรแกรมที่ 3
โปรแกรมนี้จะประกาศตัวแปรแบบโครงสร้างชื่อ s และใช้ sizeof หาขนาดของตัวแปร
#include<stdio.h>
#include<conio.h>
struct s_type
{ int i;
char ch;
double d;
};
main()
{ s_type s;
printf("s is %d bytes long\n",sizeof(s));
getch();
}
เมื่อรันโปรแกรม จะแสดงขนาดของตัวแปร s Programming 2
43
ใบงานประจ าหน่วยที่ 6
เรื่อง การเขียนโปรแกรมอ้างถึงสมาชิกของตัวแปรแบบโครงสร้าง
-----------------------------------------------------------------------------------------------------------------------
ผลการเรียนรู้ที่คาดหวัง
1. อธิบายวิธีการอ้างถึงสมาชิกของตัวแปรแบบโครงสร้างได้
2. เขียนโปรแกรมเพื่อแก้ปัญหาโจทย์ที่ก าหนดให้โดยใช้ตัวแปรแบบโครงสร้าง
-----------------------------------------------------------------------------------------------------------------------
1. ให้นักเรียนพิจารณาส่วนของโปรแกรมต่อไปนี้
struct number
{ intnum;
char Name[30];
charLastname[30];
int year;
}data;
1.1 ตัวแปรแบบโครงสร้างมีชื่อว่า
Programming 2 1.2 โครงสร้างข้อมูลนี้มีชื่อว่า
……………………………………………………………………………………………..
…………………………………………………………………………………………………..
1.3 การรับข้อมูลทางคีย์บอร์ดมาเก็บที่สมาชิก name คือ
…………………………………………………………..
1.4 การรับข้อมูลทางคีย์บอร์ดมาเก็บที่สมาชิก year คือ
……..……………………………………………………..
1.5 การแสดงข้อมูลในสมาชิก name ใช้ค าสั่ง
…………………….…………………..………………………………..
1.6 การแสดงข้อมูลในสมาชิก numใช้ค าสั่ง
………………………………………..…………………………………..
2. จงเขียนโปรแกรมเก็บข้อมูลของนักเรียน 5 คน
2.1 ก าหนดให้ student เป็นโครงสร้างข้อมูล ซึ่งมีสมาชิกดังนี้
- รหัส(code)
- ชื่อ(name)
- คะแนนวิชาคณิตศาสตร์(math)
44 - คะแนนวิชาฟิสิกส์(physics)
- เกรดวิชาคณิตศาสตร์ (grad_mt)
- เกรดวิชาฟิสิกส์ (grad_ph)
2.2 ก าหนดให้ std เป็นตัวแปรแบบโครงสร้าง เก็บข้อมูล 5 ชุด
2.3 การวนลูปรับข้อมูลจ านวน 5 คน เฉพาะ รหัส ชื่อ คะแนนวิชาคณิตศาสตร์ และ
คะแนนวิชาฟิสิกส์ ส่วนเกรดให้โปรแกรมหาค่าเองจากเกณฑ์ ดังนี้
0 - 49 grad F
50 - 59 grad D
60 - 69 grad C
70 - 79 grad B
80 - 100 grad A
2.4 ตัวอย่างการรับข้อมูล
Record 1 Record 2
Code : 001 Code : 002
Name : Somsak Name : Sutin
Score Math : 80 Score Math : 60
Grad mt : A Grad mt : C
Score Physics : 70 Score Physics : 80 Programming 2
Grad Ph : B Grad Ph : A
3. จากโปรแกรมในข้อ 2 จงพัฒนา ให้สามารถเรียกดูคะแนนนักเรียนรายบุคคล โดยการใส่
รหัสนักเรียน แล้วแสดงข้อมูลนักเรียนทั้งหมด ดังตัวอย่าง
Ex
Enter Code : 002
Report Code : 002
=================================================
Name Score mt Grad Score Ph Grad
=================================================
Sutin 60 C 80 A 45
=================================================
Do you want to Continue (y/n) ……….
3.1 ท าการวนลูปในการเรียกแสดงข้อมูลจนกว่าจะตอบ n เป็นการสิ้นสุดการท างานของ
โปรแกรม
3.2 ให้นักเรียนตกแต่งโปรแกรมให้สมบูรณ์
Programming 2
46
ใบความรู้ที่ 7 ความหมายและการประกาศตัวแปรแบบพอยเตอร์
เนื้อหา
1. ความหมายของตัวแปรแบบพอยเตอร์
2. การประกาศตัวแปรแบบพอยเตอร์
ผลการเรียนรู้ที่คาดหวัง
1. อธิบายความหมายของตัวแปรแบบพอยเตอร์ได้
2. เขียนโปรแกรมประกาศตัวแปรแบบพอยเตอร์ได้
1. ความหมายของตัวแปรแบบพอยเตอร์
พอยเตอร์เป็นตัวแปรชนิดหนึ่งที่ใช้ส าหรับเก็บต าแหน่ง (address) ของข้อมูลภายใน
หน่วยความจ า ซึ่งการเก็บต าแหน่งจะเก็บเฉพาะต าแหน่งแรกเท่านั้น
พิจารณาชนิดข้อมูลประเภทจ านวนเต็ม (Integer) เปรียบเสมือนกับกล่องที่เก็บค่า “เลขจ านวน
เต็ม” 1 ค่า เช่น
ค าสั่ง ภาพอธิบาย ความหมาย
int num = 42; num การประกาศตัวแปร num ก็คือ การ Programming 2
จองเนื้อที่ในหน่วยความจ าไว้ส าหรับ
42 เก็บข้อมูลจ านวนเต็ม โดยสามารถอ้าง
ถึงต าแหน่งที่เก็บนี้ด้วยชื่อ num และ
ก าหนดค่เริ่มต้น
ให้กับตัวแปร num เท่ากับ 42
ตัวแปรแบบพอยเตอร์ (pointer) จะมีความต่างเล็กน้อยตรงที่จะไม่ได้เก็บค่าข้อมูล
โดยตรง แต่จะเก็บต าแหน่ง (address) ของตัวแปรที่เก็บข้อมูลนั้นแทน
num ptr
42 F001
F001 F001
อาจวาดภาพอธิบายได้อีกแบบหนึ่ง โดยใช้ลูกศรแทนการเก็บต าแหน่ง (address) ของข้อมูล
ภายในหน่วยความจ า ดังนี้
num 47
42 ptr
ซึ่งจะเห็นว่าในที่นี้ ptr เป็นตัวแปรแบบพอยเตอร์ซึ่งเก็บต าแหน่งของตัวแปร num ไว้ หรือ
เรียก
อีกอย่างหนึ่งว่าตัวแปรแบบพอยเตอร์ ptr ชี้ไปยังตัวแปร num
ประโยชน์ของพอยน์เตอร์
1. ใช้ในการรับค่า address จากฟังก์ชันหนึ่งไปยังอีกฟังก์ชันหนึ่ง
2. ใช้ในการจัดการตัวแปรชุดหรือตัวแปรสายอักขระให้มีประสิทธิภาพ โดยการอ้างอิง
address ของตัวแปรชุดหรือตัวแปรสายอักขระที่ต้องการ แทนที่การอ้างอิงชื่อตัวแปรชุดหรือตัวแปร
สายอักขระโดยตรง ท าให้สามารถจัดเก็บและเรียกใช้ข้อมูลที่ต้องการได้ง่าย
3. ใช้ในการจัดการโครงสร้างข้อมูล เช่น linked list และ binary tree เป็นต้น
2. การประกาศตัวแปรแบบพอยเตอร์ (Declaration pointer variables)
type *ptr_name; //กรณีที่พอยเตอร์ 1 ตัว
หรือ
type *ptr1_name, *ptr1_name,…; //กรณีที่พอยเตอร์มากกว่า 1 ตัว
Programming 2 ptr_name = ชื่อตัวแปรแบบพอยเตอร์ และต้องมีเครื่องหมาย * (asterisk)
type = ชนิดของข้อมูล เช่น int , char , float , double
เครื่องหมาย * (asterisk)
ptr1_name, ptr2_name = ชื่อตัวแปรแบบพอยเตอร์ตัวที่ 1 ,2 ,… ตามล าดับ และต้องมี
ตัวอย่างการประกาศตัวแปรแบบพอยน์เตอร์
int *ptr_i; //ตัวแปร ptr_i เป็นตัวแปรแบบพอยน์เตอร์ที่ชี้ไปยังชนิดข้อมูล int
char *ptr_c //ตัวแปร ptr_c เป็นตัวแปรแบบพอยน์เตอร์ที่ชี้ไปยังชนิดข้อมูล char
float *ptr_f //ตัวแปร ptr_f เป็นตัวแปรแบบพอยน์เตอร์ที่ชี้ไปยังชนิดข้อมูล float
ในที่นี้ ตามหลักไวยากรณ์ภาษาซีอนุญาตให้เครื่องหมาย * (asterisk) หรือ star
ถูกวางไว้ที่ต าแหน่งใดก็ได้ระหว่างชนิดของตัวแปร (base type) และชื่อตัวแปร (variable name)
เช่น
int *ptr; หรือ int * ptr; หรือ int* ptr; ก็ได้
48
ใบงานประจ าหน่วยที่ 7
เรื่อง ความหมายและการประกาศตัวแปรแบบพอยเตอร์
-----------------------------------------------------------------------------------------------------------------------
ผลการเรียนรู้ที่คาดหวัง
1. อธิบายความหมายของตัวแปรแบบพอยเตอร์ได้
2. เขียนโปรแกรมประกาศตัวแปรแบบพอยเตอร์ได้
-----------------------------------------------------------------------------------------------------------------------
1. จงท าเครื่องหมายถูก(√) หน้าข้อที่ถูกต้อง และท าเครื่องหมายผิด(X) หน้าข้อที่ไม่ถูกต้อง
1.1 ……… การบวกหรือลบพอยน์เตอร์เป็นการเพิ่มหรือลดแอดเดรสที่ตัวแปรพอยน์เตอร์ชี้
อยู่
1.2 ……… ตัวแปรพอยน์เตอร์สามารถใช้ตัวด าเนินการทางลอจิกได้
1.3 ……… ถ้าให้พอยน์เตอร์ชี้ไปที่อาร์เรย์จะชี้ไปที่ต าแหน่งแรกของอาร์เรย์เสมอ
1.4 ……… ตัวแปรพอยน์เตอร์แบบ int สามารถใช้ชี้ไปที่ข้อมูลแบบ char ได้
1.5 ……… เราสามารถเขียนโปรแกรมภาษาซี ให้แสดงค่าต าแหน่งของตัวแปรได้
2. ให้นักเรียนพิจารณาส่วนของโปรแกรมต่อไปนี้
Programming 2
main()
{ …………………………………. ข้อ 2.1
int a=5;
b=&a;
*b=a+5;
printf(“b = %d”,*b); ข้อ 2.2
printf(“a = %d”,a); ข้อ 2.3
}
2.1 เพื่อให้โปรแกรมท างานได้ถูกต้อง ควรประกาศตัวแปรดังนี้
……………………………………………
2.2 ผลลัพธ์ที่ได้ คือ ………………………………………………………………
2.3 ผลลัพธ์ที่ได้ คือ ………………………………………………………………
49