回 帖 发 新 帖 刷新版面

主题:[讨论]请大家帮我看个小程序 有疑惑..

#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个回复)

沙发

这里a[i+1] = a[i]+double(1/(i+1)); //1/(i+1)已经变成了一个整数(0),整数除以整数结果为一个整数,把它改为 1.0/(i+1). :)

板凳

是这样没错 thx ...^^

那样的话a[0]=a[1]=a[2]=a[3]a=[4] = 0.5

为什么接下来的printf 什么都打印不出来呢 ??

3 楼


请懂的帮忙解下答....在此谢过

4 楼

我也是菜鸟,没办法回答你,不过我把你的程序改了下:
#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 楼

for (i=0 ;i<5 ;i++)
        a[i+1] = a[i]......

a[i+1]数组越界

6 楼

for (i=0 ;i<5 ;i++)
        a[i+1] = a[i]......

5改成4就可以了

7 楼

#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 楼


谢谢各位了  ...^^

9 楼


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 楼

i,k都可以定义在for()循环里面啊

我来回复

您尚未登录,请登录后再回复。点此登录或注册