解题思路:

                        求根公式的使用




注意事项:

1).考虑到要写四个函数,且每个函数都有近乎相同的变量值,所以不妨在设一组double型的全局变量—double a,b,c,p,q;;既然是double数据类型,则输入输出格式都要是"%lf",同时也要指定题目输出时小数点的保留位数!

2).题目要求是在主函数输入三个数值,且要考虑这三个数据作为实参传递给被调用函数的形参的数据类型要一致;

3).解题需要用到开方,则需调用#include<math.h>包

4).对于求解一元二次方程,由△=b^2-4ac就有三种不同取值情况,则被调用函数的也就有三种,不要将△=b^2-4ac和△>b^2-4ac合并。

5).注意当△=b^2-4ac<0时,sqrt(△)=sqrt(4ac-b^2)






参考代码:

#include<stdio.h>

#include<math.h>

double a,b,c,p,q;

int shiroot(double a,double b,double c)

{

p=-b/(2*a);

q=(sqrt(b*b-4*a*c))/(2*a);

printf("x1=%.3lf x2=%.3lf\n",p+q,p-q);

return 0;

}

int equal(double a,double b,double c)

{

p=-b/(2*a);

printf("x1=%.3lf x2=%.3lf\n",p,p);

return 0;

}

int xuroot(double a,double b,double c)

{

p=-b/(2*a);

q=(sqrt(4*a*c-b*b))/(2*a);

printf("x1=%.3lf+%.3lfi x2=%.3lf-%.3lfi\n",p,q,p,q);

return 0;

}

int main()

{

scanf("%lf%lf%lf",&a,&b,&c);

if((b*b-4*a*c)>0)

{

shiroot(a,b,c);

}

else if((b*b-4*a*c)==0)

{

equal(a,b,c);

}

else

xuroot(a,b,c);

return 0;

}


点赞(23)
 

0.0分

9 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 9 条评论

Cccc 5年前 回复TA
@Cccc 这个哪里错了呢
Cccc 5年前 回复TA
#include<stdio.h>
#include<math.h>
double a,b,c,p,q;
int solve(double a,double b,double c)
{
    if((b*b-4*a*c)>0)
    {
        p=-b/(2*a);
        q=(sqrt(b*b-4*a*c))/(2*a);
        printf("x1=%.3lf x2=%.3lf\n",p+q,p-q);
    }
    else if((b*b-4*a*c)==0)
    {
        p=-b/(2*a);
        printf("x1=%.3lf x2=%.3lf\n",p,p);
    }
    else if((b*b-4*a*c)<0)
    {
        p=-b/(2*a);
        q=(sqrt(4*a*c-b*b))/(2*a);
        printf("x1=%.3lf+%.3lfi x2=%.3lf-%.3lfi",p,q,p,q);
    }
}
int main()
{
    scanf("%ld %lf %lf",&a,&b,&c);
    solve(a,b,c);
}
但凡 5年前 回复TA
@阿鹏 return只能返回一个值   x1和x2应该靠全局变量返回
墨魍 5年前 回复TA
你的能打印得共轭
复根?
编程cxk 5年前 回复TA
@咖啡 最后小于零那个,第二个printf里应该是x2    不是x1
初学者 5年前 回复TA
@咖啡 看不懂,,
5年前 回复TA
@阿鹏 调用函数时已经输出答案了,不需要返回值。
咖啡 6年前 回复TA
能否一看我那块不对 ;  测试没问题  提交就。。。


#include <stdio.h>
#include <math.h>
int main(void)
{
	int  flag = 0; 
	double x1, x2, a, b, c, d;; 
	scanf("%lf%lf%lf", &a, &b, &c);
	d = b*b - 4*a*c;
	if(d > 0)
	{
		x1 = (-b + sqrt(d)) / (2*a);
		x2 = (-b - sqrt(d)) / (2*a);
	}
	else if(fabs(d) < 10e-6)
	{
		x1 = x2 = -b / 2.0/a;
	}
	else
	{
		flag = 1;
	}
	if(!flag)
	{
		printf("x1=%.3lf x2=%.3lf\n", x1, x2);
	}
	else
	{
		printf("x1=-%.3lf+%.3lfi", b/(2*a), sqrt(-d)/(2*a));
		printf(" x1=-%.3lf-%.3lfi\n", b/(2*a), sqrt(-d)/(2*a));
	}
    return 0;
}
阿鹏 6年前 回复TA
函数返回可以是0吗?不应该是返回x1和x2吗?