C 언어로 배열에서 가장 큰 값과 가장 작은 값 찾기

CBeginner
지금 연습하기

소개

배열에서 가장 큰 요소와 가장 작은 요소를 찾는 것은 프로그래밍에서 자주 접하게 되는 일반적인 문제입니다. 이 기술은 데이터 분석, 게임 개발, 정렬 알고리즘 등 다양한 응용 분야에 필수적입니다.

이 Lab 에서는 정수 배열에서 가장 큰 요소와 가장 작은 요소를 모두 식별하는 C 프로그램을 작성하는 방법을 배우게 됩니다. 이 기본적인 프로그래밍 기술의 논리를 이해할 수 있도록 과정을 명확하고 관리 가능한 단계로 나눌 것입니다.

Finding the largest and smallest elements in an array

이 Lab 은 변수, 배열, 루프, 조건문 등 C 프로그래밍에 대한 기본적인 지식을 필요로 합니다. 이 세션이 끝나면 데이터 세트에서 극값 (extreme values) 을 찾는 방법을 보여주는 완전한 C 프로그램을 만들게 됩니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 중급 레벨의 실험이며 완료율은 57%입니다.학습자들로부터 100%의 긍정적인 리뷰율을 받았습니다.

프로그램 구조 설정

새로운 C 파일을 생성하고 프로그램의 기본 구조를 설정하는 것으로 시작해 보겠습니다. 여기에는 필요한 헤더 파일, main 함수 및 변수 선언이 포함됩니다.

먼저 프로젝트 디렉토리로 이동하여 main.c라는 새 파일을 만듭니다.

cd ~/project
touch main.c

이제 편집기에서 main.c 파일을 열고 다음 코드를 추가합니다.

#include <stdio.h>

int main() {
    // We'll declare an array with a maximum capacity of 50 elements
    int array[50];
    // Variables to store the size of the array and loop counter
    int size, i;
    // Variables to store the largest and smallest elements
    int largest, smallest;

    printf("Finding Largest and Smallest Elements in an Array\n");
    printf("------------------------------------------------\n\n");

    return 0;
}

이 코드는 프로그램의 기본 구조를 설정합니다. 각 부분이 무엇을 하는지 이해해 보겠습니다.

  • #include <stdio.h>printf()scanf()와 같은 함수를 제공하는 표준 입출력 라이브러리를 포함합니다.
  • main() 함수는 프로그램의 진입점입니다.
  • 50 개의 요소를 수용할 수 있는 정수 배열 array를 선언합니다.
  • size 변수는 사용자가 입력하려는 요소의 수를 저장합니다.
  • i 변수는 루프 카운터로 사용됩니다.
  • largestsmallest 변수는 배열에서 발견된 최대값과 최소값을 저장합니다.

이 코드를 추가한 후 파일을 저장합니다. 이것은 프로그램의 기반을 설정합니다.

사용자 입력 받기

이제 프로그램 구조가 준비되었으므로 사용자로부터 입력을 받는 코드를 추가해 보겠습니다. 사용자에게 배열의 크기를 묻고 배열 요소를 수집해야 합니다.

편집기에서 main.c 파일을 열고 return 0; 문 앞에 다음 코드를 추가하여 수정합니다.

// Ask user for the size of the array
printf("Enter the size of the array (max 50): ");
scanf("%d", &size);

// Validate the input size
if (size <= 0 || size > 50) {
    printf("Invalid array size. Please enter a size between 1 and 50.\n");
    return 1;
}

// Get array elements from the user
printf("\nEnter %d elements of the array:\n", size);
for (i = 0; i < size; i++) {
    printf("Element %d: ", i + 1);
    scanf("%d", &array[i]);
}

// Display the entered array
printf("\nThe array you entered is: [ ");
for (i = 0; i < size; i++) {
    printf("%d ", array[i]);
}
printf("]\n\n");

이 코드는 다음을 수행합니다.

  1. 사용자에게 배열의 크기를 입력하라는 메시지를 표시합니다.
  2. 크기가 1 에서 50 사이인지 확인합니다.
  3. 사용자에게 배열의 각 요소를 하나씩 입력하도록 요청합니다.
  4. 입력된 배열을 사용자에게 다시 표시하여 확인합니다.

지금까지 작성한 내용을 확인하기 위해 프로그램을 컴파일하고 실행해 보겠습니다.

gcc main.c -o main
./main

배열 크기를 묻는 메시지가 표시됩니다. 5 와 같은 작은 숫자를 입력한 다음 5 개의 값을 입력합니다. 프로그램은 입력한 배열을 표시합니다.

예를 들어, 크기에 5 를 입력하고 값 10, 25, 5, 17, 9 를 입력하면 다음과 같은 출력이 표시됩니다.

Finding Largest and Smallest Elements in an Array
------------------------------------------------

Enter the size of the array (max 50): 5

Enter 5 elements of the array:
Element 1: 10
Element 2: 25
Element 3: 5
Element 4: 17
Element 5: 9

The array you entered is: [ 10 25 5 17 9 ]

이제 사용자로부터 배열 요소를 수집했으므로 가장 큰 값과 가장 작은 값을 찾는 작업을 진행할 수 있습니다.

최대값 찾기

이제 배열에서 가장 큰 요소를 찾는 코드를 추가해 보겠습니다. 전략은 다음과 같습니다.

  1. 첫 번째 요소가 가장 크다고 가정합니다.
  2. 각 후속 요소를 현재 가장 큰 요소와 비교합니다.
  3. 더 큰 요소가 발견되면 가장 큰 값을 업데이트합니다.

return 0; 문 앞에 다음 코드를 main.c 파일에 추가합니다.

// Initialize largest with the first element of the array
largest = array[0];

// Find the largest element
printf("Finding the largest element...\n");
for (i = 1; i < size; i++) {
    if (array[i] > largest) {
        largest = array[i];
        printf("New largest found at position %d: %d\n", i + 1, largest);
    }
}

printf("\nThe largest element in the array is: %d\n\n", largest);

이 코드는 largest 변수를 배열의 첫 번째 요소로 초기화합니다. 그런 다음 두 번째 요소 (인덱스 1) 부터 시작하여 배열을 반복하며 각 요소를 현재 가장 큰 값과 비교합니다. 더 큰 요소가 발견되면 largest 변수를 업데이트하고 메시지를 출력합니다.

결과를 확인하기 위해 프로그램을 컴파일하고 실행해 보겠습니다.

gcc main.c -o main
./main

이전과 같이 배열 크기와 요소를 입력합니다. 예를 들어, 값 10, 25, 5, 17, 9 를 입력하면 다음과 유사한 출력이 표시됩니다.

Finding Largest and Smallest Elements in an Array
------------------------------------------------

Enter the size of the array (max 50): 5

Enter 5 elements of the array:
Element 1: 10
Element 2: 25
Element 3: 5
Element 4: 17
Element 5: 9

The array you entered is: [ 10 25 5 17 9 ]

Finding the largest element...
New largest found at position 2: 25

The largest element in the array is: 25

이것은 프로그램이 배열에서 가장 큰 요소를 찾는 방법을 보여줍니다. 알고리즘은 첫 번째 요소를 가장 큰 요소로 시작하고 더 큰 값을 찾을 때마다 업데이트합니다.

최소값 찾기

이제 가장 큰 요소를 찾았으므로 배열에서 가장 작은 요소를 찾는 코드를 추가해 보겠습니다. 전략은 유사합니다.

  1. 첫 번째 요소가 가장 작다고 가정합니다.
  2. 각 후속 요소를 현재 가장 작은 요소와 비교합니다.
  3. 더 작은 요소가 발견되면 가장 작은 값을 업데이트합니다.

return 0; 문 앞에 다음 코드를 main.c 파일에 추가합니다.

// Initialize smallest with the first element of the array
smallest = array[0];

// Find the smallest element
printf("Finding the smallest element...\n");
for (i = 1; i < size; i++) {
    if (array[i] < smallest) {
        smallest = array[i];
        printf("New smallest found at position %d: %d\n", i + 1, smallest);
    }
}

printf("\nThe smallest element in the array is: %d\n", smallest);

이 코드는 smallest 변수를 배열의 첫 번째 요소로 초기화합니다. 그런 다음 두 번째 요소 (인덱스 1) 부터 시작하여 배열을 반복하며 각 요소를 현재 가장 작은 값과 비교합니다. 더 작은 요소가 발견되면 smallest 변수를 업데이트하고 메시지를 출력합니다.

전체 결과를 확인하기 위해 프로그램을 컴파일하고 실행해 보겠습니다.

gcc main.c -o main
./main

이전과 같이 배열 크기와 요소를 입력합니다. 예를 들어, 값 10, 25, 5, 17, 9 를 입력하면 다음과 유사한 출력이 표시됩니다.

Finding Largest and Smallest Elements in an Array
------------------------------------------------

Enter the size of the array (max 50): 5

Enter 5 elements of the array:
Element 1: 10
Element 2: 25
Element 3: 5
Element 4: 17
Element 5: 9

The array you entered is: [ 10 25 5 17 9 ]

Finding the largest element...
New largest found at position 2: 25

The largest element in the array is: 25

Finding the smallest element...
New smallest found at position 3: 5

The smallest element in the array is: 5

이것은 프로그램이 배열에서 가장 큰 요소와 가장 작은 요소를 모두 찾는 방법을 보여줍니다. 알고리즘은 첫 번째 요소로 시작하고 각각 더 크거나 작은 값을 찾을 때마다 업데이트합니다.

프로그램 최적화 및 코드 완성

이제 작동하는 프로그램이 있으므로 가장 큰 요소와 가장 작은 요소를 모두 찾는 것을 단일 루프로 결합하여 최적화해 보겠습니다. 이렇게 하면 배열을 두 번이 아닌 한 번만 순회하면 되므로 더 효율적입니다.

main.c 파일을 열고 전체 내용을 다음 최적화된 버전으로 바꿉니다.

#include <stdio.h>

int main() {
    // We'll declare an array with a maximum capacity of 50 elements
    int array[50];
    // Variables to store the size of the array and loop counter
    int size, i;
    // Variables to store the largest and smallest elements
    int largest, smallest;

    printf("Finding Largest and Smallest Elements in an Array\n");
    printf("------------------------------------------------\n\n");

    // Ask user for the size of the array
    printf("Enter the size of the array (max 50): ");
    scanf("%d", &size);

    // Validate the input size
    if (size <= 0 || size > 50) {
        printf("Invalid array size. Please enter a size between 1 and 50.\n");
        return 1;
    }

    // Get array elements from the user
    printf("\nEnter %d elements of the array:\n", size);
    for (i = 0; i < size; i++) {
        printf("Element %d: ", i + 1);
        scanf("%d", &array[i]);
    }

    // Display the entered array
    printf("\nThe array you entered is: [ ");
    for (i = 0; i < size; i++) {
        printf("%d ", array[i]);
    }
    printf("]\n\n");

    // Initialize largest and smallest with the first element
    largest = smallest = array[0];

    // Find both the largest and smallest elements in a single pass
    printf("Searching for largest and smallest elements...\n");
    for (i = 1; i < size; i++) {
        // Check for largest
        if (array[i] > largest) {
            largest = array[i];
            printf("New largest found at position %d: %d\n", i + 1, largest);
        }

        // Check for smallest
        if (array[i] < smallest) {
            smallest = array[i];
            printf("New smallest found at position %d: %d\n", i + 1, smallest);
        }
    }

    // Display results
    printf("\nResults:\n");
    printf("- The largest element in the array is: %d\n", largest);
    printf("- The smallest element in the array is: %d\n", smallest);

    // Calculate and display the range
    printf("- The range (difference between largest and smallest) is: %d\n", largest - smallest);

    return 0;
}

이 최적화된 버전은 다음과 같습니다.

  1. 가장 큰 요소와 가장 작은 요소를 모두 찾기 위해 단일 루프를 사용하므로 프로그램의 효율성이 높아집니다.
  2. largestsmallest를 모두 배열의 첫 번째 요소로 초기화합니다.
  3. 범위 (가장 큰 값과 가장 작은 값의 차이) 에 대한 계산을 추가합니다.

최적화된 프로그램을 컴파일하고 실행해 보겠습니다.

gcc main.c -o main
./main

이전과 같이 배열 크기와 요소를 입력합니다. 예를 들어, 값 10, 25, 5, 17, 9 를 입력하면 다음과 유사한 출력이 표시됩니다.

Finding Largest and Smallest Elements in an Array
------------------------------------------------

Enter the size of the array (max 50): 5

Enter 5 elements of the array:
Element 1: 10
Element 2: 25
Element 3: 5
Element 4: 17
Element 5: 9

The array you entered is: [ 10 25 5 17 9 ]

Searching for largest and smallest elements...
New largest found at position 2: 25
New smallest found at position 3: 5

Results:
- The largest element in the array is: 25
- The smallest element in the array is: 5
- The range (difference between largest and smallest) is: 20

이 최적화된 버전은 이전과 동일한 결과를 제공하지만 더 효율적이며 값의 범위에 대한 추가 정보를 포함합니다.

큰 배열로 작업할 때 이러한 효율성 향상은 계산 시간을 크게 줄일 수 있으며, 이는 프로그래밍에서 중요한 고려 사항입니다.

요약

이 랩에서는 배열에서 가장 큰 요소와 가장 작은 요소를 모두 찾는 C 프로그램을 성공적으로 만들었습니다. 배운 내용을 검토해 보겠습니다.

  1. 필요한 변수 선언과 함께 기본 프로그램 구조를 설정했습니다.
  2. 배열 크기와 요소에 대한 사용자 입력을 받기 위한 코드를 작성했습니다.
  3. 배열에서 가장 큰 요소를 찾는 알고리즘을 구현했습니다.
  4. 배열에서 가장 작은 요소를 찾는 유사한 알고리즘을 구현했습니다.
  5. 두 검색을 단일 루프로 결합하고 추가 기능을 추가하여 프로그램을 최적화했습니다.

이 랩에서는 몇 가지 기본적인 프로그래밍 개념을 다루었습니다.

  • 배열 및 배열 순회
  • 반복을 위한 루프 사용
  • 조건문
  • 알고리즘 최적화
  • 사용자 입력 받기 및 유효성 검사

이러한 기술은 모든 프로그래머에게 필수적이며, 더 복잡한 데이터 구조와 알고리즘의 기초를 형성합니다. 데이터 세트에서 극단값을 찾는 능력은 게임에서 최고 점수를 찾거나, 온도 판독값을 분석하거나, 금융 데이터를 처리하는 등 많은 프로그래밍 시나리오에서 일반적인 요구 사항입니다.

다음과 같은 기능을 추가하여 이 프로그램을 더 확장할 수 있습니다.

  • 모든 배열 요소의 평균 찾기
  • 배열 정렬
  • 중앙값 찾기
  • 특정 값의 발생 횟수 계산

프로그래밍 기술을 강화하기 위해 이러한 개념을 계속 연습하십시오.