Учитывая массив целых чисел, найдите сумму его элементов - PullRequest
0 голосов
/ 21 июня 2019

Учитывая массив целых чисел, найдите сумму его элементов.моя проблема в том, что;на языке c у вас есть только фиксированный размер массива;мой код не печатает сумму массива случайного размера, который требует вопрос; [1,2,3,4,5, ------- n элементов] он печатает только для ex 6 или определенного размера aray;используя цикл;

#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 Ответ

1 голос
/ 21 июня 2019

Кажется, вы хотите, чтобы пользователь мог ввести количество элементов в массиве. Ваш код сканирует эту информацию в переменную i. Поэтому вы не можете использовать переменную i в качестве счетчика в циклах for. Вам нужны две разные переменные. Одна переменная для хранения числа целых чисел, включаемых в сумму, а другая переменная для циклов.

Далее, чтобы получить массив переменного размера, вам нужно использовать пользовательский ввод при определении массива. Это называется 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);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...