【问题标题】:Summing an Array with random values对具有随机值的数组求和
【发布时间】:2017-01-14 18:14:25
【问题描述】:

我需要创建一个对我的数组求和的函数,该数组填充了随机值。我的函数只返回 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;
}

【问题讨论】:

  • if (arr &lt; 0) 你觉得这有什么作用?当您编译时出现警告,您的编译器会抱怨吗?
  • 这个编译是否包含所有警告?

标签: c arrays recursion sum


【解决方案1】:

原因是数组中最初没有值。但只有 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;
 }

【讨论】:

    【解决方案2】:

    假设b 在数组索引的范围内,在函数内部求和的逻辑是正确的。真正的问题是您的数组没有填充随机数 - 它填充了零。

    当你这样做时

    int arr1[SIZE] = {0};
    

    您将每个元素初始化为0,并且在程序期间的任何时候都不会更改它。因此,您的函数返回从索引0b 的总和,但结果是0

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-22
      • 2011-08-15
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多