简单问题求解答:c语言梯形法求定积分

题目:按如下函数原型,采用梯形法编程实现,在积分区间[a,b]内计算函数y1=∫10(1+x2)dx和y2=∫30x1+x2dx的定积分。其中,指向函数的指针变量f用于接收被积函数的入口地址。
Integral(float (*f)(float), float a, float b);
**输出格式要求:"y1=%f\ny2=%f\n"

我的答案:请问哪里错了?
#include
#define n 10000

float y1(float x)
{
float y;
y = x*x + 1;
return y;

}

float y2(float x)
{
float y;
y = x/(x*x + 1);
return y;

}

Integral(float (*f)(float), float a, float b)
{
int i;
float w;
float h = (b-a)/n;
float s = f(a)+f(b);
for(i = 1;i < n; i++)
{
s += f(a + i*h);
}
w = s*h /2;
return w;

}

main()
{
float y11;
y11 = Integral( y1 , 0, 1);

float y22;
y22 = Integral( y2 , 0, 3);

printf("y1=%f\ny2=%f\n",y11,y22);
return 0;

}

1个回答

C语言是不允许对于函数指针f调用f()的(不过C++允许),如果要调用就用(*f)()。

weixin_43408535
-cfyjbjonn 回复_ZGq: okk谢谢
一年多之前 回复
weixin_43408535
-cfyjbjonn 我知道哪里错了,Integral(float (*f)(float), float a, float b)前面忘加float了......哭了,y2没错,不过这里复制过来出了问题,改过来了,你说的乘以二那里我也发现我做错了然后改过来了
一年多之前 回复
weixin_41461277
_ZGq y2函数是不是错了
一年多之前 回复
weixin_41461277
_ZGq 把Integral循环条件改成i<n-1。因为f(b)已经数过了,而你是在积0~n-1的分。
一年多之前 回复
weixin_41461277
_ZGq 回复_ZGq: 我忘后面还有一个/2呢。你检查一下y1和y2函数有没有错
一年多之前 回复
weixin_41461277
_ZGq 回复weixin_43408535: 我刚才理解错了……不过拆括号的时候为什么多除以了一个2呢?括号里除了f(a)和f(b)不乘2其它的都应该乘2呀
一年多之前 回复
weixin_43408535
-cfyjbjonn 回复_ZGq: 这个我百度的,然后他不是就是要很多个小梯形的面积相加吗,我就按这个做的
一年多之前 回复
weixin_43408535
-cfyjbjonn a区间起点,b积分区间中点, n是这个区间划分数。每一个划分的长度为h=(b-a)/n。每一个划分利用梯形算法来求积分,即:上底+下底乘以高再除以2。第一个小梯形面积为 (f(a) + f(a+h))*h/2,第二个为 (f(a+h)+f(a+2h))*h/2,依次类推。将这些加和加起来有: h*(f(a)/2 + f(a+h) + ... +f(a+(n-1)h) + f(b))/2)。预先将f(a)/2 和f(b)/2加起来,其它数据即f(a+h) + ... f(a+(n-1)n)用循环处理,然后将所有结果乘以h即可。
一年多之前 回复
weixin_41461277
_ZGq 梯形法不是算梯形的面积吗?S梯=(上底+下底)×高÷2
一年多之前 回复
weixin_43408535
-cfyjbjonn 回复_ZGq: emmm它不就是很多个小梯形循环加来的吗,那该怎么改啊?
一年多之前 回复
weixin_43408535
-cfyjbjonn 回复_ZGq: 还是不对,那里还有错啊?
一年多之前 回复
weixin_41461277
_ZGq 回复weixin_43408535: 如果是梯形法为什么还要循环加上小矩形面积呢?
一年多之前 回复
weixin_41461277
_ZGq 回复weixin_43408535: 是。另外s最开始要设为0吧
一年多之前 回复
weixin_43408535
-cfyjbjonn 所以这道题是把float s = f(a)+f(b)改成float s = (*f)(a) + (*f)(b),把s += f(a + i*h)改成s += (*f)(a + i*h)吗?那为什么结果还是不对啊??
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问