user-0 提问: 求一元二次方程的根

回复:
user: user-1
content: 引用 楼主 是疗伤烧肉粽~的回复:本题目要求一元二次方程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上有一个测试点(方程有纯虚根)没过，帮忙看看要怎么改 你好，我是一名c语言初学者。我想问一下，你提到的PTA是什么？是一个学习网站吗？还是什么？上面能做题？

user: user-2
content: 新手飘过学习，读代码，脑袋都大了。

user: user-3
content: system (“pause “)暂停的意思，方便我们看清结果，这句前面加//可以屏蔽了。 0.0前面的格式是.2lf ，是浮点型啊，0是整型。

user: user-4
content: 详细解析请参考公众号推文  #include <stdio.h> #include <stdlib.h> #include <math.h>    int main() { double a,b,c,d; printf("输入方程的系数a,b,c："); scanf("%lf%lf%lf",&a,&b,&c);  if(0==a) {  if(0==b) {   if(0!=c) {         printf("不能构成等式\n");   } else {          printf("这是恒等式0=0\n");   }  } else {       printf("这是一元一次方程，根为：%lf\n",-c/b);  } } else {         d=b*b-4*a*c;//判别式  if(0==d) {       printf("两个相等的根，x1=x2=%lf\n",-b/(2*a));  } else if(d>0) {   printf("两个不相等的根，x1=%lf, x2=%lf\n",(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a));  } else {   printf("两个虚根,x1=%lf+%lfi,x2=%lf-%lfi\n",-b/(2*a),sqrt(-d)/(2*a),-b/(2*a),sqrt(-d)/(2*a));  } }   system("pause"); return 0; }

user: user-0
content: 引用 1 楼 user-5 的回复:当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); 		}     } 不对啊，还是过不了

user: user-0
content: 引用 3 楼 qzjhjxj 的回复:供参考：#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; } printf("%.2lf%+.2lfi\n",0.0,sqrt(-da)*1.0/(2*a)); printf("%.2lf%+.2lfi\n",0.0,-sqrt(-da)*1.0/(2*a)); 为什么这里是0.0才可以，而0不行？？

user: user-0
content: 引用 3 楼 qzjhjxj 的回复:供参考：#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; } system("pause");这句啥意思？？

user: user-5
content: 当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); 		}     }

user: user-3
content: 供参考：#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; }