为什么我会得到零?

时间:2014-12-10 20:03:26

标签: c function pointers logic

我正在尝试将一个函数传递给另一个集成的函数,并且我不断获得零。我不确定这是否是我传递参数的方式,或者它是否只是数学中的逻辑错误。这是功能。

double linear(double x){
  return x;
}

double quadratic(double x){
  return x*x;
}

double sinByX(double x){
  return sin(x)/x;
}

double rectangleIntegration(double a, double b, double n, double (*f)(double)){
  double integral = 0;
  double h = (b-a) / n;
  int i;
  for (i = 0; i < n; i++){
    integral = (f(a + (i * h))) * h;
  }
  return integral;
}

double trapazoidIntegration(double a, double b, double n, double (*f)(double)){
  double integral = 0;
  double h = (b-a) / n;
  int i;
  for (i = 0; i < n; i++){
    ((f(a+(i*h)) + f(a+((i+1)*h))) / 2) * h;
  }
  return integral;
}

double simpsonIntegration(double a, double b, double n, double (*f)(double)){
  double integral = 0;
  double h = (b-a) / n;
  int i;
  for (i = 0; i < n; i++){
    integral = (4*f((f(a+(i*h)) + f(a+((i+1)*h)))/2)) + f(a + (i*h)) + f(a + ((i + 1)*h));
  }
  return integral;
}

这就是我称之为......

double a = rectangleIntegration(2, 4, 2, linear(2));
  printf("%f\n", a);

  a = trapazoidIntegration(2, 4, 2, linear(2));
  printf("%f\n", a);

  a = simpsonIntegration(2, 4, 2, linear(2));
  printf("%f\n", a);

并打印

0.000000
0.000000
0.000000

2 个答案:

答案 0 :(得分:1)

传递像这样的函数参数

a = rectangleIntegration(2, 4, 2, linear(2));

本身不应该使用任何参数,它只是函数的名称,它是从rectangleIntegration()调用的。如上所述,它不会编译。

您调用它的方式就好像传递了linear()的返回值,而不是函数本身。试试这个

a = rectangleIntegration(2, 4, 2, linear);

答案 1 :(得分:0)

尝试rectangleIntegration(2, 4, 2, linear);