在c中查找数组中'X'数字的部分和

时间:2016-12-28 09:50:35

标签: c

你可以帮我处理代码,它返回c中数组中'X'数字的部分和吗?

完成:

    int arr_sum( int arr[], int n )//Recursive sum of array
     { 
      if (n < 0) //base case:
      {

        return arr[0];
      }
      else
      {
        return arr[n] + arr_sum(arr, n-1);
      }
    }
    void sum_till_last (int *ar,int si )
    {

        **int sum,i;// the problem some where here
        ar=(int*) malloc(si*sizeof(int));

        for (i=0; i<si;i++)
        {

            sum=arr_sum(ar,i);
            ar [i]=sum;
        }
        free (ar);**
    }


 void main ()
{
    int i;
    int a [5];
    for (i = 0; i < 5; i++)
      scanf_s("%d", &a[i]);

    sum_till_last(a,5);
    printf("%d\n",a[5]);
}

\我想用这个合法性创建新数组: 我的意见:

4 13 23 21 11

输出应该是(不带括号或逗号):

4 17 40 61 72

4 个答案:

答案 0 :(得分:2)

现在,当我们可以看到完整的代码时,很明显问题出现在sum_till_last函数中,在那里你用你分配的一些新的和未初始化的内存覆盖传递给函数的指针。

删除分配(当然是对free的调用)。并修复arr_sum中的逻辑错误,导致arr[0] + arr[0]i时获得var map = new google.maps.Map(document.getElementById('map_canvas'),mapOptions);

答案 1 :(得分:0)

你走了:

#include <stdio.h>

int main () {
   int in_arr[5] = {4,13,23,21,11};
   int out_arr[5];
   int p_sum =0;
   int i;

   for ( i=0;i<5;i++){
      out_arr[i] = in_arr[i]+p_sum;
      p_sum=p_sum+in_arr[i];
   }

   for (i=0;i<5;i++){
      printf("%d", out_arr[i] );
   }  
}

答案 2 :(得分:0)

我只是简单易懂,很容易理解:) 我假设“n”总是等于或小于数组元素数。然后你只需打印SUM。

  #include  <stdio.h>

     int arr_sum( int arr[], int n ){
         int i=0,SUM=0;   
         for(; i < n;i++){
           SUM= SUM+ arr[i];
           printf("%d ",SUM);
         }  
    }

     int main(void) {
         int array[] = {4, 13, 23, 21, 11};
         arr_sum(array,5);
         return 0;
     }

答案 3 :(得分:0)

根据您的政策进行修复

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

int arr_sum(int arr[], int n){
    if (n == 0){//Change to this
        return arr[0];
    } else {
        return arr[n] + arr_sum(arr, n-1);
    }
}

void sum_till_last(int *ar, int si){
    int sum,i;
    int *temp = malloc(si * sizeof(int));//variable name ar is shadowing parameter name ar.

    for(i = 0; i < si; i++){
        temp[i] = arr_sum(ar, i);
        if(i)
            putchar(' ');
        printf("%d", temp[i]);//need print out :D
    }
    free(temp);
}

int main(void){
    int i, a[5];

    for (i = 0; i < 5; i++)
        scanf_s("%d", &a[i]);

    sum_till_last(a, 5);
    //printf("%d\n",a[5]);<-- this print only one element. and It's out of bounds element XD 
}