#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>//开根号函数 sqrt();
void qeou()
{
/* 一般形式:ax^2+bx+c=0 */
double a,b,c,x1,x2,delta;//二次项系数、一次项系数、常数项和两根
printf("请输入二次项系数:");
scanf("%f",&a);
printf("\n请输入一次项系数:");
scanf("%f",&b);
printf("\n请输入常数项:");
scanf("%f",&c);
if(a == 0)//判断是否为一元二次方程
{
printf("你输入的不是一元二次方程\n");
return;
}
delta = (b*b)-(4*a*c);//判别式b^2-4ac
if(delta >= 0)//判断能否使用求根公式
{
double temp,num;
num = delta;
temp = sqrt(delta);
if((int)(temp) == temp)//判断根号△是否为整数
{
double fenmu;
num = temp;
num = (int)(num);
fenmu = 2*a;//求根公式的分母为2a
if((int)(num-b) == num-b)//分子是否为整数
{
if((int)(fenmu) == fenmu)//分母是否为整数
{
/*在一般形式下,求根公式为整数*/
x1 = (num-b)/fenmu;
x1 = (int)(x1);//由于x1,x2为整数,所以把x1,x2换为整型
x2 = (-num-b)/fenmu;
x2 = (int)(x2);
printf("\nx1=%d",x1);
printf("\nx1=%d\n",x2);
return;
}
else
{
/*在一般形式下,分母不是整数,但是分子为整数*/
int fenzi;
fenzi = num-b;
printf("\nx1=(%d)/%.3f",fenzi,fenmu);
fenzi = -num-b;
printf("\nx2=(%d)/%.3f\n",fenzi,fenmu);
printf("自行化简\n");
return;
}
}
else
{
/*在一般形式下,分子不为整数*/
printf("\nx1=(%d-%.3f)/%.3f",num,b,fenmu);
printf("\nx2=(%d-%.3f)/%.3f\n",num,b,fenmu);
printf("自行化简");
return;
}
}
else
{
/*在一般形式下,根号△(变量num)不为整数*/
printf("\nx1=(sqrt(%.5f)-%.3f)/%.3f)",num,b,2*a);
printf("\nx2=(sqrt(%.5f)-%.3f)/%.3f)\n",num,b,2*a);
printf("自行化简");
return;
}
}
if(delta < 0)//△<0,无实数根
{
printf("无实数根\n");
return;
}
}
int main()
{
qeou();
system("pause");
return 0;
}
c语言 变量delta无论如何都小于0
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
4条回答 默认 最新
- CSDN专家-Time 2021-05-05 07:36关注
double 的格式控制符是 %lf
printf("请输入二次项系数:"); scanf("%lf", &a); printf("\n请输入一次项系数:"); scanf("%lf", &b); printf("\n请输入常数项:"); scanf("%lf", &c);
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用