主题:[讨论]帮我看看这个程序有和错误
竹林听雨
[专家分:0] 发布于 2010-04-06 19:58:00
我只是想编一个数据类型为double类型的加减乘除运算,而且还要使用参数型函数指针
#include<stdio.h>
#include<stdlib.h>
double add(double,double);
double sub(double,double);
double chengfa(double,double);
double chufa(double,double);
double Math(double,double,double (*pfunc)(double,double));/*具有参数函数指针的函数原型*/
int main()
{
double x,y;
printf("输入x\n");
scanf("%d",&x);
printf("输入y\n");
scanf("%d",&y);
printf("------------------------------------------------------\n");
printf("%d+%d=%d\n",x,y,Math(x,y,add));
printf("%d-%d=%d\n",x,y,Math(x,y,sub));
printf("%dx%d=%d\n",x,y,Math(x,y,chengfa));
printf("%d/%d=%d\n",x,y,Math(x,y,chufa));
system ("pause");
return 0;
}
double Math(double a,double b,double (*pfunc)(double,double))
{
return (*pfunc)(a,b);
}
double add (double a,double b)
{
return a+b;
}
double sub(double a,double b)
{
return a-b;
}
double chengfa(double a,double b)
{
return a*b;
}
double chufa(double a,double b)
{
return a/b;
}
回复列表 (共8个回复)
沙发
quhailiang1984 [专家分:1720] 发布于 2010-04-06 20:27:00
你定义的变量为double型,而输出语句里面却用的是%d!
板凳
cxxcomp [专家分:2370] 发布于 2010-04-06 20:54:00
1.function pointer定义的有问题。
2.scanf 和 printf的格式有问题。基本就这些。这个功能这么写:
[code=c]
#include<stdio.h>
#include<stdlib.h>
double add(double,double);
double sub(double,double);
double chengfa(double,double);
double chufa(double,double);
typedef double (*PFUNC)(double,double);/*具有参数函数指针的函数原型*/
double Math(double, double, PFUNC pf);
int main()
{
double x,y;
printf("输入x:\n");
scanf("%lf", &x);
printf("输入y:\n");
scanf("%lf", &y);
printf("------------------------------------------------------\n");
printf("%lf+%lf=%lf\n",x,y,Math(x,y,add));
printf("%lf-%lf=%lf\n",x,y,Math(x,y,sub));
printf("%lf*%lf=%lf\n",x,y,Math(x,y,chengfa));
printf("%lf/%lf=%lf\n",x,y,Math(x,y,chufa));
system ("pause");
return 0;
}
double Math(double a,double b, PFUNC pf)
{
return pf(a,b);
}
double add (double a,double b)
{
return a+b;
}
double sub(double a,double b)
{
return a-b;
}
double chengfa(double a,double b)
{
return a*b;
}
double chufa(double a,double b)
{
return a/b;
}
[/code]
vc2003编译.gcc....均可。
3 楼
竹林听雨 [专家分:0] 发布于 2010-04-06 20:56:00
可是我把%d都改成%f后还是运行不对,怎么回事?修改后的程序如下:
#include<stdio.h>
#include<stdlib.h>
double add(double,double);
double sub(double,double);
double chengfa(double,double);
double chufa(double,double);
double Math(double,double,double (*pfunc)(double,double));/*具有参数函数指针的函数原型*/
int main()
{
double x,y;
printf("输入x\n");
scanf("%f",&x);
printf("输入y\n");
scanf("%f",&y);
printf("------------------------------------------------------\n");
printf("%f + %f = %f\n",x,y,Math(x,y,add));
printf("%f - %f = %f\n",x,y,Math(x,y,sub));
printf("%f x %f = %f\n",x,y,Math(x,y,chengfa));
printf("%f / %f = %f\n",x,y,Math(x,y,chufa));
system ("pause");
return 0;
}
double Math(double a,double b,double (*pfunc)(double,double))
{
return (*pfunc)(a,b);
}
double add (double a,double b)
{
return a+b;
}
double sub(double a,double b)
{
return a-b;
}
double chengfa(double a,double b)
{
return a*b;
}
double chufa(double a,double b)
{
return a/b;
}
4 楼
竹林听雨 [专家分:0] 发布于 2010-04-06 21:01:00
我这样写却能运行,我只是把double全改成了float,%d改成了%f.指针格式没变呀,为什么呢?能帮我解答一下吗?谢谢
#include<stdio.h>
#include<stdlib.h>
float add(float,float);
float sub(float,float);
float chengfa(float,float);
float chufa(float,float);
float Math(float,float,float (*pfunc)(float,float));/*具有参数函数指针的函数原型*/
int main()
{
float x,y;
printf("输入x\n");
scanf("%f",&x);
printf("输入y\n");
scanf("%f",&y);
printf("------------------------------------------------------\n");
printf("%f + %f = %f\n",x,y,Math(x,y,add));
printf("%f - %f = %f\n",x,y,Math(x,y,sub));
printf("%f x %f = %f\n",x,y,Math(x,y,chengfa));
printf("%f / %f = %f\n",x,y,Math(x,y,chufa));
system ("pause");
return 0;
}
float Math(float a,float b,float (*pfunc)(float,float))
{
return (*pfunc)(a,b);
}
float add (float a,float b)
{
return a+b;
}
float sub(float a,float b)
{
return a-b;
}
float chengfa(float a,float b)
{
return a*b;
}
float chufa(float a,float b)
{
return a/b;
}
5 楼
cxxcomp [专家分:2370] 发布于 2010-04-06 21:12:00
也行。函数指针只是个风格问题。并不是错误。但我还是觉得,可能明确的定义比较重要。你可看看我的代码。:)
6 楼
竹林听雨 [专家分:0] 发布于 2010-04-06 21:22:00
但是用double类型时怎么不对呀
7 楼
quhailiang1984 [专家分:1720] 发布于 2010-04-06 21:39:00
[quote]
但是用double类型时怎么不对呀[/quote]
float时用"%f",而double要求用"%lf"!
8 楼
竹林听雨 [专家分:0] 发布于 2010-04-06 21:44:00
太感谢啦 一语中的 谢谢谢谢谢谢谢谢谢谢谢谢谢谢
我来回复