在学习C的过程中,我遇到的事情让我的思绪完全混乱。
表达式是:
exp(V*log(i))?i%2?s:s--:s++;
如果三元运算符是问题?正面:负面;我认为它是这样的:
if(pow(i,V)==1&&(i%2)==0)
s--;
else
s++;
然而, s 没有输入问题,我应该问第一个表达是什么意思?
该计划运作良好,但我无法理解为什么。
原始程序是:
main(){
#define V 1
int a, s=0, i;
for(i=1000;i>=0;i--)
exp(V*log(i))?i%2?s:s--:s++;
exp(V*log(i))?printf("%d\t%d\t",-s,i):printf("%d\t%d\t", s,-i);
getch();
}
答案 0 :(得分:1)
如果exp(V log(i))为真,那么测试是奇数i%2 == 1如果是返回s,如果甚至返回s--如果exp(V log(i) ))是错误的返回s ++ 如果你这样写它比更容易看到:
exp(V*log(i))?(i%2?s:s--):s++;
答案 1 :(得分:1)
三元运算符测试表达式是否为真。要理解这种情况,您需要对其进行分析并分离运算符的两种用法:
exp(V*log(i))?i%2?s:s--:s++;
这转换为
if(exp(V*log(i))
if(i%2)
s;
else
s--;
else
s++;
唯一的区别是它是一个表达式和一个语句,而不是if
/ else
版本。它总是返回s
的当前值,但会根据条件进行更改。
如果exp
引用指数函数,那么除非输出为-inf
,否则输出将为!=0
,因此该值将计算为true
。请注意,nan
也会评估为false,nan
是log
的输出,当值超出其域时。
所以基本上你可以用一个更简单的表达式来翻译它(除非V为零,i==0
的值会改变):
i>0?s++:i%2?s:s--;