![]() |
#2
rjsp2022-09-22 08:40
以下代码平铺直叙,如果你嫌判断a的正负号太麻烦的话,可以先将a变为非负数,即 if(a<0) { a*=-1; b*=-1; c*=-1; }
![]() #include <stdio.h> #include <math.h> int main( void ) { double a, b, c; if( scanf("%lf%lf%lf",&a,&b,&c) != 3 ) puts( "Input error" ); else if( a==0 && b==0 && c==0 ) // 4)如果系数都为0,则输出"Zero Equation" puts( "Zero Equation" ); else if( a==0 && b==0 ) // 5)如果a和b为0,c不为0,则输出"Not An Equation" puts( "Not An Equation" ); else if( a==0 ) // 3)如果方程只有一个根,则直接输出此根 printf( "%.2f\n", -c/b ); else { double delta = b*b - 4*a*c; if( delta>0 && a>0 ) // 1)如果方程有两个不相等的实数根,则每行输出一个根,先大后小; printf( "%.2f %.2f\n", (-b+sqrt(delta))/(2*a), (-b-sqrt(delta))/(2*a) ); else if( delta>0 && a<0 ) // 1)如果方程有两个不相等的实数根,则每行输出一个根,先大后小; printf( "%.2f %.2f\n", (-b-sqrt(delta))/(2*a), (-b+sqrt(delta))/(2*a) ); else if( delta<0 && a>0 ) // 2)如果方程有两个不相等复数根,则每行按照格式"实部+虚部i"输出一个根,先输出虚部为正的,后输出虚部为负的; printf( "%.2f+%.2fi %.2f-%.2fi\n", -b/(2*a), sqrt(-delta)/(2*a), -b/(2*a), sqrt(-delta)/(2*a) ); else if (delta < 0 && a<0) // 2)如果方程有两个不相等复数根,则每行按照格式"实部+虚部i"输出一个根,先输出虚部为正的,后输出虚部为负的; printf( "%.2f+%.2fi %.2f-%.2fi\n", -b/(2*a), -sqrt(-delta)/(2*a), -b/(2*a), -sqrt(-delta)/(2*a) ); else // 3)如果方程只有一个根,则直接输出此根 printf( "%.2f\n", -b/(2*a) ); } } 输入 0 0 0 0 0 1 0 2 6 1 1 -2 -1 -1 2 1 2 2 -1 -2 -2 1 -2 1 输出 Zero Equation Not An Equation -3.00 1.00 -2.00 1.00 -2.00 -1.00+1.00i -1.00-1.00i -1.00+1.00i -1.00-1.00i 1.00 |
【描述】
编写程序,求一元二次方程的根,结果保留2位小数。
【输入】
一行中给出3个浮点系数a、b、c,中间用空格分开。
【输出】
根据系数情况,输出不同结果:
1)如果方程有两个不相等的实数根,则每行输出一个根,先大后小;
2)如果方程有两个不相等复数根,则每行按照格式"实部+虚部i"输出一个根,先输出虚部为正的,后输出虚部为负的;
3)如果方程只有一个根,则直接输出此根;
4)如果系数都为0,则输出"Zero Equation";
5)如果a和b为0,c不为0,则输出"Not An Equation"。