Computer >> 컴퓨터 >  >> 프로그램 작성 >> C 프로그래밍

Variadic 함수를 사용하여 합계, 최대값 및 최소값을 찾는 C 프로그램

<시간/>

여러 인수를 사용할 수 있는 일부 함수를 만들고자 한다고 가정하고 인수의 고정된 수는 없습니다. 우리는 세 가지 함수 sum(), max() 및 min()을 만들고 싶습니다. 그들은 숫자의 합, 숫자의 최대값 및 주어진 숫자의 최소값을 각각 계산할 수 있습니다. 이러한 각 함수는 첫 번째 인수로 count 개수의 인수를 사용합니다. 이러한 유형의 함수를 정의하려면 함수 인수에 세 개의 점 줄임표(...)를 사용해야 합니다. 그것을 사용하려면 stdarg.h 헤더 파일을 포함해야 합니다. 이러한 유형의 함수를 variadict 함수라고 합니다. 가변 인자에 접근하기 위해 우리가 알아차릴 수 있는 4가지 다른 것이 있습니다 -

  • va_list :주어진 모든 인수를 저장합니다.

  • va_start :변수 인수 ap 변수에 액세스하기 시작합니다.

  • va_arg :주어진 유형의 다음 인수를 검색하는 데 사용됩니다.

  • va_end :변수 인수 목록 액세스를 종료합니다.

따라서 −;

와 같은 함수를 호출하면
  • 합(5, 5, 2, 8, 9, 3)
  • 최대(3, 5, 9, 2)
  • 분(6, 8, 5, 2, 6, 7, 9)

그러면 출력은 27(5개 숫자의 합계), 9(주어진 3개 숫자의 최대값), 2(주어진 6개 숫자의 최소값)가 됩니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

함수 sum()을 정의하면 cnt가 사용되며 가변 개수의 인수가 필요합니다.

  • va_list 앱 정의
  • va_start(ap, cnt)로 ap 초기화
  • n :=0
  • i를 초기화하려면:=0, i
  • n :=n + va_arg(ap, int)에 의한 다음 인수
  • va_end(ap)로 ap 액세스 종료
  • 반환 n
  • 함수 min()을 정의합니다. 이것은 cnt와 가변 개수의 인수를 사용합니다.
  • va_list 앱 정의
  • va_start(ap, cnt)로 ap 초기화
  • 최소:=99999
  • i를 초기화하려면:=0, i
  • current :=va_arg(ap, int)에 의한 다음 인수
  • 현재 <최소값이면:
    • 최소:=현재
  • va_end(ap)로 ap 액세스 종료
  • 최소 수익
  • max() 함수를 정의하면 cnt가 사용되며 다양한 인수 수가 필요합니다.
  • va_list 앱 정의
  • va_start(ap, cnt)로 ap 초기화
  • 최대:=0
  • i를 초기화하려면:=0, i
  • current :=va_arg(ap, int)에 의한 다음 인수
  • 현재> 최대인 경우:
    • 최대:=현재
  • va_end(ap)로 ap 액세스 종료
  • 최대 반환
  • 예시

    이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

    #include <stdio.h>
    #include <stdarg.h>
    int sum (int cnt,...) {
        va_list ap;
        int i, n;
        va_start(ap, cnt);
        n = 0;
        for (i=0;i<cnt;i++){
            n += va_arg(ap, int);
         }
        va_end(ap);
        return n;
    }
    int min(int cnt,...) {
        va_list ap;
        int i, current, minimum;
        va_start(ap, cnt);
        minimum = 99999;
        for (i=0;i<cnt;i++){
            current = va_arg(ap, int);
            if (current < minimum)
                minimum = current;
        }
        va_end(ap);
        return minimum;
    }
    int max(int cnt,...) {
        va_list ap;
        int i, current, maximum;
        va_start(ap, cnt);
        maximum = 0;
        for (i=0;i<cnt;i++){
            current = va_arg(ap, int);  
            if (current > maximum)
                maximum = current;
        }
        va_end(ap);
        return maximum;
    }
    int main(){
        printf("%d\n",sum(5, 5, 2, 8, 9, 3));
        printf("%d\n",max(3, 5, 9, 2));
        printf("%d\n",min(6, 8, 5, 2, 6, 7, 9));
    }
    

    입력

    sum(5, 5, 2, 8, 9, 3)
    max(3, 5, 9, 2)
    min(6, 8, 5, 2, 6, 7, 9)

    출력

    27
    9
    2