gpt4 book ai didi

C 程序校准

转载 作者:行者123 更新时间:2023-11-30 15:14:45 25 4
gpt4 key购买 nike

问题:要测量 jar 中液体的体积,可以使用深度计(量尺)。它插入顶部的开口中,可以根据仪表上的液位来确定 jar 中的液体量。

水箱的宽度为 w,高度为 h,长度为 len(单位为米)。在下面显示的示例输出中,我们采用 w=8、h=4 和 len=7。您的程序应该适用于 w、h 和 len 的任何值,而不仅仅是这些特定值。

我们考虑插入一根已经以 10 厘米为单位校准过的量尺。该测量计可以插入 jar 顶部的开口中,用于测量 jar 内液体的深度。

您的任务是编写一个 C 程序来生成一个值表,显示仪表上每个点的 jar 中液体体积。

程序的输出(对于上面的示例)应如下所示:

深度10厘米:体积1.188814立方米

深度20厘米:体积3.336448立方米

深度30厘米:体积5.992683立方米。 。 .

深度380厘米:体积172.547399立方米

深度 390 厘米:体积 174.657114 立方米

深度 400 厘米:体积 175.743037 立方米

方法论:如果水箱的宽度为 W,高度为 H(以厘米为单位),则横截面的焦点半径为 A = W/2 和 B = H/2。那么椭圆的方程为:X^2/A^2 + Y^2/B^2 = 1

要找到给定深度的体积,您应该使用数值积分计算每个给定深度的储 jar 横截面积梯形法等算法。

 #include <stdio.h>
#include <math.h>
#include <stdlib.h>
double WIDTH;
double HEIGHT;
double LENGTH;

//Function: y in terms of x
typedef double (*DFD) (double);
double f (double x)
{
double a = HEIGHT / 2.0;
double b = WIDTH / 2.0;
double y = (b / a) * sqrt (a * a - x * x);

return y;
}

//Integrating the function -> Area
double trapezoidal_int (DFD f ,double a, double b, int n){

double x, dx, sum=0.0;
int i=0;
dx = (b-a)/ n;
sum = (f(a) + f(b))/2;
for (i=1, x = a + dx; i < n; i++, x += dx)
sum += f(x);
return 2.0 * sum * dx;
}

int main ()
{
int h_cm;
printf ("Enter Width of the tank (in m):\n");
scanf ("%lf",&WIDTH);

printf ("Enter Height of the tank (in m):\n");
scanf ("%lf",&HEIGHT);

printf ("Enter Length of the tank(in m):\n");
scanf ("%lf",&LENGTH);

for (h_cm = 0; h_cm <= HEIGHT * 100; h_cm += 10) {
double h = h_cm / 100.0;
double area = trapezoidal_int (&f, HEIGHT / 2 - h, HEIGHT / 2, 100);
double volume = area * LENGTH;

printf ("Depth %d cm: Volume %.6lf cubic metres\n",
h_cm, volume);
}

return 0;
}

最佳答案

这里和那里有一些错误。首先,我们使用全局变量来表示水箱的尺寸,以便函数 f() 可以使用它们:

double WIDTH;
double HEIGHT;
double LENGTH;

函数 f() 的高度和宽度颠倒了:

double f (double x)
{
double a = HEIGHT / 2.0;
double b = WIDTH / 2.0;
double y = (b / a) * sqrt (a * a - x * x);

return y;
}

测量长轴两侧所需的积分值加倍,应在 main() 中完成,而不是在 trapezoidal_int() 中完成。拥有一个不做其名称所暗示的功能的函数是不好的做法。

整合的界限也是错误的:

int main ()
{
int h_cm;

WIDTH = 8.0;
HEIGHT = 4.0;
LENGTH = 7.0;

for (h_cm = 0; h_cm <= HEIGHT * 100; h_cm += 10) {
double h = h_cm / 100.0;
double area = 2.0 * trapezoidal_int (&f, HEIGHT / 2 - h,
HEIGHT / 2, 100);
double volume = area * LENGTH;

printf ("Depth %d cm: Volume %.6lf cubic metres\n",
h_cm, volume);
}

return 0;
}

关于C 程序校准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33928064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com