A. c语言解一元二次方程
计算逻辑显得有点乱,但没看出有什么大问题;
结束前的这一部分是重复运算了。
else if (b != 0 && c != 0) {
x1 = (-c) / b;
printf("%.2lf", x1);
}
else if (b != 0 && c == 0) {
x1 = 0;
printf("%.2lf", x1);
}
算法可以简化为:
else if (b != 0) {
x1 = (-c) / b;
printf("%.2lf", x1);
}
B. 用C语言求解一元二次方程的解怎么写
您好!很高兴为您解答。
原代码中的scanf和printf中的%要放在d和lf的前面才对,改正后运算无误~
#include <stdio.h>
#include <math.h>
void main ()
{
double x1;//x1,x2分别为方程的2个解
double x2;
double melt;
int a;
int b;//初始化ABC的三个变量
int c;
printf("请输入a b c三个数的值:");
scanf("%d %d %d",&a, &b ,&c);//输入ABC的时候需要空格
melt = b*b - 4*a*c;//初始化melt的值
if (melt>0)
{ x1=(-b + sqrt(melt))/(2*a);
x2=(-b - sqrt(melt))/(2*a);
printf ("2个解,x1 = %lf,x2 = %lf\n",x1,x2);
}
else if (melt==0)
{
x1 = (-b )/(2*a);
x2 = x1;
printf("1个解,x1 = %lf,x2 = lf%\n",x1,x2);
}
else
{
printf("无解\n");
}
}
望采纳~如您还有不解,欢迎追问~
C. c语言求解一元二次方程
intmain()
{
inta,b,c,d;
floatx1,x2;
scanf("%d%d%d",&a,&b,&c);
d=b*b-4*a*c;
if(a==0)
{
if(b==0)
{
printf("Inputerror! ");
}
else
printf("x=%.6f",-c/b);
}
else
{
if(d<0)
printf("Inputerror! ");
elseif(d==0)
printf("x1=x2=%.6f",-b/(2*a));
else
{
x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
printf("x1=%.6f x2=%.6f ",x1,x2);
}
}
return0;
}
D. C语言解一元二次方程(包含虚数解)
表示虚数一般不用j表示,而是用i表示。输出的时候后面带上i就可以了。
判别式变量d为负时,用sqrt(-d)
形如ax²+bx+c=0的方程的完整程序如下:
#include<stdio.h>
#include<math.h>
voidmain()
{
floata,b,c,dlt;
printf("请输入a、b、c:");
scanf("%f%f%f",&a,&b,&c);
if(a)
{
dlt=b*b-a*c*4;
if(dlt>0)
printf("x1=%f x2=%f",(-b+sqrt(dlt))/(a*2),(-b-sqrt(dlt))/(a*2));
elseif(dlt<0)
printf("x1=%f+%fi x2=%f-%fi",-b/(a*2),abs(sqrt(-dlt)/(a*2)),-b/(a*2),abs(sqrt(-dlt)/(a*2)));
elseprintf("x=%f",-b/(a*2));
}
else
{
if(b)c?printf("x=%f",-c/b):printf("x=%f",abs(-c/b));
elsec?printf("方程无实数解"):printf("方程的解为任意实数");
}
}
E. C语言一元二次方程求解
#include <stdio.h>
#include <math.h>
void main()
{
float a,b,c,x,x1,x2;//应该为浮点数。
printf("请输入:");
scanf("%f%f%f",&a,&b,&c);//1,输入一起改为浮点数个数输入。2,输入最好别用非空格符',' 不然将限制你输入格式。
a*x*x+b*x+c==0;//不应该赋值运算符。
if(a==0)
printf("此方程不是二次方程\n");//没有格式输出符就不应该有参数。
else if(b*b-4*a*c==0)
printf("此方程有两相等实根,根为:%f.\n",x=b/(2*a));//有参数应该有格式输出符。
else if(b*b-4*a*c>0)
printf("此方程有两不相等实根,根为:%f,%f.\n",x1=(-b+sqrt(b*b-4*a*c))/(2*a),x2=(-b-sqrt(b*b-4*a*c))/(2*a));//同上
else if(b*b-4*a*c<0)
printf("此方程有两共轭复根,实部:%f,虚部:%f.\n",-b/(2*a),sqrt(-(b*b-4*a*c))/(2*a));//1,同上。2,参数应为表达式。
}
如果还有其他的错,那就是算法的错了。
F. c语言 解一元二次方程 新手很茫然
呵呵,写得不错。
if(a>0||a<0) -> if (a!=0) 这个确实比较好,要是怕出错,有人建议写成if(0!=a),为了避免输入错误。比如少输一个!等等。
浮点数的判断一般会弄一个范围,以避免直接的等号,因为计算有误差。但是实际上情况非常复杂。
如果能够确定输入的范围,那么这么优化判断自然没有问题。比如,a、b、c都是整数量级。
如果系数都是0.001这种量级,优化后的就是总显示有一个实数根或者无解,显然是不合适的。
因为实际上数学上的数和计算机所能表示的数范围相差太大,所以我觉得还是可以,二重根这种情况,打印两遍不算错误,不必判断是否相等。如果一定要判断,最好用整数或者分数。
此外,程序还可以考虑,使用分数之类进行计算,输出中带有根号。比如结果输出4*sqrt(2)这样更实用一些。
G. 怎样用C语言编一个解一元二次方程的程序(可以看步骤)!
#include <stdio.h>
#include <math.h>
int main(void)
{
int a, b, c; //定义一元二次方程的三个数值;
printf("请依次输入一元二次方程的三个参数a b c,中间以空格隔开\n");
scanf("%d %d %d", &a, &b, &c); //依次输入一元二次方程的三个参数
double delta = b*b - 4*a*c; //定义delta的值为b*b - 4*a*c
double x1 = (-b + sqrt(delta))/(2 * a);
double x2 = (-b - sqrt(delta))/(2 * a);
if (delta>0) //delta大于0时,方程有两个解
{
printf("一元二次方程有两个解\n");
printf("一元二次方程的第一个解,x1 = %f\n",x1);
printf("一元二次方程的第二个解,x2 = %f\n",x2);
}
else if (delta ==0) //delta等于0,方程有两个相同的解
{
printf("一元二次方程有两个相同的解\n");
printf("一元二次方程的解为x1 = x2 =%f\n",x1);
}
else //delta小于0时,方程没有解
{
printf("一元二次方程没有解\n");
}
return 0;
}
H. C语言,求一元二次方程的解
对于如下的一元二次方程:
ax*x+bx+c=0
设计C语言程序,输入一元二次方程的三个系数a、b、c,求解出该方程的两个根,并且允许用户在程序中多次输入不同的系数,以求解不同的一元二次方程的解。
编程思路分析:
对于该方程,令delta=b^2-4*a*c,从数学的角度来讲,我们需要根据delta的值来判断该方程的根情况:
当delta>=0时,其两个根为实数解,分别为(-b+sqrt(delta))/(2*a)和(-b-sqrt(delta))/(2*a);
当delta<0时,其两个根为复数解,实部皆为-b/(2*a),虚部分别为sqrt(-delta)/(2*a)和-sqrt(-delta)/(2*a)。
其中,sqrt(delta)代表对delta作开根号运算。
在代码设计中,可定义一个结构体Complex存储该方程的根,在该结构体中包括实部和虚部两个变
在程序中,定义两个Complex类型的根x1和x2,当delta>=0时,两个根的虚部为0,否则,分别求解两个根的虚部值。
具体编程如下:
#include"stdio.h"
#include"math.h"
/*求一元二次方程ax*x+bx+c=0的解*/
main()
{floata,b,c,x1,x2,d;
printf("请输入a:");
scanf("%f",&a);
printf("请输入b:");
scanf("%f",&b);
printf("请输入c:");
scanf("%f",&c);
d=b*b-4*a*c;if(d<0)
printf("方程没有实数解。
");
if(d==0){x1=(-b)/(2*a);
printf("x1=%f
",x1);}
if(d>0){x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
printf("x1=%f,x2=%f
",x1,x2);}}
请输入a:12
请输入b:34
请输入c:4
x1=-0.122985,x2=-2.710348
Pressanykeytocontinue
为迭代序列。