Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어 포인터를 활용해 세 수 중 가장 큰 수 찾는 방법

포인터(Pointer)는 다른 변수의 메모리 주소를 저장하는 변수입니다. 포인터를 사용하면 null 값을 다룰 수 있으며, 참조에 의한 전달(pass by reference) 방식으로 데이터에 접근할 수 있습니다. 또한 포인터 변수를 선언할 때 반드시 초기화할 필요는 없습니다.

포인터의 기본 문법

포인터의 기본적인 선언 및 대입 문법은 다음과 같습니다.

pointer_variable = &another_variable;

예를 들어, 변수 a의 주소를 포인터 p에 저장하려면 아래와 같이 작성합니다.

p = &a;

여기서 &(주소 연산자)는 변수가 메모리에 저장된 주소값을 반환하며, 포인터 앞에 붙는 *(간접 참조 연산자)는 해당 주소에 저장된 실제 값에 접근할 때 사용됩니다.

알고리즘

포인터를 활용하여 세 개의 숫자 중 가장 큰 수를 찾는 알고리즘은 다음과 같습니다.

Step 1: 시작
Step 2: 정수형 변수 선언
Step 3: 포인터 변수 선언
Step 4: 콘솔로부터 3개의 숫자 입력받기
Step 5: 각 숫자의 주소를 포인터 변수에 대입
Step 6: 만약 *p1 > *p2라면
        - *p1 > *p3이면 → p1이 가장 큰 값 출력
        - 그렇지 않으면 → p3이 가장 큰 값 출력
Step 7: 그렇지 않고 *p2 > *p3이면 → p2가 가장 큰 값 출력
        - 둘 다 아니면 → p3이 가장 큰 값 출력
Step 8: 종료

C 프로그램 코드

다음은 포인터를 이용해 세 개의 숫자 중 가장 큰 수를 찾는 전체 C 프로그램입니다.

#include <stdio.h>
int main(){
    int num1, num2, num3;
    int *p1, *p2, *p3;
    printf("enter 1st no: ");
    scanf("%d",&num1);
    printf("enter 2nd no: ");
    scanf("%d",&num2);
    printf("enter 3rd no: ");
    scanf("%d",&num3);
    p1 = &num1;
    p2 = &num2;
    p3 = &num3;
    if(*p1 > *p2){
        if(*p1 > *p3){
            printf("%d is largest ", *p1);
        }else{
            printf("%d is largest ", *p3);
        }
    }else{
        if(*p2 > *p3){
            printf("%d is largest ", *p2);
        }else{
            printf("%d is largest ", *p3);
        }
    }
    return 0;
}

코드 설명

  • num1, num2, num3: 사용자에게 입력받은 세 개의 정수를 저장하는 일반 변수입니다.
  • p1, p2, p3: 각각 세 변수의 메모리 주소를 저장하는 포인터 변수입니다.
  • *p1, *p2, *p3: 포인터를 역참조(dereference)하여 실제 저장된 값에 접근합니다.
  • 중첩된 if-else 조건문을 통해 세 값 중 최댓값을 비교하고 출력합니다.

실행 결과

위 프로그램을 실행하면 다음과 같은 결과를 확인할 수 있습니다.

Run 1:
enter 1st no: 35
enter 2nd no: 75
enter 3rd no: 12
75 is largest
Run 2:
enter 1st no: 53
enter 2nd no: 69
enter 3rd no: 11
69 is largest

마무리

이 예제는 포인터의 핵심 개념인 주소 저장역참조를 활용한 기초적인 프로그래밍 연습입니다. 포인터를 직접 사용하지 않아도 같은 결과를 낼 수 있지만, 포인터를 통해 변수의 주소에 접근하고 값을 읽어오는 과정을 익히면 함수에서 참조에 의한 전달, 동적 메모리 할당, 배열 처리 등 더 고급 C 언어 기능을 학습하는 데 큰 도움이 됩니다.