C语言:if语句 一元二次方程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言:if语句 一元二次方程相关的知识,希望对你有一定的参考价值。

#include<stdio.h>
#include<math.h>
#define FLOATZERO le-6
void main()
float a,b,c,d,disc,x1,x2,realpart,imagpart;
scanf("%f%f%f",&a,&b,&c);
printf("The equation");
if(fabs(a)<=FLOATZERO)
printf("is not a quadratic");
else
disc=b*b-4*a*c;
if(fabs(disc)<=FLOATZERO)
printf("has two equal roots:%f\n",-b/(2*a));
else
if(disc>FLOATZERO)
x1=(-b+sqrt(disc))/(2*a);
x2=(-b-sqrt(disc))/(2*a);
printf("has distinct real:%f\n",-b/(2*a));

else
realpart=-b/(2*a);
imagpart=sqrt(-disc)/(2*a);
printf("has complex roots:\n");
printf("%f+%fi\n",realpart,imagpart);
printf("%f-%fi\n",realpart,imagpart);




请哪位大大从头到尾详细的解说一遍!!! 哪里有错的?

PS:这些是什么意思?
#define FLOATZERO le-6
realpart=-b/(2*a);
imagpart=sqrt(-disc)/(2*a);
if(fabs(a)<=FLOATZERO)
if(fabs(disc)<=FLOATZERO)
if(disc>FLOATZERO)
哪位大大帮帮忙啊~~~~!!!
!!!!!!!!!!!!!!!!!!

参考技术A #include<stdio.h>
#include<math.h>
void main()

float a,b,c;
double m;
double x1,x2;
printf("please insert a,b,c:");
scanf("%f,%f,%f",&a,&b,&c);
m=b*b-4*a*c;
if (m<0)
printf("the number is wrong,please insert again:");
else
x1=(-b+sqrt(m))/2*a;
x2=(-b-sqrt(m))/2*a;
printf("the answer is : %f,%f",x1,x2);
printf("\n");

参考技术B 1.用“FLOATZERO” 代替“le-6 ”,下面的代码中出现“FLOATZERO”,其值都是“le-6”的意思
2.realpart=-b/(2*a);
imagpart=sqrt(-disc)/(2*a);

都是赋值语句。
3.if(fabs(a)<=FLOATZERO)
如果 a 的绝对值小于 FLOATZERO,也即小于 le-6
后面的以此类推....

还有,le-6 你要改为1e-6,因为你写的是“l”,其实是 “1 ”哦,是一个数字,float 改为double吧本回答被提问者采纳
参考技术C #define FLOATZERO le-6:定义宏变量,也就是下面出现FlOATZERO,其值都是1e-6;
realpart=-b/(2*a):求复根的实部;
imagpart=sqrt(-disc)/(2*a);:求复根的虚部;
if(fabs(a)<=FLOATZERO:括号里面的表达式可以理解为a=0;
if(fabs(disc)<=FLOATZERO):括号里面的表达式可以理解为disc=0;
if(disc>FLOATZERO):括号里面的表达式可以理解为disc>0。
参考技术D 这个题目,谭浩强的书上讲解得非常清楚,建议你好好看看教材.

#define FLOATZERO le-6
定义一个符号常量,值为10^(-6)
realpart实部,imagpart虚部
abs绝对值disc是一元二次方程的判别式
第5个回答  2009-04-16 没有什么大问题就是#define FLOATZERO le-6 其中的le-6 中的"l"换成数字1就OK了

一元二次方程 C语言IF语句嵌套问题

老师要求只用IF语句,我写了下面的代码。在VC6.0里编译和链接否都没大问题(只有说数据转换会丢失数据的,懂得请说下这是为什么。)

#include<stdio.h>
#include<math.h>
void main()

float a,b,c,s,x,x1,x2,m,n;
printf("请依次输入系数a,b,c的值(用逗号隔开):\n");
scanf("%f,%f,%f",&a,&b,&c);
if (a==0)

if(b==0)

if(c==0)
printf("方程有无数个解\n");
else
printf("1方程无解\n");

else

if(c==0)
printf("1方程有唯一解0\n");
else

x=-(c/b);
printf("2方程有唯一解x=\n",x);



else
s=b*b-4*a*c;

if(s<0)printf("2方程无解\n");
else

m=-(b/2*a),n=sqrt(s)/2*a;
x1=m+n,x2=m-n;
printf("方程有两个解分别是\n%f\n%f\n",x1,x2);




代码如上,但是但我输入0,0,0时,编译器却输出了“方程有无数个解”和“方程无解”
2个都有,求解????我知道这个算法不好,可我的 目的在if语句的嵌套上,希望大家帮我看看。谢谢了!

参考技术A 嗯,果然是这里有问题。不过貌似还有另外的一个问题:但我输入0,1,1时,编译器就只输出 “2方程有唯一解x=”,完全没有计算的结果-1,能帮忙解决吗?我会追加分的。谢谢。
------------------------------------分割--------------------------------------------
printf("2方程有唯一解x=%f\n",x); %f漏掉了楼主。。
参考技术B 这里有点问题:
else
s=b*b-4*a*c;
===》这个花括号删掉,加到else之后,s=b*b-4*a*c;之前追问

嗯,果然是这里有问题。不过貌似还有另外的一个问题:但我输入0,1,1时,编译器就只输出 “2方程有唯一解x=”,完全没有计算的结果-1,能帮忙解决吗?我会追加分的。谢谢。

追答

哦,你这里改下,printf("2方程有唯一解x=\n",x); ===》printf("2方程有唯一解x= %d \n",x);

追问

应该是%f。非常感谢你。

本回答被提问者采纳

以上是关于C语言:if语句 一元二次方程的主要内容,如果未能解决你的问题,请参考以下文章

c语言if语句的用法

c语言中的 条件语句 if else

c语言中的条件语句if

C语言中三个if语句的嵌套怎理解

C语言。。。if语句

有对C语言熟悉的吗?我对if语句有点小小的疑问,请您解答。。