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