鱼C论坛

 找回密码
 立即注册
查看: 5699|回复: 12

求解释

[复制链接]
发表于 2014-5-23 00:38:59 | 显示全部楼层 |阅读模式

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

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

x
我一步步组建为什么,b的值总是整形的啊?求大神解释:cry
QQ截图20140523003727.png
QQ截图20140523003727.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-5-24 04:19:05 | 显示全部楼层
int / int 结果为 int , 之后把 int 赋给 float, 在赋值之前, 精度丢了, 所以, 没有小数点了吧。 只有0000000000这样。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-5-24 04:58:51 | 显示全部楼层
两个问题。第一问题,就是你的数组越界了,你规定了最大值是20,那么就不能超过20,也就是只能i<=19或者i<20,第二个问题,如二楼所说的那样,int/int只能得到int型。如果想精确,还是都换成float型比较好点。  
  另外强烈建议楼主,多看课本,多思考,这些问题都是很基础的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-5-24 10:38:05 | 显示全部楼层
如二楼所说,定义一个数组a[20]这里的20是数组的长度,但是数组的下标是从0开始,即a[0]a[1]................a[19],这时候数组长度刚好是20,所以你的for循环里越界了,应该是i<20。其次由于整数除以整数的结果默认以整数形式给出,所以如果想得到你的float类型,强制转换好了。最后说一下你的编程习惯,既然是int main(),那么最好是有返回值。如下:
#include<stdio.h>
int main()
{
int i ,a[20];
float b,sum = 0;
a[0] = 1;
a[1] = 1;
for(i = 2;i<20;i++)
{
a[i] = a[i-1] + a[i-2];
b = (float)(a[i]/a[i-1]);
sum += b;
}
printf("%f",sum);
return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-5-24 11:40:45 | 显示全部楼层
呵呵,楼上回答都很好,做这个题目的是什么啊。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-24 21:41:08 | 显示全部楼层

int/int的结果是int型是么?我在书上没看到啊:cry
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-24 21:47:19 | 显示全部楼层
夜神月0_0 发表于 2014-5-24 10:38
如二楼所说,定义一个数组a[20]这里的20是数组的长度,但是数组的下标是从0开始,即a[0]a[1].............. ...

你说的数组长度和编程习惯的问题我没注意而已。。。。。但是强制转换的结果是没用的。。运行a[3]/a[2]的结果是1.0000,你说了那么多,没解决问题;:lol::titter:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-5-24 22:20:18 | 显示全部楼层
#include <stdio.h>

void main()
{       
        int i,a[20];

        float b,sum = 0;
        a[0] = 1;
        a[1] = 1;

        for(i =2;i < 20;i++)
        {
        //        printf("%d",i);
                a[i] = a[i-1] + a[i -2];
                printf("%d",a[i]);
                b =(float)a[i] / (float)a[i-1];
                printf("%f\n",b);
                sum = sum + b;

        }


        printf("%f",sum);
}
QQ拼音截图未命名.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-5-24 23:03:59 | 显示全部楼层
其实主要是你定义了 int a[20] 的数组,所以里面存放的是 Int 类型。 Int 类型运算完进行赋值给变量 b 的时候,如果两边类型不同,编译器会判断b的类型 和右边的类型谁更高级,然后自动提升类型,所以会把b转为int类型。不过每个编译器的运行机制都不同,你的编译器那么多错误也能通过,确实厉害。:shock:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-5-26 00:13:15 | 显示全部楼层
陌上蝴蝶飞 发表于 2014-5-24 21:41
int/int的结果是int型是么?我在书上没看到啊

是的, 之后float = int, 这时int 被转为float了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-5-27 18:20:44 | 显示全部楼层
陌上蝴蝶飞 发表于 2014-5-24 21:41
int/int的结果是int型是么?我在书上没看到啊

写错了,是(float)a[i]/(float)a[i+1]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-5-27 18:21:18 | 显示全部楼层
陌上蝴蝶飞 发表于 2014-5-24 21:47
你说的数组长度和编程习惯的问题我没注意而已。。。。。但是强制转换的结果是没用的。。运行a[3]/a[2]的结 ...

(float)a/(float)a[i+1]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-5-27 18:22:01 | 显示全部楼层
呵呵。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-30 02:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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