c语言 wengkai课后习题

问题遇到的现象和发生背景

mooc wengkai的课后习题

问题相关代码,请勿粘贴截图

以下哪个循环和其他三条循环不等价(假设循环体都是一样的)?

A.
for ( i=0; i<10; i++ ) {...}

B.
for ( i=0; i<10; ++i ) {...}

C.
for ( i=0; i++<10; ) {...}

D.
for ( i=0; i<=9; i++ ) {...}

我的解答思路和尝试过的方法

不清楚B与C选项的运行过程,++i在这里如何运行

B选项的++i和A选项的i++效果是一样的,都是先执行i=0走一篇后再+1。而C选项的for语句,是先对i=0+1,再判断i是否符合,结果输出的是1 2 3 ...10
//如有解惑,那就采纳吧

img


++i如果是单独作为表达式,它效果跟i++是一样的;
但是如果++i在表达式中,例如++i+x+3这样那就表示i先自身增加1,再参与表达式计算。
如果写成后缀模式,i++ +x+3,则表示i先参加表达式计算,然后它自身再增加1。
所以在这题目中,A和B效果是一样的。
再看for中的中间部分的逻辑判断,
很明显i的范围是0<= i <=9的。

C选项虽然执行次数都是十次,
但是i的自增顺序不一样,i是先判断是否满足小于10,再执行自增,,
这跟其它选项i的先自增再判断执行指令的顺序不一样。