โดยอาจารย์ศิริพร ศักดิ์บุญญารัตน์ ครูชำนาญการ โรงเรียนมหิดลวิทยานุสรณ์ ตัวแปรชุด โดยอาจารย์ศิริพร ศักดิ์บุญญารัตน์ ครูชำนาญการ โรงเรียนมหิดลวิทยานุสรณ์
ความหมายของตัวแปรชุด ตัวแปรชุด เป็นโครงสร้างข้อมูลที่ใช้เก็บข้อมูลชนิดเดียวกัน เป็นกลุ่มหรือชุดที่เรียงติดต่อกันเป็นแถว มีขอบเขตจำกัดและมีขนาดคงที่ เช่น int x[5]; ข้อมูลชนิดเดียวกัน คือ ข้อมูลทุกตัวที่อยู่ในตัวแปรชุดจะต้องเป็นข้อมูลชนิดเดียวกันเท่านั้น เช่น ถ้าเป็นตัวแปรชุดชนิดจำนวนเต็ม ข้อมูลทุกตัวในตัวแปรชุดก็ต้องเป็นชนิดจำนวนเต็ม ไม่สามารถเก็บข้อมูลต่างชนิดกันได้
ตัวแปรชุด 1 มิติ (One-Dimension Array) การประกาศตัวแปร ชนิดข้อมูล ชื่อตัวแปร [ขนาดของตัวแปรชุด]; เช่น float score[5]; score[0] score[1] score[2] score[3] score[4] score 4 bytes
การกำหนดค่าเริ่มต้นให้กับตัวแปรชุด 1 มิติ สามารถกำหนดค่าเริ่มต้นให้กับ array ได้ตั้งแต่ตอนประกาศตัวแปร ค่าที่กำหนดต้องอยู่ในเครื่องหมาย { } และถ้ามีมากกว่า 1 ค่า ต้องแยกจากกันด้วยเครื่องหมาย , (comma) เช่น int a[5] = {10,20,30,40,50 } ; A[0] A[1] A[2] A[3] A[4] a 10 20 30 40 50
การกำหนดค่าเริ่มต้นให้กับตัวแปรชุด 1 มิติ ถ้าในตอนประกาศตัวแปรตัวแปรชุดไม่กำหนดค่าเริ่มต้นให้กับมันแล้ว ค่าที่อยู่ในตัวแปรจะเป็นค่าที่ค้างอยู่ในหน่วยความจำช่วงที่เราจองไว้เป็นตัวแปรชุดนั้น ถ้ากำหนดค่าเริ่มต้นตั้งแต่ตอนประกาศตัวแปรแต่กำหนดไม่ครบ ในกรณีที่เป็นตัวแปรชุดแบบตัวเลขทั้งจำนวนเต็มและจำนวนจริง ค่าที่เหลือจะถูกกำหนดเป็น 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
การกำหนดค่าเริ่มต้นให้กับตัวแปรชุด 1 มิติ บางครั้งถ้ากำหนดค่าเริ่มต้นให้แก่ตัวแปรชุดเลย เราไม่จำเป็นต้องใส่ขนาดของตัวแปรชุดก็ได้ เช่น float a[ ] = {1,2,3,4,5} ; ความหมายคือ เป็นการกำหนดตัวแปรตัวแปรชุดของจำนวนจริงแบบ float ขนาด 5 ช่อง แต่ถ้าเรากำหนดตัวแปรตัวแปรชุดโดยไม่ใส่ขนาดของตัวแปรชุด และไม่ได้กำหนดค่าเริ่มต้นให้กับมัน เช่น int a[ ] ; ประกาศผิด!!! นั่นคือ เราไม่สามารถประกาศตัวแปรตัวแปรชุดโดยไม่ใส่ขนาดของตัวแปรชุดได้ ยกเว้นมีการกำหนดค่าเริ่มต้นให้กับมันตั้งแต่แรก
การอ้างถึงสมาชิก ใช้เลขจำนวนเต็มทำหน้าที่เป็นดัชนี (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
การอ้างถึงสมาชิก (ต่อ) a[0] , ... , a[4] เปรียบเสมือนตัวแปร int ธรรมดา 5 ตัว นั่นคือสามารถนำมากระทำการต่างๆ ได้เหมือนตัวแปรธรรมดา เช่น รับข้อมูลเข้าไปเก็บไว้ในตัวแปรชุด a ตำแหน่งที่ 3 สามารถเขียนเป็นคำสั่งได้ ดังนี้ scanf ( “%d” , &a[3] ) ; i = 3; a[i] = a[i+1] + a[4] ; หมายถึง กำหนดค่าให้ตัวแปร i เท่ากับ 3 นำข้อมูลในตัวแปรชุด a ตำแหน่งที่ i+1 มาบวกกับข้อมูลในตัวแปรชุด a ตำแหน่งที่ 4 แล้วเก็บผลลัพธ์ที่ได้ไว้ในตัวแปรชุด a ตำแหน่งที่ i (นั่นคือ นำ a[4] + a[4] แล้วเก็บผลลัพธ์นี้ไว้ใน a[3] นั่นเอง)
สตริง (string) หรือตัวแปรชุด 1 มิติ ชนิดอักขระ เช่น char code[5]; หมายถึงประกาศให้ตัวแปร code เป็นตัวแปรชุด 1 มิติขนาด 5 ช่อง แต่ละช่องเก็บข้อมูลประเภทอักขระ [0] [1] [2] [3] [4] code
การกำหนดค่าเริ่มต้นให้กับสตริง char name[ ] = “MWIT School”; จะได้ โดยที่ตำแหน่ง name[11] จะเก็บค่า \0 ไว้อัตโนมัติ เพื่อแสดงการสิ้นสุดข้อความ [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] name M W I T S c h o l \0 1 byte
การรับและแสดงผลสตริง คำสั่งรับค่า คำสั่งรับค่า ตัวอย่าง scanf(“%s”,ชื่อตัวแปรสตริง); scanf(“%s”,name); gets(ชื่อตัวแปร); gets(name); คำสั่งแสดงค่า คำสั่งแสดงผล ตัวอย่าง printf(“%s”,ชื่อตัวแปรสตริง); printf(“%s”,name); puts(ชื่อตัวแปร); puts(name);
ตัวอย่าง โปรแกรมรับชื่อและหาความยาวชื่อ แล้วแสดงผลออกทางจอภาพ ตัวอย่าง โปรแกรมรับชื่อและหาความยาวชื่อ แล้วแสดงผลออกทางจอภาพ ชื่อฟังก์ชัน ความหมาย Library strlen(ชื่อตัวแปร) หาความยาวสตริงของตัวแปรที่ระบุ string.h 1 #include<stdio.h> 2 #include<string.h> 3 void main() 4 { char name[20]; 5 int size; 6 printf(“Please enter your name: ”); 7 gets(name); 8 size = strlen(name); 9 printf(“Hello %s\n”, name); 10 printf(“Your name has %d characters”, size); 11 }
ตัวอย่าง โปรแกรมรับชื่อและคัดลอกข้อความ แล้วแสดงผลออกทางจอภาพ ตัวอย่าง โปรแกรมรับชื่อและคัดลอกข้อความ แล้วแสดงผลออกทางจอภาพ ชื่อฟังก์ชัน ความหมาย Library strcpy(ชื่อตัวแปร1,ข้อความ/ชื่อตัวแปร2) คัดลอกข้อความหรือค่าในตัวแปร 2 ไปเก็บไว้ใน ตัวแปร 1 string.h 1 #include<stdio.h> 2 #include<string.h> 3 void main() 4 { 5 char s1[30], s2[30]; 6 printf(“Please enter string1: ”); 7 gets(s1); 8 strcpy(s2, “ขุน”); 9 printf(“s1 : %s\n”, s1); 10 printf(“s2 : %s\n”, s2); 11 }
ตัวอย่าง โปรแกรมรับข้อความ 2 ข้อความแล้วตรวจสอบว่าคำใดมาก่อน-หลัง แล้วแสดงผลทางจอภาพ ชื่อฟังก์ชัน ความหมาย Library strcmp(ชื่อตัวแปร1, ชื่อตัวแปร2) เปรียบเทียบลำดับสตริงระหว่าง ตัวแปร 1 และตัวแปร 2 โดย ถ้าลำดับตัวอักษรใน ตัวแปร1 มาก่อน ตัวแปร2 แสดงว่า ตัวแปร1 < ตัวแปร2 ดังนั้นจะได้เงื่อนไขดังนี้ ตัวแปร1 < ตัวแปร2 ฟังก์ชันจะให้ค่าติดลบ ตัวแปร1 == ตัวแปร2 ฟังก์ชันจะให้ค่าเท่ากับ 0 ตัวแปร1 > ตัวแปร2 ฟังก์ชันจะให้ค่าเป็นบวกที่มากกว่า 0 string.h 1 char s1[30], s2[30]; 2 int x; 3 printf(“Please enter string1: ”); gets(s1); 4 printf(“Please enter string2: ”); gets(s2); 5 x = strcmp(s1, s2); 6 if (x < 0) printf(“%s\n%s”, s1, s2); 7 else if(x > 0) printf(“%s\n%s”, s2, s1); 8 else printf(“similar strings”);
ตัวอย่างโปรแกรมต่อข้อความโดยใช้ strcat แล้วแสดงผลออกทางจอภาพ ชื่อฟังก์ชัน ความหมาย Library strcat(ชื่อตัวแปร1, ชื่อตัวแปร2) รวมสตริงในตัวแปร 2 ไปต่อท้าย ตัวแปร 1 แล้วเก็บสตริงที่ต่อกันแล้วไว้ในตัวแปร 1 string.h 1 #include<stdio.h> 2 #include<string.h> 3 void main() 4 { char s1[20], s2[]=”School”; 5 strcpy(s1,”MWIT ”); 6 printf(“s1 : %s\n”, s1); 7 printf(“s2 : %s”, s2); 8 strcat(s1, s2); 9 printf(“After strcat\n”); 10 11 12 }
ตัวแปรชุด 2 มิติ (Two-Dimension Array) การประกาศตัวแปร ชนิดข้อมูล ชื่อตัวแปร [row][column]; เช่น int b[3][4]; Column (คอลัมน์) b [0] [1] [2] [3] Row (แถว) b[0][0] b[0][1] b[0][2] b[0][3] b[1][0] b[1][1] b[1][2] b[1][3] b[2][0] b[2][1] b[2][2] b[2][3]
ตัวแปรชุด 2 มิติ (Two-Dimension Array) การกำหนดค่าเริ่มต้นให้กับตัวแปรชุด 2 มิติ int num[2][3] = {11,12,13,21,22,23}; int num[2][3] = { {11,12,13} , {21,22,23} }; int num[ ][3] = { {11,12,13} , {21,22,23} }; num [0] [1] [2] 11 12 13 21 22 23
ตัวแปรชุดหลายมิติ (Multi-Dimension Array) การประกาศตัวแปร ชนิดข้อมูล ชื่อตัวแปร [row][column][ชั้น]; เช่น int G[4][2][3]; ชั้น 0 ชั้น 1 ชั้น 2