计算1*2*3+4*5*6+...+97*98*99


#include 
int main()
{ 
    int i,sum=0,k,j=1;
    for(i=1;i<=33;i++)
    {   k=1;
        for(;j<=j+2;j++)
            k*=j;
        sum+=k;  
    }
   printf("sum=%d\n",sum);
   
   return 0;
}

为什么我这样子运行不出来有什么错吗

j<=j+2,好神奇的判断条件,接近永动机了啊
改为

for(j=3*i-2;j<=3*i;j++)

参考如下:


#include <stdio.h>
int main()
{ 
    int i,sum=0,k,j=1;
    for(i=1;i<=33;i++)
    {   k=1;
        for(j=3*i-2;j<=3*i;j++)
            k*=j;
        sum+=k;  
    }
   printf("sum=%d\n",sum);
   
   return 0;
}

j<=j+2是恒真的,所以是个死循环
这里你多余写循环
直接

 
#include <stdio.h>
int main()
{ 
    int i,sum=0,k,j=1;
    for(i=1;i<99;i+=3)
    {
       k=i*(i+1)*(i+2);
        sum+=k;  
    }
   printf("sum=%d\n",sum);
   
   return 0;
}
 

该段代码存在问题,因为在内层循环中,条件表达式j<=j+2的结果始终为真,因为j+2始终大于j。这将导致内层循环无限执行下去,导致程序崩溃或陷入死循环。

可以将内层循环的条件表达式改为j<=3*i,使其在每次外层循环后能够正确地终止。修改后的代码如下:

#include <stdio.h>

int main() {
    int i, sum = 0, k, j = 1;
    for (i = 1; i <= 33; i++) {
        k = 1;
        for (; j <= 3 * i; j++) {
            k *= j;
        }
        sum += k;
    }
    printf("sum=%d\n", sum);
    return 0;
}

#include<stdio.h>
int main() {
    long i;
    long term, sum = 0;
    for (i = 1; i <= 97;i+=2) {
        term = i*(i + 1) * (i + 2);
        sum = sum + term;
    }
    printf("sum=%ld\n",sum);
}