N 개의 숫자 중 가장 큰 숫자 찾기

CBeginner
지금 연습하기

소개

이 랩에서는 사용자로부터 입력받은 숫자들 중에서 가장 큰 숫자를 찾는 C 프로그램을 작성하는 방법을 배웁니다. 이는 다음과 같은 몇 가지 중요한 개념을 가르치는 기본적인 프로그래밍 연습입니다.

  • 사용자 입력 받기
  • 루프 (loop) 사용하기
  • 비교 수행하기
  • 반복을 통해 최대값 추적하기

우리가 구현할 알고리즘은 간단합니다. 사용자에게 입력할 숫자의 개수를 묻고, 각 입력 숫자를 반복 처리합니다. 각 숫자를 처리하면서, 지금까지 찾은 현재 가장 큰 숫자와 비교하여 필요에 따라 "가장 큰 숫자 (largest)" 변수를 업데이트합니다.

이 랩을 마치면, 어떤 수의 입력도 처리하고 그 중 가장 큰 값을 안정적으로 식별할 수 있는 프로그램을 만들 수 있습니다.

프로그램 파일 생성

이제 프로그램을 위한 새로운 C 파일을 만들어 보겠습니다. WebIDE 에서 프로젝트 디렉토리에 main.c라는 파일을 생성합니다.

  1. 터미널 패널에서 프로젝트 디렉토리로 이동합니다.

    cd ~/project
  2. 이제 WebIDE 에서 왼쪽의 Explorer 패널에서 "New File" 버튼을 클릭하거나 Explorer 패널에서 마우스 오른쪽 버튼을 클릭하고 "New File"을 선택합니다.

  3. 파일 이름을 main.c로 지정하고 Enter 키를 누릅니다.

  4. 새로 생성된 파일에 C 프로그램의 기본 구조를 추가하여 시작해 보겠습니다.

    #include <stdio.h>
    
    int main() {
        // We will add our code here
    
        return 0;
    }
  5. Ctrl+S 를 누르거나 메뉴에서 File > Save 를 선택하여 파일을 저장합니다.

이 구조에는 다음이 포함됩니다.

  • printf()scanf()와 같은 함수에 필요한 Standard Input/Output 라이브러리를 가져오는 #include <stdio.h> 지시문
  • 모든 C 프로그램의 진입점인 main() 함수
  • 프로그램의 성공적인 실행을 나타내는 return 0;

stdio.h 헤더 파일은 입력 및 출력 작업을 위한 함수를 제공합니다. main() 함수는 프로그램 실행이 시작되는 곳이며, return 0;은 운영 체제에 프로그램이 오류 없이 종료되었음을 알립니다.

사용자 입력 처리

다음으로, 사용자와 상호 작용하도록 프로그램을 설정해야 합니다. 다음을 수행해야 합니다.

  1. 데이터를 저장할 변수를 선언합니다.
  2. 사용자에게 요소의 개수를 묻습니다.
  3. 첫 번째 숫자를 받는 프로세스를 설정합니다.

main.c에서 코드를 업데이트해 보겠습니다.

#include <stdio.h>

int main() {
    // Declare variables
    int n;          // To store the number of elements
    float big;      // To store the largest number found

    // Prompt the user for the number of elements
    printf("Enter the number of elements you wish to find the greatest element of: ");
    scanf("%d", &n);

    // Check if the input is valid
    if (n <= 0) {
        printf("Please enter a positive number of elements.\n");
        return 1;  // Exit with error code
    }

    // Prompt for the first number and initialize 'big' with it
    printf("Enter %d numbers:\n", n);
    printf("Enter element 1: ");
    scanf("%f", &big);

    return 0;
}

추가한 내용을 이해해 보겠습니다.

  1. 변수 선언 (Variable Declaration):

    • int n: 사용자가 입력하려는 숫자의 개수를 저장하는 정수 변수
    • float big: 찾은 가장 큰 숫자를 저장하는 부동 소수점 변수
  2. 개수 (Count) 에 대한 사용자 입력:

    • printf()를 사용하여 요소의 개수를 묻는 메시지를 표시합니다.
    • scanf("%d", &n)을 사용하여 사용자로부터 정수를 읽어 n에 저장합니다.
    • n 앞의 &는 "주소 연산자 (address-of operator)"로, scanf()에게 입력 값을 저장할 위치를 알려줍니다.
  3. 입력 유효성 검사 (Input Validation):

    • 사용자가 양수를 입력했는지 확인합니다.
    • 그렇지 않은 경우, 오류 메시지를 표시하고 반환 코드 1(오류를 나타냄) 로 프로그램을 종료합니다.
  4. 첫 번째 숫자 입력:

    • 사용자에게 첫 번째 숫자를 입력하라는 메시지를 표시합니다.
    • 이 시점에서 이것이 유일한 숫자이므로, 이 첫 번째 숫자를 big에 저장합니다.

이 코드를 실행하면 요소의 개수를 묻고 첫 번째 요소를 묻지만, 아직 해당 정보를 사용하지 않습니다. 다음 단계에서는 모든 숫자를 처리하고 가장 큰 숫자를 찾는 로직을 추가합니다.

가장 큰 숫자 찾기

이제 프로그램의 핵심 로직, 즉 입력된 숫자 중에서 가장 큰 숫자를 찾는 기능을 구현합니다. for 루프를 사용하여 다음을 수행합니다.

  1. 나머지 숫자 (두 번째부터 n 번째까지) 를 반복합니다.
  2. 각 숫자를 현재 가장 큰 값과 비교합니다.
  3. 더 큰 숫자를 찾으면 가장 큰 값을 업데이트합니다.

main.c 파일을 다음 코드로 업데이트하십시오.

#include <stdio.h>

int main() {
    // Declare variables
    int n;          // To store the number of elements
    float big;      // To store the largest number found

    // Prompt the user for the number of elements
    printf("Enter the number of elements you wish to find the greatest element of: ");
    scanf("%d", &n);

    // Check if the input is valid
    if (n <= 0) {
        printf("Please enter a positive number of elements.\n");
        return 1;  // Exit with error code
    }

    // Prompt for the first number and initialize 'big' with it
    printf("Enter %d numbers:\n", n);
    printf("Enter element 1: ");
    scanf("%f", &big);

    // Process remaining numbers using a loop
    for (int i = 2; i <= n; i++) {
        float current;  // Variable to store the current number

        // Prompt for the current number
        printf("Enter element %d: ", i);
        scanf("%f", &current);

        // Compare with the current largest
        if (current > big) {
            big = current;  // Update 'big' if current number is larger
        }
    }

    // Display the result
    printf("The largest of the %d numbers is %.2f\n", n, big);

    return 0;
}

추가한 새로운 코드를 이해해 보겠습니다.

  1. For 루프 (For Loop):

    • 첫 번째 요소는 이미 처리했으므로 i = 2부터 시작합니다.
    • n개의 요소를 모두 처리할 때까지 계속합니다.
    • 각 반복마다 i를 1 씩 증가시킵니다.
  2. 각 숫자 처리:

    • 각 입력 숫자를 저장하기 위해 새로운 변수 current를 선언합니다.
    • 사용자에게 현재 요소를 입력하라는 메시지를 표시합니다.
    • scanf()를 사용하여 입력을 읽습니다.
  3. 최댓값 찾기:

    • 현재 입력 current를 현재 가장 큰 값 big과 비교합니다.
    • current가 더 크면 big을 업데이트하여 이 새로운 가장 큰 값을 저장합니다.
    • 그렇지 않으면 big을 변경하지 않고 다음 입력으로 이동합니다.
  4. 결과 표시:

    • 모든 입력을 처리한 후, 찾은 가장 큰 숫자를 표시합니다.
    • %.2f 형식 지정자는 부동 소수점 숫자를 소수점 2 자리까지 표시합니다.

이 구현은 시퀀스에서 최댓값을 찾는 일반적인 패턴을 따릅니다.

  1. 첫 번째 값으로 최댓값을 초기화합니다.
  2. 나머지 값을 반복합니다.
  3. 더 큰 값을 찾을 때마다 최댓값을 업데이트합니다.
  4. 마지막에 변수에는 시퀀스에서 가장 큰 값이 포함됩니다.

프로그램 컴파일 및 테스트

이제 완전한 C 프로그램을 작성했으므로, 제대로 작동하는지 확인하기 위해 컴파일하고 실행해야 합니다.

  1. 프로그램을 컴파일하려면 터미널에서 다음 명령을 실행합니다.

    gcc ~/project/main.c -o ~/project/main

    이 명령은 GNU C 컴파일러 (gcc) 를 호출하여 소스 파일 main.c를 컴파일하고 main이라는 실행 파일을 생성합니다. -o 플래그는 출력 파일 이름을 지정합니다.

  2. 코드에 오류가 없으면 명령이 아무런 출력 없이 실행됩니다. 이는 프로그램이 성공적으로 컴파일되었음을 의미합니다.

  3. 오류 메시지가 표시되면, 무엇이 잘못되었는지 이해하기 위해 주의 깊게 읽어보십시오. 일반적인 오류는 다음과 같습니다.

    • 세미콜론 (;) 누락
    • 괄호 ({}) 불일치
    • 잘못된 변수 이름 또는 유형
    • include 문 누락 또는 오류
  4. 프로그램을 성공적으로 컴파일한 후, 다음을 사용하여 실행합니다.

    ~/project/main
  5. 다양한 입력을 사용하여 프로그램을 테스트하십시오. 다음은 예시 테스트 케이스입니다.

    입력:

    Enter the number of elements you wish to find the greatest element of: 5
    Enter 5 numbers:
    Enter element 1: 12.5
    Enter element 2: 9.7
    Enter element 3: 25.8
    Enter element 4: 15.2
    Enter element 5: 4.9

    예상 출력:

    The largest of the 5 numbers is 25.80
  6. 음수를 사용하여 다른 테스트 케이스를 시도하십시오.

    입력:

    Enter the number of elements you wish to find the greatest element of: 3
    Enter 3 numbers:
    Enter element 1: -10.5
    Enter element 2: -2.3
    Enter element 3: -15.7

    예상 출력:

    The largest of the 3 numbers is -2.30
  7. 단일 숫자로도 테스트하십시오.

    입력:

    Enter the number of elements you wish to find the greatest element of: 1
    Enter 1 numbers:
    Enter element 1: 42.0

    예상 출력:

    The largest of the 1 numbers is 42.00

이러한 테스트 케이스에 대해 프로그램이 예상 출력을 생성하면 축하합니다! N 개의 입력 숫자 중에서 가장 큰 숫자를 찾는 프로그램을 성공적으로 구현했습니다.

이 컴파일 및 테스트 프로세스는 소프트웨어 개발의 필수적인 부분입니다. 코드가 예상대로 작동하는지 확인하고 버그나 문제를 식별하고 수정하는 데 도움이 됩니다.

요약

이 랩에서는 사용자 제공 숫자 집합에서 가장 큰 숫자를 찾는 C 프로그램을 성공적으로 구현했습니다. 우리가 달성한 내용을 검토해 보겠습니다.

  1. 문제 이해: 숫자 모음을 처리하고 어떤 숫자가 가장 큰지 결정해야 할 필요성을 파악했습니다.

  2. 프로그램 구조: 적절한 include, 변수 선언 및 논리적 흐름을 갖춘 잘 구조화된 C 프로그램을 만들었습니다.

  3. 사용자 입력 처리: 적절한 데이터를 보장하기 위한 유효성 검사를 포함하여 사용자로부터 입력을 받기 위한 코드를 구현했습니다.

  4. 알고리즘 구현: 다음과 같은 간단하지만 효과적인 알고리즘을 사용하여 최댓값을 찾았습니다.

    • 첫 번째 값으로 초기화
    • 각 후속 값을 현재 최댓값과 비교
    • 더 큰 값이 발견되면 최댓값 업데이트
  5. 테스트 및 실행: 프로그램을 컴파일하고 다양한 입력을 사용하여 올바르게 작동하는지 확인했습니다.

이 랩은 여러 맥락에서 유용한 기본적인 프로그래밍 개념을 보여줍니다.

  • 순차적 실행
  • 조건문
  • 루프 구조
  • 변수 추적
  • 입/출력 연산

전체 코드

다음은 이 랩에서 개발한 전체 코드입니다.

#include <stdio.h>

int main() {
    // Declare variables
    int n;          // To store the number of elements
    float big;      // To store the largest number found

    // Prompt the user for the number of elements
    printf("Enter the number of elements you wish to find the greatest element of: ");
    scanf("%d", &n);

    // Check if the input is valid
    if (n <= 0) {
        printf("Please enter a positive number of elements.\n");
        return 1;  // Exit with error code
    }

    // Prompt for the first number and initialize 'big' with it
    printf("Enter %d numbers:\n", n);
    printf("Enter element 1: ");
    scanf("%f", &big);

    // Process remaining numbers using a loop
    for (int i = 2; i <= n; i++) {
        float current;  // Variable to store the current number

        // Prompt for the current number
        printf("Enter element %d: ", i);
        scanf("%f", &current);

        // Compare with the current largest
        if (current > big) {
            big = current;  // Update 'big' if current number is larger
        }
    }

    // Display the result
    printf("The largest of the %d numbers is %.2f\n", n, big);

    return 0;
}

이 프로그램을 여러 가지 방법으로 확장할 수 있습니다.

  • 가장 큰 숫자와 가장 작은 숫자를 모두 찾습니다.
  • 모든 숫자의 평균을 계산합니다.
  • 숫자를 오름차순 또는 내림차순으로 정렬합니다.
  • 배열과 같은 더 복잡한 데이터 구조를 처리합니다.

이 랩이 C 프로그래밍 및 알고리즘적 사고의 기본을 이해하는 데 도움이 되었기를 바랍니다. 이러한 개념은 더 고급 프로그래밍 주제 및 문제 해결 기술의 기초를 형성합니다.