问题描述

在复数范围内求解一元二次方程的根

分析

首先明确方程根的解的情况 实例3 求一元二次方程的根 - 图1可见,涉及到的情况有多种,需要利用分支结构进行讨论。程序本身的结构层次还是比较清楚的。

源程序

两个程序默认方程形式为标准形式ax````+bx+c=0,代码运行时需输入对应的a,b,c数值。

C语言

  1. #include<stdio.h>
  2. #include<math.h> //为了使用后面的绝对值函数和开方函数
  3. void main()
  4. {
  5. float a,b,c,p,realpart,imagepart;
  6. while(1)
  7. {
  8. printf("请输入一元二次方程的系数a,b,c的值:\n");
  9. scanf("%f,%f,%f",&a,&b,&c);
  10. if(a==0 && b==0)
  11. printf("此方程无解\n");
  12. else if(a==0 && b!=0)
  13. printf("此方程:有一个解:%f\n",-c/b);
  14. else
  15. {
  16. p=b*b-4*a*c;
  17. realpart=-b/(2*a);
  18. imagepart=sqrt(fabs(p))/(2*a);
  19. if(p<0)
  20. {
  21. printf("方程有虚数解:\n");
  22. printf("%.3f+%.3fi",realpart,imagepart);
  23. printf("%.3f-%.3fi",realpart,imagepart);
  24. }
  25. else if(p>0)
  26. {
  27. printf("方程有两个实数解:\n");
  28. printf("%.3f",realpart+imagepart);
  29. printf("%.3f",realpart-imagepart);
  30. }
  31. else
  32. {
  33. printf("方程只有一个实数解:%.3f\n",realpart);
  34. }
  35. }
  36. }
  37. }

python

  1. #coding:gbk
  2. import math
  3. while 1:
  4. a = float(input("请输入a的值:"))
  5. b = float(input("请输入b的值:"))
  6. c = float(input("请输入c的值:"))
  7. if (a==0 and b==0):
  8. print("方程无解\n")
  9. elif (a==0 and b != 0):
  10. print("方程有一个解:"+str(-c/b)+'\n')
  11. else:
  12. p = b*b-4*a*c
  13. if p<0:
  14. realpart = -b/(2*a)
  15. imagepart = math.sqrt(-p)/(2*a)
  16. print("方程有两个虚数根:{0},{1}\n".format(complex(realpart,imagepart),complex(realpart,-imagepart)))
  17. elif p>0:
  18. realpart = -b/(2*a)
  19. imagepart = math.sqrt(p)/(2*a)
  20. print("方程有两个实数根:{0},{1}".format(realpart+imagepart,realpart-imagepart))
  21. else:
  22. print("方程有一个实数解:"+str(-b/(2*a)))
  • python代码这里还有一个问题待解决,就是输出精度还需要控制一下。后续将完善。