搜索
查看: 660|回复: 7
打印 上一主题 下一主题

求教代码为什么结果不对的问题

[复制链接]
跳转到指定楼层
楼主
发表于 2014-7-16 00:16:17 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
不知道为什么程序最后执行后k为18,感觉k应该为10才对呀。
代码如下:

#include <stdio.h>
#include <stdlib.h>
int main()
{
        int a[99],i,j,k;
    for(i=1;i<=100;i++)
    {
                a[i-1]=0;
    }
        k=0;
    printf("%d\n",k); //这里打印一下k看看是否是0。
    for(i=1;i<=100;i++)
    {
        for(j=1;j<=100;j++)
        {
                        if(i%j==0)
                                a[i-1]++;
        }
        printf("%d ",k); //打印i循环中观察k的变化,发现第100次k突然变为18。我每循环一次只会让k加1呀。不知道原因。
        if((a[i-1])%2==1)
                        k=k+1;
    }
    printf("%d",k); //k最终的数应该等于10才对。
        system("pause");
        return 0;
}



1.jpg (40.92 KB, 下载次数: 32)

运行结果

运行结果

最佳答案

查看完整内容

是这样的,你本意是想定义a[0],a[1],a[2]一直到a[99]这100个元素,其实直接写成int a[100]就可以了,他默认就是0到99这100个元素,但是你现在定义成a[99],实际上是定义了a[0]到a[98]这99个元素。所以最后的k值会出错,还有定义好的数组不需要a这样用,直接i=0;i
沙发
发表于 2014-7-16 00:16:18 来自手机 | 只看该作者
是这样的,你本意是想定义a[0],a[1],a[2]一直到a[99]这100个元素,其实直接写成int a[100]就可以了,他默认就是0到99这100个元素,但是你现在定义成a[99],实际上是定义了a[0]到a[98]这99个元素。所以最后的k值会出错,还有定义好的数组不需要a[i-1]这样用,直接i=0;i<=99;i++这样就行
板凳
发表于 2014-7-16 08:58:46 | 只看该作者
我好像没看到,你有给int  j     初始化???
地板
发表于 2014-7-16 09:00:24 | 只看该作者
aqzma 发表于 2014-7-16 08:58
我好像没看到,你有给int  j     初始化???

不好意思,看到有给J初始化了,在这上字好小了。
5#
发表于 2014-7-16 09:14:52 | 只看该作者
a[99]
总共99个元素
1-100是100个元素

访问a[99]有未定义行为
6#
发表于 2014-7-16 10:31:56 | 只看该作者
int a[99],---》 int a[100]
c语言不检查数组越界,你有100个数据要存到指定只有99个单元的数组,最后一个会存到任何地方,所以最后一个出现的值就不知道是什么了。
7#
 楼主| 发表于 2014-7-16 13:06:56 | 只看该作者
嗨,强哥! 发表于 2014-7-16 10:31
int a[99],---》 int a[100]
c语言不检查数组越界,你有100个数据要存到指定只有99个单元的数组,最后一 ...

但是a[99]这个数组是从a[0]开始到a[99]有100个啊。我还是没搞明白。求解答。
8#
 楼主| 发表于 2014-7-16 13:59:01 | 只看该作者
xchief 发表于 2014-7-16 13:33
是这样的,你本意是想定义a[0],a[1],a[2]一直到a[99]这100个元素,其实直接写成int a[100]就可以了,他默 ...

对,感谢。明白了,理解错误了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表