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
이 되어버립니다.이와 비슷한 오류와 다른 오류들이 여기저기 많이 있습니다.
댓글 입력