阿九。 发表于 2020-10-25 10:09:25

新手的for语句

是什么条件让程序结束的 判断的结果不是 i>0 吗?

风过无痕1989 发表于 2020-10-25 10:27:03

1078 次

风过无痕1989 发表于 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
请按任意健继续 。。。

jitianmoshen 发表于 2020-10-25 10:55:31

如果不像3楼说的题目没错的话{:10_258:}
这个和double的精度有关,你把i=1就是1075次, 2的1075次幂是4.0480450661462123670499069343783e323, 也就是说这个for循环已经算到小数点后323位已经都是0了,如果你的系统double类型能存储到小数点后324位,前面这个数再除以2,就只能把最后一个不是0的数字再向后移一位(我只是打个比方, 计算机存储数据都是二进制形式), 但实际上已经超出double类型的范围, 向后移的那个数字就会被忽视掉了,这个时候i就等于0 了, 这种情况叫下溢.

阿九。 发表于 2020-10-25 11:14:51

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

循环多少次是小甲鱼抛出的问题
我主要是想知道是什么条件使程序终止的?

风过无痕1989 发表于 2020-10-25 11:18:59

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

终止的条件就是 i > 0,i 每次的步进是0.5,从10开始,你有兴趣可以算一算,1078 次以后,i 等于多少呀

风过无痕1989 发表于 2020-10-25 11:25:15

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

无论是什么溢,程序运行是骗不了人的,我的系统是32位,运行1078次终止。如果你的系统是64位或更高,你可以运行试试看,运行了多少次程序终止

阿九。 发表于 2020-10-25 11:27:33

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

整数除以整数怎会为负数啊 (i < 0),还是说我理解错了?

jitianmoshen 发表于 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次左右

jitianmoshen 发表于 2020-10-25 11:50:03

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

他问的不是具体多少次, 是为什么程序停止

风过无痕1989 发表于 2020-10-25 12:01:54

jitianmoshen 发表于 2020-10-25 11:50
他问的不是具体多少次, 是为什么程序停止

不是告诉他运行了1078次吗?

风过无痕1989 发表于 2020-10-25 12:03:42

阿九。 发表于 2020-10-25 11:27
整数除以整数怎会为负数啊 (i < 0),还是说我理解错了?

i 是不会小0的,但系统是有限的,超过了砐限,肯定就不能运行下去了,就会终止程序了的呀

Yuhaokaoyu 发表于 2020-10-25 12:04:38

执行1078次之后,i的值太小,计算机就默认成0,

风过无痕1989 发表于 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);    // 输出统计结果
}

noti 发表于 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次
页: [1]
查看完整版本: 新手的for语句