二次函数性质判断(程序设计入门):
有关浮点数等于0的判断问题。
问题描述:
题目的意思就是单纯的通过计算判断一个二次方程的各种开口性质之类的,但是坑点在于浮点数的大小判断,尤其是和0的大小判断。
原因分析:
知识点:浮点数(float,double)是不确定的,就算是一个double i=0.0;
printf(i==0);结果也一定会是false。所以在判断浮点数是否为0有以下两种办法:
1、如果这个浮点数是通过整数计算出来的,就判断整数中是否有可用于判断浮点数为0的整数。
2、通过一个范围进行判断,例如:abs(h-0)<0.000001;
解决方案:
下面展示一些 内联代码片
。
下面展示一些 内联代码片
。
// 程序代码
// An highlighted block
#include <stdio.h>
#include <math.h>
int main(){
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
if(a>0) printf("UP\n");
else printf("DOWN\n");
double x=-(b*1.0)/(2*a);
if(b==0) printf("MID\n");//这个地方就是用计算浮点数的整数来判断浮点数是否为0
else if(x>0) printf("RIGHT\n");//但是这个地方用来判断是否>0,就要用浮点数来判断
else printf("LEFT\n");
double o=-(b*1.0)/(2*a);//-0.00不需要进行处理
double y=(4*a*c-pow(b,2))*1.0/(4*a);
printf("%.2lf %.2lf\n",o,y);
double x1,x2;
int h;
h=b*b-4*a*c;
if(h<0) printf("NULL\n");
else if(h==0) printf("%.2lf\n",o);
else{
x1=(-b+pow(b*b-4*a*c,0.5))*1.0/(2*a);
x2=(-b-pow(b*b-4*a*c,0.5))*1.0/(2*a);
printf("%.2lf %.2lf\n",x1,x2);
}
return 0;
}