编写程序,求一元二次方程ax2+bx+c=0的根(保留2位小数)。系数a、b、c为浮点数,其值在运行时由键盘输入

问题:编写程序,求一元二次方程ax2+bx+c=0的根(保留2位小数)。系数a、b、c为浮点数,其值在运行时由键盘输入。
【运行结果】(运行6次,□表示空格,↙表示回车)
输入一元二次方程的系数a, b, c: 0□0□0↙
方程无穷解!
输入一元二次方程的系数a, b, c: 0□0□1↙
方程无解!
输入一元二次方程的系数a, b, c: 0□2□1↙
方程有一个根: x=-0.50
输入一元二次方程的系数a, b, c: 1□2□1↙
方程有两个相同实根: x1=x2=-1.00
输入一元二次方程的系数a, b, c: 2.1□8.9□3.5↙
方程有两个不同实根: x1=-0.44□x2=-3.80
输入一元二次方程的系数a, b, c: 2□2□1↙
方程有两个不同虚根: x1=-0.50+0.50i□x2=-0.50-0.50i

我写的程序是:
#include<stdio.h>
#include<math.h>
int main (void){
double a, b, c, d;
d=b*b-4*a*c;
printf("输入一元二次方程的系数a, b, c: ");
scanf("%lf %lf %lf",&a,&b,&c);
if(a==0&&b==0&&c==0)
printf("方程无穷解!\n");
else if(a==0&&b==0&&c!=0)
printf("方程无解!\n");
else if(a==0&&b!=0&&c!=0)
printf("方程有一个根: x=%.2f\n",-c/b);
else if(a!=0&&d==0)
printf("方程有两个相同实根: x1=x2=%.2f\n",-b/(2*a));
else if(a!=0&&d>0)
printf("方程有两个不同实根:x1=%.2f x2=%.2f\n",(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a));
else if(a!=0&&d<0)
printf("方程有两个不同虚根:x1=%.2f x2=%.2f\n",(-b+sqrt(-d)*i)/(2*a),(-b-sqrt(-d)*i)/(2*a)
return 0;
}

求问哪里错了T^T

首先是d=b*b-4*a*c;要放在输入后面!

printf("方程有两个不同虚根:x1=%.2f x2=%.2f\n",(-b+sqrt(-d)*i)/(2*a),(-b-sqrt(-d)*i)/(2*a);

感觉这个会出错,输出结果:“方程有两个不同虚根:x1=··· x2=···”应该不会有i,i会变成未定义

应该改成prinf("方程有两个不同虚根:x1:%.2f+%.2fi x2:%.2f+%.2fi",

-b/(2*a),sqrt(-d)/(2*a),b/(2*a),-sqrt(-d)/(2*a));需要加括号的加上

以下为代码:

#include

#include

int main (void){

double a, b, c, d;

printf("输入一元二次方程的系数a, b, c: ");

scanf("%lf %lf %lf",&a,&b,&c);

\x09d=b*b-4*a*c;

if(a==0&&b==0&&c==0)

printf("方程无穷解!\n");

else if(a==0&&b==0&&c!=0)

printf("方程无解!\n");

else if(a==0&&b!=0&&c!=0)

printf("方程有一个根: x=%.2f\n",-c/b);

else if(a!=0&&d==0)

printf("方程有两个相同实根: x1=x2=%.2f\n",-b/(2*a));

else if(a!=0&&d>0)

printf("方程有两个不同实根:x1=%.2f x2=%.2f\n",(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a));

else if(a!=0&&d<0)

\x09\x09printf("方程有两个不同虚根 x1:%.2f+%.2fi x2:%.2f+%.2fi",-b/(2*a),(sqrt(

d))/(2*a),b/(2*a),(-sqrt(-d))/(2*a));\x09\x09

\x09return 0;

}

扩展资料:

编译 & 执行 C++ 程序方法:

1、打开vs2010,选择"visual c++开发设置",然后点击"启动Visual Studio"。

2、"Visual Studio"选择默认环境设置。

3、进入"Visual Studio"后点击新建项目。

4、在弹出窗口选择 Visual C++标签下的空项目,输入名称以及保存位置。

5、在左侧的"解决方案资源管理器"中,选择"源文件"右击,然后选择"添加"->"新建项"。

6、在弹出窗口中,选择"C++文件(.cpp)",输入文件名称,单击"添加"。

7、现在输入具体的代码,例如输入简单的Hello World程序。

8、依次单击"调试"->"开始执行(不调试)"或按Ctrl+F5开始运行。

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-10-23
首先是d=b*b-4*a*c;要放在输入后面!!!

printf("方程有两个不同虚根:x1=%.2f x2=%.2f\n",(-b+sqrt(-d)*i)/(2*a),(-b-sqrt(-d)*i)/(2*a);

感觉这个会出错,输出结果:“方程有两个不同虚根:x1=··· x2=···”应该不会有i,i会变成未定义
试试这样prinf("方程有两个不同虚根: x1:%.2f+%.2fi x2:%.2f+%.2fi",
-b/(2*a),sqrt(-d)/(2*a),b/(2*a),-sqrt(-d)/(2*a));需要加括号的加上追问

可是我一运行就是这个样子。。。

追答

#include
#include
int main (void){
double a, b, c, d;
printf("输入一元二次方程的系数a, b, c: ");
scanf("%lf %lf %lf",&a,&b,&c);
d=b*b-4*a*c;
if(a==0&&b==0&&c==0)
printf("方程无穷解!\n");
else if(a==0&&b==0&&c!=0)
printf("方程无解!\n");
else if(a==0&&b!=0&&c!=0)
printf("方程有一个根: x=%.2f\n",-c/b);
else if(a!=0&&d==0)
printf("方程有两个相同实根: x1=x2=%.2f\n",-b/(2*a));
else if(a!=0&&d>0)
printf("方程有两个不同实根:x1=%.2f x2=%.2f\n",(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a));
else if(a!=0&&d<0)
printf("方程有两个不同虚根 x1:%.2f+%.2fi x2:%.2f+%.2fi",-b/(2*a),(sqrt(-d))/(2*a),b/(2*a),(-sqrt(-d))/(2*a));
return 0;
}
可以运行

本回答被提问者采纳
第2个回答  2014-10-22
追问

亲~可以不要压缩包吗?

编程求一元二次方程ax2+bx+c=0的实数根x1,x2,a,b,c的值由键盘输入
using namespace std;void main(){ float a, b, c, x1, x2;cout << "请输入a, b, c的值:";cin>> a >> b >> c;if (b*b - 4*a*c <= 0)cout << "输入的系数不对,b2-4ac不大于0!程序退出!" << endl;else { x1 = (-b + sqrt(b*b - 4*a*c))\/2*a;x2 ...

...系数a、b、c为浮点数,其值在运行时由键盘输入
-b\/(2*a),sqrt(-d)\/(2*a),b\/(2*a),-sqrt(-d)\/(2*a));需要加括号的加上 以下为代码:include include int main (void){ double a, b, c, d;printf("输入一元二次方程的系数a, b, c: ");scanf("%lf %lf %lf",&a,&b,&c);\\x09d=b*b-4*a*c;if(a==0&&b==...

C语言编写一个程序求解一元二次方程ax2+bx+c=0的根。要求系数a,b,c从...
jud; printf ("输入二次方程的三个系数(第一个不能为0):"); scanf ("%f %f %f", &a, &b, &c); jud = b * b - 4 * a * c; \/\/根的判别式 if (jud > 0) { printf ("该方程有两个不相等的实根:\\n"); printf ("x1...

用C++设计一个程序,求出一元二次方程ax^2+bx+c=0的根
void main(void){ double a,b,c,d;char ch('y');do{ cout<<"请依次输入二次方程ax^2+bx+c=0的系数(a不等于0):"<<endl;cin>>a>>b>>c;if(-0.0001<a<0.0001) \/\/浮点数不宜直接判断相等 d=b*b-4*a*c;if(d==0)cout<<"方程有两个相等实根:"<<-b\/(2*a)<<endl;...

求一元二次方程ax2+bx+c=0的根c语言
求一元二次方程ax2+bx+c=0的根c语言详细内容如下:1、一元二次方程ax^2+bx+c=0的根的求解涉及到数学的二次方程解公式。当我们谈论一元二次方程的根时,我们实际上是在谈论这个方程的解,也就是能够使得方程成立的未知数的值。在C语言中,我们可以使用数学库来帮助我们进行计算。2、首先,我们...

用C语言输入一元二次方程的系数a,b,c,采用二分法求方程的根 ,精确到...
{ return a * x * x + b * x + c; } int main(){ double x, u, v, f1, f2, fm, a, b, c;printf("请输入一元二次方程的系数:");scanf("%lf%lf%lf", &a, &b, &c);\/* 这里可以增加是否合法二次方程的判断*\/ printf("请输入区间端点:");scanf("%lf%lf", &u,...

用C语言编写程序,输入一元二次方程的系数a,b,c,计算方程的根(假设是两...
printf("请输入a,b,c的值:");scanf("%lf %lf %lf",&a,&b,&c);if(a==0) \/\/一元二次方程二次项系数不为0 { printf("data error\\n");} else { disc=b*b-4*a*c;if(disc>0)root2(a,b,disc);else if(disc==0)root1(a,b);else root0();} return 0;} void ro...

c语言求一元二次方程ax²+bx+c=0的实根解(设a≠0)
a,b,c; double p; scanf("%lf%lf%lf",&a,&b,&c); p=b*b-4*a*c; if(p<0) printf("无实根\\n"); else { p=sqrt(p)\/2\/a; printf("x1=%lf x2=%lf\\n", -b\/2\/a+p, -b\/2\/a-p); } return 0;} ...

...输入参数a,b,c,求一元二次方程a*x*x+b*x+c=0的根,结果保留2位小数...
package first;import java.util.Scanner;\/\/ 输入abc 求出x a*x的2次方+b*x+c = 0 public class exercise161 { public static void main(String[] args){ Scanner scan = new Scanner(System.in);int a = scan.nextInt();int b = scan.nextInt();int c = scan.nextInt();int x =...

vb 程序 输入一元二次方程ax2+bx+c=0的系数a,b,c,计算并输出一元二...
a * c)If s = 0 Then x1 = x2 = -b \/ (2 * a)Else If s > 0 Then x1 = (-b + s) \/ (2 * a)x2 = (-b - s) \/ (2 * a)Else x1 = -b \/ (2 * a) + s & "i"x2 = -b \/ (2 * a) - s & "i"End If End If End Sub 可以不要那个结束按钮。

相似回答