#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;
}
double 的格式控制符是 %lf
printf("请输入二次项系数:");
scanf("%lf", &a);
printf("\n请输入一次项系数:");
scanf("%lf", &b);
printf("\n请输入常数项:");
scanf("%lf", &c);
%f是接收float类型变量的值,%lf才是接收double变量,把%f改为%lf就正常了。 scanf("%lf",&a);
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!
速戳参与调研>>>https://t.csdnimg.cn/Kf0y