为什么C语言for循环添加赋值语句会得到不同的运行结果?
核心原理
C 语言的语法规则中,如果for循环没有显式加{}包裹循环体,那么只有紧随for语句后的第一条语句会被当成循环内容执行,代码缩进仅用于提升可读性,对语法逻辑没有任何影响。
以下是三种写法的具体差异分析:
第一种写法(运行结果为5)
for (m = 1; m <= n; m++) i = m%10; printf("%d", i);
- 循环体只有
i = m%10;这一行,printf语句不属于循环内容,会在循环完全结束后才执行。 - 输入n=25时,循环会执行25次,
i每次都会被覆盖为当前m%10的结果,最后一次循环m=25,i = 25%10 = 5。 - 循环结束后执行
printf,打印的是最终的i值5,因此输出为5。
第二种写法(运行结果为1234567890123456789012345)
for (m = 1; m <= n; m++) printf("%d", m%10);
- 循环体是
printf("%d", m%10);这一行,每次循环都会执行一次打印。 - m从1遍历到25,每次打印当前
m%10的结果:1、2、3...9、0、1、2...9、0、1、2、3、4、5,拼接起来就是对应的长串输出。
第三种写法(运行结果为6)
for (m = 1; m <= n; m++) i = m%10; printf("%d", m%10);
- 和第一种写法逻辑类似,
printf不属于循环体,仅在循环结束后执行一次。 for循环的执行顺序为:判断条件→执行循环体→m自增→再次判断条件。当m=25时,满足m<=25的条件,执行循环体后m自增为26,此时判断26<=25不成立,循环退出。- 循环结束后m的值为26,
printf打印的是26%10 = 6,因此输出为6。
内容的提问来源于stack exchange,提问作者molychan
相关产品推荐
相关产品推荐

