本題目要求一元二次方程ax^2+bx+c=0的根,結果保留2位小數。
輸入格式:
輸入在一行中給出3個浮點系數a、b、c,中間用空格分開。
輸出格式:
根據系數情況,輸出不同結果:
1)如果方程有兩個不相等的實數根,則每行輸出一個根,先大后小;
2)如果方程有兩個不相等復數根,則每行按照格式“實部+虛部i”輸出一個根,先輸出虛部為正的,后輸出虛部為負的;
3)如果方程只有一個根,則直接輸出此根;
4)如果系數都為0,則輸出"Zero Equation";
5)如果a和b為0,c不為0,則輸出"Not An Equation"。
#include<stdio.h>
#include<math.h>
int main(){
double a,b,c,da,s,t;
scanf("%lf%lf%lf",&a,&b,&c);
da=b*b-4*a*c;
if(a==0&&b==0&&c==0)
printf("Zero Equation");
else if(a==0&&b==0&&c!=0)
printf("Not An Equation");
else if(da==0)
printf("%.2lf",-b/2/a);
else if(a==0)
printf("%.2lf",-c/b);
else if(da>0)
printf("%.2lf\n%.2lf",(-b+sqrt(da))/2/a,(-b-sqrt(da))/2/a);
else if(da<0){
s=-b/(2*a);
t=sqrt(-da)/(2*a);
printf("%.2lf+%.2lfi\n%.2lf-%.2lfi",s,t,s,t);
}
}
在PTA上有一個測驗點(方程有純虛根)沒過,幫忙看看要怎么改
uj5u.com熱心網友回復:
當da小于0時,如果b = 0,方程實部為零,所有只用顯式虛部就行了。
else if(da<0){
if (b != 0)
{
s=-b/(2*a);
t=sqrt(-da)/(2*a);
printf("%.2lf+%.2lfi\n%.2lf-%.2lfi",s,t,s,t);
}
else
{
t = sqrt(c/a);
printf("%.2lfi\n-%.2lfi",t,t);
}
}
uj5u.com熱心網友回復:
不對啊,還是過不了uj5u.com熱心網友回復:
供參考:#include<stdio.h>
#include<math.h>
int main()
{
double a,b,c,da;
scanf("%lf %lf %lf",&a,&b,&c);
da = b*b-4*a*c;
if(a!=0){
if(da>0){
printf("%.2lf\n",(-b+sqrt(da))/(a*2));
printf("%.2lf\n",(-b-sqrt(da))/(a*2));
}
else if(da < 0){
if(b!=0){
printf("%.2lf%+.2lfi\n",(-b)*1.0/(2*a),sqrt(-da)/(2*a));
printf("%.2lf%+.2lfi\n",(-b)*1.0/(2*a),-sqrt(-da)/(2*a));
}else{
printf("%.2lf%+.2lfi\n",0.0,sqrt(-da)*1.0/(2*a));
printf("%.2lf%+.2lfi\n",0.0,-sqrt(-da)*1.0/(2*a));
}
}
else{
printf("%.2lf\n",-b*1.0/(2*a));
}
}
else if(a==0&&b==0&&c==0){
printf("Zero Equation\n");
}
else if(a==0&&b==0&&c!=0){
printf("Not An Equation\n");
}
else if(a==0&&b!=0&&c!=0)
printf("%.2lf\n",(-c*1.0)/b);
system("pause");
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/259875.html
標籤:C語言
上一篇:鏈堆疊問題
下一篇:為什么我這代碼還是超時
