求解释
我一步步组建为什么,b的值总是整形的啊?求大神解释:cry int / int 结果为 int , 之后把 int 赋给 float, 在赋值之前, 精度丢了, 所以, 没有小数点了吧。 只有0000000000这样。。。。 两个问题。第一问题,就是你的数组越界了,你规定了最大值是20,那么就不能超过20,也就是只能i<=19或者i<20,第二个问题,如二楼所说的那样,int/int只能得到int型。如果想精确,还是都换成float型比较好点。另外强烈建议楼主,多看课本,多思考,这些问题都是很基础的。 如二楼所说,定义一个数组a这里的20是数组的长度,但是数组的下标是从0开始,即aa................a,这时候数组长度刚好是20,所以你的for循环里越界了,应该是i<20。其次由于整数除以整数的结果默认以整数形式给出,所以如果想得到你的float类型,强制转换好了。最后说一下你的编程习惯,既然是int main(),那么最好是有返回值。如下:
#include<stdio.h>
int main()
{
int i ,a;
float b,sum = 0;
a = 1;
a = 1;
for(i = 2;i<20;i++)
{
a = a + a;
b = (float)(a/a);
sum += b;
}
printf("%f",sum);
return 0;
} 呵呵,楼上回答都很好,做这个题目的是什么啊。。 喜欢散步 发表于 2014-5-24 04:19 static/image/common/back.gif
int / int 结果为 int , 之后把 int 赋给 float, 在赋值之前, 精度丢了, 所以, 没有小数点了吧。 只有00 ...
int/int的结果是int型是么?我在书上没看到啊:cry 夜神月0_0 发表于 2014-5-24 10:38 static/image/common/back.gif
如二楼所说,定义一个数组a这里的20是数组的长度,但是数组的下标是从0开始,即aa.............. ...
你说的数组长度和编程习惯的问题我没注意而已。。。。。但是强制转换的结果是没用的。。运行a/a的结果是1.0000,你说了那么多,没解决问题;:lol::titter: #include <stdio.h>
void main()
{
int i,a;
float b,sum = 0;
a = 1;
a = 1;
for(i =2;i < 20;i++)
{
// printf("%d",i);
a = a + a;
printf("%d",a);
b =(float)a / (float)a;
printf("%f\n",b);
sum = sum + b;
}
printf("%f",sum);
}
其实主要是你定义了 int a 的数组,所以里面存放的是 Int 类型。 Int 类型运算完进行赋值给变量 b 的时候,如果两边类型不同,编译器会判断b的类型 和右边的类型谁更高级,然后自动提升类型,所以会把b转为int类型。不过每个编译器的运行机制都不同,你的编译器那么多错误也能通过,确实厉害。:shock: 陌上蝴蝶飞 发表于 2014-5-24 21:41 static/image/common/back.gif
int/int的结果是int型是么?我在书上没看到啊
是的, 之后float = int, 这时int 被转为float了 陌上蝴蝶飞 发表于 2014-5-24 21:41 static/image/common/back.gif
int/int的结果是int型是么?我在书上没看到啊
写错了,是(float)a/(float)a 陌上蝴蝶飞 发表于 2014-5-24 21:47 static/image/common/back.gif
你说的数组长度和编程习惯的问题我没注意而已。。。。。但是强制转换的结果是没用的。。运行a/a的结 ...
(float)a/(float)a 呵呵。。。。
页:
[1]