描述

一元二次方程ax2+bx+c=0,a、b、c的值由用户在三行中输入,根据用户输入的数值求解方程的实数解:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
如果a值 为0,根据b值判断方程是否有解并输出,如果a与b同时为0,则输出Data error!‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
如果方程无实数解,输出“该方程无实数解”;‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
如果方程有两个相同的实数解,输出一个解,结果保留2位小数;‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
如果方程有两个不同的实数解,在一行内按从大到小顺序输出方程的两个解,用空格分隔,结果保留2位小数。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

输入格式

在一行中输入三个实数,中间用逗号分隔‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

输出格式

方程的解‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

根据题目的描述,可以确定以下的算法:

  1. 在一行中输入三个实数a、b、c,中间用逗号分隔‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
  2. 如果a值 为0但b的值不为0:
    1. 输出-c/b,结果保留2位小数
  3. 如果a与b同时为0:
    1. 输出:Data error!‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
  4. 计算判别式的值delta = b * 2 - 4 a * c
  5. 如果delta < 0:
    1. 方程无实数解,输出“该方程无实数解”;‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
    2. 若题目要求输出虚根,用求根公式直接计算,幂运算可以获得复数
  6. 如果delta = 0:
    1. 方程有两个相同的实数解,输出一个解,结果保留2位小数;‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
  7. 如果delta > 0:
    1. 方程有两个不同的实数解,在一行内按从大到小顺序输出方程的两个解,用空格分隔,结果保留2位小数。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

根据以述算法,可以方便的转为代码表示,主要涉及到if…elif…else分支语句的用法,题目在每种情况下均有输出,所以在每个分支下有一个print(),要注意有解时,如果要求保留设定的小数位数,应该在每种有解情况下均进行小数的设定。如果要求输出虚根,则可以用:x.real, x.imag 分别获得复数x的实部和虚部,再分别设定小数位数。
注意:以下代码仅供参考学习,不匹配平台上任意题目。

  1. # 方程形式如:ax2 + bx + c = 0
  2. a,b,c = map(int,input().split(',')) # 逗号分隔,映射为整数,同步赋值
  3. # 可用 a,b,c = eval(input()) # 逗号分隔的输入同步赋值给a,b,c
  4. delta = b * b - 4 * a * c # 计算判别式的值
  5. if a == 0 and b != 0: # 一元二次方程退化为一元一次方程 bx+c=0
  6. print('{:.2f}'.format(-c / b)) # 此时不可用一元二次方程求根公式
  7. elif a == 0 and b == 0: # 未知数的系数都是0,不再是方程 c=0
  8. print('Data error!')
  9. elif delta < 0: # ax2+bx+c=0
  10. print("该方程无实数解,有2个虚数解")
  11. x1 = (-b + delta ** 0.5) / (2 * a) # 用1/2替换0.5时需用括号,否则会解析为(delta ** 1) / 2
  12. x2 = (-b - delta ** 0.5) / (2 * a) # 求虚根时不可用 sqrt()函数,可用 ** ak pow()
  13. print('({:.2f}+{:.2f}j) ({:.2f}+{:.2f}j)'.format(x1.real, x1.imag,x2.real, x2.imag))
  14. # real和imag分别用于获取实部与虚部,可分别限定小数位数,括号是为保证输出格式
  15. elif delta == 0:
  16. x1 = x2 = -b / (2 * a)
  17. print('{:.2f} {:.2f}'.format(x1, x2))
  18. else:
  19. x1 = (-b + delta ** 0.5) / (2 * a)
  20. x2 = (-b - delta ** 0.5) / (2 * a)
  21. print('{:.2f} {:.2f}'.format(x1, x2))