题解 | #计算一元二次方程#
计算一元二次方程
https://www.nowcoder.com/practice/7da524bb452441b2af7e64545c38dc26
#include <stdio.h> #include<math.h> int main() { float a,b,c,deta; int sign=1; while(scanf("%f %f %f",&a,&b,&c)!=EOF) { deta=b*b-4*a*c; if(deta>0) deta=pow(deta,0.5); else if(deta<0){ deta=pow(-deta,0.5);sign=0; } else ; if(a==0)printf("Not quadratic equation\n"); else{ if(deta==0){ if(-1*b/(2*a)==0)printf("x1=x2=0.00\n"); else printf("x1=x2=%.2f\n",-1*b/(2*a)); } else if(deta>0&&sign==1)printf("x1=%.2f;x2=%.2f\n",-1*(b+deta)/(2*a),-1*(b-deta)/(2*a)); else printf("x1=%.2f%.2fi;x2=%.2f+%.2fi\n",-1*b/(2*a),-1*deta/(2*a),-1*b/(2*a),deta/(2*a)); } } return 0; } 第一次发题解有些功能还没摸明白:上面这个代码是基于自己一开始设计的分类后改了又改才运行通过的,可以看当个一乐,这里主要是想讲sign的作用。一开始是将符号写在格式化输出的符号上的,但是符号有问题,后面用-1乘上输出,结果deta为虚数的情况下符号还是出了问题。后面打算在算出deta时单独对deta讨论一次(就是把pow函数里的deta加个负号),结果在虚数情况下进入了deta大于0的分支,无奈之下额外添加了一个sign用以对进入deta是大于0还是小于0的情况添加一个约束条件这才通过