本题需要的函数包括:
- 输入输出函数 stdio.h 用于输入输出数据。
- 数学函数 math.h 用于开平方等数学操作 开方函数 sqrt()
首先复习一下一元二次方程的解法
有实根: 没有实根
如果b^2-4ac>0 方程有两个实根,对应的函数如下
void lianggegen(int a,int b,int c)
{
float d=(float)(-b+sqrt((b*b-4*a*c))/(2*a));
float e=(float)(-b-sqrt((b*b-4*a*c))/(2*a));
printf("x1=%.3f x2=%.3f",d,e);
}
如果b^-4ac==0 方程有一个实根,对应的函数如下
void yigegen(int a,int b,int c)
{
float d=(float)((-b+sqrt(b*b-4*a*c))/(2*a));
printf("x1=%.3f x2=%.3f",d,d);
}
如果b^-4ac<0 方程有两个共厄复数根,对应的函数如下
void xvgen(int a,int b,int c)
{
float d=(float)-b/(2*a);
float e=(float)(sqrt(4*a*c-b*b))/(2*a);
printf("x1=%.3f+%.3fi x2=%.3f-%.3fi",d,e,d,e);
}
将三个函数整合到一起,带上有选择功能的主函数,组成最终我们需要的用于计算方程的代码
以下代码可以满分通过ACM训练系统
//baizhen
#include <stdio.h>
#include <math.h>
void lianggegen(int a,int b,int c);
void yigegen(int a,int b,int c);
void xvgen(int a,int b,int c);
void lianggegen(int a,int b,int c)
{
float d=(float)(-b+sqrt((b*b-4*a*c))/(2*a));
float e=(float)(-b-sqrt((b*b-4*a*c))/(2*a));
printf("x1=%.3f x2=%.3f",d,e);
}
void yigegen(int a,int b,int c)
{
float d=(float)((-b+sqrt(b*b-4*a*c))/(2*a));
printf("x1=%.3f x2=%.3f",d,d);
}
void xvgen(int a,int b,int c)
{
float d=(float)-b/(2*a);
float e=(float)(sqrt(4*a*c-b*b))/(2*a);
printf("x1=%.3f+%.3fi x2=%.3f-%.3fi",d,e,d,e);
}
int main(void)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
if(b*b-4*a*c>0)
lianggegen(a,b,c);
else if(b*b-4*a*c==0)
yigegen(a,b,c);
else
xvgen(a,b,c);
return 0;
}