休息没问题但是,我不明白这部分发生了什么:
for(x = 15; x%i?++ i:++ k ,i< x; x--,i ++)
#include <stdio.h>
#include <stdlib.h>
int main() {
int x, i = 2, k = 1;
for (x = 15; x % i ? ++i : ++k, i < x; x--, i++) {
x = -k + i;
i++;
printf("X = %d, I = %d, K = %d\n", x, i, k);
}
switch (x) {
case 2: printf("Display 2.\n");
case 5: printf("Display 5.\n");
case 0: printf("Display 0.\n");
break;
default: printf("Display default\n");
}
system("pause");
return 0;
}
答案 0 :(得分:5)
这是愚蠢的代码,但要了解它,你只需要将其分解:
for(x=15 ; // init x = 15
x%i ? ++i : ++k, i<x ; // if x is not a multiple of i then increment i,
// otherwise increment k,
// and then exit loop if i >= x
x--, i++) // decrement x, increment i
答案 1 :(得分:3)
通常,for循环具有以下结构:
for (part1; part2; part3) {
....
}
所以在这里,第2部分是x%i ? ++i : ++k, i<x ;
,它检查两个条件:
x%i ? ++i : ++k
。这是编写if-else
语句的简短方法。它可以写成:
if (x % i) //equivalent to : if ((x%i) == 1)
++i;
else
++k;
这意味着如果i
可以除以x
,则i
会递增,如果不能,则递增k。
i < x
是一个明显的比较。答案 2 :(得分:1)
这是c ++三元运算符,逗号运算符和增量运算符的组合。它的等效功能
bool f(int x, int &i, int&k)
{
if (x%i != 0)
{
++i;
return i != 0;
}
else
{
++k;
return i < x;
}
}
现在for
for(x=15 ; f(x, i, k); x--, i++)
{
x=-k+i;
i++;
printf("X = %d, I = %d, K = %d\n", x, i, k);
}
答案 3 :(得分:0)
这是三元运算符(read about it on wiki)
conditionalStatement ? "returnsThisWhenStatementIsTrue" : "returnsThisWhenStatementIsFalse"
当&#34; x%i&#34;是真的,否则返回++ k。
这就是全部。 ; )