鱼C论坛

 找回密码
 立即注册
查看: 1371|回复: 8

[已解决]这段代码是死循环吗?为什么不出结果

[复制链接]
发表于 2017-7-29 14:08:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <stdio.h>

  2. #define M 4000000
  3. #define N 500000

  4. int main()
  5. {
  6.         int count = 0;
  7.         double a;
  8.         while (a >= 0);
  9.         {
  10.                 a = M + M * 0.08;//M += M*0.08;
  11.                 a = a - N;//M -= N;
  12.                 count++;//count++;
  13.         }
  14.         //while (a >= 0);

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

  17.         return 0;
  18. }
复制代码
最佳答案
2017-7-29 14:14:22
是死循环
a = M + M * 0.08;
m是固定值,每次循环a都被重新赋值,所以每次判断都是a都是大于0的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-7-29 14:14:22 | 显示全部楼层    本楼为最佳答案   
是死循环
a = M + M * 0.08;
m是固定值,每次循环a都被重新赋值,所以每次判断都是a都是大于0的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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也不对是为什么呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-29 14:26:23 | 显示全部楼层
lizhiyong_11 发表于 2017-7-29 14:22
初始条件,double a =4000000;然后 将M改为a也不对是为什么呢?

你把while后面的分号删了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-29 14:34:00 | 显示全部楼层
13960672142 发表于 2017-7-29 14:26
你把while后面的分号删了

谢谢已经搞定了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-29 15:20:21 | 显示全部楼层
13960672142 发表于 2017-7-29 14:26
你把while后面的分号删了
  1. #include<stdio.h>

  2. int main()
  3. {
  4.         int i = 3;
  5.         long a = 2;
  6.         while(i <= 14)
  7.         {
  8.                 a = a * a;

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

  13.         return 0;
  14. }
复制代码

你好可以在问你一个问题吗?这个程序为什么打印的是 , 可以繁殖0只兔子,?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
lizhiyong_11 + 5 + 5 + 3 感谢楼主无私奉献!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2017-7-29 17:03:03 | 显示全部楼层
13960672142 发表于 2017-7-29 15:31
i=7的时候 a=65536
a=a*a  65536*65536=4294967296  二进制是100000000000000000000000000000000
long ...

嗯嗯谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 08:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表