给定整数数组,找到其元素的总和

时间:2019-06-21 05:18:57

标签: c

给出一个整数数组,找到其元素的总和。 我的问题是在C语言中,您只有固定大小的数组; 我的代码没有打印问题所要求的随机大小数组的总和; [1,2,3,4,5,------- n个元素]仅针对ex 6或defnite大小打印。使用循环;

#include <stdio.h>
int main() {
    int i;
    scanf("%d\n",&i);
    int a[6];
    int sum=0;
    for(i=0;i<=5;i++)
        scanf("%d\n",&a[i]);
    for(i=0;i<=5;i++)
        sum=sum+a[i];
    printf("%d\n",sum);
    return 0;
}

1 个答案:

答案 0 :(得分:1)

似乎您想让用户输入数组中元素的数量。您的代码将这些信息扫描到变量i中。因此,不能在for循环中使用变量i作为计数器。您需要两个不同的变量。一个变量保存要包含在总和中的整数的数量,另一个变量保存循环。

要获得可变大小的数组,还需要在定义数组时使用用户输入。这就是所谓的VLA(可变长度数组)。

类似的东西:

#include <stdio.h>
int main() {
    int i;
    int N = 0;         // New variable holding the number of integers in the sum
    scanf("%d\n",&N);  // scan into N
    int a[N];          // Use N for the VLA
    int sum=0;
    for(i=0;i<N;i++)   // Use N as limit
        scanf("%d\n",&a[i]);
    for(i=0;i<N;i++)   // Use N as limit
        sum=sum+a[i];
    printf("%d\n",sum);
    return 0;
}

那是-注意VLA。如果用户为N输入高数字,则可能会发生堆栈溢出。如果要使用VLA,则您的代码应强制使用最大数量  用户输入的限制。

通常最好使用动态分配而不是VLA。喜欢:

#include <stdio.h>
#include <stdlib.h>
int main() {
    int i;
    int N = 0;
    scanf("%d\n",&N);
    int *a = malloc(N * sizeof *a);  // Dynamic allocation
    if (a == NULL) exit(1);          // Check for allocation failure
    int sum=0;
    for(i=0;i<N;i++)
        scanf("%d\n",&a[i]);
    for(i=0;i<N;i++)
        sum=sum+a[i];
    printf("%d\n",sum);
    free(a);                         // Free allocated memory
    return 0;
}

一些额外的评论:

1)要计算总和,实际上不需要数组。只需扫描到一些int并将其添加到sum。无需先将其存储在数组中。

2)始终检查scanf的返回值。示例:if (scanf("%d\n",&N) != 1) exit(1);