Arrays
Arrays array หรือแถวลำดับ คือโครงสร้างข้อมูลที่สามารถเก็บข้อมูลชนิดเดียวกัน เป็นกลุ่มหรือชุดที่เรียงต่อกันเป็นแถว array จะมีโครงสร้างเป็นแบบเชิงเส้น(Linear) ดังนั้น เราสามารถระบุค่าถัดไปหรือก่อนหน้าของแต่ละค่าใน array ได้
ชนิดข้อมูล ชื่อตัวแปร[ขนาดของarray]; การประกาศตัวแปร ชนิดข้อมูล ชื่อตัวแปร[ขนาดของarray]; เช่น int a[20]; char c[15]; float score[24];
หมายถึง ตัวแปรชุด score สามารถเก็บข้อมูลจำนวนเต็มได้ 5 ค่า นั่นเอง score[0] score[1] score[2] score[3] score[4] int score[5]; วิธีการประกาศตัวแปรชุด ตัวแปรชุด score จากตัวอย่าง เป็นการประกาศตัวแปรชุดชนิด integer ชื่อ score ซึ่งมีขนาดเท่ากับ 5 หมายถึง ตัวแปรชุด score สามารถเก็บข้อมูลจำนวนเต็มได้ 5 ค่า นั่นเอง
การระบุตำแหน่งหรือค่าใน array จะใช้ตัวเลข index score[0] คือ คะแนนสอบของนักเรียนคนที่ 1 จะเห็นว่า ตัวแปร array ง่ายต่อการอ้างอิงเพื่อใช้งาน ตัวเลข index ซึ่งจะเริ่มต้นที่ 0 เสมอ ซึ่งถ้าไม่ใช้ array จะต้องประกาศตัวแปรถึง 5 ตัว หรือถ้าต้องการเก็บคะแนนของนักเรียน 24 คน ก็เพียงประกาศ int score[24]; ไม่จำเป็นต้องประกาศตัวแปรถึง 24 ตัว!!!
int score[5]; score[0] = 13; score[4] = 42; 13 42 random values เพราะยังไม่มีการกำหนดค่าให้ 6570 -5673 18253 22541 -1068 score score[0] score[1] score[2] score[3] score[4] ใน memory 13 42
ตัวอย่างการอ้างถึงสมาชิกในตัวแปรชุด #include<stdio.h> int main() { int a[5]={5}; int i = 2; printf(“a[0] = %d\n”, a[0]); printf(“a[1] = %d\n”, a[1]); a[2] = a[0]+3; a[1] = a[i]+10; a[i+1] = 20; a[4] = a[i-1]; printf(“a[2] = %d\n”, a[2]); printf(“a[3] = %d\n”, a[3]); printf(“a[4] = %d\n”, a[4]); return 0; } เพราะเหตุใด a[1] ในตอนแรกจึงเท่ากับ 0 ?? เราสามารถอ้างอิงถึงสมาชิกใน array โดยใช้ตัวแปรได้ เช่น a[i] เราสามารถอ้างอิงถึงสมาชิกใน array โดยอยู่ในรูปของ expression ได้ เช่น a[i-1], a[i+1], a[i*2]
ทดลองเขียนโปรแกรมรับและแสดงผลเลขจำนวนเต็ม 5 จำนวน #include<stdio.h> int main() { int score[5]; scanf(“%d”,&score[0]); scanf(“%d”,&score[1]); scanf(“%d”,&score[2]); scanf(“%d”,&score[3]); scanf(“%d”,&score[4]); printf(“%d ”,score[0]); printf(“%d ”,score[1]); printf(“%d ”,score[2]); printf(“%d ”,score[3]); printf(“%d ”,score[4]); return 0; } รับข้อมูลเลขจำนวนเต็ม 5 จำนวน เก็บใส่ในตำแหน่งของตัวแปรชุด score แสดงข้อมูลเลขจำนวนเต็ม ที่เก็บในตัวแปรชุด score
สังเกตโค้ดที่เขียนซ้ำๆกัน #include<stdio.h> int main() { int score[5]; scanf(“%d”,&score[0]); scanf(“%d”,&score[1]); scanf(“%d”,&score[2]); scanf(“%d”,&score[3]); scanf(“%d”,&score[4]); printf(“%d ”,score[0]); printf(“%d ”,score[1]); printf(“%d ”,score[2]); printf(“%d ”,score[3]); printf(“%d ”,score[4]); return 0; } จะเห็นว่าเป็นการสั่งให้รับเลขจำนวนเต็มซ้ำๆกัน 5 ครั้ง ดังนั้น ใช้ for ช่วยวนลูปได้ จะเห็นว่าเป็นการสั่งให้แสดงผลเลขจำนวนเต็มซ้ำๆกัน 5 ครั้ง ดังนั้น ใช้ for ช่วยวนลูปได้
เปลี่ยนไปใช้คำสั่ง for เพื่อวนลูป รับและแสดงค่า #include<stdio.h> int main() { int score[5]; scanf(“%d”,&score[0]); scanf(“%d”,&score[1]); scanf(“%d”,&score[2]); scanf(“%d”,&score[3]); scanf(“%d”,&score[4]); printf(“%d ”,score[0]); printf(“%d ”,score[1]); printf(“%d ”,score[2]); printf(“%d ”,score[3]); printf(“%d ”,score[4]); return 0; } #include<stdio.h> int main() { int score[5]; return 0; } int i; for(i=0;i<5;i++) scanf(“%d”,&score[i]); for(i=0;i<5;i++) printf(“%d”,score[i]);
โปรแกรมรับและแสดงผลเลขจำนวนเต็ม 5 จำนวน ที่ใช้คำสั่ง for ในการวนซ้ำเพื่อรับ-แสดงค่า #include<stdio.h> int main() { int score[5]; return 0; } int i; for(i=0;i<5;i++) scanf(“%d”,&score[i]); รับข้อมูลเลขจำนวนเต็ม 5 จำนวน เก็บใส่ในตำแหน่งของตัวแปรชุด score for(i=0;i<5;i++) printf(“%d”,score[i]); แสดงข้อมูลเลขจำนวนเต็ม ที่เก็บในตัวแปรชุด score
การประกาศตัวแปรและกำหนดค่าเริ่มต้นในคราวเดียว int a[5] = { 1, 2, 3, 4, 5}; a 5 4 3 2 1 a[0] a[1] a[2] a[3] a[4]
การประกาศตัวแปรและกำหนดค่าเริ่มต้นในคราวเดียว int a[5] = { 1, 2, 3, 4, 5}; int a[] = {1, 2, 3, 4, 5}; int *a = {1, 2, 3, 4, 5} เหมือนกัน
การประกาศตัวแปรและกำหนดค่าเริ่มต้นในคราวเดียว int a[7] = { 1, 2, 3, 4, 5}; a 5 3 2 1 4 a[0] a[1] a[2] a[3] a[4] a[5] a[6] สังเกตว่า a[5] และ a[6] จะเป็น 0 เพราะกำหนดค่าเริ่มต้นเพียง 5 ค่าเท่านั้น
printf(“%d”, a[3]); จะได้ผลลัพธ์อย่างไร array - initialize int a[5] = { 1, 2, 3}; printf(“%d”, a[3]); จะได้ผลลัพธ์อย่างไร
โจทย์ 1 รับเลขจำนวนเต็ม เก็บใส่ในตัวแปรชุด A และ B ซึ่งมีขนาดเท่ากับ 5 แล้วหาผลบวกของข้อมูลในตำแหน่งที่ตรงกันของตัวแปร A และ B แล้วแสดงผล A : 1 3 4 6 4 B : 1 2 3 4 5 A+B : 2 5 7 10 9
โจทย์ 2 รับเลขจำนวนเต็ม 5 เก็บใส่ตัวแปรชุด แล้วหาค่าเฉลี่ยของตัวเลขทั้ง 5 ตัวนี้ เช่น input : 10 3 2 6 4 average : 5.00
โจทย์ 3 รับเลขจำนวนเต็ม 5 ตัวแล้วหาผลรวมของตัวเลขที่มีค่ามากกว่าค่าเฉลี่ยของตัวเลขทั้ง 5 ตัวนี้ เช่น input : 10 3 2 6 4 average : 5.00 output : 16
โจทย์ 4 รับเลขจำนวนเต็ม 5 ตัว เก็บไว้ในเซต A และอีก 5 ตัวเก็บไว้ในเซต B แล้วหา A union B A intersect B A – B B - A