Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
求'的部分和;X';c中数组中的数字_C - Fatal编程技术网

求'的部分和;X';c中数组中的数字

求'的部分和;X';c中数组中的数字,c,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); } }

你能帮我写一段代码,返回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]);
}
int-arr\u-sum(int-arr[],int-n)//数组的递归和
{ 
如果(n<0)//基本情况:
{
返回arr[0];
}
其他的
{
返回arr[n]+arr_和(arr,n-1);
}
}
截至最后一次的无效金额(整数*ar,整数si)
{
**int sum,i;//这里的问题在哪里
ar=(int*)malloc(si*sizeof(int));
对于(i=0;i给你:

#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] );
   }  
}
#包括
int main(){
int in_arr[5]={4,13,23,21,11};
int out_arr[5];
int p_sum=0;
int i;
对于(i=0;i给你:

#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] );
   }  
}
#包括
int main(){
int in_arr[5]={4,13,23,21,11};
int out_arr[5];
int p_sum=0;
int i;

对于(i=0;i我只是把它简单化了,所以很容易理解:) 我假设“n”总是等于或小于数组元素数。然后你只需打印和

  #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;
     }
#包括
整数arr_和(整数arr[],整数n){
int i=0,SUM=0;
对于(;i
我只是把它简化了,让它更容易理解:) 我假设“n”总是等于或小于数组元素数。然后你只需打印和

  #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;
     }
#包括
整数arr_和(整数arr[],整数n){
int i=0,SUM=0;
对于(;i
根据您的策略进行修复

#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 
}
#包括
#包括
整数arr_和(整数arr[],整数n){
如果(n==0){//则更改为
返回arr[0];
}否则{
返回arr[n]+arr_和(arr,n-1);
}
}
截至最后一次的无效金额(整数*ar,整数si){
整数和,i;
int*temp=malloc(si*sizeof(int));//变量名ar隐藏参数名ar。
对于(i=0;i//printf(“%d\n”,一个[5]);根据您的策略进行修复

#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 
}
#包括
#包括
整数arr_和(整数arr[],整数n){
如果(n==0){//则更改为
返回arr[0];
}否则{
返回arr[n]+arr_和(arr,n-1);
}
}
截至最后一次的无效金额(整数*ar,整数si){
整数和,i;
int*temp=malloc(si*sizeof(int));//变量名ar隐藏参数名ar。
对于(i=0;i//printf(“%d\n”,a[5]);现在,当我们可以看到完整的代码时,很明显问题出在
sum\u-till\u last
函数中,在该函数中,您使用分配的一些新的未初始化内存覆盖传递给函数的指针


放弃分配(当然还有调用
free
),并修复
arr\u sum
中导致您获得
arr[0]+arr[0]的逻辑错误
i
为零时。

现在当我们可以看到完整的代码时,很明显问题出在
sum\u-till\u last
函数中,在该函数中,您使用分配的一些新的未初始化内存覆盖传递给函数的指针


放弃分配(当然还有对
free
的调用)。并修复
arr\u sum
中的逻辑错误,该错误导致
arr[0]+arr[0]
i
为零时。当在
sum\u中分配内存直到最后一次
时,内存未初始化,其内容不确定。您不能使用它(当您调用
arr\u sum
时会执行此操作)在初始化内存之前。我还想知道,既然它用作局部变量,为什么要将
ar
作为参数传递给
sum\u till\u last
?现在的问题是什么?在调试器中运行它时会发生什么?另外,请尝试创建并向我们展示,包括如何实际调用
sum\u till\u last
函数。同样请。当你编辑你的问题时,然后向我们展示你使用的输入,以及预期和实际的输出。最后,我假设
n的基本情况应该是
n当你在
sum\u中分配内存直到最后一次
时,内存没有初始化,它的内容是不确定的。你不能使用它(当您调用
arr\u sum
时会执行此操作)在初始化内存之前。我还想知道,既然它用作局部变量,为什么要将
ar
作为参数传递给
sum\u till\u last
?现在的问题是什么?在调试器中运行它时会发生什么?另外,请尝试创建并向我们展示,包括如何实际调用
sum\u till\u last
函数。同样请。当您编辑您的问题时,请向我们展示您使用的输入,以及预期和实际输出。最后,我假设
的基本情况应该是
n,因为
您不能使用
sizeof(arr)
获取作为函数参数传递的数组的大小。该大小将仅为指针的大小。您需要将元素数作为额外参数传递。您是对的:)对不起,我没有长时间使用C。我将更改它。您是对的,在这个新实现中,它实际上非常简单:)您不能使用
sizeof(arr)
获取作为函数参数传递的数组的大小。该大小将仅为指针的大小。您需要将元素数作为额外参数传递。您是对的:)抱歉,我没有´´