Online Compiler C

#include <math.h> #include <stdio.h> int main() { int n, times; scanf("%d", &n); float i = 1, sum = 0, mul; times = (n-1)*10; while (n>0) { mul = i * i; sum = sum + mul; i = i + 0.1; times--; } printf("%.1f", sum); return 0; }
这段代码试图计算从1开始,步长为0.1的n个数的平方和,但存在逻辑错误。

代码中`times`变量被初始化为`(n-1)*10`,但循环条件却是`while (n>0)`,这意味着循环次数由`n`控制,而不是由`times`控制。`times`虽然每次递减,但从未在循环条件中使用,因此循环会执行n次,而不是预期的`(n-1)*10+1`次。

- 检查循环控制变量:`while (n>0)`中`n`的值从未改变,导致循环要么无限执行(如果n>0),要么不执行(如果n<=0)。你需要确保循环次数与要计算的项数一致。
- 思考如何正确表示从1开始、步长为0.1的序列:例如,第k项可以表示为`1 + (k-1)*0.1`,这样循环变量k从1递增到n即可,无需使用浮点数累加。