| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1379 人关注过本帖
标题:求5个函数积分的小程序,为这么编译的时候总出现这个错误:error C2664?求 ...
只看楼主 加入收藏
jinxin3256
Rank: 1
等 级:新手上路
帖 子:196
专家分:0
注 册:2007-9-7
收藏
 问题点数:0 回复次数:9 
求5个函数积分的小程序,为这么编译的时候总出现这个错误:error C2664?求高人指点

#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编辑过]

搜索更多相关主题的帖子: float 函数 高人 积分 
2007-09-07 15:27
zgx_921
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2007-9-4
收藏
得分:0 

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

看下还有什么问题啊


2007-09-07 17:21
jinxin3256
Rank: 1
等 级:新手上路
帖 子:196
专家分:0
注 册:2007-9-7
收藏
得分:0 
非常感谢!还有点不明白,为什么如果在函数定义f_intergral()中,如果把fuc改为(*fuc),是可行的,但在其函数体内不能改为(*fuc)?

代替leisure1980广告下: 群号45146331
2007-09-08 09:51
peswe
Rank: 1
等 级:新手上路
帖 子:197
专家分:0
注 册:2006-11-22
收藏
得分:0 

这其实根指针在函数中的传递是一样的道理了!~
例如:函数为:
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编辑过]


C斗士~~~fighting!!!!
2007-09-08 10:38
jinxin3256
Rank: 1
等 级:新手上路
帖 子:196
专家分:0
注 册:2007-9-7
收藏
得分:0 

谢谢!
可否理解为在函数定义中,用(*fuc)()定义的函数等同于fuc(),在调用时不能用(*fuc())而只能用fuc()?

[此贴子已经被作者于2007-9-8 10:49:01编辑过]


代替leisure1980广告下: 群号45146331
2007-09-08 10:42
雨中飞燕
Rank: 3Rank: 3
等 级:禁止访问
威 望:8
帖 子:2200
专家分:0
注 册:2007-8-9
收藏
得分:0 
以下是引用peswe在2007-9-8 10:38:25的发言:

这其实根指针在函数中的传递是一样的道理了!~
例如:函数为:
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/

2007-09-08 10:43
peswe
Rank: 1
等 级:新手上路
帖 子:197
专家分:0
注 册:2006-11-22
收藏
得分:0 
以下是引用jinxin3256在2007-9-8 10:42:12的发言:

谢谢!
可否理解为在函数定义中,用(*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编辑过]


C斗士~~~fighting!!!!
2007-09-08 11:03
jinxin3256
Rank: 1
等 级:新手上路
帖 子:196
专家分:0
注 册:2007-9-7
收藏
得分:0 
2):先定义后用地址负值:
int (*pfun)(int,int);
pfun=fun;

那么,可不可以认为这样定义后,pfun()=fun()?可以在后面的函数调用里直接用pfun()了吗
还是调用时,应该用(*pfun)()来进行调用?

代替leisure1980广告下: 群号45146331
2007-09-08 14:37
peswe
Rank: 1
等 级:新手上路
帖 子:197
专家分:0
注 册:2006-11-22
收藏
得分:0 

对,就跟将一个变量的地址值付给了一个指针一样,负值之后,pfun与fun指向同一块区域,pfun就与fun等价了!~ ^_^


C斗士~~~fighting!!!!
2007-09-08 14:42
jinxin3256
Rank: 1
等 级:新手上路
帖 子:196
专家分:0
注 册:2007-9-7
收藏
得分:0 

也就是说如果再用(*fun)(),就出现错误了对吗,老谭的书上就是这么写的(第二版P244),真晕晕啊

[此贴子已经被作者于2007-9-8 15:53:15编辑过]


代替leisure1980广告下: 群号45146331
2007-09-08 15:53
快速回复:求5个函数积分的小程序,为这么编译的时候总出现这个错误:error C266 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015613 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved