习题7.2 求方程ax2 + bx + c = 0的根,用3个函数分别求当b2-4ac大于零、等于零、和小于零时的方程的根并输出结果。要求从主函数输入a,b,c的值

    技术2022-07-11  81

    #include <stdio.h> #include <math.h> int main() { void fun1(double p,double q); void fun2(double i,double j,double k); void fun3(double x,double y,double z); double a,b,c,disc; printf("请输入方程式的a,b,c三个值:\n"); scanf("%lf,%lf,%lf",&a,&b,&c); //由于参数a定义为duoube类型,故系统在计算时会考虑到精度问题,所以使用参数a的绝对值与10的负6次方做对比,若小于则系统默认为参数a等于0 if(fabs(a)<=1e-6) printf("不是二次方程式!\n"); else { disc=b*b-4*a*c; if(fabs(disc)<=1e-6) fun1(a,b); else if(disc>1e-6) fun2(a,b,c); else fun3(a,b,c); } return 0; } void fun1(double p,double q) { printf("ax2+bx+c=0方程式,当b*b - 4*a*c = 0时:\n"); printf("此方式程有两个相等的实根:%8.4f\n",-q/(2*p)); } void fun2(double i,double j,double k) { double x,y,z; z=j*j-4*i*k; x=(-j+sqrt(z))/(2*i); y=(-j-sqrt(z))/(2*i); printf("ax2+bx+c=0方程式,当b*b - 4*a*c > 0时:\n"); printf("此方式有两个不相等的实根:%8.4f and %8.4f\n",x,y); } void fun3(double x,double y,double z) { double a,b,c; a=y*y-4*x*z; b=-y/(2*x); c=sqrt(-a)/(2*x); printf("ax2+bx+c=0方程式,当b*b - 4*a*c < 0时:\n"); printf("此方式有两个共轭复根:\t%8.4f+%8.4fi and %8.4f-%8.4fi\n",b,c,b,c); }

    Processed: 0.014, SQL: 9