C Programming : เขียนโปรแกรมภาษา C แบบพื้นฐาน ตอนที่ 3 – Array
จากตอนที่ 2
บทความตอนที่ 2 เราได้เรียนรู้เรื่อง operator และ loop ไปแล้ว บทความนี้จะเป็นเรื่อง array
รู้จักกับ Array
ถ้าผมต้องการเก็บข้อมูลคะแนนนักเรียน 6 คน วิธีการแบบดิบๆ คือ ผมสามารถประกาศตัวแปร int score 1, score2 , .. ครบ 6 ตัว
ซึ่งมันก็ดูลำบาก มีหลายตัวแปร ตั้งหลายชื่อ
array คือ ตัวแปรชุด เอาไว้เก็บข้อมูลเป็นชุด โดยมีตัวแปรชื่อเดียว
สัญลักษณ์ คือ []
ประกาศตัวแปร int เป็นชุด พร้อมกำหนดค่า คะแนนนักเรียน
int score[] = { 70 , 82 ,63 , 89 , 98 ,100 };
หรือทำเป็นตัวแปร char เก็บเกรดของวิชา
char grade[] = { 'A' , 'B' , 'C' , 'D' ,'F'};
ดูดีขึ้นมาทันที
การเข้าถึงข้อมูลใน array จะใช้ตัวเลขลำดับ เรียกว่า index
วิธีการ คือ ชื่อตัวแปร ตามด้วย [] ข้างใน [] คือ เลข index โดยจะเริ่มตั้งแต่ 0 ถึง n-1
ถ้า มี 6 ค่า ก็จะ มี index 0 1 2… 5
เช่น ถ้าจะแสดงค่าคะแนนของนักเรียนคนที่ 1 ซึ่งก็จะมี index = 0
printf("%d",score[0]);
ถ้าจะเปลี่ยนค่า score[0] ก็ทำได้เหมือนตัวแปรทั่วไป
score[0] = 99;
ลองปริ้นของทั้ง 6 คน ค่า index = 0 1 2 … 5
#include <stdio.h> main(){ int score[] = { 70 , 82 ,63 , 89 , 98 ,100 }; printf("\n %d",score[0]); printf("\n %d",score[1]); printf("\n %d",score[2]); printf("\n %d",score[3]); printf("\n %d",score[4]); printf("\n %d",score[5]); }
การใช้ Loop กับ array
พอเราเข้าใจ array รวมทั้งเรื่อง index แล้ว จะเห็นว่ามันมีลักษณะคล้ายๆกับ ปัญหาใน บทความที่ 2 คือ มันมี code ซ้ำๆกัน ดังนั้นเราจึงสามารถนำ loop มาใช้
index ที่เรียงค่า 0 1 2 3 … เราสามารถใช้ ตัวแปรวนลูปแทนได้
ลองปริ้นคะแนนของทั้ง 6 คน แบบใช้ for loop
#include <stdio.h> main(){ int score[] = { 70 , 82 ,63 , 89 , 98 ,100 }; int i; for(i=0;i<6;i++){ printf("\nstudent %d = %d",i+1,score[i]); } }
จะเกิดอะไรขึ้น ถ้าปริ้นค่าที่ไม่มี index
ทั้งๆที่เราประกาศว่า score มี อยู่ 6 ค่า ซึ่งจะควรมี index 0 1 2 3 4 5
ถ้าเรา เข้าถึง index 8 9 10 ล่ะ จะเกิดอะไรขึ้น
คำตอบ คือ มันอาจเป็นค่าขยะ หรือก็คือ ค่าอะไรก็ไม่รู้ที่ค้างใน memory ดังนั้นควรใช้อย่างระมัดระวัง
การจองพื้นที่ array
เราสามารถนำ ตัวแปรมาประกาศขนาด array ได้ เช่น
int count = 10; int data[count];
เราสามารถนำการรับค่า scanf เข้ามา เพื่อจองพื้นที่ก่อน
เช่น โปรแกรมคำนวณหาผลรวม โดยจะให้ผู้ใช้ป้อนจำนวนข้อมูลก่อน แล้วใส่ข้อมูลจนครบ ก็จะแสดงผลรวม
#include <stdio.h> main(){ int i,length; printf("\nInput number of data = "); scanf("%d",&length); int score[length]; int sum = 0; for(i=0;i<length;i++){ printf("\nData [%d] = ",i); scanf("%d",&score[i]); sum += score[i]; } printf("\nSUM = %d",sum); }
รู้จักกับ array of char
รายละเอียดของ array of char พิเศษกว่านิดหน่อย เพราะมัน มีลักษณะแบบ string
สามารถกำหนดค่า โดยใช้ ” (double-quote) แล้วตามด้วยข้อความได้เลย
เวลาปริ้นค่า ข้อความ ใช้ %s
#include <stdio.h> main(){ char str[] ="Hello world"; printf("%s",str); }
การใช้ scanf รับค่า ข้อความ ก่อนอื่นเราต้องประกาศตัวแปร array char ก่อนพร้อมจองพื้นที่
ตอนใช้ scanf ก็ใช้ท่า %s ส่วนพารามิเตอร์ที่สอง คือ ตัวแปรที่ต้องการเก็บข้อความ
ที่สำคัญ ไม่ต้องมี & หน้าตัวแปร
#include <stdio.h> main(){ char str[100]; printf("Message = "); scanf("%s",str); printf("%s",str); }
รู้จักกับ array 2 มิติ
ก่อนหน้านี้เราใช้ [] ก็คือ 1 มิติ จะเป็นเหมือน ข้อมูล 1 แถวเรียงกันไป ซึ่ง array สามารถมีได้หลายมิติ มารู้กับ array 2 มิติกัน
array 2 มิติ จะใช้ [][]
ประกาศตัวแปร array 2 มิติ และกำหนดค่าเริ่มต้น
int data[][3] = { {130 , 420 , 360}, {948 , 565 , 340}, {34 , 3430 , 342}, };
ซึ่งจะเก็บข้อมูลคล้ายตาราง
การกำหนดค่า ก็ระบุ index เช่นเดิม
data[2][3] = 1000;
การใช้ Loop กับ array 2 มิติ
จากเดิมที่ array 1 มิติเราใช้ loop 1 ชั้น พอมาเป็น 2 มิติ เราต้องใช้ loop 2 ชั้น ในการปริ้นข้อมูล
#include <stdio.h> main(){ int data[][3] = { {130 , 420 , 360}, {948 , 565 , 340}, {34 , 3430 , 342}, }; int i,j; for(i = 0;i < 3 ;i++){ for(j = 0;j< 3 ;j++){ printf("\n data[%d][%d] = %d",i,j,data[i][j]); } } }
Array N มิติ
พอเราเข้าใจ array 1 มิติ และ 2 มิติ เราก็สามารถเพิ่มมิติเข้าไปได้ เช่น 3 มิติ 4 มิติ ซึ่งโดยปกติแล้ว มากกว่า 2 มิติ ไม่ค่อยได้ใช้
array 3 มิติ ก็ต้องใช้ loop วน 3 ชั้น
#include <stdio.h> main(){ int data[][3][3] = { { {2332 , 432420 , 36120}, {948 , 52365 , 34120}, {33244 , 3443 , 3122}, }, { {13021 , 4230 , 31260}, {9248 , 56325 , 34320}, {3421 , 332430 , 3342}, }, { {13780 , 420900 , 3680}, {94843 , 58765 , 3402}, {34234 , 345430 , 32142}, } }; int i,j,k; for(i = 0;i < 3 ;i++){ for(j = 0;j< 3 ;j++){ for(k = 0;k< 3 ;k++){ printf("\n data[%d][%d][%d] = %d",i,j,k,data[i][j][k]); } } } }
จบแล้วสำหรับเรื่อง array
มาต่อกันในบทความตอนที่ 4 ครับ
(: