回 帖 发 新 帖 刷新版面

主题:[讨论]帮我看看这个程序有和错误


我只是想编一个数据类型为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个回复)

沙发

你定义的变量为double型,而输出语句里面却用的是%d!

板凳

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 楼

可是我把%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 楼

我这样写却能运行,我只是把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 楼

也行。函数指针只是个风格问题。并不是错误。但我还是觉得,可能明确的定义比较重要。你可看看我的代码。:)

6 楼


但是用double类型时怎么不对呀

7 楼

[quote]
但是用double类型时怎么不对呀[/quote]
float时用"%f",而double要求用"%lf"!

8 楼


太感谢啦  一语中的  谢谢谢谢谢谢谢谢谢谢谢谢谢谢

我来回复

您尚未登录,请登录后再回复。点此登录或注册