求解。。实在不会了请高人指点迷津、、、、用c语言编程

一元二次方程的标准形式为ax2+bx+c=0(a≠0),其中a、b、c为常数。求解一元二次方程的根x时有三种情况,分别为(记Δ=b2-4ac):1.Δ>0,有两个不等的实... 一元二次方程的标准形式为ax2+bx+c=0(a≠0),其中a、b、c为常数。求解一元二次方程的根x时有三种情况,分别为(记Δ=b2-4ac):
1. Δ>0,有两个不等的实根;
2. Δ=0,有两个相同的实根;
3. Δ<0,有两个共轭的虚根。

Input
输入为多行,每行为一元二次方程的三个常数a,b,c,在double类型范围之内。当输入的a为0时,表示输入结束。

Output
每行输入的样例对应三行输出。

第一行输出为样例的编号。第二行输出为所输入常数a,b,c对应的一元二次方程的标准形式,要求输出满足a>0。第三行输出为所输入方程的根,分为三种情况:1. 若方程满足Δ>0,即有两不等实根x1、x2,则按大小顺序输出这两个实根。2. 若方程满足Δ=0,即有两相同实根x,则输出一个实根。3. 若方程满足Δ<0,即有两共轭的虚根x1、x2,则输出两个虚根,虚部符号为正的(即u+vi形式)先输出,虚部符号为负的(x-yi形式)后输出。

以上输出均不输出数学上无意义或可省略的的符号,所有数值最多保留6位有效数字。每个样例之后都有一个空行分隔。

Sample Input
1 2 1
-1 2 -1
-5 2 -0.2
-3 2 0
3 0 12
2 4 4
0
Sample Output
Case 1 :
x^2 + 2x + 1 = 0
only one real root : -1

Case 2 :
x^2 - 2x + 1 = 0
only one real root : 1

Case 3 :
5x^2 - 2x + 0.2 = 0
only one real root : 0.2

Case 4 :
3x^2 - 2x = 0
two real roots : 0, 0.666667

Case 5 :
3x^2 + 12 = 0
two imaginary roots : 2i, -2i

Case 6 :
2x^2 + 4x + 4 = 0
two imaginary roots : -1+i, -1-i
展开
 我来答
百度网友1fc36d4
推荐于2016-09-29 · TA获得超过3131个赞
知道大有可为答主
回答量:1497
采纳率:100%
帮助的人:1827万
展开全部
主要时间都花在控制有效输出和空格输出了

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define N 50

int main()
{
int index;
double k[N][3];
double a,b,c;
double x1,x2,delta;

index=0;
while(1)
{
scanf("%lf",&k[index][0]);

if(k[index][0]==0) break;

scanf("%lf %lf",&k[index][1],&k[index][2]);

if(k[index][0]<0)
{
k[index][0]=-k[index][0];
k[index][1]=-k[index][1];
k[index][2]=-k[index][2];
}

index++;
}

index=0;
while(k[index][0]!=0)
{
a=k[index][0];
b=k[index][1];
c=k[index][2];

printf("Case %d :\n",index+1);

if(a==1) printf("x^2 ");
else printf("%gx^2 ",a);

if(b==0) ;
else if(b==1) printf("+ x ");
else if(b==-1) printf("- x ");
else printf("%c %gx ",b>0?'+':'-',fabs(b));

if(c==0);
else printf("%c %g ",c>0?'+':'-',fabs(c));

printf("= 0\n");

delta=b*b-4*a*c;
if(delta>1e-6)
{
x1=(-b-sqrt(delta))/(2*a);
x2=(-b+sqrt(delta))/(2*a);
printf("two real roots : %g, %g\n",x1,x2);
}
else if(fabs(delta)<1e-6)
{
x1=(-b)/(2*a);
printf("only one real root : %g\n",x1);
}
else
{
x1=(-b)/(2*a);
x2=sqrt(-delta)/(2*a);
printf("two imaginary roots : ");
if(x1==0) ;
else printf("%g",x1);
if(x1==0)
{
if(x2==1) printf("i");
else printf("%gi",x2);
}
else
{
if(x2==1) printf("+i");
else printf("+%gi",x2);
}

printf(", ");

if(x1==0) ;
else printf("%g",x1);
if(x2==1) printf("-i");
else printf("-%gi",x2);

printf("\n");
}

printf("\n");

index++;
}

system("pause");
return 0;
}
追问
谢啦。。不过。。原题意思是输入一行a,b,c。出一行结果的。。。不是全部输进去再出结果的啊,,,嘿嘿
追答
哦 ,我是看描述要求做的。你这样的话我也改了下就可以了:

#include
#include
#include

int main()
{
int index;
double a,b,c;
double x1,x2,delta;

index=0;
while(1)
{
scanf("%lf",&a);

if(a==0) break;

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

if(a0?'+':'-',fabs(b));

if(c==0);
else printf("%c %g ",c>0?'+':'-',fabs(c));

printf("= 0\n");

delta=b*b-4*a*c;
if(delta>1e-12)
{
x1=(-b-sqrt(delta))/(2*a);
x2=(-b+sqrt(delta))/(2*a);

if(fabs(x1)<1e-6) x1=0;
if(fabs(x2)<1e-6) x2=0;

printf("two real roots : %g, %g\n",x1,x2);
}
else if(fabs(delta)<1e-12)
{
x1=(-b)/(2*a);
if(fabs(x1)<1e-6) x1=0;

printf("only one real root : ");
if(x1==0) printf("0");
else printf("%g",x1);
printf("\n");
}
else
{
x1=(-b)/(2*a);
x2=sqrt(-delta)/(2*a);

if(fabs(x1)<1e-6) x1=0;
if(fabs(x2)<1e-6) x2=0;

printf("two imaginary roots : ");
if(x1==0) ;
else printf("%g",x1);
if(x1==0)
{
if(x2==1) printf("i");
else printf("%gi",x2);
}
else
{
if(x2==1) printf("+i");
else printf("+%gi",x2);
}

printf(", ");

if(x1==0) ;
else printf("%g",x1);
if(x2==1) printf("-i");
else printf("-%gi",x2);

printf("\n");
}

printf("\n");
}

return 0;
}

这是通过系统的代码
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式