求助:这段C语言代码循环执行次数不符合预期的原因排查
问题分析与修正方案
第一个循环的错误
你的第一个for循环末尾多了一个分号;,这会导致循环体被解析为空语句——循环会执行10次,但每次什么都不做。后面的{a++;}是独立的代码块,只会执行一次,所以a只增加了1,而非预期的10。
错误代码片段:
for (int zaehler = 0; zaehler != 10; zaehler = zaehler +1); { a++; }
修正后:
去掉循环末尾的分号,让{a++;}成为循环体:
for (int zaehler = 0; zaehler != 10; zaehler = zaehler +1) { a++; }
第二个循环的错误
第二个循环的变量n是int类型,当执行n = n - 0.5时,右侧计算结果是double类型,赋值给int变量会自动截断小数部分,相当于每次n实际减1(比如917-0.5得到916.5,转成int后是916)。这导致循环只执行917次,而非预期的1834次。
错误代码片段:
int n; for (n = 917; n > 0; n = n - 0.5) { a++; }
修正后:
将n的类型改为double,确保小数减法能被正确处理:
double n; for (n = 917; n > 0; n = n - 0.5) { a++; }
完整修正代码
另外补充:void main并非C标准写法,建议改为标准的int main并返回0:
#include<stdio.h> int main(void) { double a = 0; //(a) for (int zaehler = 0; zaehler != 10; zaehler++) { a++; } //(b) double n; for (n = 917; n > 0; n = n - 0.5) { a++; } printf("%.2lf\n", a ); return 0; }
内容的提问来源于stack exchange,提问作者Andreas
相关产品推荐
相关产品推荐

