求解。。实在不会了请高人指点迷津、、、、用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 展开
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 展开
1个回答
展开全部
主要时间都花在控制有效输出和空格输出了
#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;
}
#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;
}
这是通过系统的代码
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询