คำสั่งวนซ้ำ for loop ในภาษา C

5 May 2021

ในบทนี้ คุณจะได้เรียนรู้การใช้งานคำสั่ง for loop สำหรับควบคุมให้โปรแกรมทำงานซ้ำๆ จากเงื่อนไขที่กำหนดในภาษา C นี่เป็นเนื้อหาในบทนี้

  • คำสั่ง for loop
  • การสร้างแม่สูตรคูณด้วยคำสั่ง for loop
  • การใช้งานคำสั่ง for loop กับอาเรย์
  • การหาค่าน้อยที่สุดและมากที่สุด
  • การใช้คำสั่ง for loop ซ้อนกัน
  • การจัดเรียงตัวเลขในอาเรย์

คำสั่ง for loop

คำสั่ง for loop เป็นคำสั่งวนซ้ำที่ใช้สำหรับควบคุมให้โปรแกรมทำงานซ้ำๆ ภายใต้เงื่อนไขที่กำหนดเช่นเดียวกับคำสั่ง while loop แต่มันถูกออกแบบมาสำหรับใช้กับการวนซ้ำในจำนวนรอบที่แน่นอน เนื่องจากเราสามารถกำหนดค่าเริ่มต้น เงื่อนไขและการเปลี่ยนแปลงค่าไว้ที่เดียวกัน นี่เป็นรูปแบบการใช้งานคำสั่ง for loop ในภาษา C

for (initial; condition; update) {
    // statements
}

ในการใช้งาน เราเริ่มต้นด้วยการเขียนคำสั่ง for ตามด้วยวงเล็บ () ที่เป็นส่วนสำหรับกำหนดคุณลักษณะการทำงานของคำสั่ง for loop ซึ่งประกอบไปด้วยสามส่วนคือ

  • initial: เป็นส่วนที่ใช้กำหนดค่าเริ่มต้นให้กับลูปเพื่อทำงาน ทำงานครั้งแรกก่อนลูปเริ่มทำงาน
  • condition: เป็นการกำหนดเงื่อนไขเพื่อให้ลูปทำงาน ซึ่งมันจะถูกตรวจสอบการลูปทำงานในแต่ละรอบ
  • update: เป็นส่วนสำหรับอัพเดทค่าในตัวแปรและอื่นๆ ทำงานเมื่อลูปจบการทำงานในแต่ละรอบ

โดยทั้่งสามส่วนจะคั่นด้วยคอมมา (;) และเป็นทางเลือก คุณสามารถละเว้นบางส่วนได้หากต้องการ แต่เครื่องหมายคอมมาจะยังคงต้องมีเสมอ และในบล็อค {} ของคำสั่ง for เป็นส่วนสำหรับกำหนดคำสั่งที่ต้องการให้ทำงานในขณะที่เงื่อนไขเป็นจริง

สำหรับตัวอย่างแรกในการใช้งานคำสั่ง for loop ในภาษา C เราจะมาเขียนโปรแกรมเพื่อนับและแสดงตัวเลขจาก 1-10 ออกทางหน้าจอ นี่เป็นตัวอย่าง

for_example.c
#include <stdio.h>

int main()
{
    for (int i = 1; i <= 10; i++) {
        printf("%d\n", i);
    }
    return 0;
}

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

1
2
3
4
5
6
7
8
9
10

นี่เป็นโปรแกรมพื้นฐานอย่างง่ายสำหรับแสดงตัวอย่างการทำงานของลูปในภาษา C เราได้ใช้คำสั่ง for loop สำหรับนับและแสดงตัวเลขจาก 1-10 ออกทางหน้าจอ และนี่เป็นวิธีการทำงานของโปรแกรมนี้

  • initial: ก่อนลูปเริ่มต้นทำงาน เราได้ประกาศตัวแปร i และกำหนดค่าเป็น 1 นี่เป็นค่าเริ่มต้นสำหรับลูปนี้เพื่อทำงาน
  • condition: เงื่อนไขของลูปคือ i <= 10 ซึ่งหมายความว่าโปรแกรมจะทำงานในลูปในขณะที่ค่าในตัวแปรน้อยกว่าหรือเท่ากับ 10
  • update: เมื่อจบการทำงานของลูปในแต่ละรอบ เราได้เพิ่มค่าในตัวแปร i ขึ้นไปหนึ่งด้วยคำสั่ง i++ สำหรับการทำงานในลูปรอบถัดไป

และนี่เป็นวิธีการทำงานพื้นฐานของคำสั่ง for loop ถ้าหากคุณสังเกตจะเห็นว่าในการใช้งานคำสั่ง for loop เราสามารถกำหนดค่าเริ่ม เงื่อนไขและการอัพเดทไว้เพียงที่เดียว นั่นคือที่ส่วนหัวของคำสั่ง ซึ่งจะแตกต่างจากคำสั่ง while loop ซึ่งจะต้องกำหนดส่วนต่างๆ แยกกัน

ในทางทฤษฎีแล้ว ทั้งคำสั่ง for loop และ while loop นั้นสามารถใช้ทดแทนกันได้ แต่การใช้งานคำสั่ง for loop ในบางกรณีจะทำให้การเขียนโปรแกรมง่ายและสะดวกกว่า

มาดูตัวอย่างต่อไปสำหรับการใช้งานคำสั่ง for loop ในตัวอย่างนี้เป็นการใช้คำสั่ง for loop สำหรับแสดงตัวเลขแบบเพิ่มและลดไปพร้อมกัน เพื่อแสดงการกำหนดคุณลักษณะอีกรูปแบบของการใช้งานลูป นี่เป็นตัวอย่าง

for_example2.c
#include <stdio.h>

int main()
{
    for (int i = 1, j = 10; i < j; i++, j--) {
        printf("i = %d, j= %d\n", i, j);
    }
    return 0;
}

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

i = 1, j= 10
i = 2, j= 9
i = 3, j= 8
i = 4, j= 7
i = 5, j= 6

ในการใช้งานคำสั่ง for loop สำหรับการกำหนดค่าเริ่มต้นให้กับลูปเพื่อทำงาน เราสามารถประกาศมากกว่าหนึ่งตัวแปรได้เหมือนกับที่คุณเห็นในตัวอย่าง

int i = 1, j = 10

เราได้ประกาศตัวแปร i และ j เพื่อเก็บค่าเริ่มต้นสำหรับลูปเพื่อทำงานเป็น 1 และ 10 ตามลำดับ โดยคั่นการประกาศแต่ละตัวแปรด้วยเครื่องหมายคอมมา (,) นั่นหมายความคุณสามารถประกาศกี่ตัวแปรก็ได้เท่าที่ต้องการ

i++, j--

ในส่วนของการอัพเดทค่า เราสามารถเปลี่ยนแปลงค่าในตัวแปรได้มากกว่าหนึ่งเช่นเดียวกัน โดยคั่นแต่ละการทำงานด้วยเครื่องหมายคอมมา ในตัวอย่างนี้ เมื่อลูปจบการทำงานในแต่ละรอบ เราได้เพิ่มค่าในตัวแปร i ขึ้นหนึ่งและลดค่าในตัวแปร j ลงหนึ่ง

นั่นหมายความว่าเมื่อค่าของตัวแปรทั้งสองเพิ่มและลดมาจนถึงตรงกลาง จะทำให้เงื่อนไข i < j ไม่เป็นจริงและลูปจบการทำงาน

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

นี่เป็นตัวอย่างของโปรแกรมนับตัวเลขถอยหลังจาก 10 ไปยัง 0 โดยการใช้งานคำสั่ง for loop ในภาษา C มันเหมือนกับนาฬิกานับถอยหลังที่เราใช้กัน

for_example3.c
#include <stdio.h>

int main()
{
    int i = 10;
    for (; i >= 0;) {
        printf("%d\n", i);
        i--;
    }
    printf("Count down ended\n");
    return 0;
}

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

10
9
8
7
6
5
4
3
2
1
0
Count down ended

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

for (; i >= 0;) {

ในตัวอย่างนี้ เราได้ประกาศตัวแปร i ที่นอกลูป และอัพเดทค่าในตัวแปรที่คำสั่งสุดท้ายหลังจากที่การทำงานทุกคำสั่งในลูปเสร็จสิ้น สังเกตว่าเรายังคงต้องใส่เครื่องหมายเซมิโคลอน (;) เพื่อละเว้นส่วนที่หายไปเอาไว้เสมอ

นอกจากนี้ ในการกำหนดค่าเริ่มต้นเราไม่จำเป็นต้องเป็นการประกาศตัวแปรใหม่เสมอไป คุณสามารถใช้มันเพียงแค่กำหนดค่าให้กับตัวแปรที่มีอยู่แล้วได้ ยกตัวอย่างเช่น

int i;
for (i = 0; i <= 10; i++) {
    ...
}

นี่จะเกิดขึ้นในกรณีที่เราประกาศตัวแปรไว้ที่ไหนสักแห่งก่อนลูป และต้องการใช้ตัวแปรดังกล่าวสำหรับเป็นตัวนับให้กับลูปเพื่อทำงาน

เมื่อคุณประกาศตัวแปรด้วยคำสั่ง for loop ตัวแปรจะมีขอบเขตการใช้งานแค่เพียงในลูปเท่านั้น นี่เป็นรูปแบบการทำงานปกติสำหรับขอบเขตของตัวแปรในภาษา C ยกตัวอย่างเช่น

for (int i = 0; condition; update) {
    // can only use i inside the loop
}
// can't use i here

ตัวแปร i จะสามารถใช้งานได้แค่เพียงในลูป คุณทราบเกี่ยวกับเรื่องนี้และนี่เป็นเพียงการทบทวนความจำ เหมือนกับการประกาศตัวแปรในคำสั่ง if หรือในฟังก์ชัน เราสามารถใช้มันได้เพียงแค่ในบล็อคหรือขอบเขตที่มันถูกประกาศ

การสร้างแม่สูตรคูณด้วยคำสั่ง for loop

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

multiplication_table.c
#include <stdio.h>

int main()
{
    int n;
    printf("Enter a number: ");
    scanf("%d", &n);
    printf("Multiplication table of %d\n", n);

    for (int i = 1; i <= 12; i++) {
        printf("%d x %d = %d\n", n, i, n * i);
    }
    return 0;
}

นี่เป็นผลลัพธ์การทำงานของโปรแกรมเมื่อเรากรอกแม่สูตรคูณเป็น 5 คุณสามารถกรอกตัวเลขของแม่สูตรคุณที่ต้องการดูได้

Enter a number: 5
Multiplication table of 5
5 x 1 = 5
5 x 2 = 10
5 x 3 = 15
5 x 4 = 20
5 x 5 = 25
5 x 6 = 30
5 x 7 = 35
5 x 8 = 40
5 x 9 = 45
5 x 10 = 50
5 x 11 = 55
5 x 12 = 60

ในการใช้งานคำสั่ง for loop เราสามารถสร้างแม่สูตรคูณได้แบบง่ายๆ โดยการนำฐานของแม่สูตรวนคูณกับตัวเลขจาก 1-12 คุณสามารถเปลี่ยนแปลงจำนวนของแถวที่ต้องการแสดงได้ เช่น เปลี่ยนเงื่อนไขเป็น i <= 25 เพื่อแสดงผลคูณจาก 1-25 โดยที่ไม่ต้องเขียนอะไรเพิ่มเลย

มาดูกันต่อว่าเราสามารถใช้คำสั่ง for loop เพื่อทำอะไรได้อีกบ้าง

การใช้งานคำสั่ง for loop กับอาเรย์

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

ในตัวอย่างนี้่ เราจะใช้คำสั่ง for loop สำหรับวนอ่านค่าในอาเรย์และแสดงค่าทั้งหมดในอาเรย์ออกทางหน้าจอ

reading_array.js
#include <stdio.h>

int main()
{
    int numbers[] = {10, 20, 30, 40, 50};
    int size = sizeof(numbers) / sizeof(int);

    int i;
    for (i = 0; i < size; i++) {
        printf("%d ", numbers[i]);
    }

    printf("\n");
    for (i = size - 1; i >= 0; i--) {
        printf("%d ", numbers[i]);
    }
    return 0;
}

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

10 20 30 40 50
50 40 30 20 10

ในตัวอย่าง เป็นการใช้งานคำสั่ง for loop เพื่อวนอ่านค่าในอาเรย์โดยเริ่มต้นจากตำแหน่งแรกไปยังตำแหน่งสุดท้าย และทำย้อนกลับ

int numbers[] = {10, 20, 30, 40, 50};
int size = sizeof(numbers) / sizeof(int);

เราได้ประกาศตัวแปรอาเรย์ numbers ที่เก็บตัวเลขจำนวนเต็มจำนวน 5 ตัว จากนั้นคำนวณหาจำนวนสมาชิกทั้งหมดในอาเรย์ จากขนาดของอาเรย์หารด้วยขนาดประเภทข้อมูลของมัน และเก็บไว้ในตัวแปร size โดยค่าที่คำนวณได้ในกรณีนี้ก็คือ 5 นั่นเอง

for (i = 0; i < size; i++) {
    printf("%d ", numbers[i]);
}

จากนั้นเป็นการใช้คำสั่ง for loop เพื่อวนอ่านค่าในอาเรย์ และเนื่องจาก Index ของอาเรย์นั้นเริ่มต้นจาก 0 เราจึงต้องกำหนดค่าเริ่มต้นของตัวแปร i เป็น 0 เพื่อทำให้ลูปวนตัวเลขจาก 0 - 4 จากเงื่อนไข i < size ซึ่งเป็น Index ทั้งหมดของอาเรย์ จากนั้นเข้าถึงค่าในอาเรย์ด้วย numbers[i]

for (i = size - 1; i >= 0; i--) {
    printf("%d ", numbers[i]);
}

ส่วนลูปที่สองนั้นมีการทำงานที่คล้ายกันแต่จะวนจากสมาชิกตัวสุดท้ายในอาเรย์มายังตัวแรกแทน โดยการวนของตัวเลขในตัวแปร i จะเป็น 4 - 0 สำหรับการสร้างตัวนับเพื่อทำเป็น Index ที่จะวนตามเงื่อนไขที่กำหนดให้กับลูป i >= 0

การหาค่าน้อยที่สุดและมากที่สุด

ในตัวอย่างก่อนหน้าเป็นการใช้งานคำสั่ง for loop เพื่อการอ่านค่าจากอาเรย์ ในตัวอย่างนี้ มาทำอย่างอื่นที่ท้าทายมากขึ้นกับอาเรย์ มาเขียนโปรแกรมหาค่าที่น้อยที่สุดและมากที่สุดจากในอาเรย์ โดยตัวเลขในอาเรย์จะรับค่ามาจากคีย์บอร์ด และนี่เป็นโค้ดของโปรแกรมหาค่าที่น้อยที่สุดและมากที่สุดในภาษา C

finding_min_max.c
#include <stdio.h>

int main()
{
    int n;
    printf("Enter size of array: ");
    scanf("%d", &n);

    // initialize array with size of n
    int numbers[n];

    // getting inputs to array
    for (int i = 0; i < n; i++) {
        printf("No %d: ", i + 1);
        scanf("%d", &numbers[i]);
    }

    // print out the array
    printf("Entered numbers:\n");
    for (int i = 0; i < n; i++) {
        printf("%d ", numbers[i]);
    }
    printf("\n");

    // finding min and max
    int min = numbers[0];
    int max = numbers[0];
    for (int i = 0; i < n; i++) {
        if (numbers[i] < min) {
            min = numbers[i];
        }
        if (numbers[i] > max) {
            max = numbers[i];
        }
    }

    // conclusion
    printf("Minimum number is %d\n", min);
    printf("Maximum number is %d\n", max);
    return 0;
}

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

Enter size of array: 10
No 1: 18
No 2: 8
No 3: 15
No 4: 20
No 5: 17
No 6: 5
No 7: 9
No 8: 12
No 9: 2
No 10: 10
Entered numbers:
18 8 15 20 17 5 9 12 2 10
Minimum number is 2
Maximum number is 20

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

int n;
printf("Enter size of array: ");
scanf("%d", &n);

ในตอนเริ่มต้น เราได้ประกาศตัวแปร n และรับเอาค่านี้มาจากทางคีย์บอร์ด ซึ่งนี่จะใช้เป็นตัวกำหนดเพื่อรับค่าตัวเลขหลังจากนั้นอีก n ค่ามาเก็บไว้ในอาเรย์

int numbers[n];

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

for (int i = 0; i < n; i++) {
    printf("No %d: ", i + 1);
    scanf("%d", &numbers[i]);
}

จากนั้นใช้คำสั่ง for loop ในการวนรับค่าเพื่อนำมาเก็บไว้ในอาเรย์ ในการวนนั้นจะใช้ตัวแปร i ในการสร้าง Index ของอาเรย์จาก 0 ถึง n-1 เราสามารถเข้าถึงที่อยู่ของสมาชิกในอาเรย์ได้จาก &numbers[i] สำหรับใช้ในการเก็บข้อมูล

printf("Entered numbers:\n");
for (int i = 0; i < n; i++) {
    printf("%d ", numbers[i]);
}

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

int min = numbers[0];
int max = numbers[0];

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

for (int i = 0; i < n; i++) {
    if (numbers[i] < min) {
        min = numbers[i];
    }
    if (numbers[i] > max) {
        max = numbers[i];
    }
}

จากนั้นเป็นการวนรอบสมาชิกทั้งหมดในอาเรย์เช่นเดิม แต่ในครั้งนี้่เป็นการค้นหาค่าที่น้อยและมากที่สุดแทน ในแต่ละรอบของการทำงานของลูป เรานำตัวเลขมาเปรียบเทียบกับค่าในตัวแปร min และถ้าหากมันน้อยกว่า เราอัพเดทค่าที่น้อยที่สุดเป็นค่านี้แทน

ในการหาค่าที่มากที่สุดในอาเรย์ก็เช่นเดียวกัน แต่เป็นเปรียบเทียบว่าค่าในอาเรย์มากว่าตัวแปร max หรือไม่แทน และในตอนท้าย เราจะได้ค่าที่น้อยและมากที่สุดเก็บในตัวแปรทั้งสอง และแสดงมันออกทางหน้าจอ

การใช้คำสั่ง for loop ซ้อนกัน

เช่นเดียวกับคำสั่งควบคุมประเภทอื่นๆ คุณสามารถใช้คำสั่ง for loop เพื่อใช้สร้างลูปแบบซ้อนกันได้ นี่เหมาะสำหรับงานที่ต้องการทำ N รอบและในแต่ละรอบก็ต้องการทำอีก M รอบ นี่ส่งผลให้การวนเกิดขึ้นทั้งหมด M x N รอบ ซึ่งสามารถพบได้กับการทำงานในรูปแบบของตารางหรืออาเรย์สองมิติ

สำหรับตัวอย่างการซ้อนกันของคำสั่ง for loop ในภาษา C เราจะใช้มันสร้างตารางสูตรคูณจากแม่ 1-12 ที่แสดงในรูปแบบของตาราง นี่เป็นตัวอย่างของโปรแกรม

square_multiplication_table.c
#include <stdio.h>

int main()
{
    for (int i = 1; i <= 12; i++) {
        for (int j = 1; j <= 12; j++) {
            printf("%4d", i * j);
        }
        printf("\n");
    }
    return 0;
}

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

   1   2   3   4   5   6   7   8   9  10  11  12
   2   4   6   8  10  12  14  16  18  20  22  24
   3   6   9  12  15  18  21  24  27  30  33  36
   4   8  12  16  20  24  28  32  36  40  44  48
   5  10  15  20  25  30  35  40  45  50  55  60
   6  12  18  24  30  36  42  48  54  60  66  72
   7  14  21  28  35  42  49  56  63  70  77  84
   8  16  24  32  40  48  56  64  72  80  88  96
   9  18  27  36  45  54  63  72  81  90  99 108
  10  20  30  40  50  60  70  80  90 100 110 120
  11  22  33  44  55  66  77  88  99 110 121 132
  12  24  36  48  60  72  84  96 108 120 132 144

นี่เป็นตารางสูตรคูณแบบตารางทีี่สร้างโดยการใช้คำสั่ง for loop โดยลูปด้านนอกใช้สำหรับสร้างแต่แถวและลูปด้านในใช้สร้างแต่ละหลัก ซึ่งผลลัพธ์ตัวเลขในตารางนั้นเป็นผลที่ได้จากการคูณกันของตัวแปร i และ j ซึ่งเป็นตัวนับของลูป จากนิพจน์ i * j

การจัดเรียงตัวเลขในอาเรย์

สำหรับตัวอย่างสุดท้ายในบทนี้จะเป็นการจัดเรียงตัวเลขในอาเรย์จากน้อยไปมาก ซึ่งในการเรียงตัวเลขในอาเรย์แน่นอนว่าวิธีที่ง่ายที่สุดจะต้องใช้งานคำสั่ง for loop ซ้อนกัน เราจะแสดงการเรียงตัวเลขในอาเรย์ด้วยอัลกอริทึม Bubble sorting ในภาษา C นี่เป็นตัวอย่างของโปรแกรม

bubble_sorting.c
#include <stdio.h>

int main()
{
    int numbers[] = {18, 8, 15, 20, 17, 5, 9, 12, 2, 10};
    int n = sizeof(numbers) / sizeof(int);

    printf("Original array:\n");
    for (int i = 0; i < n; i++) {
        printf("%d ", numbers[i]);
    }

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n - i - 1; j++) {
            if (numbers[j] > numbers[j + 1]) {
                int temp = numbers[j];
                numbers[j] = numbers[j + 1];
                numbers[j + 1] = temp;
            }
        }
    }

    printf("\nSorted array:\n");
    for (int i = 0; i < n; i++) {
        printf("%d ", numbers[i]);
    }
    return 0;
}

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

Original array:
18 8 15 20 17 5 9 12 2 10
Sorted array:
2 5 8 9 10 12 15 17 18 20

ในตัวอย่างนี้ เป็นการเรียงตัวเลขในอาเรย์จากน้อยไปมากโดยการใช้งานคำสั่ง for loop แบบซ้อนกัน วิธีการเรียงข้อมูลในอาเรย์ในรูปแบบนี้คือการทำงานของอัลกอริทึม Bubble sort ซึ่งเป็นอัลกอริทึมพื้นฐานของการเรียงข้อมูลที่เรียบง่ายที่สุด

for (int i = 0; i < n; i++) {
    for (int j = 0; j < n - i - 1; j++) {
        if (numbers[j] > numbers[j + 1]) {
            int temp = numbers[j];
            numbers[j] = numbers[j + 1];
            numbers[j + 1] = temp;
        }
    }
}

การทำงานของอัลกอริทึม Bubble sort นั้นจะทำการเปรียบเทียบค่าที่อยู่ติดกัน ถ้าหากพบว่าตัวเลขทางด้านซ้าย numbers[j] มากกว่าทางด้านขวา numbers[j + 1] จะทำการสลับตำแหน่งของมันไปทางขวา เนื่องการเรียงจากน้อยไปมาก ตัวเลขที่มากกว่าควรอยู่ทางด้านขวาของตัวเลขที่น้อยกว่า

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

ในตัวอย่างของเราเป็นการเรียงจากน้อยไปมาก และเพื่อเรียงตัวเลขจากมากไปน้อย คุณเพียงแค่เปลี่ยนเงื่อนไขสำหรับคำสั่ง if เป็นการสลับตัวเลขที่น้อยกว่าไปทางขวาแทน ยกตัวอย่างเช่น

if (numbers[j] > numbers[j + 1]) {
    ...
}

เมื่อใช้เงื่อนไขนี้ โปรแกรมจะทำการเรียงตัวเลขจากมากไปน้อยแทน

ในบทนี้ คุณได้เรียนรู้การใช้งานคำสัง for loop ในภาษา C สำหรับควบคุมให้โปรแกรมทำงานซ้ำจากเงื่อนไขที่กำหนด เราได้พูดถึงการใช้งานคำสั่งในรูปแบบพื้นฐาน การใช้งานกับอาเรย์ และการใช้ลูปที่ซ้อนกัน และตัวอย่างการเขียนโปรแกรมในรูปแบบต่างๆ กับคำสั่ง for loop

บทความนี้เป็นประโยชน์หรือไม่? Yes · No