#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);
}