2017-01-14 5 views
2

Мне нужно сделать функцию, которая суммирует мой массив, который заполняется случайными значениями. Моя функция возвращает 0, а не фактическое суммирование массива. У меня нет большого опыта работы с массивами или случайными значениями, как я могу закодировать свою функцию arrSum, чтобы дать мне сумму массива при вызове?Суммирование массива со случайными значениями

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

#define SIZE 1000 

int arrSum(int arr[SIZE], int b) { 
    if (b < 0) { 
     return 0; 
    } else { 
     return arr[b] + arrSum(arr, b - 1); 
    } 
} 

int main() { 
    int inputNum; 
    int i; 
    int arr1[SIZE]; 
    int sum; 
    srand(time(0)); 

    printf("Enter an integer between 0 and 1000: "); 
    scanf("%d", &inputNum); 

    sum = arrSum(arr1, inputNum); 
    printf("sum: %6d\n\n", sum); 

    printf(" Pos | Val\n"); 
    printf("-------------\n"); 
    for (i = 0; i < inputNum; i++) { 
     printf("%4d |%4d\n", i, rand() % 1001); 
    } 
    return 0; 
} 
+2

'if (arr <0)' Как вы думаете, что это делает? Ваш компилятор жалуется при компиляции с предупреждениями? – DeiDei

+0

Составляет ли это все предупреждения? –

ответ

3

Причина в том, что в массиве нет значений. Но только 0.

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 
#define SIZE 1000 
int arrSum(int arr[SIZE], int b){ 
    if (b < 0) return 0; 
else return arr[b] + arrSum(arr, b-1); 
} 
int main(){ 
    int inputNum; 
    int i,q; 
    int arr1[SIZE] = {0}; 
    int sum; 
    srand(time(0)); 

    printf("Enter an integer between 0 and 1000: "); 
    scanf("%d",&inputNum); 

    for(q=0;q<inputNum;q++){ 
    arr1[q] = rand() % 1001; 
    } 

    sum = arrSum(arr1, inputNum); 
    printf("sum: %6d\n\n", sum); 

    printf(" Pos | Val\n"); 
    printf("-------------\n"); 
    for (i = 0; i < inputNum; i++){ 
    printf("%4d |%4d\n", i,arr1[i]); 
} 
    return 0; 
} 
0

Логика нахождения суммы внутри функции правильно, при условии, что b находится в пределах диапазона индексов массива. Реальная проблема заключается в том, что ваш массив не заполненный случайными числами - он заполнен нулями.

Когда вы

int arr1[SIZE] = {0}; 

вы инициализации каждый элемент 0, и не изменяя его в любой момент во время выполнения программы. Таким образом, ваша функция возвращает сумму из индексов 0 в b, но это оказывается 0.