c语言运算表达式做实参问题
题目:求ax^2+bx+c=0的根,用3个函数分别求当b^2-4ac大于零、等于零和小于零时的根,并输出结果。从主函数输入a、b、c的值.
几个测试的正确参考值:
intput:2 4 1 (大于零)
output:-0.2828931 -1.707107
intput:1 2 1
output:-1.0000000 -1.000000
intput:2 4 3
output:-1.0000000+0.7071071i
-1.0000000-0.7071071i
#include"stdio.h"
#include"math.h"
void main()
{
float d1(float a,float b,float z);
float dy(float a,float b);
float x1(float a,float b,float z);
float a,b,c,z;
printf("input:\n");
scanf("%f%f%f",&a,&b,&c);
z=b*b-4*a*c;
if(z>0) d1(a,b,z);
else if(z==0) dy(a,b);
else x1(a,b,z);
getch();
}
float d1(float a,float b,float z)
{
printf("output:\n");
printf("%f\n",(-b+sqrt(z))/2*a); /*输出的答案是-b+sqrt(z)*/
printf("%f\n",(-b-sqrt(z))/2*a); /*给(2*a)加上括号,输出的值正确*/
}
float dy(float a,float b)
{
printf("output:\n");
printf("%f\n",-b/2*a); /*这里不加括号就输出正确,???*/
printf("%f\n",-b/2*a);
}
float x1(float a,float b,float z)
{
int zh;
zh=2*a;
printf("output:\n");
printf("%f+%fi\n",-b/zh,sqrt(fabs(z))/zh);
printf("%f-%fi\n",-b/zh,sqrt(fabs(z))/zh);
}
参考答案:二次都应加括号.
当Z=0时,你没加括号也是正确的.因为你所举的例子a=1(先乘先除结果是一样的),所以加括号与否结果一样.
你可以用4 4 1来验证二次都应加括号.