Online Compiler C

#include <stdio.h> int main() { float num,sum=0,i=1,save_num; scanf("%f",&num); save_num=num; do{ sum=sum+i*i; i=i+0.1; }while(i<num); sum=sum-save_num*save_num; printf("%.1f",sum); return 0; }
这段代码试图计算从1开始,步长为0.1,直到小于输入数字的所有数的平方和,但最后减去了输入数字的平方。代码存在逻辑和精度问题。

- 循环变量i从1开始,每次增加0.1,但浮点数累加0.1会产生累积误差,导致循环次数不准确或无法精确到达预期终点。
- 循环条件是`i<num`,当num是整数时,例如输入2,循环会包括1.0, 1.1, ..., 1.9,但不会包括2.0。而最后减去`save_num*save_num`的操作意图不明确,可能想排除num本身,但实际循环已经排除了num,所以这个减法会错误地移除一个未包含的项。
- 如果输入不是0.1的整数倍,循环终止点会因浮点误差而不可预测。