2016-03-01 33 views
1

程序的目的是计算每个深度处的体积。输入是半径和长度,在这个测试案例中它们分别是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; 
    } 
} 
+1

为什么你使用'CTR =直径/ 100;'的',而不是点击率=弧度/ 100;'? – chqrlie

+3

我没有看到'返回'的函数声明返回'int'中的表达式。未定义的行为。 – EOF

+2

你可以把你的代码变成MWE吗?即,打印出计算结果的主程序? –

回答

2

我看到你的代码的几个问题:

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

ctr = diam/100给出的圆柱体积达到100%满。总体积将为h = 2 * rad的体积。鉴于风格,我猜测返回值应该表示成功,而不是体积。 –

0

至于写chqrlie,我想你应该改变

ctr = diam/100; 

ctr = rad/100; 

而且,作为写EOF,该功能被定义为 “INT”,但没有返回值;您应该将其重新定义为“无效”或返回一个整数值。

我补充说,它似乎没有必要双循环:在每次迭代中,您可以计算“h”,“x”,“vol”并保存“arrplotptr”的两个值。

我建议简化的功能如下

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; 
    } 
}