有人可以一步一步地向我解释这个程序是如何运作的吗?它使用条件运算符求解二次方程。但这太乱了。
#include<stdio.h>
#include <math.h>
int main()
{
float a, b, c, d;
printf("Introduce the coefficients: a,b,c\n");
scanf("%f %f %f", &a,&b,&c);
a? d=b*b-4*a*c, d>=0?
printf("x1=%f\tx2=%f\n",(-b- sqrt(d))/2/a, (-b+sqrt(d))/2/a):
printf("x1=%f+i*%f\tx2=%f-i*%f\n",-b/2/a, sqrt(-d)/2/a,-b/2/a,sqrt(-d)/2/a):
b? printf("x=%f\n",-b/2/a): c? printf("0 solutions\n"):
printf("identity\n");
return 0;
}
答案 0 :(得分:3)
让我们从顶部开始。
a? d=b*b-4*a*c, d>=0?
如果a不为0,则设置d = b 2 - 4ac。 如果d>&gt; = 0,则有两个根,我们打印它们。
printf("x1=%f\tx2=%f\n",(-b- sqrt(d))/2/a, (-b+sqrt(d))/2/a):
否则,如果d <0,我们有假想的根,并使用
打印 printf("x1=%f+i*%f\tx2=%f-i*%f\n",-b/2/a, sqrt(-d)/2/a,-b/2/a,sqrt(-d)/2/a)):
现在,此行中的最后一个冒号是for a等于0
b? printf("x=%f\n",-b/2/a):
现在如果b非零(a是0记得吗?),那么只有一个根。如果b为零,那么我们转到下一个冒号
c? printf("0 solutions\n"):
printf("identity\n");
我认为其余部分应该是微不足道的。
答案 1 :(得分:3)
条件运算符的语法是
condition ? expression1 : expression2
它用作if
- else
语句的替代。要理解此程序,首先要设置条件运算符的格式,例如if
- else
语句:
condition?
expression1
:
expression2
结果:
a?
d=b*b-4*a*c,d>=0?
printf("x1=%f\tx2=%f\n",(-b- sqrt(d))/2/a, (-b+sqrt(d))/2/a)
:
printf("x1=%f+i*%f\tx2=%f-i*%f\n",-b/2/a, sqrt(-d)/2/a,-b/2/a,sqrt(-d)/2/a)
:
b?
printf("x=%f\n",-b/2/a)
:
c?
printf("0 solutions\n")
:
printf("identity\n");
然后用if
- else
语句替换条件运算符。为此,还要删除逗号运算符。
逗号运算符的语法是
expression1, expression2
这应该用更传统的复合声明代替:
{
expression1;
expression2;
}
结果:
if (a)
{
d=b*b-4*a*c;
if (d>=0)
printf("x1=%f\tx2=%f\n",(-b- sqrt(d))/2/a, (-b+sqrt(d))/2/a);
else
printf("x1=%f+i*%f\tx2=%f-i*%f\n",-b/2/a, sqrt(-d)/2/a,-b/2/a,sqrt(-d)/2/a);
}
else
{
if (b)
{
printf("x=%f\n",-b/2/a);
}
else
{
if (c)
printf("0 solutions\n");
else
printf("identity\n");
}
}
现在你可以阅读这个程序了。
答案 2 :(得分:3)
如果您使用if...else
代替?:
,我认为功能会更加清晰。
if(a != 0){
d=b*b-4*a*c; // under the root
if( d>=0 ){
printf("x1=%f\tx2=%f\n",(-b- sqrt(d))/2/a, (-b+sqrt(d))/2/a);
}
else{
printf("x1=%f+i*%f\tx2=%f-i*%f\n",-b/2/a, sqrt(-d)/2/a,-b/2/a,sqrt(-d)/2/a);
}
}
else {
if( b != 0){
printf("x=%f\n",-b/2/a);
}
else {
if( c != 0){
printf("0 solutions\n");
}
else {
printf("identity\n");
}
}
}
注意:printf("x=%f\n",-b/2/a);
将除以0.