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

포인터를 활용해 배열 요소를 검색하는 C 프로그램 작성 방법


문제 개요

C 언어로 프로그램을 작성하여, 실행 시간(런타임)에 사용자가 입력한 배열 안에서 특정 요소를 검색하고 그 결과를 화면에 출력해야 합니다. 만약 검색하려는 요소가 배열에 존재하지 않는다면 "요소를 찾을 수 없다"는 메시지를 표시하도록 합니다.

해결 방법

배열(Array)은 성격이 같은 여러 데이터를 하나의 이름 아래 묶어서 관리할 수 있는 자료구조입니다.

배열에서 수행할 수 있는 대표적인 연산은 다음과 같습니다.

  • 삽입(Insert)
  • 삭제(Delete)
  • 검색(Search)

알고리즘

포인터를 이용해 배열 내부의 요소를 검색하는 절차는 다음과 같습니다.

1단계 − 요소의 개수를 선언하고 입력받습니다.

2단계 − 런타임에 배열의 크기를 선언하고 입력받습니다.

3단계 − 배열의 각 요소를 입력받습니다.

4단계 − 포인터 변수를 선언합니다.

5단계 − 런타임에 메모리를 동적으로 할당합니다.

6단계 − 검색할 요소를 입력받습니다.

7단계 − 배열을 순회(traverse)하며 해당 요소가 존재하는지 확인합니다. 요소가 발견되면 "Yes"(존재함)를, 발견되지 않으면 "No"(존재하지 않음)를 출력합니다.

예제

배열의 크기: 5

배열의 요소는 다음과 같습니다.

1 2 3 4 5

검색할 요소 입력: 4

출력 결과는 다음과 같습니다.

4 is present in the array

예제 코드

다음은 포인터를 활용하여 배열에서 요소를 검색하는 C 프로그램입니다.

#include<stdio.h>
int i,l;
int search(int ,int *,int);
int main(){
    int n,m;
    printf("enter the size of array:");
    scanf("%d",&n);
    int a[n];
    printf("enter the elements:\n");
    for(i=0;i<n;i++){
        scanf("%d",&a[i]);
    }
    printf("enter the element to be searched:");
    scanf("%d",&m);
    search(n,a,m);
    return 0;
}
int search(int n,int *a,int m){
    for(i=0;i<n;i++){
        if(m==a[i]){
            l=1;
            break;
        }
    }
    if(l==1){
        printf("%d is present in the array",m);
    } else {
        printf("%d is not present in the array",m);
    }
}

실행 결과

위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.

Run 1:
enter the size of array:5
enter the elements:
14
12
11
45
23
enter the element to be searched:11
11 is present in the array
Run 2:
enter the size of array:3
enter the elements:
12
13
14
enter the element to be searched:45
45 is not present in the array

코드 설명

이 프로그램의 핵심 동작 원리는 다음과 같습니다.

  • 가변 길이 배열(VLA): int a[n]처럼 런타임에 입력받은 크기로 배열을 선언하여, 사용자가 지정한 크기만큼만 메모리를 사용합니다.
  • 포인터 매개변수: search() 함수는 배열 이름 a를 인자로 받는데, 이때 배열 이름은 첫 번째 요소의 주소를 가리키는 포인터(int *a)로 전달됩니다.
  • 선형 검색: 함수 내부에서는 인덱스 0부터 n-1까지 배열을 순회하며 검색값 m과 일치하는 요소가 있는지 비교합니다.
  • 플래그 변수: 일치하는 요소를 찾으면 l=1로 설정하고 break로 반복을 종료하여 불필요한 비교를 줄입니다.