关于##C语言##的问题

在下列选项中,没有构成无限循环的程序段是( )。
此问题为什么选择C? (过程尽可能详细!)

img

A中,循环体中i=1%100+1的值永远是2,if(i>100)永远不会成立,所以循环永远不会结束。
B中,for循环的第二个表达式为空,就是没有结束循环的条件,所以一直执行
C中,因为循环体中k一直在减减,当k的值等于0的时候,就会结束循环
D中,s=36是定值,所以while(s>=0)永远成立,循环一直执行。

  private static void testA() {
    int i = 100;
    while (1) {
      // 1 % 100 + 1 = 2,i的值永远等于2
      i = 1 % 100 + 1;
      // i > 100为false,代码永远执行不到break;所以一直死循环
      if (i > 100) {
        break;
      }
    }
  }

  private static void testB() {
    // for (; ; ) 相当于while(true),所以会一直死循环
    for (; ; ) {
    }
  }

  private static void testD() {
    int s = 36;
    // s >= 0永远为true,所以会一直进入死循环
    while (s >= 0) {
      ++s; // s的值总是在36的基础上递增加1,所以s 永远大于 0
    }
  }