簡體   English   中英

在c中的數組中找到'X'數字的部分和

[英]Find partial sum of 'X' numbers in array in 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]);
}

\\ i要創建具有此合法性的新數組:我的輸入:

4 13 23 21 11

輸出應為(不帶括號或逗號):

4 17 40 61 72

現在,當我們看到完整的代碼時,很明顯問題出在sum_till_last函數中,在該函數中,您使用分配的一些新的未初始化的內存覆蓋了傳遞給該函數的指針。

刪除分配(當然也要free )。 並修復arr_sum中的邏輯錯誤,當i為零時,該錯誤會導致您獲得arr[0] + arr[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] );
   }  
}

我只是簡單了一下,所以很容易理解:)我假設“ 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;
     }

根據您的政策進行修復

#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 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM