标题:声明变量时赋初值,得出正确结果;不赋初值得出错误结果
只看楼主
gleerat
Rank: 2
等 级:论坛游民
帖 子:39
专家分:20
注 册:2009-12-23
结帖率:100%
已结贴  问题点数:10 回复次数:6 
声明变量时赋初值,得出正确结果;不赋初值得出错误结果
程序代码:
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 *求方差,公式为[(x1-y)^2+(x2-y)+……]/n,其中xi为所求方差的数字,y为平均值,n为+

 *所求方差的数字的个数                                                        +

 *要求是输入整形数,返回整形数                                                +

 *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 */
#include <stdio.h>
#include <math.h>

//int function(int *calculate[],int arrayLen);

int main(void)
{
    int calculate[3]={1,2,3};//输入的数字储存在数组calculate中
    int arrayLen=3;//输入数字的个数
   

    printf("%d\n",function(calculate,3));
}

int function(int calculate[],int arrayLen)
{
    int i;
    float sum=0,average=0,square=0,square_average=0;
    //当sum,average,square,square_average不赋初值得时候,得出的结果是错误的,
    //为什么会这样?这一点疑惑不解。
   

    for(i=0;i<arrayLen;i++)
        sum+=calculate[i];
    average=sum/arrayLen;
    for(i=0;i<arrayLen;i++)
        square_average+=(calculate[i]-average)*(calculate[i]-average);
   

    return (int)square_average/arrayLen;
}

第23行,当sum,average,square,square_average声明而不赋初值的时候,得出的结果是-715027002,当给它们赋初值之后就会给出正确的结果0,为什么会这样?这一点疑惑不解。
搜索更多相关主题的帖子: 整形 声明 平均值 color 
2011-12-23 16:29
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
得分:0 
废话,那不是声明是定义,没有初始化的变量的值当然是乱七八糟的,你用它去计算的结果怎么可能对?

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2011-12-23 17:41
gleerat
Rank: 2
等 级:论坛游民
帖 子:39
专家分:20
注 册:2009-12-23
得分:0 
回复 2楼 waterstar
在定义的时候没有赋值,如果这个时候直接用的话,当然就是无用的垃圾值;这里虽然没有马上赋值,但是后面在循环和各种语句中是用传递的数组candicates[i]给它们赋了值的,这个时候它们就不应当是垃圾值了吧,就应该是通过表达式得到的算术值了吧。

明察、慎思、笃行
2011-12-23 20:45
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
得分:0 
真不知道该怎么说你?你用的是+=,你知道它和单独一个=有什么区别吗?

总有那身价贱的人给作业贴回复完整的代码
2011-12-23 20:57
luchar
Rank: 9Rank: 9Rank: 9
来 自:南京
等 级:蜘蛛侠
帖 子:279
专家分:1263
注 册:2011-11-3
得分:0 
看到标题就猜到是这个问题了,看看运算符+=是怎么回事吧
2011-12-23 22:08
爱德华
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:183
专家分:536
注 册:2011-5-29
得分:10 
你看看啊,  你带入的那些变量都是需要有已经确认的值(已经赋给的初值)才能适用下面的运算(+=与=就不一样,前者是需要两个已知的变量才能运算出正确的值,而后者只需要知道后面的值就可以赋给前面的所求变量)从而得出正确的值.
            除非你写入的变量是你想要通过其它已知变量带入运算后得出来的,那就不需要赋初值了
写了这么多,希望能看得懂,还有多给点分啊— —.

算法,数据结构,windows核心编程.
2011-12-23 23:34
gleerat
Rank: 2
等 级:论坛游民
帖 子:39
专家分:20
注 册:2009-12-23
得分:0 
回复 6楼 爱德华
谢谢了。
不赋值的时候,在linux下测试的时候,是正常的,给出正确的结果0;在windows下测试的时候会给出垃圾值。
赋值的时候,都是正常的,这应该跟操作系统的特性有关吧。

明察、慎思、笃行
2011-12-24 11:19



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-358471-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.056306 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved