c语言求一元二次方程的解,精度要求1e-6,请问我的代码if条件那步错在哪里了,为什么得不出解呢?

如题所述

应该没问题TED呀,显示什么呢。要先判断d是不是<0,再计算ef,因为用到了sqrt(d)。
温馨提示:内容为网友见解,仅供参考
第1个回答  2019-03-15
#include <stdio.h>
#include <math.h>
int main(){
double a,b,c,d,e,f;
scanf("%lf,%lf,%lf",&a,&b,&c);
d=b*b-4*a*c;
if(d<0){
    printf("无实根\n");
}else{
         e=(-b+sqrt(d))/2/a;
         f=(-b-sqrt(d))/2/a;
         printf("%.6lf\n%.6lf",e,f);
}
return 0;
}

追问

你这个不对呀,我输入答案应该是相等根的值结果显示无实根ヾ(・ω・`。)

追答

我试过没问题的,你是不是输入格式错了?

本回答被提问者采纳
第2个回答  2019-03-15
在第7行后,应该首先判断:
if(d<0)printf("无实根");
else{
...............再计算e和f,再输出。
}
还有,不应该是printf("%.4lf......),应该是%.6lf(或直接省略,写为%lf即可)追问

额,但是这么改了以后还是不对呀ヾ(・ω・`。)

还有.4lf是题目要求哒ヾ(・ω・`。)

追答

精度要求1e-6
怎么是.4lf呢?

追问

c语言求一元二次方程的根
else { if(data<1e-6){ q=(double)sqrt(-data)\/(2*a);printf("有两个虚根%.2lf+%.2lfi,%.2lf-%.2lfi\\n",p,q,p,q);} else { x1=x2=p;printf("有两个等根%.2lf,%.2lf\\n",x1,x2);} } 将后一级的if-else用括号括起来试试 ...

求二次方程的根不知道哪儿错了,C语言高手进..
{printf("无解!");} else if(abs(h-0.0)<1e-6) \/\/关键是这里,浮点型变量不能直接和0比较(和浮点型变量在内存中存储方式有关),只能这么和0比较``abs是绝对值函数,即|h-0.0|,1e-6就是10的-6次方;{ j=-b\/(a*2);printf("%lf",j); \/\/在这里你写的是%d```} else ...

一元二次方程c语言运行哪里出问题了,详细点
上楼的解答是错误的,其实你scanf()函数调用有个小问题,你录入的时候数字之间有空格,那么你格式化的时候应该也保留空格,而不是逗号。将 scanf("%f,%f,%f",&a,&b,&c);改为 scanf("%f %f %f",&a,&b,&c);程序正确运行如下:

C语言中“1e-6”是什么意思?
1e-6(也就是0.000001)叫做epslon,用来抵消浮点运算中因为误差造成的相等无法判断的情况。它通常是一个非常小的数字(具体多小要看你的运算误差)比如说因为精度误差,用十进制举例,我们要算1\/3+1\/3+1\/3==1(从数学上说,肯定相等),但是因为精度问题,等号左边算出来是0.3333333+0.3333333+0...

初学C语言,求二次方程根,求指导。
(1): 浮点数存储在内存中是不规则的比如14.6在内存中储存的就是14.599999,也就是近似存储在内存中的,而1e-6就几乎是0,如果你填0是不太容易得到结果的 (2): fabs()是求浮点数绝对值的函数,是被定义在math.h这个头文件里的,还有abs()是求整数绝对值的 (3): a是实参...

c语言求PI值,要求精确到1e-6,结果程序无法输出,求解答
sum = sum + item; \/\/ 这个是while循环体的语句 } \/* 调试时设置断点 *\/ 也就是程序到此一直循环,不执行后续语句,因此,没有输出。主程序改成如下即可:int main(){ int i=1;double sum,item,eps;eps = 1e-6;sum = 1;item = 1;while(item>eps){ item = (fact(i)*1.0...

我的这个C语言编写的求解二元方程的两个根的程序有哪些错误?
这个问题在于,当判别式<-1E-6(相当于判别式小于0),求共轭复数根时,你的x1和x2事先都是double类型(双精度浮点实数型),这个类型不能存储虚数。再加上rparti没有定义(因为系统会把rparti作为一个完整的标识符看待,所以你不能那样写)我的建议,在求共轭复根时,x1和x2就不要再表示两个根...

C语言 编程求二次方程根
你的第2个elseif 我想你要判断的是disc为正数 那么可以直接开方 那你应该disc>1e-6而不是fabs(disc)>1e-6 其实disc>0就行了 最后个else你是想disc为负数 那么要有i 我建议你写上disc<-(1e-6)或者直接小于0 最后的最后 你一开始f=sqrt(disc)\/(2*a); 有验算disc是大于等于0的亲?!!

c语言解一元二次方程时候为什么用fabs(a)<=1e—6而不是直接a==0?
它的意思是想得到a=0的情况,但浮点数在用二进制表示时绝大部分是近似值,本来是0的算出来只是在0附近,所以当a的值在-0.000001和+000001之间是就认为是0了。当然还可以取得小些,这根据需要定!

C语言一元二次方程
输入格式是这样scanf("%lf,%lf,%lf",&a,&b,&c);还有个就是输入abc中间必须要打上 , 逗号 还有个就是double型比较大小要使用 t > 1e-6 即 0.000001 不能用 >0 这样就没BUG了

相似回答