#include <stdio.h>
#include <math.h>
int main()
{float f1(float); /*函数声明*/
float f2(float); /*函数声明*/
float f3(float); /*函数声明*/
float f4(float); /*函数声明*/
float f5(float); /*函数声明*/
float intergral(float,float,float (*fun)()); /*函数声明*/
float a,b;
printf("enter a,b:"); /*输入定积分限*/
scanf("%f,%f",&a,&b);
printf("f1's value is:");
intergral(a,b,f1);
printf("f2's value is:");
intergral(a,b,f2);
printf("f3's value is:");
intergral(a,b,f3);
printf("f4's value is:");
intergral(a,b,f4);
printf("f5's value is:");
intergral(a,b,f5);
return 0;
}
float f1(float x) /*函数定义*/
{float y;
y=x*(1+x);
return(y);
}
float f2(float x) /*函数定义*/
{float y;
y=x*(2*x+3);
return(y);
}
float f3(float x) /*函数定义*/
{float y;
y=exp(x)+1;
return(y);
}
float f4(float x) /*函数定义*/
{float y;
y=(1+x)*(1+x);
return(y);
}
float f5(float x) /*函数定义*/
{float y;
y=pow(x,3);
return(y);
}
void intergral(float a,float b,float (*fun)(float)) /*函数定义*/
{float t1=a,t2=b,f_incre=0.000001,result=(fun(a))*f_incre;
while(t1<t2)
{t1=t1+f_incre;
result=result+(fun(t1))*f_incre;
}
printf("%10.6e\n",result);
}
................: error C2664: 'intergral' : cannot convert parameter 3 from 'float (float)' to 'float (__cdecl *)(void)'
[此贴子已经被作者于2007-9-8 11:41:58编辑过]
----------------解决方案--------------------------------------------------------
#include <stdio.h>
#include <math.h>
float f1(float x) /*函数定义*/
{
return((float)(x*(1+x)));
}
float f2(float x) /*函数定义*/
{
return((float)(x*(2*x+3)));
}
float f3(float x) /*函数定义*/
{
return((float)(exp(x)+1));
}
float f4(float x) /*函数定义*/
{
return((float)((1+x)*(1+x)));
}
float f5(float x) /*函数定义*/
{
return((float)(pow(x, 3)));
}
void f_intergral(float a,float b, float fuc(float)) /*函数定义*/
{
float t1=a, t2=b, f_incre=(float)0.000001, resul=(fuc(a))*f_incre;
while(t1 < t2)
{
t1 += f_incre;
resul = resul+(fuc(t1))*f_incre;
}
printf("%10.6e\n", resul);
return;
}
int main()
{
float a, b;
printf("enter a,b: "); /*输入定积分限*/
scanf("%f,%f", &a, &b);
printf("f1's value is: ");
f_intergral(a, b, f1);
printf("f2's value is: ");
f_intergral(a, b, f2);
printf("f3's value is: ");
f_intergral(a, b, f3);
printf("f4's value is: ");
f_intergral(a, b, f4);
printf("f5's value is: ");
f_intergral(a, b, f5);
return 0;
}
看下还有什么问题啊
----------------解决方案--------------------------------------------------------
非常感谢!还有点不明白,为什么如果在函数定义f_intergral()中,如果把fuc改为(*fuc),是可行的,但在其函数体内不能改为(*fuc)?
----------------解决方案--------------------------------------------------------
这其实根指针在函数中的传递是一样的道理了!~
例如:函数为:
int fun(int *a,int b)
{
a=&b;
}
函数的功能是将b的值付给a,当然也可以用“*a=b”这条语句来达到效果;但是函数名代表的是“函数代码区的首地址值”,就是说,函数名根数组名有点像,也是地址值,那么,就只能用a=&b来实现了,在函数定义f_intergral()中(*fuc),加星号只是为了说明它是指针而已!~
表达能力有限,说的有点乱,不知道说清除了没!~ ^_^,反正你想一下根数组名有点相同就可以了!~
以下是根据你的程序我改的,你对比以下看看:(特别是函数要加返回值!~不加的话,默认是int型的)
#include <stdio.h>
#include <math.h>
float f1(float); /*函数声明*/
float f2(float); /*函数声明*/
float f3(float); /*函数声明*/
float f4(float); /*函数声明*/
float f5(float); /*函数声明*/
void integeral(float,float,float (*fun)(float)); /*函数声明*/
int main()
{
float a,b;
printf("enter a,b:"); /*输入定积分限*/
scanf("%f,%f",&a,&b);
printf("f1's value is:");
integeral(a,b,f1);
printf("f2's value is:");
integeral(a,b,f2);
printf("f3's value is:");
integeral(a,b,f3);
printf("f4's value is:");
integeral(a,b,f4);
printf("f5's value is:");
integeral(a,b,f5);
return 0;
}
float f1(float x) /*函数定义*/
{float y;
y=x*(1+x);
return(y);
}
float f2(float x) /*函数定义*/
{float y;
y=x*(2*x+3);
return(y);
}
float f3(float x) /*函数定义*/
{float y;
y=exp(x)+1;
return(y);
}
float f4(float x) /*函数定义*/
{float y;
y=(1+x)*(1+x);
return(y);
}
float f5(float x) /*函数定义*/
{float y;
y=pow(x,3);
return(y);
}
void integeral(float a,float b,float (*fun)(float)) /*函数定义*/
{float t1=a,t2=b,f_incre=0.000001,result=(fun(a))*f_incre;
while(t1<t2)
{t1=t1+f_incre;
result=result+(fun(t1))*f_incre;
}
printf("%10.6e\n",result);
}
[此贴子已经被作者于2007-9-8 10:40:01编辑过]
----------------解决方案--------------------------------------------------------
谢谢!
可否理解为在函数定义中,用(*fuc)()定义的函数等同于fuc(),在调用时不能用(*fuc())而只能用fuc()?
[此贴子已经被作者于2007-9-8 10:49:01编辑过]
----------------解决方案--------------------------------------------------------
这其实根指针在函数中的传递是一样的道理了!~
例如:函数为:
int fun(int *a,int b)
{
a=&b;
}
函数的功能是将b的值付给a,当然也可以用“*a=b”这条语句来达到效果
这是什么道理?
by 雨中飞燕 QQ:78803110 QQ讨论群:5305909
[url=http://bbs.bc-cn.net/viewthread.php?tid=163571]请大家不要用TC来学习C语言,点击此处查看原因[/url]
[url=http://bbs.bc-cn.net/viewthread.php?tid=162918]C++编写的Windows界面游戏[/url]
[url=http://yzfy.org/]C/C++算法习题(OnlineJudge):[/url] http://yzfy.org/
----------------解决方案--------------------------------------------------------
谢谢!
可否理解为在函数定义中,用(*fuc)()定义的函数等同于fuc(),在调用时不能用(*fuc())而只能用fuc()?
函数指针根普通指针也有一些相同之处,它的定义也有两种方式:(以pfun指向函数fun(int,int)函数为例!~)
1):采取初始化的方式:
int (*pfun)(int,int)=fun;
2):先定义后用地址负值:
int (*pfun)(int,int);
pfun=fun;
[此贴子已经被作者于2007-9-8 11:04:28编辑过]
----------------解决方案--------------------------------------------------------
2):先定义后用地址负值:
int (*pfun)(int,int);
pfun=fun;
那么,可不可以认为这样定义后,pfun()=fun()?可以在后面的函数调用里直接用pfun()了吗
还是调用时,应该用(*pfun)()来进行调用?
----------------解决方案--------------------------------------------------------
对,就跟将一个变量的地址值付给了一个指针一样,负值之后,pfun与fun指向同一块区域,pfun就与fun等价了!~ ^_^
----------------解决方案--------------------------------------------------------
也就是说如果再用(*fun)(),就出现错误了对吗,老谭的书上就是这么写的(第二版P244),真晕晕啊
[此贴子已经被作者于2007-9-8 15:53:15编辑过]
----------------解决方案--------------------------------------------------------