数学公式不输出我想要的结果

时间:2016-03-01 23:06:18

标签: c math

该计划的目的是计算每个深度的体积。输入是半径和长度,在这个测试案例中它们分别是2.1和5.6。我的音量一直是0,1,2,3和4,但这不是正确的音量,深度/高度是正确的,所以也许有人可以解释我的等式下面的错误是什么?

enter image description here

这是计算音量的功能

int getVolume(double arrplotptr[][col], double *arr2ptr, char *nameptr)
{
    double vol, h, diam, ctr, rad, len, x;
    int i, j;

    rad = arr2ptr[radius];
    len = arr2ptr[length];
    diam = (rad * 2);
    ctr = diam / 100;
    h = 0;

    for (j = 0; j < 100; j++) {
        h = h + ctr;
        arrplotptr[0][j] = h;
    }
    h = 0;

    for (i = 0; i < 100; i++) {
        h = h + ctr;
        x = (rad - h) / rad;
        vol = ((rad * rad) * acos(x) - (rad - h) * (sqrt((2 * rad * h) - (h * h)))) * len;
        arrplotptr[1][i] = vol;
    }
}

2 个答案:

答案 0 :(得分:2)

我在您的代码中看到了几个问题:

  • 为什么使用ctr = rad / 100;代替getVolume
  • 您不会从ul返回值,如果调用函数依赖于返回值,则会调用未定义的行为。
  • 您存储每个切片的音量,但不计算总音量。你没有发布那样做的代码,也许那里也有问题。

答案 1 :(得分:0)

正如chqrlie所写,我认为你应该改变

ctr = diam / 100;

ctr = rad / 100;

并且,如EOF所写,该函数被定义为&#34; int&#34;但没有回报;你应该将它重新定义为&#34; void&#34;或者返回一个整数值。

我补充一点,似乎没有必要进行双循环:在每次迭代中,你都可以计算出&#34; h&#34;,&#34; x&#34;,&#34; vol&#34;并保存&#34; arrplotptr&#34;。

的两个值

我建议简化功能如下

void getVolume (double arrplotptr[][col], double arr2ptr[])
 {
   double const rad = arr2ptr[radius];
   double const len = arr2ptr[length];
   double const ctr = rad / 100;

   int     i;
   double  h;

   for ( i = 0, h = ctr ; i < 100 ; ++i, h+=ctr )
    {
      arrplotptr[0][i] = h;
      arrplotptr[1][i] = ((rad * rad) * acos((rad - h) / rad) 
              - (rad - h) * (sqrt((2 * rad * h) - (h * h)))) * len;
    } 
}