你能解释一下这段代码吗?

时间:2016-03-21 10:09:29

标签: c

休息没问题但是,我不明白这部分发生了什么:

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;
}

4 个答案:

答案 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) {
    ....
}
  • 第1部分是在循环开始之前执行一次的语句。
  • 第2部分是您在每次迭代时检查的条件。
  • 第3部分是在每次迭代结束时执行的语句。

所以在这里,第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。

这就是全部。 ; )