lizhiyong_11 发表于 2017-7-29 14:08:39

这段代码是死循环吗?为什么不出结果

#include <stdio.h>

#define M 4000000
#define N 500000

int main()
{
      int count = 0;
      double a;
      while (a >= 0);
      {
                a = M + M * 0.08;//M += M*0.08;
                a = a - N;//M -= N;
                count++;//count++;
      }
      //while (a >= 0);

      printf("小家鱼需要%d年才会败光所有家产!\n",count);
      printf("%e\n",a);

      return 0;
}

13960672142 发表于 2017-7-29 14:14:22

是死循环
a = M + M * 0.08;
m是固定值,每次循环a都被重新赋值,所以每次判断都是a都是大于0的

lizhiyong_11 发表于 2017-7-29 14:16:15

13960672142 发表于 2017-7-29 14:14
是死循环
a = M + M * 0.08;
m是固定值,每次循环a都被重新赋值,所以每次判断都是a都是大于0的

{:10_277:}

lizhiyong_11 发表于 2017-7-29 14:22:16

本帖最后由 lizhiyong_11 于 2017-7-29 14:23 编辑

13960672142 发表于 2017-7-29 14:14
是死循环
a = M + M * 0.08;
m是固定值,每次循环a都被重新赋值,所以每次判断都是a都是大于0的

初始条件,double a =4000000;然后 将M改为a也不对是为什么呢?

13960672142 发表于 2017-7-29 14:26:23

lizhiyong_11 发表于 2017-7-29 14:22
初始条件,double a =4000000;然后 将M改为a也不对是为什么呢?

你把while后面的分号删了

lizhiyong_11 发表于 2017-7-29 14:34:00

13960672142 发表于 2017-7-29 14:26
你把while后面的分号删了

谢谢已经搞定了

lizhiyong_11 发表于 2017-7-29 15:20:21

13960672142 发表于 2017-7-29 14:26
你把while后面的分号删了

#include<stdio.h>

int main()
{
      int i = 3;
      long a = 2;
      while(i <= 14)
      {
                a = a * a;

                i++;
      }
      printf("两年之后可以繁殖%d只兔子!\n",a);
      printf("两年之后可以繁殖%d 只兔子!\n",i);

      return 0;
}

你好可以在问你一个问题吗?这个程序为什么打印的是 , 可以繁殖0只兔子,?

13960672142 发表于 2017-7-29 15:31:06

lizhiyong_11 发表于 2017-7-29 15:20
你好可以在问你一个问题吗?这个程序为什么打印的是 , 可以繁殖0只兔子,?

i=7的时候 a=65536
a=a*a65536*65536=4294967296二进制是100000000000000000000000000000000
long存储不了这么大的数据会截断成long能存储的位数,所以a*a=0

lizhiyong_11 发表于 2017-7-29 17:03:03

13960672142 发表于 2017-7-29 15:31
i=7的时候 a=65536
a=a*a65536*65536=4294967296二进制是100000000000000000000000000000000
long ...

嗯嗯谢谢
页: [1]
查看完整版本: 这段代码是死循环吗?为什么不出结果