不知道两个代码有什么区别

E(1)=E(2)=1
E(n)=(n-1)*E(n-1)+(n-2)*E(n-2) (n>2)
称为E数列,每一个E(n),(n=1,2,…)称为E数。求[1,30000]之内E数的个数
第一个#include<stdio.h>
int main()
{int a=1,b=1,n,c,i=2;
for(n=3;n<=30000;n++)
{c=(n-1)*b+(n-2)*a;

if(c<=30000)

{i++;
a=b;
b=c;
}

}

printf("%d",i);
return 0;
}

#include<stdio.h>
int main()
{int a=1,b=1,n,c,i=2;
for(n=3;n<=30000;n++)
{c=(n-1)*b+(n-2)*a;

if(c<=30000)

i++;
a=b;
b=c;

}

printf("%d",i);
return 0;
}
为什么第二种是对的,明明都没有区别新手疑惑。

上面的if(c<=30000)后面有{},下面的if后面没有{};
if后面有{}的情况,a=b;b=c;的执行受if语句的影响,只有if条件成立时才会执行
if后面没有{}的情况下,a=b;b=c;的执行不受if语句的影响,不管if条件成不成立,都会执行

img

你的代码有问题,代码修改如下:

img

代码:

#include <stdio.h>
int main()
{
    int a=1,b=1,n,c,i=2;
    for(n=3;n<=30000;n++) //n<=30000 没有任何用处,结束循环是用的 if else
    {
        c=(n-1)*b+(n-2)*a;
        if(c<=30000)
        {
            i++;
            a=b;
            b=c;
        }else
            break;
    }
    printf("%d",i);
    return 0;
}