关于外部函数的输出问题
本帖最后由 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: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判断,区分情况。 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:},不知道怎么搞了 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()的时候输出的结果就不符合逻辑了,而且数很大 你把 #include <math.h> 移到 file2.c 中试试呢。 superbe 发表于 2019-11-15 01:55
你把 #include移到 file2.c 中试试呢。
移过去就可以了,哈哈哈,谢谢你{:10_323:}
页:
[1]