f429789906 发表于 2019-11-14 16:59:46

关于外部函数的输出问题

本帖最后由 f429789906 于 2019-11-14 16:59 编辑

新手一枚,求助各位大佬,为什么会是这样的输出结果?

代码如下:
第一个文件:
file1.c
#include<stdio.h>
#include<math.h>
int main()
{
        extern one_number(double,double,double);
        double a,b,c,n,x;
        printf("输入三个数字:");
        scanf("%lf,%lf,%lf",&a,&b,&c);
        n=b*b-4*a;
        x=one_number(a,b,n);
        printf("%lf\n",x);
        return 0;
}

第二个文件:
file2.c
double one_number(double j,double k,double l)
{
        double y;
        y=(sqrt(l)-k)/2*j;
        return(y);
}

输出结果:
“输入三个数字:1,4,1
1076363903.0000000”

想请教一下,为什么会输出这个数,哪里出了问题

superbe 发表于 2019-11-14 19:08:01

本帖最后由 superbe 于 2019-11-14 19:11 编辑

extern double one_number(double,double,double);少了double
输入时注意1,4,1要用半角逗号(和scanf格式对应)
好象这是求一元二次方程的其中一个根?如果是的话公式有点问题:
n=b*b-4*a; 应该是 n=b*b-4*a*c;
y=(sqrt(l)-k)/2*j; 应该是 y=(sqrt(l)-k)/(2*j);
是这样的吧,记不清了。
建议对 delta (即b*b-4*a*c)正负和0判断,区分情况。

f429789906 发表于 2019-11-14 23:27:11

superbe 发表于 2019-11-14 19:08
extern double one_number(double,double,double);少了double
输入时注意1,4,1要用半角逗号(和scanf格式 ...

我原本最开始就是设计一个分delta情况解方程的程序,但输出的结果都不是我想要的,我就不断简化,想找出哪个部分出了问题,但还是没找到哪里出了问题{:10_266:},最后简化成上面的程序发来求助{:10_266:}。刚刚我按你所说的加上了漏掉的double,结果还是很奇怪{:10_285:}{:10_285:},不知道怎么搞了

f429789906 发表于 2019-11-14 23:41:25

superbe 发表于 2019-11-14 19:08
extern double one_number(double,double,double);少了double
输入时注意1,4,1要用半角逗号(和scanf格式 ...

不知道为什么我把y=(sqrt(l)-k)/(2*j);换成y=(l-k)/(2*j);,程序输出的结果是符合逻辑的,而有sqrt()的时候输出的结果就不符合逻辑了,而且数很大

superbe 发表于 2019-11-15 01:55:58

你把 #include <math.h> 移到 file2.c 中试试呢。

f429789906 发表于 2019-11-15 22:49:09

superbe 发表于 2019-11-15 01:55
你把 #include移到 file2.c 中试试呢。

移过去就可以了,哈哈哈,谢谢你{:10_323:}
页: [1]
查看完整版本: 关于外部函数的输出问题