使用条件运算符的二次方程
Quadratic equation using conditional operator
谁能一步一步地向我解释这个程序是如何工作的?它使用条件运算符求解二次方程。但是一团糟。
#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;
}
让我们从头开始。
a? d=b*b-4*a*c, d>=0?
如果 a 不为 0,则设置 d = b2 - 4ac。
如果 d >= 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)):
现在这一行的最后一个冒号表示如果 a 等于 0
b? printf("x=%f\n",-b/2/a):
现在如果 b 不为零(记得 a 为 0 吗?),则只有一个根。如果 b 为零,那么我们转到下一个冒号
c? printf("0 solutions\n"):
printf("identity\n");
我认为剩下的应该是微不足道的。
条件运算符的语法是
condition ? expression1 : expression2
用于替代if
-else
语句。要理解这个程序,首先格式化条件运算符,如 if
-else
statements:
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");
}
}
现在你可以阅读这个程序了。
我认为如果使用 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。
谁能一步一步地向我解释这个程序是如何工作的?它使用条件运算符求解二次方程。但是一团糟。
#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;
}
让我们从头开始。
a? d=b*b-4*a*c, d>=0?
如果 a 不为 0,则设置 d = b2 - 4ac。 如果 d >= 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)):
现在这一行的最后一个冒号表示如果 a 等于 0
b? printf("x=%f\n",-b/2/a):
现在如果 b 不为零(记得 a 为 0 吗?),则只有一个根。如果 b 为零,那么我们转到下一个冒号
c? printf("0 solutions\n"):
printf("identity\n");
我认为剩下的应该是微不足道的。
条件运算符的语法是
condition ? expression1 : expression2
用于替代if
-else
语句。要理解这个程序,首先格式化条件运算符,如 if
-else
statements:
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");
}
}
现在你可以阅读这个程序了。
我认为如果使用 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。