主题:[讨论]请大家帮我看个小程序 有疑惑..
lct_3
[专家分:0] 发布于 2009-01-21 00:36:00
#include <stdio.h>
int main(void)
{
int i;
double a[5] = {1};
for (i=0 ;i<5 ;i++)
a[i+1] = a[i]+double(1/(i+1));
for (int k=0 ;k<5 ;k++)
printf ("%f\n",a[k]);
}
为什么运行了什么都没有 ...
回复列表 (共14个回复)
沙发
lifengjiang [专家分:480] 发布于 2009-01-21 05:58:00
这里a[i+1] = a[i]+double(1/(i+1)); //1/(i+1)已经变成了一个整数(0),整数除以整数结果为一个整数,把它改为 1.0/(i+1). :)
板凳
lct_3 [专家分:0] 发布于 2009-01-21 13:32:00
是这样没错 thx ...^^
那样的话a[0]=a[1]=a[2]=a[3]a=[4] = 0.5
为什么接下来的printf 什么都打印不出来呢 ??
3 楼
lct_3 [专家分:0] 发布于 2009-01-21 16:37:00
请懂的帮忙解下答....在此谢过
4 楼
shinobifc [专家分:20] 发布于 2009-01-22 00:38:00
我也是菜鸟,没办法回答你,不过我把你的程序改了下:
#include <stdio.h>
int main(void)
{
int i,k;
double a[5] = {1};
for (i=0 ;i<5 ;i++)
a[i+1] = a[i]+(double)(1.0/(i+1));//强制类型转换double也要有双括号!
for (k=0 ;k<5 ;k++)
printf ("%f\n",a[k]);
return 0;
}
当然结果显示出来了,但还有两行提示:Floating point error:Domain
Null pointer assignment
不知道为什么会出现这样的错误?(好像是溢出了)
另外,程序还是有问题:为什么k不可以在for语句中定义,而要和i一起为全局变量呢?
希望高手指点!
5 楼
woshiyun [专家分:300] 发布于 2009-01-22 08:22:00
for (i=0 ;i<5 ;i++)
a[i+1] = a[i]......
a[i+1]数组越界
6 楼
woshiyun [专家分:300] 发布于 2009-01-22 08:24:00
for (i=0 ;i<5 ;i++)
a[i+1] = a[i]......
5改成4就可以了
7 楼
cy645309003 [专家分:510] 发布于 2009-01-22 11:38:00
#include <stdio.h>
int main(void)
{
int i;
double a[5] = {1};
for (i=0 ;i<4 ;i++) //越界了
a[i+1] = a[i]+1.0/(double)(i+1); //1/(i+1)结果已经是整数了....
for (int k=0 ;k<5 ;k++)
printf ("%f\n",a[k]);
}
8 楼
lct_3 [专家分:0] 发布于 2009-01-22 14:02:00
谢谢各位了 ...^^
9 楼
lct_3 [专家分:0] 发布于 2009-01-22 14:07:00
k可在for循环中被定义 作用域是从定义开始到return 0;
你可以用以下代码测试下
#include <stdio.h>
int main(void)
{
int a[2];
for (int i=0 ;i<2 ;i++)//此时定义i
a[i] = i+1;
printf ("%d\n",i);//i = 2;
}//输出:2
10 楼
smwt [专家分:110] 发布于 2009-02-05 15:32:00
i,k都可以定义在for()循环里面啊
我来回复