c언어 결과값이 계속 0이 나옵니다.

조회수 992회

fomula1과 fomula2함수의 리턴값을 바꾸면 값이 나올 것 같긴 한데, 값이 계속 0이 나옵니다. 조그마한 팁이라도 얻을 수 있을까요?

이런 값을 얻고싶습니다.

이미지

#include <stdio.h>
#include <math.h>

double fomula1(double (*pf1)(double), double n);
double fomula2(double m);
int comb(int n);
int factorial(int n);

int main() {
    printf("%.3lf\n", fomula1(fomula2, 3.0));
    return 0;
}

int comb(int n) {
    factorial(2 * n) / factorial(n) * factorial(n);
    return (int)comb;
};

int factorial(int n) {
    int p;
    for (p = n; p >= 1; p--)
        n *= p;
    return (int)factorial;
}

double fomula1(double (*pf1)(double), double n) {
    int i;
    int result, sum = 0;
    for (i = 1; i < n + 1; i++) {
        result = (1 / 2) * ((int)pf1);
        sum = sum + result;
    };
    return sum;
}

double fomula2(double m) {
    int k;
    int result, sum;
    result, sum = 0;
    for (k = 1; k < m + 1; k++) {
        result = 1 + comb(2 * k) * (1 / pow((2 + k), k));
        sum += result;
    };
    return sum;
}

2 답변

  • 전 수알못이기 때문에 검증 / 수식중 오류에 대해서는 수정이 불가능합니다.

    다만 코드에 의아한점이 있네용 아래 내용 주석 참고해주세용

    #include <stdio.h>
    #include <math.h>
    
    double fomula1(double (*pf1)(double), double n);
    double fomula2(double m);
    int comb(int n);
    int factorial(int n);
    
    int main() {
        printf("%f\n", fomula1(fomula2, 3.0));
        return 0;
    }
    
    /*
    int comb(int n) {
        factorial(2 * n) / factorial(n) * factorial(n);
        return (int)comb; 이건 comb함수의 주소값..
    };
    */
    
    int comb(int n) {
        int q = 0;
        q = factorial(2 * n) / factorial(n) * factorial(n);
        return q;
    };
    
    /* 
    int factorial(int n) {
        int p;
        for (p = n; p >= 1; p--)
            n *= p;
        return (int)factorial; 이건.. factorial 함수 의 주소값...
    }
    */
    
    int factorial(int n) {
        if (n <= 1) return 1;
        return n * factorial(n - 1);
    }
    
    double fomula1(double (*pf1)(double), double n) {
        int i;
        //int result, sum = 0; return 이 double 이면 double로
        double result, sum = 0.0;
        for (i = 1; i < n + 1; i++) {
            //result = (1 / 2) * ((int)pf1); pf1는 함수 포인터값임. 해당 함수의 주소값을 쓸게 아니라면 파라미터 넣어야함.
            result = pf1(i) / 2; // pf1의 파라미터는 임의값으로 넣었음.
            sum = sum + result;
        };
        return sum;
    }
    
    double fomula2(double m) {
        int k;
       //int result, sum = 0; return 이 double 이면 double로
        double result, sum = 0;
        for (k = 1; k < m + 1; k++) {
            result = 1 + (double)comb(2 * k) * (1 / pow((2 + k), k));
            sum += result;
        };
        return sum;
    }
    
  •         result = (1 / 2) * ((int)pf1);
    

    여기서 보면, (1/2) 가 먼저 계산되고, int 나누기 int 이기 때문에 이 값이 0이 됩니다. 0에 어떤 값을 곱하더라도 모두 0이 되어버립니다.

    이와 비슷한 오류와 다른 오류들이 여기저기 많이 있습니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)