2017-01-14 1 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 배열 인덱스의 범위 내에 있다고 가정하면, 정확한 내부 합을 찾는 뒤에 논리. 실제 문제는 배열이 이 아니고 임의 숫자로 가득 찬이 아니며 0으로 채워져 있다는 것입니다.

당신이 0에 각 요소를 초기화하고, 프로그램 중에 어떤 시점에서 변경되지 않습니다

int arr1[SIZE] = {0}; 

할 때. 따라서 함수는 0에서 b까지의 합계를 반환하지만 이것은 0으로 나타납니다.