หน่วยที่ 5  ตัวแปรชุดและสตริง

ในบทที่ผ่านมาหลายบทก่อนหน้านี้ได้พูดถึงตัวแปรชนิดต่าง ๆ หลายชนิด สำหรับเนื้อหาในบทนี้ จะได้เรียนรู้เกี่ยวกับตัวแปรอีกชนิดหนึ่งนั่นคือตัวแปรชุด (arrays) และเนื้อหาเกี่ยวกับสตริง (string) ซึ่งเป็นพื้นฐานที่สำคัญในการจัดเก็บข้อมูลและโครงสร้างของข้อมูลโดยเฉพาะอย่างยิ่งตัวแปรชุดมีประโยชน์หลายประการดังนี้

1) ช่วยลดการตั้งชื่อซ้ำ ๆ กัน เช่น ต้องการเก็บค่าตัวเลขจำนวนเต็ม 100 ตัว ถ้าไม่มีการใช้ตัวแปรชุด เราจะต้องประกาศตัวแปรถึง 100 ตัว ดังนี้

int k1, k2, k3, …, k100; /* ประกาศตัวแปร k1, k2, k3, …, k100 จำนวน 100 ตัว */ แต่ถ้าเราใช้ตัวแปรชุดมาช่วยในการเก็บข้อมูลตัวเลขชุดนี้ เราสามารถเก็บตัวเลข 100 ตัวนี้ไว้ในชื่อเดียวกัน แต่มีตัวเลข subscript คอยกำกับเพื่อบ่งบอกถึงลำดับที่ของข้อมูลในตัวแปรได้

int k[100]; /* ประกาศตัวแปรชุด 1 ตัว คือชื่อตัวแปร k */

2) ช่วยในการจัดเก็บข้อมูลแบบตาราง (table) โดยสามารถใช้ตัวแปรชุด 2 มิติ มาเก็บข้อมูลได้

3) ช่วยในการเขียนโปรแกรมมีประสิทธิภาพมากขึ้น เนื่องจากในโปรแกรมที่มีการใช้ตัวแปรชุดจะมีตัวแปรน้อยลง ช่วยในการจัดเรียงข้อมูล และค้นหาข้อมูลได้สะดวกและรวดเร็ว

5.1 ตัวแปรชุด (arrays variables)

ตัวแปรชุด คือ ตัวแปรชนิดหนึ่งที่ใช้ชื่อเพียงชื่อเดียวแต่มีตัวเลขแสดงตำแหน่งกำกับไว้ (subscript) เพื่อเป็นการบอกว่าเป็นสมาชิกของตัวแปรชุดตัวที่เท่าไหร

5.1.1 ประเภทของตัวแปรชุด มีดังนี้ 

1) ตัวแปรชุด 1 มิติ (one dimension arrays หรือ single dimension arrays) ตัวแปรชุด 1 มิติ คือ ตัวแปรชุดที่มีตัวเลขกำกับ (subscript) เพียง 1 ตัว เช่น a[20], b[100], name[30] และ salary[20] เป็นต้น

2) ตัวแปรชุดหลายมิติ (multi-dimension arrays) ตัวแปรชุดหลายมิติ คือ ตัวแปรชุดที่มีตัวเลขกำกับ (subscript) ตั้งแต่ 2 ตัวขึ้นไป โดยมากจะสนใจศึกษาตัวแปรชุดที่มีตัวเลขกำกับ 2 ตัว และ 3 ตัว ดังนี้ 

ตัวแปรชุด 2 มิติ (two dimension arrays) คือ ตัวแปรชุดที่มีตัวเลขกำกับ (subscript) เพียง 2 ตัว เช่น a[2][4], b[3][4], name[5][30] เป็นต้น

ตัวแปรชุด 3 มิติ (three dimension arrays) คือ ตัวแปรชุดที่มีตัวเลขกำกับ (subscript) เพียง 3 ตัว เช่น a[2][3][4], b[3][4][5] เป็นต้น

5.1.2 การประกาศตัวแปรชุด (declaration of arrays) สามารถทำได้ดังนี้ 

1) การประกาศตัวแปรชุด 1 มิติ (declaration of one dimension arrays) 

โดยที่

type คือ ชนิดของตัวแปรชุด เช่น int, float, char, double เป็นต้น

arrayname คือ ชื่อตัวแปรชุด ตั้งขึ้นตามหลักการตั้งชื่อตัวแปร

size คือ ขนาดของตัวแปรชุดเป็นตัวเลขจำนวนเต็ม

ตัวอย่างการประกาศตัวแปรชุด 1 มิติ

ตัวอย่างที่ 5.1 int s[20]; ภายในหน่วยความจำจะมีการจองเนื้อที่ไว้ดังนี้

การจองเนื้อที่ใช้ช่องละ 2 bytes 20 ช่อง รวมกันทั้งหมดใช้เนื้อที่ 40 bytes

ตัวอย่างที่ 5.2 char p[20]; ภายในหน่วยความจำจะมีการจองเนื้อที่ไว้ดังนี้

การจองเนื้อที่ใช้ช่องละ 1 bytes 20 ช่อง รวมกันทั้งหมดใช้เนื้อที่ 20 bytes

ตัวอย่างที่ 5.3 float t[20]; ภายในหน่วยความจำจะมีการจองเนื้อที่ไว้ดังนี้

การจองเนื้อที่ใช้ช่องละ 4 bytes 20 ช่อง รวมกันทั้งหมดใช้เนื้อที่ 80 bytes

2) การประกาศตัวแปรชุด 2 มิติ (declaration of two dimension arrays) 

โดยที่ 

type คือ ชนิดของตัวแปรชุด เช่น int, float, char, double เป็นต้น

arrayname คือ ชื่อตัวแปรชุด ตั้งขึ้นตามหลักการตั้งชื่อตัวแปร

n คือ ตัวเลขที่ใช้แสดงตำแหน่งแถว (row) มีค่าตั้งแต่ 0, 1, 2, …, n-1

m คือ ตัวเลขที่ใช้แสดงตำแหน่งคอลัมน์ (column) มีค่าตั้งแต่ 0, 1, 2, …, m-1

ตัวอย่างการประกาศตัวแปรชุด 2 มิติ

ตัวอย่างที่ 5.4 int r[3][2]; ภายในหน่วยความจำจะมีการจองเนื้อที่ไว้ดังนี้

การจองเนื้อที่ของตัวแปรชุด 2 มิติ จะมีลักษณะเป็นตาราง (table) มีจำนวนแถว n = 0, 1, 2 และมีจำนวนคอลัมน์ m = 0, 1 โดยที่ในตารางจะมีลักษณะเป็นช่อง ๆ ซึ่งแต่ละช่องก็คือพื้นที่ของสมาชิกแต่ละตัว โดยใช้เนื้อที่ช่องละ 2 bytes มีสมาชิกทั้งหมด 6 ตัว ดังนั้นใช้เนื้อที่ทั้งหมด 12 bytes 

วิธีการหาจำนวนสมาชิกทั้งหมดของตัวแปรชุด 1 มิติ และ 2 มิติ

การหาจำนวนสมาชิกทั้งหมดของตัวแปรชุด สามารถคำนวณได้จากสูตรดังนี้

กรณีตัวแปรชุด 1 มิติ

จำนวนสมาชิกทั้งหมดของตัวแปรชุด = ขนาดของตัวแปรชุด (size)

กรณีตัวแปรชุด 2 มิติ

จำนวนสมาชิกทั้งหมดของตัวแปรชุด = n*m

จากตัวอย่าง int r[3] [2]; จะได้ว่า n = 3, m = 2 ดังนั้น จำนวนสมาชิกของตัวแปรชุด = 3*2 = 6 แสดงว่าตัวแปรชุดนี้มีสมาชิกดังนี้ r[0][0], r[0][1], r[n-1][m-1] รวมทั้งหมด 6 สมาชิก

ตัวอย่างที่ 5.5 float X[5] [4]; ภายในหน่วยความจำจะมีการจองเนื้อที่ไว้ดังนี้

การจองเนื้อที่จะมีลักษณะเป็นตาราง (table) มีจำนวนแถว n = 0, 1, 2, 3, 4 และมีจำนวนคอลัมน์ m = 0, 1, 2, 3 โดยที่ในตารางใช้เนื้อที่ช่องละ 4 bytes มีจำนวนทั้งหมด 20 ตัว ดังนั้นใช้เนื้อทั้งหมด 80 bytes

3) การประกาศตัวแปรชุด 3 มิติ (declaration of three dimension arrays)

type arrayname [n] [m] [p];

โดยที่

type คือ ชนิดของตัวแปรชุด เช่น int, float, char, double เป็นต้น

arrayname คือ ชื่อตัวแปรชุดตั้งขึ้นตามหลักการตั้งชื่อตัวแปร 

n คือ ตัวเลขกำกับตัวที่ 1 มีค่าตั้งแต่ 0, 1, 2, …., n-1

m คือ ตัวเลขกำกับตัวที่ 2 มีค่าตั้งแต่ 0, 1, 2, …., m-1 p คือ ตัวเลขกำกับตัวที่ 3 มีค่าตั้งแต่ 0, 1, 2, …., p-1

วิธีการหาจำนวนสมาชิกทั้งหมดในตัวแปรชุด 3 มิติ หาได้จากสูตรดังนี้

จำนวนสมาชิกทั้งหมดของตัวแปรชุด = n*m*p

ตัวอย่างการประกาศตัวแปรชุด 3 มิติ float a[2][2][3]; ดังนั้น n = 2 , m = 2, p = 3 จะได้ว่าจำนวนสมาชิกทั้งหมดของตัวแปรชุด = 2*2*3 = 12 ตัว

ดังนั้นเราสามารถเขียนสมาชิกทั้งหมดของตัวแปรชุดนี้ได้ดังตาราง

Column 0 Column 1

ตัวที่ 1 ตัวที่ 2 ตัวที่ 3 ตัวที่ 1 ตัวที่ 2 ตัวที่ 3

Row 0 a[0][0][0] a[0][0][1] a[0][0][2] a[0][1][0] a[0][1][1] a[0][1][2]

Row 1 a[1][0][0] a[1][0][1] a[1][0][2] a[1][1][0] a[1][1][1] a[1][1][2]

โดยที่สมาชิกแต่ละตัวใช้เนื้อที่ตัวละ 4 bytes จำนวนสมาชิกทั้งหมดมี 12 ตัว ดังนั้นใช้เนื้อที่ทั้งหมดคือ 4*12 = 48 bytes

5.1.3 การกำหนดค่าเริ่มต้นให้กับตัวแปรชุด (initializing arrays)

1) การกำหนดค่าตัวเลขให้กับตัวแปรชุด

รูปแบบที่ 1 (กรณีตัวแปรชุด 1 มิติ)

type arrayname[size] = { value list };

รูปแบบที่ 2 (กรณีตัวแปรชุด 2 มิติ)

type arrayname[n][m] = { value list };

โดยที่

value list คือ ค่าคงที่ชนิดตัวเลขที่ต้องการกำหนดให้ตัวแปรชุด ถ้ามีหลายค่าให้ใช้เครื่องหมาย , (comma) คั่นระหว่างค่าคงที่แต่ละค่า

โดยค่าคงที่ทั้งหมดจะต้องอยู่ภายใต้เครื่องหมาย { }

ตัวอย่าง 5.6 int a[10] = {10, 20, 30, 40,50, 60, 70, 80, 90, 100};

ภายในหน่วยความจำจะเก็บตัวแปรชุดดังนี้

ตัวอย่างที่ 5.7 float p[5][3] = {

3.0, 4.5, 5.5,

4.6, 5.5, 6.5,

5.0, 6.2, 7.0,

6.3, 6.8, 7.4,

7.5, 8.0, 9.0 

};

ภายในหน่วยความจำจะเก็บตัวแปรชุดเป็นลักษณะตาราง (table) ดังนี้

โดยที่สมาชิกแต่ละตัวใช้เนื้อที่ 4 bytes ดังนั้นใช้เนื้อที่ทั้งหมด = 4*15 = 60 bytes

2) การกำหนดค่าคงที่ชนิดสตริงให้กับตัวแปรสตริง 

รูปแบบที่ 1 (กรณีตัวแปรชุด 1 มิติ)

char arrayname[size] = “string constant”;

รูปแบบที่ 2 (กรณีตัวแปรชุด 2 มิติ)

char arrayname[n][m] = {“string constant”};

โดยที่ 

string constants คือ ค่าคงที่ชนิดสตริงที่ต้องการกำหนดให้ตัวแปรชุด ถ้ามีหลายค่าจะต้องใช้เครื่องหมาย , (comma) คั่นระหว่างค่าคงที่แต่ละค่า

ตัวอย่างที่ 5.8 char s[12] = “ASIAN GAME” ;

ภายในหน่วยความจำจะเก็บข้อมูลตัวแปรชุดมีลักษณะดังนี้

null character 

ตัวอย่างที่ 5.9 char province[3][13] = {

“NAKHONPANOM” ,

“SAKON NAKHON” ,

“MOOKDAHAN” } ;

ภายในหน่วยความจำจะเก็บข้อมูลมีลักษณะดังนี้

ทั้งหมดใช้เนื้อที่ 3 x 13 = 39 bytes

การอ้างถึงสมาชิกในตัวแปรชุด 2 มิติ

เช่น

province [0] คือ สมาชิกแถวที่ 1 ทั้งแถว นั่นคือข้อมูล NAKHONPANOM

province [1] คือ สมาชิกแถวที่ 2 ทั้งแถว นั่นคือข้อมูล SAKON NAKHON province [2] คือ สมาชิกแถวที่ 3 ทั้งแถว นั่นคือข้อมูล MOOKDAHAN

province [0][0] คือ สมาชิกของ province [0] ตัวที่ 1 คือตัวอักษร N

province [1][2] คือ สมาชิกของ province [1] ตัวที่ 3 คือตัวอักษร K

5.1.4 การนำข้อมูลเข้าไปเก็บและการแสดงผลลัพธ์ของข้อมูลในตัวแปรชุด

โดยปกติเราจะใช้คำสั่ง for หรือ while หรือ do while คำสั่งใดคำสั่งหนึ่งมาช่วยในการนำข้อมูลเข้าเก็บและแสดงผลลัพธ์ข้อมูลในตัวแปรชุด ส่วนมากนิยมใช้คำสั่ง for มากกว่าคำสั่งอื่นทั้งนี้เนื่องจากตัวแปรชุดนั้นเราสามารถทราบขนาดที่แน่นอนได้ ทำให้กำหนดจำนวนรอบการทำงานได้

เพื่อความเข้าใจเกี่ยวกับการนำข้อมูลเข้าไปเก็บและการแสดงผลลัพธ์ของตัวแปรชุดมากยิ่งขึ้น ให้ศึกษาโปรแกรมตัวอย่างที่ 5.1, 5.2, 5.3 และ 5.4 ดังต่อไปนี้

โปรแกรมตัวอย่างที่ 5.1 แสดงการใช้ตัวแปรชุด 1 มิติ ชื่อ scores เก็บคะแนนนักเรียน 

/* array1.C */

#include<stdio.h> /* บรรทัดที่ 1 */

#include<conio.h> /* บรรทัดที่ 2 */

/* Record student's scores. */ /* บรรทัดที่ 3 */

main() /* บรรทัดที่ 4 */

{ /* บรรทัดที่ 5 */

int index, scores[5]; /* บรรทัดที่ 6 */

scores[0] = 59; /* บรรทัดที่ 7 */

scores[1] = 67; /* บรรทัดที่ 8 */

scores[2] = 85; /* บรรทัดที่ 9 */

scores[3] = 92; /* บรรทัดที่ 10 */

scores[4] = 74; /* บรรทัดที่ 11 */

clrscr(); /* บรรทัดที่ 12 */

for (index = 0; index < 5; index++) /* บรรทัดที่ 13 */

printf("Student's score: %d\n", scores[index]); /* end for */ /* บรรทัดที่ 14 */

getch(); /* บรรทัดที่ 15 */

return(0); /* บรรทัดที่ 16 */

} /* บรรทัดที่ 17 */

ผลลัพธ์ที่ได้จากโปรแกรม

คำอธิบายโปรแกรม 

จากโปรแกรมตัวอย่างที่ 5.1 สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังนี้

บรรทัดที่ 6 ประกาศตัวแปร index เป็นชนิดจำนวนเต็ม และ scores เป็นตัวแปรชุด 1 มิติ ชนิดจำนวนเต็มมีสมาชิก 5 ตัว

บรรทัดที่ 7 ถึง 11 กำหนค่าจำนวนเต็มให้กับตัวแปรชุด scores[0] ถึง scores[4]

บรรทัดที่ 13 คำสั่ง for ทำหน้าที่วนรอบทำงานซ้ำ 5 ครั้ง เพื่อช่วยพิมพ์คะแนนนักเรียนที่เก็บไว้ในตัวแปรชุด scores[0] ถึง scores[4]

บรรทัดที่ 14 และ 15 ฟังก์ชัน printf( ) เพื่อแสดงคะแนนของนักเรียนแต่ละคนออกที่จอภาพซึ่งเก็บไว้ในตัวแปรชุด scores[0] ถึง scores[4] หลังจากนั้นจะหยุดรอรับค่าใด ๆ จากคีย์บอร์ด ซึ่งถ้ากด enter ก็จะกลับสู่โปรแกรม

บรรทัดที่ 16 ส่งค่า 0 (ศูนย์) กลับให้กับฟังก์ชัน main( )

ข้อสังเกต ฟังก์ชัน main( ) ของโปรแกรมตัวอย่างที่ 5.1 เป็นฟังก์ชันที่ต้องการให้ส่งค่ากลับ ในการเขียนโปรแกรมจะต้องมีการใช้ฟังก์ชัน return( ) ซึ่งถ้าไม่ใช้เวลาที่เรา compile โปรแกรม จะมีคำเตือนให้เราทราบทุกครั้ง แต่โปรแกรมก็สามารถ run ได้ 

โปรแกรมตัวอย่างที่ 5.2 แสดงการใช้ตัวแปรชุด 1 มิติ สำหรับเก็บข้อมูลและนำข้อมูลในตัวแปรชุดมาคำนวณค่า พร้อมทั้งแสดงผลลัพธ์ที่ได้ออกจอภาพ

/* array2.c */

#include<stdio.h> /* บรรทัดที่ 1 */

#include<conio.h> /* บรรทัดที่ 2 */

#include<stdlib.h> /* บรรทัดที่ 3 */

void main(void) /* บรรทัดที่ 4 */ 

{ float num[100] ; /* บรรทัดที่ 5 */

float sum= 0 , average ; /* บรรทัดที่ 6 */

int i, n ; char numstr[20]; /* บรรทัดที่ 7 */

clrscr(); /* บรรทัดที่ 8 */

printf("Enter Total of number(n<100) : "); /* บรรทัดที่ 9 */

n = atoi(gets(numstr)); /* บรรทัดที่ 10 */

/* ===== Input Data ===== */ /* บรรทัดที่ 11*/

for( i=0; i<n; i++) { /* บรรทัดที่ 12 */

printf("\nEnter NUMBER #%d : ",i+1); /* บรรทัดที่ 13 */

num[i] = atof(gets(numstr)); /* บรรทัดที่ 14 */

sum=sum+num[i]; /* บรรทัดที่ 15 */

printf("\n"); /* บรรทัดที่ 16 */

} /* end for */ /* บรรทัดที่ 17 */

/* ===== Calulate MEAN ===== */ /* บรรทัดที่ 18 */

average = sum/n ; /* บรรทัดที่ 19 */

printf("N =%d\t Sum =%10.2f\n",n,sum); /* บรรทัดที่ 20 */

printf("Average = %10.2f\n",average); /* บรรทัดที่ 21 */

getch(); /* บรรทัดที่ 22 */

} /* end main */ /* บรรทัดที่ 23 */

ผลลัพธ์ที่ได้จากโปรแกรม

คำอธิบายโปรแกรม

จากโปรแกรมตัวอย่างที่ 5.2 สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังน

บรรทัดที่ 3 คำสั่ง #include <stdlib.h> ให้การสนับสนุนฟังก์ชัน atoi( ) และฟังก์ชัน atof( ) สำหรับโปรแกรมนี้ ในบรรทัดที่ 10 และ 14 ตามลำดับ

บรรทัดที่ 5 ประกาศตัวแปร num เป็นตัวแปรชุด 1 มิติ ชนิด float มีสมาชิก 100 ตัว

บรรทัดที่ 7 ประกาศตัวแปร numstr เป็นตัวแปรชุด 1 ติ ชนิด char มีสมาชิก 20 ตัว

บรรทัดที่ 10 ฟังก์ชัน atoi( ) ใช้เปลี่ยน string เป็นตัวเลขจำนวนเต็ม จากฟังก์ชัน gets( ) รับตัวอักขระมาเก็บไว้ในตัวแปร numstr แล้วเปลี่ยนค่า string ของตัวแปร numstr ไปเก็บไว้ในตัวแปร n โดยใช้ฟังก์ชัน atoi( )

บรรทัดที่ 12 คำสั่ง for ช่วยในการเก็บข้อมูลไว้ในตัวแปรชุด num ซึ่งมีจำนวนรอบของการทำงานเท่ากับจำนวนสมาชิกของตัวแปรชุด คือ n รอบ

บรรทัดที่ 14 ฟังก์ชัน atof( ) ใช้เปลี่ยน string เป็นตัวเลขทศนิยม ซึ่งมีการทำงานคล้ายกับฟังก์ชัน atoi( ) ในบรรทัดที่ 10

บรรทัดที่ 15 คำสั่ง sum = sum + num[i]; เป็นการบวกสะสมค่าตัวแปรชุด

บรรทัดที่ 18 ถึง 21 คำสั่ง average = sum/n; เป็นการคำนวณค่าเฉลี่ยของตัวแปรชุด แล้วแสดงผลค่าตัวแปร n ตัวแปร sum และตัวแปร average ออกจอภาพ 

บรรทัดที่ 22 หยุดรอรับค่าใด ๆ จากคีย์บอร์ด ซึ่งถ้าเรากด enter ก็จะกลับสู่โปรแกรม

โปรแกรมตัวอย่างที่ 5.3 แสดงการใช้ตัวแปรชุด 2 มิติ สำหรับเก็บคะแนนและคำนวณค่าเฉลี่ยของคะแนนในแต่ละชุดแสดงผลออกจอภาพ

/* array3.C */

#include<stdio.h> /* บรรทัดที่ 1 */

#include<conio.h> /* บรรทัดที่ 2 */

/* Record student's score */

main() /* บรรทัดที่ 3 */

{ /* บรรทัดที่ 4 */

int i, j, sum, scores[3][5] = { /* บรรทัดที่ 5 */

{ 84 , 71 , 96 , 65 , 79 }, /* บรรทัดที่ 6 */

{ 90 , 55 , 83 , 68 , 96 }, /* บรรทัดที่ 7 */

{ 61 , 77 , 82 , 94 , 59 } /* บรรทัดที่ 8 */

}; /* บรรทัดที่ 9 */

clrscr(); /* บรรทัดที่ 10 */

for (i = 0; i < 3; i++){ /* loop over tests. */ /* บรรทัดที่ 11 */

for (j = 0, sum = 0; j < 5; j++) /* บรรทัดที่ 12 */

sum = sum + scores[i][j]; /* บรรทัดที่ 13 */

printf("Average for test %d is %f.\n", i, (float) sum / 5); /* บรรทัดที่ 14 */

} /* end for */ /* บรรทัดที่ 15 */

getch(); /* บรรทัดที่ 16 */

return(0); /* บรรทัดที่ 17 */

} /* บรรทัดที่ 18 */

ผลลัพธ์ที่ได้จากโปรแกรม

คำอธิบายโปรแกรม

จากโปรแกรมตัวอย่างที่ 5.3 สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังนี้

บรรทัดที่ 5 ถึง 9 ประกาศตัวแปรชุด 2 มิติ ชนิดจำนวนเต็มของตัวแปรชื่อ scores มีจำนวนสมาชิกทั้งหมด 15 ตัว

บรรทัดที่ 11 คำสั่ง for เพื่อตรวจสอบว่า loop เกินจำนวนรอบ คือ แถวของตัวแปรชุดหรือไม่

บรรทัดที่ 12 คำสั่ง for เพื่อนำคะแนนที่เก็บในตัวแปรชุดทั้ง 15 ตัวมารวมกัน ในคำสั่งบรรทัดที่ 13

บรรทัดที่ 14 พิมพ์คะแนนเฉลี่ยของนักเรียนทั้ง 5 คน ในการสอบแต่ละครั้ง โดยที่ (float) sum/5 เป็นการทำให้ตัวแปร sum เป็นจำนวนทศนิยมชั่วคราว เพราะปกติเราประกาศตัวแปร sum เป็นชนิดจำนวนเต็ม

บรรทัดที่ 15 หยุดรอรับค่าใด ๆ จากคีย์บอร์ด ซึ่งถ้าเรากด enter ก็จะกลับสู่โปรแกรม

โปรแกรมตัวอย่างที่ 5.4 แสดงการใช้ตัวแปรชุด 2 มิติ สำหรับเก็บชื่อจังหวัด แล้วนำข้อมูลมาแสดงออกที่จอภาพ

/* array4.c */

#include<stdio.h> /* บรรทัดที่ 1 */

#include<conio.h> /* บรรทัดที่ 2 */

#include<stdlib.h> /* บรรทัดที่ 3 */

void main(void) /* บรรทัดที่ 4 */

{ /* บรรทัดที่ 5 */

char province[100][40]; /* บรรทัดที่ 6 */

int i, n; char numstr[20]; /* บรรทัดที่ 7 */

clrscr( ); /* บรรทัดที่ 8 */

printf("Enter Total of Province (n<100) : " ); /* บรรทัดที่ 9 */

n = atoi(gets(numstr)); /* บรรทัดที่ 10 */

for( i=0; i<n; i++) { /* บรรทัดที่ 11 */

printf("\nEnter your Province : "); /* บรรทัดที่ 12 */

gets( province[i] ) ; /* บรรทัดที่ 13 */

} /* บรรทัดที่ 14 */

for( i=0; i<n; i++) /* บรรทัดที่ 15 */

printf("\nYour Province is %s", province[i]); /* บรรทัดที่ 16 */

getch(); /* บรรทัดที่ 17 */

} /* end main */ /* บรรทัดที่ 18 */

ผลลัพธ์ที่ได้จากโปรแกรม

คำอธิบายโปรแกรม

จากโปรแกรมตัวอย่างที่ 5.4 สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังนี้

บรรทัดที่ 3 คำสั่ง #include <stdlib.h> ให้การสนับสนุนฟังก์ชัน atoi( ) เพื่อเปลี่ยนข้อมูลสตริงเป็นชนิดจำนวนเต็ม ซึ่งเรียกใช้ฟังก์ชันนี้ ในบรรทัดที่ 10

บรรทัดที่ 11 คำสั่ง for เพื่อนำค่าสตริงที่รับเข้ามาไปเก็บไว้ในตัวแปรชุด province[i] ในคำสั่งบรรทัดที่ 13

บรรทัดที่ 15 คำสั่ง for เพื่อนำค่าสตริงที่เก็บไว้ในตัวแปร province[i] ออกแสดงที่จอภาพ ตามคำสั่ง บรรทัดที่ 16

บรรทัดที่ 17 หยุดรอรับค่าใด ๆ จากคีย์บอร์ด ซึ่งถ้าเรากด enter ก็จะกลับสู่โปรแกรม

 

 

 

 

บทที่ 5

ตัวแปรชุดและสตริง 

ในบทที่ผ่านมาหลายบทก่อนหน้านี้ได้พูดถึงตัวแปรชนิดต่าง ๆ หลายชนิด สำหรับเนื้อหาในบทนี้ จะได้เรียนรู้เกี่ยวกับตัวแปรอีกชนิดหนึ่งนั่นคือตัวแปรชุด (arrays) และเนื้อหาเกี่ยวกับสตริง (string) ซึ่งเป็นพื้นฐานที่สำคัญในการจัดเก็บข้อมูลและโครงสร้างของข้อมูลโดยเฉพาะอย่างยิ่งตัวแปรชุดมีประโยชน์หลายประการดังนี้

1) ช่วยลดการตั้งชื่อซ้ำ ๆ กัน เช่น ต้องการเก็บค่าตัวเลขจำนวนเต็ม 100 ตัว ถ้าไม่มีการใช้ตัวแปรชุด เราจะต้องประกาศตัวแปรถึง 100 ตัว ดังนี้

int k1, k2, k3, …, k100; /* ประกาศตัวแปร k1, k2, k3, …, k100 จำนวน 100 ตัว */ แต่ถ้าเราใช้ตัวแปรชุดมาช่วยในการเก็บข้อมูลตัวเลขชุดนี้ เราสามารถเก็บตัวเลข 100 ตัวนี้ไว้ในชื่อเดียวกัน แต่มีตัวเลข subscript คอยกำกับเพื่อบ่งบอกถึงลำดับที่ของข้อมูลในตัวแปรได้

int k[100]; /* ประกาศตัวแปรชุด 1 ตัว คือชื่อตัวแปร k */

2) ช่วยในการจัดเก็บข้อมูลแบบตาราง (table) โดยสามารถใช้ตัวแปรชุด 2 มิติ มาเก็บข้อมูลได้

3) ช่วยในการเขียนโปรแกรมมีประสิทธิภาพมากขึ้น เนื่องจากในโปรแกรมที่มีการใช้ตัวแปรชุดจะมีตัวแปรน้อยลง ช่วยในการจัดเรียงข้อมูล และค้นหาข้อมูลได้สะดวกและรวดเร็ว

5.1 ตัวแปรชุด (arrays variables)

ตัวแปรชุด คือ ตัวแปรชนิดหนึ่งที่ใช้ชื่อเพียงชื่อเดียวแต่มีตัวเลขแสดงตำแหน่งกำกับไว้ (subscript) เพื่อเป็นการบอกว่าเป็นสมาชิกของตัวแปรชุดตัวที่เท่าไหร

5.1.1 ประเภทของตัวแปรชุด มีดังนี้ 

1) ตัวแปรชุด 1 มิติ (one dimension arrays หรือ single dimension arrays) ตัวแปรชุด 1 มิติ คือ ตัวแปรชุดที่มีตัวเลขกำกับ (subscript) เพียง 1 ตัว เช่น a[20], b[100], name[30] และ salary[20] เป็นต้น

2) ตัวแปรชุดหลายมิติ (multi-dimension arrays) ตัวแปรชุดหลายมิติ คือ ตัวแปรชุดที่มีตัวเลขกำกับ (subscript) ตั้งแต่ 2 ตัวขึ้นไป โดยมากจะสนใจศึกษาตัวแปรชุดที่มีตัวเลขกำกับ 2 ตัว และ 3 ตัว ดังนี้ 

ตัวแปรชุด 2 มิติ (two dimension arrays) คือ ตัวแปรชุดที่มีตัวเลขกำกับ (subscript) เพียง 2 ตัว เช่น a[2][4], b[3][4], name[5][30] เป็นต้น

ตัวแปรชุด 3 มิติ (three dimension arrays) คือ ตัวแปรชุดที่มีตัวเลขกำกับ (subscript) เพียง 3 ตัว เช่น a[2][3][4], b[3][4][5] เป็นต้น

5.1.2 การประกาศตัวแปรชุด (declaration of arrays) สามารถทำได้ดังนี้ 

1) การประกาศตัวแปรชุด 1 มิติ (declaration of one dimension arrays) 

โดยที่

type คือ ชนิดของตัวแปรชุด เช่น int, float, char, double เป็นต้น

arrayname คือ ชื่อตัวแปรชุด ตั้งขึ้นตามหลักการตั้งชื่อตัวแปร

size คือ ขนาดของตัวแปรชุดเป็นตัวเลขจำนวนเต็ม

ตัวอย่างการประกาศตัวแปรชุด 1 มิติ

ตัวอย่างที่ 5.1 int s[20]; ภายในหน่วยความจำจะมีการจองเนื้อที่ไว้ดังนี้

การจองเนื้อที่ใช้ช่องละ 2 bytes 20 ช่อง รวมกันทั้งหมดใช้เนื้อที่ 40 bytes

ตัวอย่างที่ 5.2 char p[20]; ภายในหน่วยความจำจะมีการจองเนื้อที่ไว้ดังนี้

การจองเนื้อที่ใช้ช่องละ 1 bytes 20 ช่อง รวมกันทั้งหมดใช้เนื้อที่ 20 bytes

ตัวอย่างที่ 5.3 float t[20]; ภายในหน่วยความจำจะมีการจองเนื้อที่ไว้ดังนี้

การจองเนื้อที่ใช้ช่องละ 4 bytes 20 ช่อง รวมกันทั้งหมดใช้เนื้อที่ 80 bytes

2) การประกาศตัวแปรชุด 2 มิติ (declaration of two dimension arrays) 

โดยที่ 

type คือ ชนิดของตัวแปรชุด เช่น int, float, char, double เป็นต้น

arrayname คือ ชื่อตัวแปรชุด ตั้งขึ้นตามหลักการตั้งชื่อตัวแปร

n คือ ตัวเลขที่ใช้แสดงตำแหน่งแถว (row) มีค่าตั้งแต่ 0, 1, 2, …, n-1

m คือ ตัวเลขที่ใช้แสดงตำแหน่งคอลัมน์ (column) มีค่าตั้งแต่ 0, 1, 2, …, m-1

ตัวอย่างการประกาศตัวแปรชุด 2 มิติ

ตัวอย่างที่ 5.4 int r[3][2]; ภายในหน่วยความจำจะมีการจองเนื้อที่ไว้ดังนี้

การจองเนื้อที่ของตัวแปรชุด 2 มิติ จะมีลักษณะเป็นตาราง (table) มีจำนวนแถว n = 0, 1, 2 และมีจำนวนคอลัมน์ m = 0, 1 โดยที่ในตารางจะมีลักษณะเป็นช่อง ๆ ซึ่งแต่ละช่องก็คือพื้นที่ของสมาชิกแต่ละตัว โดยใช้เนื้อที่ช่องละ 2 bytes มีสมาชิกทั้งหมด 6 ตัว ดังนั้นใช้เนื้อที่ทั้งหมด 12 bytes 

วิธีการหาจำนวนสมาชิกทั้งหมดของตัวแปรชุด 1 มิติ และ 2 มิติ

การหาจำนวนสมาชิกทั้งหมดของตัวแปรชุด สามารถคำนวณได้จากสูตรดังนี้

กรณีตัวแปรชุด 1 มิติ

จำนวนสมาชิกทั้งหมดของตัวแปรชุด = ขนาดของตัวแปรชุด (size)

กรณีตัวแปรชุด 2 มิติ

จำนวนสมาชิกทั้งหมดของตัวแปรชุด = n*m

จากตัวอย่าง int r[3] [2]; จะได้ว่า n = 3, m = 2 ดังนั้น จำนวนสมาชิกของตัวแปรชุด = 3*2 = 6 แสดงว่าตัวแปรชุดนี้มีสมาชิกดังนี้ r[0][0], r[0][1], r[n-1][m-1] รวมทั้งหมด 6 สมาชิก

ตัวอย่างที่ 5.5 float X[5] [4]; ภายในหน่วยความจำจะมีการจองเนื้อที่ไว้ดังนี้

การจองเนื้อที่จะมีลักษณะเป็นตาราง (table) มีจำนวนแถว n = 0, 1, 2, 3, 4 และมีจำนวนคอลัมน์ m = 0, 1, 2, 3 โดยที่ในตารางใช้เนื้อที่ช่องละ 4 bytes มีจำนวนทั้งหมด 20 ตัว ดังนั้นใช้เนื้อทั้งหมด 80 bytes

3) การประกาศตัวแปรชุด 3 มิติ (declaration of three dimension arrays)

type arrayname [n] [m] [p];

โดยที่

type คือ ชนิดของตัวแปรชุด เช่น int, float, char, double เป็นต้น

arrayname คือ ชื่อตัวแปรชุดตั้งขึ้นตามหลักการตั้งชื่อตัวแปร 

n คือ ตัวเลขกำกับตัวที่ 1 มีค่าตั้งแต่ 0, 1, 2, …., n-1

m คือ ตัวเลขกำกับตัวที่ 2 มีค่าตั้งแต่ 0, 1, 2, …., m-1 p คือ ตัวเลขกำกับตัวที่ 3 มีค่าตั้งแต่ 0, 1, 2, …., p-1

วิธีการหาจำนวนสมาชิกทั้งหมดในตัวแปรชุด 3 มิติ หาได้จากสูตรดังนี้

จำนวนสมาชิกทั้งหมดของตัวแปรชุด = n*m*p

ตัวอย่างการประกาศตัวแปรชุด 3 มิติ float a[2][2][3]; ดังนั้น n = 2 , m = 2, p = 3 จะได้ว่าจำนวนสมาชิกทั้งหมดของตัวแปรชุด = 2*2*3 = 12 ตัว

ดังนั้นเราสามารถเขียนสมาชิกทั้งหมดของตัวแปรชุดนี้ได้ดังตาราง

Column 0 Column 1

ตัวที่ 1 ตัวที่ 2 ตัวที่ 3 ตัวที่ 1 ตัวที่ 2 ตัวที่ 3

Row 0 a[0][0][0] a[0][0][1] a[0][0][2] a[0][1][0] a[0][1][1] a[0][1][2]

Row 1 a[1][0][0] a[1][0][1] a[1][0][2] a[1][1][0] a[1][1][1] a[1][1][2]

โดยที่สมาชิกแต่ละตัวใช้เนื้อที่ตัวละ 4 bytes จำนวนสมาชิกทั้งหมดมี 12 ตัว ดังนั้นใช้เนื้อที่ทั้งหมดคือ 4*12 = 48 bytes

5.1.3 การกำหนดค่าเริ่มต้นให้กับตัวแปรชุด (initializing arrays)

1) การกำหนดค่าตัวเลขให้กับตัวแปรชุด

รูปแบบที่ 1 (กรณีตัวแปรชุด 1 มิติ)

type arrayname[size] = { value list };

รูปแบบที่ 2 (กรณีตัวแปรชุด 2 มิติ)

type arrayname[n][m] = { value list };

โดยที่

value list คือ ค่าคงที่ชนิดตัวเลขที่ต้องการกำหนดให้ตัวแปรชุด ถ้ามีหลายค่าให้ใช้เครื่องหมาย , (comma) คั่นระหว่างค่าคงที่แต่ละค่า

โดยค่าคงที่ทั้งหมดจะต้องอยู่ภายใต้เครื่องหมาย { }

ตัวอย่าง 5.6 int a[10] = {10, 20, 30, 40,50, 60, 70, 80, 90, 100};

ภายในหน่วยความจำจะเก็บตัวแปรชุดดังนี้

ตัวอย่างที่ 5.7 float p[5][3] = {

3.0, 4.5, 5.5,

4.6, 5.5, 6.5,

5.0, 6.2, 7.0,

6.3, 6.8, 7.4,

7.5, 8.0, 9.0 

};

ภายในหน่วยความจำจะเก็บตัวแปรชุดเป็นลักษณะตาราง (table) ดังนี้

โดยที่สมาชิกแต่ละตัวใช้เนื้อที่ 4 bytes ดังนั้นใช้เนื้อที่ทั้งหมด = 4*15 = 60 bytes

2) การกำหนดค่าคงที่ชนิดสตริงให้กับตัวแปรสตริง 

รูปแบบที่ 1 (กรณีตัวแปรชุด 1 มิติ)

char arrayname[size] = “string constant”;

รูปแบบที่ 2 (กรณีตัวแปรชุด 2 มิติ)

char arrayname[n][m] = {“string constant”};

โดยที่ 

string constants คือ ค่าคงที่ชนิดสตริงที่ต้องการกำหนดให้ตัวแปรชุด ถ้ามีหลายค่าจะต้องใช้เครื่องหมาย , (comma) คั่นระหว่างค่าคงที่แต่ละค่า

ตัวอย่างที่ 5.8 char s[12] = “ASIAN GAME” ;

ภายในหน่วยความจำจะเก็บข้อมูลตัวแปรชุดมีลักษณะดังนี้

null character 

ตัวอย่างที่ 5.9 char province[3][13] = {

“NAKHONPANOM” ,

“SAKON NAKHON” ,

“MOOKDAHAN” } ;

ภายในหน่วยความจำจะเก็บข้อมูลมีลักษณะดังนี้

ทั้งหมดใช้เนื้อที่ 3 x 13 = 39 bytes

การอ้างถึงสมาชิกในตัวแปรชุด 2 มิติ

เช่น

province [0] คือ สมาชิกแถวที่ 1 ทั้งแถว นั่นคือข้อมูล NAKHONPANOM

province [1] คือ สมาชิกแถวที่ 2 ทั้งแถว นั่นคือข้อมูล SAKON NAKHON province [2] คือ สมาชิกแถวที่ 3 ทั้งแถว นั่นคือข้อมูล MOOKDAHAN

province [0][0] คือ สมาชิกของ province [0] ตัวที่ 1 คือตัวอักษร N

province [1][2] คือ สมาชิกของ province [1] ตัวที่ 3 คือตัวอักษร K

5.1.4 การนำข้อมูลเข้าไปเก็บและการแสดงผลลัพธ์ของข้อมูลในตัวแปรชุด

โดยปกติเราจะใช้คำสั่ง for หรือ while หรือ do while คำสั่งใดคำสั่งหนึ่งมาช่วยในการนำข้อมูลเข้าเก็บและแสดงผลลัพธ์ข้อมูลในตัวแปรชุด ส่วนมากนิยมใช้คำสั่ง for มากกว่าคำสั่งอื่นทั้งนี้เนื่องจากตัวแปรชุดนั้นเราสามารถทราบขนาดที่แน่นอนได้ ทำให้กำหนดจำนวนรอบการทำงานได้

เพื่อความเข้าใจเกี่ยวกับการนำข้อมูลเข้าไปเก็บและการแสดงผลลัพธ์ของตัวแปรชุดมากยิ่งขึ้น ให้ศึกษาโปรแกรมตัวอย่างที่ 5.1, 5.2, 5.3 และ 5.4 ดังต่อไปนี้

โปรแกรมตัวอย่างที่ 5.1 แสดงการใช้ตัวแปรชุด 1 มิติ ชื่อ scores เก็บคะแนนนักเรียน 

/* array1.C */

#include<stdio.h> /* บรรทัดที่ 1 */

#include<conio.h> /* บรรทัดที่ 2 */

/* Record student's scores. */ /* บรรทัดที่ 3 */

main() /* บรรทัดที่ 4 */

{ /* บรรทัดที่ 5 */

int index, scores[5]; /* บรรทัดที่ 6 */

scores[0] = 59; /* บรรทัดที่ 7 */

scores[1] = 67; /* บรรทัดที่ 8 */

scores[2] = 85; /* บรรทัดที่ 9 */

scores[3] = 92; /* บรรทัดที่ 10 */

scores[4] = 74; /* บรรทัดที่ 11 */

clrscr(); /* บรรทัดที่ 12 */

for (index = 0; index < 5; index++) /* บรรทัดที่ 13 */

printf("Student's score: %d\n", scores[index]); /* end for */ /* บรรทัดที่ 14 */

getch(); /* บรรทัดที่ 15 */

return(0); /* บรรทัดที่ 16 */

} /* บรรทัดที่ 17 */

ผลลัพธ์ที่ได้จากโปรแกรม

คำอธิบายโปรแกรม 

จากโปรแกรมตัวอย่างที่ 5.1 สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังนี้

บรรทัดที่ 6 ประกาศตัวแปร index เป็นชนิดจำนวนเต็ม และ scores เป็นตัวแปรชุด 1 มิติ ชนิดจำนวนเต็มมีสมาชิก 5 ตัว

บรรทัดที่ 7 ถึง 11 กำหนค่าจำนวนเต็มให้กับตัวแปรชุด scores[0] ถึง scores[4]

บรรทัดที่ 13 คำสั่ง for ทำหน้าที่วนรอบทำงานซ้ำ 5 ครั้ง เพื่อช่วยพิมพ์คะแนนนักเรียนที่เก็บไว้ในตัวแปรชุด scores[0] ถึง scores[4]

บรรทัดที่ 14 และ 15 ฟังก์ชัน printf( ) เพื่อแสดงคะแนนของนักเรียนแต่ละคนออกที่จอภาพซึ่งเก็บไว้ในตัวแปรชุด scores[0] ถึง scores[4] หลังจากนั้นจะหยุดรอรับค่าใด ๆ จากคีย์บอร์ด ซึ่งถ้ากด enter ก็จะกลับสู่โปรแกรม

บรรทัดที่ 16 ส่งค่า 0 (ศูนย์) กลับให้กับฟังก์ชัน main( )

ข้อสังเกต ฟังก์ชัน main( ) ของโปรแกรมตัวอย่างที่ 5.1 เป็นฟังก์ชันที่ต้องการให้ส่งค่ากลับ ในการเขียนโปรแกรมจะต้องมีการใช้ฟังก์ชัน return( ) ซึ่งถ้าไม่ใช้เวลาที่เรา compile โปรแกรม จะมีคำเตือนให้เราทราบทุกครั้ง แต่โปรแกรมก็สามารถ run ได้ 

โปรแกรมตัวอย่างที่ 5.2 แสดงการใช้ตัวแปรชุด 1 มิติ สำหรับเก็บข้อมูลและนำข้อมูลในตัวแปรชุดมาคำนวณค่า พร้อมทั้งแสดงผลลัพธ์ที่ได้ออกจอภาพ

/* array2.c */

#include<stdio.h> /* บรรทัดที่ 1 */

#include<conio.h> /* บรรทัดที่ 2 */

#include<stdlib.h> /* บรรทัดที่ 3 */

void main(void) /* บรรทัดที่ 4 */ 

{ float num[100] ; /* บรรทัดที่ 5 */

float sum= 0 , average ; /* บรรทัดที่ 6 */

int i, n ; char numstr[20]; /* บรรทัดที่ 7 */

clrscr(); /* บรรทัดที่ 8 */

printf("Enter Total of number(n<100) : "); /* บรรทัดที่ 9 */

n = atoi(gets(numstr)); /* บรรทัดที่ 10 */

/* ===== Input Data ===== */ /* บรรทัดที่ 11*/

for( i=0; i<n; i++) { /* บรรทัดที่ 12 */

printf("\nEnter NUMBER #%d : ",i+1); /* บรรทัดที่ 13 */

num[i] = atof(gets(numstr)); /* บรรทัดที่ 14 */

sum=sum+num[i]; /* บรรทัดที่ 15 */

printf("\n"); /* บรรทัดที่ 16 */

} /* end for */ /* บรรทัดที่ 17 */

/* ===== Calulate MEAN ===== */ /* บรรทัดที่ 18 */

average = sum/n ; /* บรรทัดที่ 19 */

printf("N =%d\t Sum =%10.2f\n",n,sum); /* บรรทัดที่ 20 */

printf("Average = %10.2f\n",average); /* บรรทัดที่ 21 */

getch(); /* บรรทัดที่ 22 */

} /* end main */ /* บรรทัดที่ 23 */

ผลลัพธ์ที่ได้จากโปรแกรม

คำอธิบายโปรแกรม

จากโปรแกรมตัวอย่างที่ 5.2 สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังน

บรรทัดที่ 3 คำสั่ง #include <stdlib.h> ให้การสนับสนุนฟังก์ชัน atoi( ) และฟังก์ชัน atof( ) สำหรับโปรแกรมนี้ ในบรรทัดที่ 10 และ 14 ตามลำดับ

บรรทัดที่ 5 ประกาศตัวแปร num เป็นตัวแปรชุด 1 มิติ ชนิด float มีสมาชิก 100 ตัว

บรรทัดที่ 7 ประกาศตัวแปร numstr เป็นตัวแปรชุด 1 ติ ชนิด char มีสมาชิก 20 ตัว

บรรทัดที่ 10 ฟังก์ชัน atoi( ) ใช้เปลี่ยน string เป็นตัวเลขจำนวนเต็ม จากฟังก์ชัน gets( ) รับตัวอักขระมาเก็บไว้ในตัวแปร numstr แล้วเปลี่ยนค่า string ของตัวแปร numstr ไปเก็บไว้ในตัวแปร n โดยใช้ฟังก์ชัน atoi( )

บรรทัดที่ 12 คำสั่ง for ช่วยในการเก็บข้อมูลไว้ในตัวแปรชุด num ซึ่งมีจำนวนรอบของการทำงานเท่ากับจำนวนสมาชิกของตัวแปรชุด คือ n รอบ

บรรทัดที่ 14 ฟังก์ชัน atof( ) ใช้เปลี่ยน string เป็นตัวเลขทศนิยม ซึ่งมีการทำงานคล้ายกับฟังก์ชัน atoi( ) ในบรรทัดที่ 10

บรรทัดที่ 15 คำสั่ง sum = sum + num[i]; เป็นการบวกสะสมค่าตัวแปรชุด

บรรทัดที่ 18 ถึง 21 คำสั่ง average = sum/n; เป็นการคำนวณค่าเฉลี่ยของตัวแปรชุด แล้วแสดงผลค่าตัวแปร n ตัวแปร sum และตัวแปร average ออกจอภาพ 

บรรทัดที่ 22 หยุดรอรับค่าใด ๆ จากคีย์บอร์ด ซึ่งถ้าเรากด enter ก็จะกลับสู่โปรแกรม

โปรแกรมตัวอย่างที่ 5.3 แสดงการใช้ตัวแปรชุด 2 มิติ สำหรับเก็บคะแนนและคำนวณค่าเฉลี่ยของคะแนนในแต่ละชุดแสดงผลออกจอภาพ

/* array3.C */

#include<stdio.h> /* บรรทัดที่ 1 */

#include<conio.h> /* บรรทัดที่ 2 */

/* Record student's score */

main() /* บรรทัดที่ 3 */

{ /* บรรทัดที่ 4 */

int i, j, sum, scores[3][5] = { /* บรรทัดที่ 5 */

{ 84 , 71 , 96 , 65 , 79 }, /* บรรทัดที่ 6 */

{ 90 , 55 , 83 , 68 , 96 }, /* บรรทัดที่ 7 */

{ 61 , 77 , 82 , 94 , 59 } /* บรรทัดที่ 8 */

}; /* บรรทัดที่ 9 */

clrscr(); /* บรรทัดที่ 10 */

for (i = 0; i < 3; i++){ /* loop over tests. */ /* บรรทัดที่ 11 */

for (j = 0, sum = 0; j < 5; j++) /* บรรทัดที่ 12 */

sum = sum + scores[i][j]; /* บรรทัดที่ 13 */

printf("Average for test %d is %f.\n", i, (float) sum / 5); /* บรรทัดที่ 14 */

} /* end for */ /* บรรทัดที่ 15 */

getch(); /* บรรทัดที่ 16 */

return(0); /* บรรทัดที่ 17 */

} /* บรรทัดที่ 18 */

ผลลัพธ์ที่ได้จากโปรแกรม

คำอธิบายโปรแกรม

จากโปรแกรมตัวอย่างที่ 5.3 สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังนี้

บรรทัดที่ 5 ถึง 9 ประกาศตัวแปรชุด 2 มิติ ชนิดจำนวนเต็มของตัวแปรชื่อ scores มีจำนวนสมาชิกทั้งหมด 15 ตัว

บรรทัดที่ 11 คำสั่ง for เพื่อตรวจสอบว่า loop เกินจำนวนรอบ คือ แถวของตัวแปรชุดหรือไม่

บรรทัดที่ 12 คำสั่ง for เพื่อนำคะแนนที่เก็บในตัวแปรชุดทั้ง 15 ตัวมารวมกัน ในคำสั่งบรรทัดที่ 13

บรรทัดที่ 14 พิมพ์คะแนนเฉลี่ยของนักเรียนทั้ง 5 คน ในการสอบแต่ละครั้ง โดยที่ (float) sum/5 เป็นการทำให้ตัวแปร sum เป็นจำนวนทศนิยมชั่วคราว เพราะปกติเราประกาศตัวแปร sum เป็นชนิดจำนวนเต็ม

บรรทัดที่ 15 หยุดรอรับค่าใด ๆ จากคีย์บอร์ด ซึ่งถ้าเรากด enter ก็จะกลับสู่โปรแกรม

โปรแกรมตัวอย่างที่ 5.4 แสดงการใช้ตัวแปรชุด 2 มิติ สำหรับเก็บชื่อจังหวัด แล้วนำข้อมูลมาแสดงออกที่จอภาพ

/* array4.c */

#include<stdio.h> /* บรรทัดที่ 1 */

#include<conio.h> /* บรรทัดที่ 2 */

#include<stdlib.h> /* บรรทัดที่ 3 */

void main(void) /* บรรทัดที่ 4 */

{ /* บรรทัดที่ 5 */

char province[100][40]; /* บรรทัดที่ 6 */

int i, n; char numstr[20]; /* บรรทัดที่ 7 */

clrscr( ); /* บรรทัดที่ 8 */

printf("Enter Total of Province (n<100) : " ); /* บรรทัดที่ 9 */

n = atoi(gets(numstr)); /* บรรทัดที่ 10 */

for( i=0; i<n; i++) { /* บรรทัดที่ 11 */

printf("\nEnter your Province : "); /* บรรทัดที่ 12 */

gets( province[i] ) ; /* บรรทัดที่ 13 */

} /* บรรทัดที่ 14 */

for( i=0; i<n; i++) /* บรรทัดที่ 15 */

printf("\nYour Province is %s", province[i]); /* บรรทัดที่ 16 */

getch(); /* บรรทัดที่ 17 */

} /* end main */ /* บรรทัดที่ 18 */

ผลลัพธ์ที่ได้จากโปรแกรม

คำอธิบายโปรแกรม

จากโปรแกรมตัวอย่างที่ 5.4 สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังนี้

บรรทัดที่ 3 คำสั่ง #include <stdlib.h> ให้การสนับสนุนฟังก์ชัน atoi( ) เพื่อเปลี่ยนข้อมูลสตริงเป็นชนิดจำนวนเต็ม ซึ่งเรียกใช้ฟังก์ชันนี้ ในบรรทัดที่ 10

บรรทัดที่ 11 คำสั่ง for เพื่อนำค่าสตริงที่รับเข้ามาไปเก็บไว้ในตัวแปรชุด province[i] ในคำสั่งบรรทัดที่ 13

บรรทัดที่ 15 คำสั่ง for เพื่อนำค่าสตริงที่เก็บไว้ในตัวแปร province[i] ออกแสดงที่จอภาพ ตามคำสั่ง บรรทัดที่ 16

บรรทัดที่ 17 หยุดรอรับค่าใด ๆ จากคีย์บอร์ด ซึ่งถ้าเรากด enter ก็จะกลับสู่โปรแกรม

 

 

 

 

5.2 ค่าคงที่สตริงและตัวแปรสตริง (string constants and string variables)

ค่าคงที่สตริง คือ ตัวอักขระ (characters) ใด ๆ ที่เขียนอยู่ภายใต้เครื่องหมาย “ “ (double quotation) เช่น “Greeting!” , ”Hello, ” ”SA-WAS-DEE” , “4567” , “123.45” เป็นต้น

ตัวแปรสตริง คือ ตัวแปรชุดที่เก็บค่าคงที่ชนิดสตริง โดยมีชนิดของตัวแปรชุดเป็น char เช่น char name[30]=”KANNIKAR”; หรือ char strnum[10]=”12345”; เป็นต้น

สำหรับการเก็บค่าคงที่ชนิดสตริงไว้ในตัวแปรสตริงภายในหน่วยความจำนั้น จะเก็บเรียงกันไปทีละตัวอักขระ โดยใช้เนื้อที่ 1 byte ต่อการเก็บตัวอักษร 1 ตัว และใน byte สุดท้ายสตริงจะมีการเก็บ \0 (null character) ไว้เพื่อเป็นการบอกให้ compiler รู้ว่าหมดข้อมูลที่เก็บไว้แล้ว

5.2.1 การประกาศตัวแปรสตริง 1 มิติ

เนื่องจากตัวแปรสตริง คือตัวแปรชุดที่มีชนิดเป็น char ดังนั้นจึงสามารถประกาศตัวแปรสตริงได้ดังนี้

char stringname[size];

หรือ

char stringname[size] = “string constant”;

โดยที่

stringname คือ ชื่อตัวแปรสตริง ตั้งขึ้นตามหลักการตั้งชื่อตัวแปร

string constant คือ ค่าคงที่ชนิดสตริง โดยต้องเขียนอยู่ภายใต้เครื่องหมาย “ “ เสมอ

size คือ ขนาดของตัวแปรสตริง ควรกำหนดให้เนื้อที่ทั้งหมดที่ใช้เก็บข้อมูลมีขนาดเกินค่าคงที่สตริงที่ยาวที่สุดไปอย่างน้อย 1 byte ในทางปฏิบัตินิยมกำหนดขนาดให้มาก ๆ ไว้ก่อน ส่วนจะใช้เนื้อที่ครบทั้งหมดหรือไม่ ไม่มีผลอะไรในโปรแกรม

ตัวอย่างการประกาศตัวแปรสตริง 1 มิติ

1) char name[26]; /* ประกาศตัวแปรสตริง name มีขนาด 26 bytes */

2) char name[26], address[41];

/* ประกาศตัวแปรสตริง name มีขนาด 26 bytes และตัวแปรสตริง address มีขนาด 41 bytes ตามลำดับ */

3) char str[9] = “COMPUTER”; 

/* ประกาศตัวแปรสตริง str มีขนาด 9 bytes และกำหนดข้อความให้สตริง */

แต่ถ้าเราเขียนคำสั่งเป็น char str[8] = “COMPUTER”; จะเกิด error ขึ้นเพราะความกว้างของตัว แปรสตริงน้อยกว่าคงที่สตริงอยู่ 1 byte ดังนั้นจะต้องกำหนดขนาดให้เกินค่าคงที่สตริงไว้อย่างน้อย 1 byte เสมอ

4) char city[80] = “Bangkok, Thailand”;

/* ประกาศตัวแปรสตริง city มีขนาด 80 bytes และกำหนดข้อความให้สตริง */

5.2.2 การประกาศตัวแปรสตริง 2 มิติ

char stringname[n][m] 

หรือ

char stringname[n][m] = {“string constant1”,

“string constant2 “,...,”string constanN };

โดยที่

stringname คือ ชื่อตัวแปรสตริง ตั้งขึ้นตามหลักการตั้งชื่อตัวแปร

n, m คือ จำนวนแถวและจำนวนคอลัมน์ตามลำดับ

string constant1, string constant2,…., string constantN คือ ค่าคงที่ชนิดสตริงตัวที่ 1, 2, …., N ตามลำดับ ซึ่งจะต้องเขียนอยู่ภายใต้เครื่องหมาย “….” เสมอ

ตัวอย่างการประกาศตัวแปรสตริง 2 มิติ

char name[3] [20]; 

/* ตัวแปรสตริง name 2 มิติ มีขนาด 3*20 = 60 bytes*/ 

2) char name[3] [20] = {“KANNIKAR”,”SURAPORN”,”THAITANA”};

/* ประกาศตัวแปรสตริง name 2 มิติ มีขนาด 3*20 = 60 bytes และกำหนดค่าสตริง KANNIKAR, SURAPORN และ THAITANA ให้กับตัวแปรสตริง name[0], name[1] และ name[2] ตามลำดับ */

 5.3 ฟังก์ชันที่ใช้งานเกี่ยวกับสตริง (string functions)

นภาษา C มีฟังก์ชันที่ใช้จัดการเกี่ยวกับค่าคงที่สตริง และตัวแปรสตริงอยู่หลายฟังก์ชันดังนี้

• ฟังก์ชัน strlen( )

• ฟังก์ชัน strcmp( )

• ฟังก์ชัน strcpy( )

• ฟังก์ชัน strcat( )

โดยก่อนที่จะใช้ฟังก์ชันเหล่านี้จะต้องมีการใช้คำสั่ง # include<string.h> เข้ามาในโปรแกรมด้วยจึงจะสามารถทำงานได้

5.3.1 ฟังก์ชัน strlen( )

strlen( ) เป็นฟังก์ที่ใช้นับความยาวของค่าคงที่สตริง หรือตัวแปรสตริง

รูปแบบการใช้ 

strlen(string variable);

หรือ

strlen(“string constant”);

โดยที่ 

string variable และ string constant คือ ตัวแปรสตริง และค่าคงที่สตริง ตามลำดับ ใช้อย่างใดอย่างหนึ่งเท่านั้น

เช่น strlen(“computer”); หรือ char name[20]= “KANNIKAR” ; strlen(name); เป็นต้น

ลักษณะของฟังก์ชัน strlen( ) นี้เป็นฟังก์ชันที่มีการส่งค่ากลับเป็นตัวเลขจำนวนเต็ม (integer) มายังชื่อฟังก์ชัน ดังนั้นจึงนิยมกำหนดตัวแปรชนิด int ขึ้นมา 1 ตัว เพื่อเก็บค่าความยาวของสตริงเอาไว้

เช่น 

int n;

char s[80]= “BANGKOK, THAILAND” ;

n=strlen(s); /* กำหนดค่าความยาวของสตริงส่งกลับให้ตัวแปร n */

เพื่อความเข้าใจเกี่ยวกับการทำงานของฟังก์ชัน strlen( ) ได้ดียิ่งขึ้นควร ศึกษาโปรแกรมตัวอย่างที่ 5.5 ดังต่อไปนี้

โปรแกรมตัวอย่างที่ 5.5 

/* strlen.c */

#include<stdio.h> /* บรรทัดที่ 1 */

#include<conio.h> /* บรรทัดที่ 2 */

#include<string.h> /* บรรทัดที่ 3 */

void main(void) /* บรรทัดที่ 4 */

{ /* บรรทัดที่ 5 */

int n; /* บรรทัดที่ 6 */

char s[81]; /* บรรทัดที่ 7 */

clrscr( ); /* บรรทัดที่ 8 */

printf("Enter your string : "); /* บรรทัดที่ 9 */

gets(s); /* บรรทัดที่ 10 */

n = strlen(s); /* บรรทัดที่ 11 */

printf("\nYour string is %s\n", s); /* บรรทัดที่ 12 */

printf("Length of string is %d", n); /* บรรทัดที่ 13 */

getch(); /* บรรทัดที่ 14 */

} /* บรรทัดที่ 15 */

ผลลัพธ์ที่ได้จากโปรแกรม

คำอธิบายโปรแกรม

จากโปรแกรมตัวอย่างที่ 5.5 สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังนี้

บรรทัดที่ 3 คำสั่ง #incluce <string.h> ในโปรแกรมตัวอย่างนี้ ให้การสนับสนุนฟังก์ชัน strlen( ) สำหรับหาความยาวของตัวแปรสตริง ในบรรทัดที่ 11

บรรทัดที่ 10 คำสั่ง gets(s); เป็นการรับข้อมูลสตริงไปเก็บไว้ในตัวแปรสตริง s ซึ่งตัวแปรสตริง s ได้ประกาศไว้ในบรรทัดที่ 7

บรรทัดที่ 11 คำสั่ง n = strlen(s); เป็นการกำหนดค่าความยาวของสตริง s ให้เก็บความยาวไว้ที่ตัวแปร n

บรรทัดที่ 12 ถึง 13 แสดงสตริงและความยาวของสตริงที่หาได้ ออกแสดงที่จอภาพ 

บรรทัดที่ 14 หยุดรอรับค่าใด ๆ จากคีย์บอร์ด ซึ่งถ้าเรากด enter ก็จะกลับสู่โปรแกรม

5.3.2 ฟังก์ชัน strcmp( )

strcmp( ) เป็นฟังก์ชันที่ใช้เปรียบเทียบข้อมูลชนิดสตริง 2 ค่า ว่ามีค่าเท่ากัน หรือมากกว่า หรือน้อยกว่าอย่างใดอย่างหนึ่ง ซึ่งการเปรียบเทียบสตริงจะใช้ค่ารหัส ASCII เปรียบเทียบทีละตัวอักขระ

รูปแบบการใช้ 

strcmp(str1var, str2var);

หรือ

strcmp(str1constant, str2constant);

โดยที่

str1var, str2var คือตัวแปรสตริงตัวที่ 1 และ 2 ตามลำดับ

Str1constant, str2constant คือ ค่าคงที่สตริงค่าที่ 1 และ 2 ตามลำดับ

ผลการเปรียบเทียบระหว่าง str1constant, และ str2constant มีดังนี้ 

ถ้า str1constant > star2constant จะได้ค่ามากกว่าศูนย์

ถ้า str1constant < star2constant จะได้ค่าน้อยกว่าศูนย์

ถ้า str1constant = star2constant จะได้ค่าเท่ากับศูนย์

โดยค่าที่ได้จากการเปรียบเทียบนี้เป็นตัวเลขจำนวนเต็มจะถูกส่งกลับมาเก็บไว้ที่ชื่อฟังก์ชัน strcmp( )

เพื่อความเข้าใจเกี่ยวกับการทำงานของฟังก์ชัน strcmp( ) ได้ดียิ่งขึ้นควรศึกษาโปรแกรมตัวอย่างที่ 5.6 ดังต่อไปนี้

โปรแกรมตัวอย่างที่ 5.6 แสดงการใช้ฟังก์ชัน strcmp( ) เพื่อเปรียบเทียบข้อมูลชนิดสตริง 2 ค่า ซึ่งมีค่ามากกว่าหรือน้อยกว่าอย่างใดอย่างหนึ่ง

/* strcmp.c */

#include<stdio.h> /* บรรทัดที่ 1 */

#include<conio.h> /* บรรทัดที่ 2 */

#include<string.h> /* บรรทัดที่ 3 */

void main(void) /* บรรทัดที่ 4 */

{ /* บรรทัดที่ 5 */

char str1[80], str2[80]; /* บรรทัดที่ 6 */

clrscr(); /* บรรทัดที่ 7 */

printf("Enter string1: "); /* บรรทัดที่ 8 */

gets(str1); /* บรรทัดที่ 9 */

printf("\nEnter string2: "); /* บรรทัดที่ 10 */

gets(str2); /* บรรทัดที่ 11 */

if( strcmp(str1, str2) > 0 ) /* บรรทัดที่ 12 */

printf("\n%s is greater than %s (ASCII code)", str1, str2); /* บรรทัดที่ 13 */

else if( strcmp(str1,str2) == 0 ) /* บรรทัดที่ 14 */

printf("\n%s is equal to %s (ASCII code)", str1, str2); /* บรรทัดที่ 15 */

else /* บรรทัดที่ 16 */

printf("\n%s is less than %s (ASCII code)", str1, str2); /* บรรทัดที่ 17 */

getch(); /* บรรทัดที่ 18 */

} /* บรรทัดที่ 19 */ 

ผลลัพธ์ที่ได้จากโปรแกรม

คำอธิบายโปรแกรม

จากโปรแกรมตัวอย่างที่ 5.6 สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังนี้

บรรทัดที่ 3 คำสั่ง #include <string.h> ในโปรแกรมตัวอย่างนี้ ให้การสนับสนุนฟังก์ชัน strcmp( ) สำหรับเปรียบเทียบข้อมูลชนิดสตริง 2 ค่า

บรรทัดที่ 12 เป็นการตรวจสอบค่า str1> str2 หรือไม่ โดยใช้ฟังก์ชัน strcmp( ) ในบรรทัดที่ 12 และ 14 (หรือค่าที่ได้จากฟังก์ชัน strcmp( ) > 0 หรือไม่) ซึ่งถ้าใช่ก็ให้พิมพ์ข้อความบอก

บรรทัดที่ 14 เป็นการตรวจสอบค่า str1 == str2 หรือไม่ โดยใช้ฟังก์ชัน strcmp( ) (หรือค่าที่ได้จากฟังก์ชัน strcmp( ) == 0 หรือไม่) ซึ่งถ้าใช่ก็ให้พิมพ์ข้อความบอก

บรรทัดที่ 15 และ 17 ถ้าไม่ใช่ทั้ง 2 กรณีที่กล่าวมาแสดงว่าค่าสตริงที่ตรวจสอบนั้น สตริงตัวแรกมีค่าน้อยกว่าสตริงตัวที่สอง ก็ให้พิมพ์ข้อความบอก

บรรทัดที่ 15 หยุดรอรับค่าใด ๆ จากคีย์บอร์ด ซึ่งถ้าเรากด enter ก็จะกลับสู่โปรแกรม

ข้อสังเกต ฟังก์ชัน strcmp( ) จะเปรียบเทียบสตริงด้วยค่ารหัส ASCII โดยเปรียบเทียบทีละตัวอักขระ

5.3.3 ฟังก์ชัน strcpy( )

strcpy( ) เป็นฟังก์ชันที่ใช้คัดลอกข้อมูลจาก string ค่าหนึ่งไปยัง string อีกค่าหนึ่ง

รูปแบบที่ใช้

strcpy(str2, str1);

โดยที่ 

str1 คือ ค่าคงที่สตริง หรือค่าตัวแปรสตริงที่ต้องการคัดลอก

str2 คือ ตัวแปรสตริงที่ใช้เก็บค่าที่คัดลอกมาจาก str1

เช่น char s1[80], s2[80];

strcpy(s1,”Computer”);

strcpy(s2,s1); 

เพื่อความเข้าใจเกี่ยวกับการทำงานของฟังก์ชัน strcpy( ) ได้ดียิ่งขึ้น ควรศึกษาโปรแกรมตัวอย่างที่ 5.7 ดังต่อไปนี้

โปรแกรมตัวอย่างที่ 5.7 แสดงการใช้ฟังก์ชัน strcpy( ) เพื่อคัดลอกข้อมูลจาก string ค่าหนึ่งไปยัง string อีกค่าหนึ่ง

/* strcpy.c */

#include<stdio.h> /* บรรทัดที่ 1 */

#include<conio.h> /* บรรทัดที่ 2 */

#include<string.h> /* บรรทัดที่ 3 */

void main(void) /* บรรทัดที่ 4 */

{ /* บรรทัดที่ 5 */

char str1[80], str2[80]; /* บรรทัดที่ 6 */

clrscr(); /* บรรทัดที่ 7 */

strcpy(str1,"Hello, Thailand"); /* บรรทัดที่ 8 */

strcpy(str2,str1); /* บรรทัดที่ 9 */

printf("String1 = String2 = %s",str2); /* บรรทัดที่ 10 */

getch(); /* บรรทัดที่ 11 */

} /* บรรทัดที่ 12 */

ผลลัพธ์ที่ได้จากโปรแกรม

คำอธิบายโปรแกรม

จากโปรแกรมตัวอย่างที่ 5.7 สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังนี้

บรรทัดที่ 3 คำสั่ง #include <string.h> ในโปรแกรมตัวอย่างนี้ ให้การสนับสนุนฟังก์ชัน strcpy( ) สำหรับคัดลอกข้อมูลจาก string ค่าหนึ่งไป string อีกค่าหนึ่ง ในบรรทัดที่ 8 และ 9

บรรทัดที่ 8 ฟังก์ชัน strcpy( ) คัดลอกข้อความคำว่า Hello, Thailand ไปเก็บไว้ในตัวแปร str1

บรรทัดที่ 9 ฟังก์ชัน strcpy( ) คัดลอกข้อความในตัวแปร str1 ไปเก็บไว้ในตัวแปร 

str2

บรรทัดที่ 10 แสดงข้อความที่เก็บในตัวแปร str2 แสดงที่จอภาพ

บรรทัดที่ 11 หยุดรอรับค่าใด ๆ จากคีย์บอร์ด ซึ่งถ้ากด enter ก็จะกลับสู่โปรแกรม

5.3.4 ฟังก์ชัน strcat( )

strcat( ) เป็นฟังก์ชันที่ใช้เชื่อมค่าคงที่ชนิดสตริง 2 ค่า เข้าด้วยกัน โดยผลลัพธ์จะเก็บเอาไว้ในตัวแปรสตริงตัวแรกเสมอ

รูปแบบการใช้ 

strcat(str1,str2);

โดยที่ 

str1 คือ ตัวแปรสตริงตัวที่ 1 ใช้เก็บผลลัพธ์ของการเชื่อมสตริงทั้ง 2 ตัว

str2 คือ ตัวแปรสตริงตัวที่ 2 หรือค่าคงที่สตริงก็ได้

เพื่อความเข้าใจเกี่ยวกับการทำงานของฟังก์ชัน strcat( ) ได้ดียิ่งขึ้นควรศึกษาโปรแกรมตัวอย่างที่ 5.8 ดังต่อไปนี้ 

โปรแกรมตัวอย่างที่ 5.8 แสดงการใช้ฟังก์ชัน strcat( ) เพื่อเชื่อมค่าคงที่สตริง 2 ค่าเข้าด้วยกัน

/* strcat.c */

#include<stdio.h> /* บรรทัดที่ 1 */

#include<conio.h> /* บรรทัดที่ 2 */

#include<string.h> /* บรรทัดที่ 3 */

void main(void) /* บรรทัดที่ 4 */

{ /* บรรทัดที่ 5 */

char str1[80], str2[80]; /* บรรทัดที่ 6 */

clrscr(); /* บรรทัดที่ 7 */

strcpy(str1, "Computer Programming Language 1"); /* บรรทัดที่ 8 */

strcpy(str2, " is your course... "); /* บรรทัดที่ 9 */

printf("%s", strcat(str1, str2) ); /* บรรทัดที่ 10 */

getch(); /* บรรทัดที่ 11 */

} /* บรรทัดที่ 12 */

ผลลัพธ์ที่ได้จากโปรแกรม

คำอธิบายโปรแกรม

จากโปรแกรมตัวอย่างที่ 5.8 สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังนี้

บรรทัดที่ 3 คำสั่ง #include <string.h> ในโปรแกรมตัวอย่างนี้ ให้การสนับสนุนฟังก์ชัน strcpy( ) และฟังก์ชัน strcat( ) สำหรับเชื่อมค่าสตริง 2 ค่าเข้าด้วยกัน ในบรรทัดที่ 8, 9 และ 10

บรรทัดที่ 8 ฟังก์ชัน strcpy( ) คัดลอกข้อความคำว่า Computer Programming Language 1 ไปเก็บไว้ในตัวแปร str1

บรรทัดที่ 9 ฟังก์ชัน strcpy( ) คัดลอกข้อความคำว่า is your course... ไปเก็บไว้ในตัวแปร str2

บรรทัดที่ 10 ใช้ฟังก์ชัน strcat( ) เพื่อเชื่อมต่อค่าคงที่ชนิดสตริง ในตัวแปร str1 และ str2 เข้าด้วยกัน แล้วแสดงผลออกจอภาพ ด้วยฟังก์ชัน printf( )

บรรทัดที่ 11 หยุดรอรับค่าใด ๆ จากคีย์บอร์ด ซึ่งถ้าเรากด enter ก็จะกลับสู่โปรแกรม

 

5.4 สรุปท้ายบท

ตัวแปรชุด คือ ตัวแปรชนิดหนึ่งที่ใช้ชื่อเพียงชื่อเดียวแต่มีตัวเลขแสดงตำแหน่งกำกับไว้ (subscript) เพื่อเป็นการบอกว่าเป็นสมาชิกของตัวแปรชุดตัวที่เท่าไหร

ค่าคงที่สตริง คือ ตัวอักขระ (characters) ใด ๆ ที่เขียนอยู่ภายใต้เครื่องหมาย “ “ (double quotation) 

ตัวแปรสตริง คือ ตัวแปรชุดที่เก็บค่าคงที่ชนิดสตริง โดยมีชนิดของตัวแปรชุดเป็น char 

ฟังก์ชันที่ใช้งานเกี่ยวกับสตริง (string functions) ที่สำคัญ ๆ มีดังนี้

strlen( ) เป็นฟังก์ที่ใช้นับความยาวของค่าคงที่สตริง หรือตัวแปรสตริง

strcmp( ) เป็นฟังก์ชันที่ใช้เปรียบเทียบข้อมูลชนิดสตริง 2 ค่า ว่ามีค่าเท่ากัน หรือมากกว่า หรือน้อยกว่าอย่างใดอย่างหนึ่ง ซึ่งการเปรียบเทียบสตริงจะใช้ค่ารหัส ASCII เปรียบเทียบทีละตัวอักขระ

strcpy( ) เป็นฟังก์ชันที่ใช้คัดลอกข้อมูลจาก string ค่าหนึ่งไปยัง string อีกค่าหนึ่ง

strcat( ) เป็นฟังก์ชันที่ใช้เชื่อมค่าคงที่ชนิดสตริง 2 ค่า เข้าด้วยกัน โดยผลลัพธ์จะเก็บเอาไว้ในตัวแปรสตริงตัวแรกเสมอ