m0_57919653
m0_57919653
采纳率100%
2021-05-05 07:35

c语言 变量delta无论如何都小于0

#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;
}
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

4条回答

  • technologist_32 CSDN技术专家团-The Last Time 3天前

    double 的格式控制符是 %lf

            printf("请输入二次项系数:");
    	scanf("%lf", &a);
    	printf("\n请输入一次项系数:");
    	scanf("%lf", &b);
    	printf("\n请输入常数项:");
    	scanf("%lf", &c);

    点赞 1 评论 复制链接分享
  • software7503 CSDN技术专家团-赖老师(软件之家) 3天前

    %f是接收float类型变量的值,%lf才是接收double变量,把%f改为%lf就正常了。 scanf("%lf",&a);

    点赞 评论 复制链接分享
  • QA_Assistant 有问必答小助手 昨天

    非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

    速戳参与调研>>>https://t.csdnimg.cn/Kf0y

    点赞 评论 复制链接分享
  • QA_Assistant 有问必答小助手 2天前

    您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

    如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

    ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

    点赞 评论 复制链接分享

相关推荐