鱼C论坛

 找回密码
 立即注册
查看: 1070|回复: 14

[已解决]新手的for语句

[复制链接]
发表于 2020-10-25 10:09:25 | 显示全部楼层 |阅读模式

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

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

x
是什么条件让程序结束的 判断的结果不是 i>0 吗?
最佳答案
2020-10-25 11:41:28
阿九。 发表于 2020-10-25 11:27
整数除以整数怎会为负数啊 (i < 0),还是说我理解错了?

最后一位的精度丢失之后 i 就等于0了,  比如double只能存储小数点后10位的数字,i = 0.0000000001再除以10, 就会把最后一位的 1 丢掉了,这个时候 i = 0 ,没说小于0.  你把double换成float,应该是150次左右
截屏2020-10-25 10.07.38.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-25 10:27:03 | 显示全部楼层
1078 次

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

使用道具 举报

发表于 2020-10-25 10:47:25 | 显示全部楼层
你的程序有问题,由于不是你问题所在“ 循环多少次 ”,我在上面的回复中就没有改了
问题1:作为循环变量,应该是整型,而不是双精度 double 型
问题2:既然是 double 型,输出语句中就不能使用浮点数输出,而要使用双精度 double 型 %.2lf (大写字母L的小写字母)

正确的程序如下:
#include <stdio.h>
int main()
{ 
    int count = 0; 
    int i;
    double vol;
    for (i = 10;i > 0;i /= 2)
    {
        vol = i;
        printf("%.2lf\n", vol);
        count += 1; 
    }
    printf("%d",count); 
}

这个程序执行4次,输出:
10.00
5.00
2.00
1.00
4
-------------------------------------------
Process exited after 0.2226 seconds with return value 1
请按任意健继续 。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-10-25 10:55:31 | 显示全部楼层
如果不像3楼说的题目没错的话
这个和double的精度有关,你把i=1就是1075次, 2的1075次幂是4.0480450661462123670499069343783e323, 也就是说这个for循环已经算到小数点后323位已经都是0了,  如果你的系统double类型能存储到小数点后324位,前面这个数再除以2,就只能把最后一个不是0的数字再向后移一位(我只是打个比方, 计算机存储数据都是二进制形式), 但实际上已经超出double类型的范围, 向后移的那个数字就会被忽视掉了,这个时候i就等于0 了, 这种情况叫下溢.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-10-25 11:14:51 | 显示全部楼层
风过无痕1989 发表于 2020-10-25 10:47
你的程序有问题,由于不是你问题所在“ 循环多少次 ”,我在上面的回复中就没有改了
问题1:作为循环变量 ...

循环多少次是小甲鱼抛出的问题
我主要是想知道是什么条件使程序终止的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-25 11:18:59 | 显示全部楼层
阿九。 发表于 2020-10-25 11:14
循环多少次是小甲鱼抛出的问题
我主要是想知道是什么条件使程序终止的?

终止的条件就是 i > 0,i 每次的步进是0.5,从10开始,你有兴趣可以算一算,1078 次以后,i 等于多少呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-10-25 11:25:15 | 显示全部楼层
jitianmoshen 发表于 2020-10-25 10:55
如果不像3楼说的题目没错的话
这个和double的精度有关,你把i=1就是1075次, 2的1075次幂是4.0480 ...

无论是什么溢,程序运行是骗不了人的,我的系统是32位,运行1078次终止。如果你的系统是64位或更高,你可以运行试试看,运行了多少次程序终止
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-10-25 11:27:33 | 显示全部楼层
风过无痕1989 发表于 2020-10-25 11:18
终止的条件就是 i > 0,i 每次的步进是0.5,从10开始,你有兴趣可以算一算,1078 次以后,i 等于多少呀

整数除以整数怎会为负数啊 (i < 0),还是说我理解错了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-25 11:41:28 | 显示全部楼层    本楼为最佳答案   
阿九。 发表于 2020-10-25 11:27
整数除以整数怎会为负数啊 (i < 0),还是说我理解错了?

最后一位的精度丢失之后 i 就等于0了,  比如double只能存储小数点后10位的数字,i = 0.0000000001再除以10, 就会把最后一位的 1 丢掉了,这个时候 i = 0 ,没说小于0.  你把double换成float,应该是150次左右
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-10-25 11:50:03 | 显示全部楼层
风过无痕1989 发表于 2020-10-25 11:25
无论是什么溢,程序运行是骗不了人的,我的系统是32位,运行1078次终止。如果你的系统是64位或更高,你可 ...

他问的不是具体多少次, 是为什么程序停止
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-10-25 12:01:54 | 显示全部楼层
jitianmoshen 发表于 2020-10-25 11:50
他问的不是具体多少次, 是为什么程序停止

不是告诉他运行了1078次吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-25 12:03:42 | 显示全部楼层
阿九。 发表于 2020-10-25 11:27
整数除以整数怎会为负数啊 (i < 0),还是说我理解错了?

i 是不会小0的,但系统是有限的,超过了砐限,肯定就不能运行下去了,就会终止程序了的呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-25 12:04:38 | 显示全部楼层
执行1078次之后,i的值太小,计算机就默认成0,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-25 13:06:55 | 显示全部楼层
阿九。 发表于 2020-10-25 11:27
整数除以整数怎会为负数啊 (i < 0),还是说我理解错了?

以下是本求助帖子的原程序,我只是加了一个统计而已。大家都可以运行一下试试,看看结果如何
#include <stdio.h>
int main()
{ 
    int count = 0;             // 为了统计,增加一个计数器
    double i;
    for (i = 10;i > 0;i /= 2)
    {
        printf("%.2f\n", i);  // 此处的错误没有修改,正确的应该是 %.2lf 
        count += 1; 
    }
    printf("%d",count);    // 输出统计结果
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-10-27 09:45:19 | 显示全部楼层
#include <stdio.h>
int main()
{
        double i;
        int count = 0;
        for (i = 10;i > 0;i /= 2)
        {
                printf("%0.2f\n", i);
                count += 1;
                
        }
        printf("%d\n", count);
        return 0;
}
//结果是1078次
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 20:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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