C语言初学者求解这段代码

[复制链接]
查看11 | 回复3 | 2011-7-25 18:56:11 | 显示全部楼层 |阅读模式
下面的代码是我复制谭浩强的书里面的,才刚刚接触,呵呵。。。
main()
{int i,t;
t=1;
i=2;
while(i<=100)
{t=t*i;
i=i+1;
}
printf("%d",t);
getch();
}
当(i<=5)时就正确,为什么我改成(i<=100)执行代码就显示0了?
我用的WIN-TC
还有啊!这里面不用加进 #include"math.h"这个函数的吗?

回复

使用道具 举报

千问 | 2011-7-25 18:56:11 | 显示全部楼层
100太大了,你想算100*99*98*87*……*1的值,用这种方法是不可能的这个值巨大无比,但你的这个t,类型是个int,最大也不过是2^32-1,所以运算过程中,早就“冒”了,冒了以后,编译器进行隐式转换,运算过程中保留后32位,就是0了这种算法,估计只能算i<=20以内的吧...
回复

使用道具 举报

千问 | 2011-7-25 18:56:11 | 显示全部楼层
首先,不用加math.h,你这里没有用到math.h中的函数。其次,问题根源在于printf("%d",t);中%d只能显示int类型的数据范围(不同编译器其范围大小不同),超出范围则出错。此程序中(i<=5)时还在其范围之内,当(i<=100)时,由于是求阶乘,范围早已经超出,编译器会报错。...
回复

使用道具 举报

千问 | 2011-7-25 18:56:11 | 显示全部楼层
<100时,结果太大,超过了int的范围,所以系统给出错误值0你这个结果太大,用整数已经无法表示,建议将t改成double类型,输出时改为 printf("%.0f\n",t); math.h只有在用到这个库里的函数时才用到,比如开方sqrt(),绝对值fabs()等等...
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行