解题思路:
由题目可以知道,当方程没有解的时候,需要输出虚数解,我们可以把虚部和实部分别求出来,
把 x1 = (-b + sqrt(b * b - 4ac)) / (2a)
x2= (-b - sqrt(b * b - 4ac)) / (2a)
换成
x1 = (-b) / (2a) + sqrt(b * b - 4ac) / (2a)
x2 = (-b) / (2a) - sqrt(b * b - 4ac) / (2a)
这样的话 (-b) / (2a) 就可以表示实部,用 s 表示,而sqrt( -(b* b - 4ac)) / (2a)i来表示虚部,用 m 表示。
当函数没有实数解的时候,就可以用上面的方法求出虚数解
用printf("x1=%.3lf+%.3lfi x2=%.3lf-%.3lfi\n", s, m, s, m)就可以输出虚数解了。
注意事项:
1、虚部要注意在 sqrt 里面是要加 '-' 的
2、在 % 后面加“.3”表示输出值保留三位小数
3、输出虚数解的时候不能把 ‘i’忘记了
参考代码:
void i(int a, double s, double n) //当方程有两个解
{
double x1, x2;
x1 = s + ((sqrt(n)) / (2*a));
x2 = s - ((sqrt(n)) / (2*a));
printf("x1=%.3lf x2=%.3lf\n", x1, x2 );
}
void j(double s, double n) //当方程有一个解
{
double x1, x2;
x1 = x2 = s;
printf("x1=%.3lf x2=%.3lf", x1, x2);
}
void k(int a, double s, double n) //当方程没有实数解,怎么输出虚数解
{
double m;
m = (sqrt(-n)) / (2*a); //表示函数的虚部
printf("x1=%.3lf+%.3lfi x2=%.3lf-%.3lfi\n", s, m, s, m);
} //如何输出函数的虚数解
int main()
{
double a, b, c, s, n;
scanf("%lf%lf%lf", &a, &b, &c); //输入
s = (-b) / (2*a); //可以表示方程解的实部
n = b*b - 4*a*c; //为了后面写代码的方便,把 b*b - 4*a*c 赋给 n
if(n > 0) //判断有没有解
i(a, s, n); //调用函数
else if(n == 0)
j(s, n);
else
k(a, s, n);
return 0;
}
0.0分
0 人评分
C语言训练-计算t=1+1/2+1/3+...+1/n (C语言代码)浏览:869 |
【亲和数】 (C语言代码)浏览:859 |
WU-整数平均值 (C++代码)浏览:1245 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:787 |
C语言程序设计教程(第三版)课后习题9.8 (C语言代码)浏览:676 |
矩阵加法 (C语言代码)浏览:1723 |
C语言程序设计教程(第三版)课后习题5.6 (C语言代码)浏览:514 |
1052题解(链表操作)浏览:674 |
班级人数 (C语言代码)浏览:927 |
C语言程序设计教程(第三版)课后习题9.1 (C语言代码)浏览:568 |