C程序设计案例(求 ax^2+bx+c=0 的解)

问题:求方程: a x 2 + b x + c = 0 ax^2+bx+c=0 ax2+bx+c=0 的解

在这里插入图片描述

思路:

  1. 化方程为一般式:
    在这里插入图片描述
  2. 分类讨论根的情况(a、b、c)
    在这里插入图片描述

代码实现

#include <stdio.h>
#include <math.h>
int main(){
	float a,b,c;
	printf("Pleaser enter a、b、c:");
	scanf("%f %f %f",&a,&b,&c);
	float x1,x2,x,real,image;
	if(a==0){
		if(b==0){
			if(c==0){//a=0,b=0,c=0;
				printf("方程的解为任意常数;\n");
			}
			else{//a=0,b=0,c!=0;
				printf("方程无解;\n");
			}
		}
		else{//a=0,b!=0;
				x=-(c/b);
				printf("原方程的的解为:x=%8.4f\n",x);
		}
	}
	else{//a!=0
		float disc=b*b-4*a*c;
		if(fabs(disc)<1e-6){//a!=0;b^2-4ac=0;
			x=-(b/(2*a));
			printf("原方程的的解为:x=%8.4f\n",x);
		}else if(disc>1e-6){//a!=0;b^2-4ac>0;
			x1=(-b+sqrt(disc))/(2*a);
			x2=(-b-sqrt(disc))/(2*a);
			printf("原方程的的解为:x1=%8.4f ; x2=%8.4f \n",x1,x2);
		}else{//a!=0;b^2-4ac>0;
			real=-b/(2*a);	//实部
			image=sqrt(-disc)/(2*a);	//虚部
			printf("原方程的的解为:x1=%8.4f+%8.4fi ; x2=%8.4f+%8.4fi \n",real,image,real,image);
		}
	}
}

程序说明:

由于disc(即 b 2 − 4 a c b^2-4ac b24ac)是实数,而实数在计算和存储是很会有一些微小的误差,因此不能直接进行如下判断:“if(disc==0)”
解决办法:判别disc的绝对值(即:fabs(disc))是否小于一个很小的值(例如: 1 0 − 6 10^-6 106,计算机语言为 1e-6 或 1E-6),如果小于此数,就认为disc等于0;

参考文章:

https://blog.csdn.net/neusoft06/article/details/78771492
https://blog.csdn.net/Yangjiankang_0929/article/details/44627349

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值