为什么要小于n而不是小于等于n

img


我写的代码如下
#include "stdio.h"
int main(void){
int n;
float i, s=1,k=1;
scanf("%d",&n);
for(i=1.0;i<=n;i=i+1.0){
k=1.0+k+i;
s=s+1.0/k;
}
printf("%.6f",s);

输入11
for判断语句小于等于n得到的结果是1.846154
for判断语句改成小于n得到的结果就是1.833333了,我很不理解,题目给的很明确是加到n 那为什么要小于n

“多一少一”问题占程序员常犯错误的10%以上!
避免“多一少一”问题的方法之一是将比如<10甚至<5的数代入程序片断,掰手指头心算验证一下程序到底应该写为
x、x-1、x+1中的哪个?
<、<=、==、>、>=中的哪个?

修改处见注释,供参考:

#include <stdio.h>
int main(void)
{
    int n, i;
    float  s = 0, k = 0; //i,s=1,k=1;
    scanf("%d", &n);
    for (i = 1; i <= n; i++) { //for(i=1.0;i<=n;i=i+1.0)
        k += i;   //k = 1.0 + k + i;
        s += 1.0 / k;
    }
    printf("%.6f", s);
    return 0;
}