อาร์เรย์ (Array)
Array (อาร์เรย์) คือ ชุดข้อมูลที่เรียงกันอย่างเป็นลำดับ โดยจะมี index (อินเด็กซ์) หรือ key(คีย์) เพื่อเป็นตัวแปรที่ใช้ในการอ้างถึงข้อมูลเหล่านั้น
float prices[100]; /* Array ขนาด 100 ของ float */
price[5] = 10.69;
scanf(“%d %lf”, &grades[0], &price[2])
scanf(“%c”, &code[0]);
scanf(“%d %d %d”, &grades[0], &grades[1], &grades[2]);
for(i = 0; i <=4; ++i)
{ printf(“Enter a grade: “);
scanf(“%d”, &grades[i]);
}
int grades[5] = {98,87,92,79,85};
char codes[6] = {‘s’, ‘a’, ‘m’, ‘p’, ‘l’, ‘e’};
double width[7] = {10.96,6.43,2.58,0.86,5.89,7.56,8.22};
static int temp[4] = {10,20,30,40};
static float temp[4] = {98.6,97.2,99.0,101.5};
เป็นการประกาศตัวแปร code ซึ่งจะจองหน่วยความจำเท่ากับ 1 byte * 6 * 10 = 60 byte
การทดลอง
ตอนที่ 1: อาร์เรย์ 1 มิติ
1.1 ศึกษาการประกาศตัวแปรประเภทอาร์เรย์ การให้ค่าเริ่มต้น และการรับและแสดงค่าในอาร์เรย์
- จากโปรแกรมต่อไปนี้ให้ทำการรันแบบ Step (F8)
- ทำการดูค่าภายในตัวแปรอาร์เรย์ด้วย Debug/Watch ด้วยการกด Ctrl+F7 แล้วใส่ชื่ออาร์เรย์ซึ่งในที่นี้คือprize แล้วกด Enter สังเกตค่าของตัวแปรในหน้าต่าง Watch บันทึกผลค่า prize[0] ถึง prize[3]
โปรแกรมที่ 1
1. #include<stdio.h>
2. #include<conio.h>
3. void main()
4. { int n, prize[3]={30, 20, 50};
5. clrscr();
6. for(n=0;n<3;n++)
7. printf(“prize%d is %d”, n, prize[n]);
8. }
- จากโปรแกรม ให้เปลี่ยนจำนวนข้อมูลของตัวแปร prize จาก 3 เป็น 6 ดังนี้
int n, prize[3]={30,20,50}; แก้ไขเป็น int n,prize[6]={30,20,50};
และแก้ไขบรรทัดที่ 6 จาก for(n=0;n<3;n++) เป็น for (n=0;n<6;n++) จากนั้นบันทึกค่าของ prize[0] ถึง prize[5]
คำถามที่ 1 ในกรณีที่กำหนดค่าเริ่มต้นให้กับแต่ละ element ไม่ครบ จะเกิดผลอย่างไร
- ทำการเขียนโปรแกรมใหม่ต่อไปนี้
โปรแกรมที่ 2
1. #include<stdio.h>
2. #include<conio.h>
3. void main()
4. { int n, prize[3];
5. clrscr();
6. for (n=0;n<3;n++) {
7. printf(“Input prize %d”, n);
8. scanf(“%d”, prize[n]);
9. }
10. for (n=0;n<3;n++)
11. printf(“prize%d is %d”, n , prize[n]);
12. }
เปรียบเทียบผลการทำงานและวิธีการเขียนของโปรแกรมที่ 1 และ 2
คำถามที่ 2 โปรแกรมที่ 2 มีข้อดีกว่าโปรแกรมที่ 1 อย่างไร
1.2 ศึกษาการเข้าถึงข้อมูลอาร์เรย์ ร่วมกับการใช้ลูป for
- ศึกษาการทำงานของโปรแกรมต่อไปนี้
โปรแกรมที่ 3
1. #include<stdio.h>
2. #include<conio.h>
3. { int temp[5]; total = 0; count;
4. float avg;
5. clrscr();
6. for(count = 0; count <=4; ++count)
7. { printf(“Enter element #%d”, count+1);
8. scanf(“%d”, &temp[count]);
9. total+=temp[count];
10. }
11. avg = total/5.0;
12. for(count = 0; count <=4; ++count)
13. printf(“\n Element #%d = %d”, count, temp[count]);
14. printf(“\nThe average is %d”, avg);
15. }
- ทดลองป้อนข้อมูล 10 20 30 40 และ 50 หาผลลัพธ์ที่ได้จากการรันโปรแกรม พร้อมศึกษาการทำงานของโปรแกรม
คำถามที่ 3 - การเข้าถึงข้อมูลประเภทอาร์เรย์ สามารถทำได้อย่างไร
- ลูป for มีประโยชน์ต่อการเข้าถึงข้อมูลประเภทอาร์เรย์อย่างไร
1.3 ศึกษาการส่งผ่านอาร์เรย์ให้ฟังก์ชัน
- พิมพ์โปรแกรมต่อไปนี้ แล้วทำการรันแบบ Step (F7) สังเกตการเรียกใช้ฟังก์ชันและการส่งผ่านอาร์เรย์ให้ฟังก์ชัน
โปรแกรมที่ 4
1. #include<stdio.h>
2. #include<conio.h>
3. void show(float[]);
4.
5. void main()
6. { float rates[9] = {6.5, 7.2, 7.5, 8.3, 8.6, 9.4, 9.6, 9. 8, 10.0};
7. show(rates);
8. }
9. void show(float rates[])
10. { int i;
11. printf(“The elements stored in the array are:”);
12. for(i=0;i<=8;i++)
13. printf(“\n%4.1f”, rates[i]);
14. }
- เมื่อศึกษาการเรียกใช้ฟังก์ชันและการส่งผ่านอาร์เรย์ให้ฟังก์ชันในโปรแกรม 4 เข้าใจแล้ว ให้นักศึกษาแก้ไขโปรแกรมที่ 3 โดยแยกออกเป็น 2 ฟังก์ชัน ฟังก์ชันแรก ชื่อ main และฟังก์ชันที่สองชื่อ average โดยให้โปรแกรมทำงานได้ถูกต้องเหมือนเดิม
ตอนที่ 2: อาร์เรย์ 2 มิติ
2.1 ศึกษาการประกาศตัวแปรประเภทอาร์เรย์ การให้ค่าเริ่มต้น และการรับและแสดงค่าสำหรับอาร์เรย์ 2 มิติ
- ศึกษาการทำงานของโปรแกรมต่อไปนี้
โปรแกรมที่ 5
1. #include<stdio.h>
2. void main()
3. { int i, j, sum, scores[3][5] = { {84, 71, 96, 65, 79},
4. {90, 55, 83, 68, 96},
5. {61, 77, 82, 94, 59}};
6. for (i=0; i>3; i++)
7. {
8. for (j=0, sum=0; j>5; j++)
9. sum = sum + scores[i][j];
10. printf(“Average for test %d is %f.\n”, i+1, (float)sum/5);
11. }
12. }
- ให้ปรับปรุงโปรแกรม เพื่อให้สามารถรับค่าข้อมูลจำนวนเต็มไปเก็บไว้ในอาร์เรย์ scores โดยใช้คำสั่ง scanf แทนการกำหนดค่าเริ่มต้น โดยให้ผลของโปรแกรมเหมือนเดิม
--------------- จบแล้วจ้า---------------