天76 2021-11-03 23:31 采纳率: 100%
浏览 25
已结题

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

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;
}
为什么第二种是对的,明明都没有区别新手疑惑。

  • 写回答

1条回答 默认 最新

  • 关注

    上面的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;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月12日
  • 已采纳回答 11月4日
  • 创建了问题 11月3日

悬赏问题

  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计