查找数组中的元素总和

时间:2011-11-29 05:11:04

标签: c arrays

我有这个程序可以在我的大学实验室找到,但是当我在家里运行它会得到不同的结果

#include <stdio.h>
int main(int argc, char* argv[]) {
        const int size=100;
        int n, sum=0;
        int* A = (int*)malloc( sizeof(int)*size );
        for (n=size-1; n>0; n--)
                A[n] = n;

        for (n=0;n<size; n++)
                sum += A[n];

        printf ("sum=%d\n", sum);
        return 0;

}

我期待4950作为结果,但我会像112133223那样得到不同的结果。为什么会这样?

5 个答案:

答案 0 :(得分:7)

您没有为A[0]分配值。因此,A[0]会将垃圾值添加到sum

更改

for (n=size-1; n>0; n--)
               ^^^

for (n=size-1; n>=0; n--)
               ^^^^

此外,您需要通过执行以下操作释放动态分配的内存:

free(A);

返回之前。

答案 1 :(得分:2)

您永远不会为A [0]赋值 - 第一个循环快速结束。但是,您确实在求和中包含了此未分配的值。

答案 2 :(得分:1)

A[0]未定义:

for (n=size-1; n>0; n--)

应该是

for (n=size-1; n>=0; n--)

答案 3 :(得分:1)

仅仅因为你没有在第一个元素中放置任何值,你就有了垃圾。因此,一些随机数总和。

#include <stdio.h>
#include<stdlib.h> //for malloc
int main(int argc, char* argv[]) {
        const int size=100;
        int n, sum=0;
        int* A = (int*)malloc( sizeof(int)*size );
        for (n=size-1; n>=0; n--) //you forgot '='
                A[n] = n;

        for (n=0;n<size; n++)
                sum += A[n];

        printf ("sum=%d\n", sum);
        return 0;

}

答案 4 :(得分:0)

它对我来说很好。我用GCC执行了它。这是我跑的程序:

#include <stdio.h>
#include <malloc.h>
int main(int argc, char* argv[]) {
    const int size=100;
    int n, sum=0;
    int* A = (int*)malloc( sizeof(int)*size );
    for (n=size-1; n>0; n--)
            A[n] = n;

    for (n=0;n<size; n++)
            sum += A[n];

    printf ("sum=%d\n", sum);
    return 0;
}