《C程序设计教程(第四版)——谭浩强》
例题3.7 求ax²+bx+c=0方程的解。要求能处理任何情况下a、b、c的组合。
数学知识:
①当a=0时,为一次方程bx+c=0;x=-c/b;
②当a≠0时,为二次函数ax²+bx+c=0。b²-4c≥0时,有两个实根;
b²-4c≤0,有两个共轭复根。
代码:
//《C程序设计教程(第四版)——谭浩强》
//例题3.7 求ax²+bx+c=0方程的解。要求能处理任何情况下a、b、c的组合。
//数学知识:①当a=0时,为一次方程bx+c=0;x=-c/b;②当a≠0时,为二次函数ax²+bx+c=0。b²-4c≥0时,有两个实根;b²-4c≤0,有两个共轭复根
#include <stdio.h>
#include <math.h>
int main()
{
float a = 0;
float b = 0;
float c = 0;
float d = 0;
float x = 0;
float x1 = 0;
float x2 = 0;
printf("请输入a b c的值(三个值用空格隔开):\n");
scanf("%f %f %f",&a,&b,&c);
if(a!=0)
{
//d=pow(b,2)-4*a*c;//d=b²-4c
d=b*b-4*a*c;
if(d>=0)//b²-4c≥0时,有两个实根
{
x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
if(d>0)
{
printf("当a≠0且△>0时,二次方程有两个不等实根,x1=%.2f,x2=%.2f\n",x1,x2);
//printf("%.2f,%.2f",x1,x2);
}
else
{
printf("当a≠0时且a=0,二次方程有两个相等实根,x1=%.2f,x2=%.2f\n",x1,x2);
//printf("%.2f,%.2f",x1,x2);
}
}
else//b²-4c﹤0,有两个共轭复根
{
float p = 0;//实部
float q = 0;//虚部
p=-b/(2*a);
q=sqrt(-d)/(2*a);
printf("当a≠0时且a<0,二次方程有两个共轭复根,x1=%.2f+%.2fi,x2=%.2f-%.2fi\n",p,q,p,q);
//printf("x1=%.2f+%.2fi,x2=%.2f-%.2fi",p,q,p,q);
}
}
else//当a=0时,bx+c=0,x=-c/b
{
if(b==0)
{
printf("当a=0且b=0时,x=%.2f\n",c);
}
else
{
x=-c/b;
printf("当a=0时,一次方程bx+c=0有一个根,x=%.2f\n",x);
}
}
return 0;
}
运行结果:(只写4中情况)
(1)a=0,b=0
(2)a=0,b≠0
(3)a≠0且a>0,b≠0
(4)a≠0且a=0,b≠0
(5)a≠0且a<0,b≠0
代码编写过程中需要注意的问题:
(1)printf中的符号不要随便加
例如:在printf(“”);加一个符号
原来:
加上之后:(这个符号是在符号大全上随便添加的)
【运行出错!!!】
错误:
33 12 D:\课?套?业\C语言\C语言?伪?例?鈂??3.7.c [Error] converting to execution character set: Illegal byte sequence