循环体内有额外的k++,所以k增长得比预期快,只执行了2轮而不是3轮

好的,我用更简单的方式来解释这个程序:
简单理解这个程序
第一步:看懂函数 fun
int fun(int x) {
int y;
y = x++; // 关键!先把x的值给y,然后x才加1
return y; // 返回的是x原来的值
}
重点:x++ 是"先用后加",所以:
- 如果传入0,返回0
- 如果传入1,返回1
- 如果传入2,返回2
第二步:看主程序的循环
for(k=0; k<3; k++) {
printf("%d,", fun(k)+k);
k++;
}
注意:这个循环里有两个k++!
- 一个在for循环的末尾
- 一个在printf后面
第三步:一步步执行
第1轮:
- k = 0
- 计算:fun(0) + k = 0 + 0 = 0
- 输出:0,
- k++ 变成1,for循环的k++又让k变成2
第2轮:
- k = 2(注意不是1!)
- 计算:fun(2) + k = 2 + 2 = 4
- 输出:4,
- k++ 变成3,for循环的k++又让k变成4
第3轮:
- k = 4 > 3,循环结束
最终结果
程序输出:0,4,
答案是 C
核心提醒:循环体内有额外的k++,所以k增长得比预期快,只执行了2轮而不是3轮!

浙公网安备 33010602011771号