c语言一元二次方程计算

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

int main()
{
	float a,b,c,disc,p,q;//如果用double定义下面不可用%f,而应该用%lf
	printf("请输入系数 a,b,c:");
	scanf("%f,%f,%f",&a,&b,&c);//double变量只能用%lf在scanf输入,float变量只能用%f输入

	disc=b*b-4.0*a*c;

	if (fabs(a)<=1.0e-10){//如果不加绝对值fabs()函数则会出现程序判断a为-1时不为一元二次方程
		printf("这不是一个一元二次方程\n");
		exit(0);
 	}
	
	p=-b/(2.0*a);
	q=sqrt(disc)/(2.0*a);

	if(fabs(disc)<=1.0e-10){//不可直接用等号进行判断,因为double和float定义的变量有精度,不可能为0,后面必跟有小数
		printf("x1=x2=%.2f\n",p);
	}
	else{
		if(disc>1.0e-10){
			printf("x1=%lf,x2=%lf\n",p+q,p-q);
		}

		else
		{
			printf("x1=%f+i%f,",p,q);
			printf("x2=%f-i%f\n",p,q);
		}
	}
	return 0;
}
	

fabs()函数时用于求int变量绝对值,C语言中求整数的绝对值fabs()应该包含stdlib.h头文件中。

c语言中求绝对值的函数有

abs() 用于求int变量的绝对值

labs() 用于求long变量的绝对值

fabsf() 用于求float变量的绝对值

fabs() 用于求double变量的绝对值

fabsl() 用于求long double变量的绝对值

浮点型与0的比较

不能用浮点型数据直接和0用>=,<=来比较!!!

浮点型数值具有精度限制。例如c语言规定float类型必须至少能表示6位有效数字,即float类型必须能够表示33.333333的前六位数字,注意不是精确到小数点后六位。float可能不能完全精确地表示一个数,有可能会造成精度损失,可能会导致后很多很多位的小数无法表示出来。

同时float不可能等于“整数0”。

#include<stdio.h>
int main()
{
	float a=0;
	printf("%f",a);
	
	return 0;
	
}

运行结果

 即float类型变量一定会“表示完”他的精度。

所以float变量不可直接和整型0比较,因为浮点型变量有精度,整型变量无精度,计算机中0.000000不等于0。

所以在判断浮点型变量是否和0相等时,常用的方法是将该浮点型的绝对值与一个超级小的小数比较(在精度范围内比较),如和1.0e-10,如果浮点型比这个0.00000000...0001还小,可认为该浮点型等于0。

因为自己初学,对这方面理解不够深,希望以后有能力专门出一篇文章把他讲明白。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值