逻辑上显示数组总和的缺陷

问题描述 投票:0回答:1

Q)从用户的1D数组中获取输入,为其值的总和创建新数组,例如,如果传递的数组为:| 1 | | 2 | | 3 |那么它应该打印| 1 | | 3 | | 6 | ,它将加上数组的内容,即1 + 2 = 3,1 + 2 + 3 = 6,不应更改array [0]的值。我试图制作程序,但有缺陷

#include <stdio.h>
void subtotal (float[], int);
int main()
{
    int n,i;
    printf("Enter the size of array"); // taking size of array from user
    scanf("%d",&n);
    float a[n];
    for (i=0;i<n;i++) // loop for entering elements of array
    {
        printf("Enter the element of array");
        scanf("%f",&a[i]);
    }
    subtotal(a,n); // function call
}
void subtotal (float a[],int n)  // function definition
{
    int i,j;
    float c;
    float sum=0,minus=0;
    c = a[0];
    for (i=0;i<n;i++)  // nested loop to calculate sum of array element
    {
        sum = sum - minus;
        for (j=0;j<=i;j++) // this loop is used to store sum value
        { 

        sum = sum+a[i];
        minus = sum;
      }
    a[i] = sum; // new array element a[i] will be sum;  
     sum = 0; 
    if (i==0) // if i==0 that means we don't need to change the first value of array;
    {
        a[i] = c; // a[0] was stored in extra variable 'c' , hence a[i] = c;
    }
}
    for (i=0;i<n;i++) // this loop to print the updated array
    {
        printf("%.2f \t",a[i]);
    }
}

告诉我为修复缺陷我可以进行的更改。

c function loops for-loop definition
1个回答
0
投票

对于初学者,该功能应该做一件事:根据要求更新阵列。

这是要输出更新后的数组的函数主要。

您的函数实现不清楚,也太复杂。

例如,在此if语句的注释中

if (i==0) // if i==0 that means we don't need to change the first value of array;
{
    a[i] = c; // a[0] was stored in extra variable 'c' , hence a[i] = c;
}

有记载

//如果i == 0,则意味着我们不需要更改的第一个值数组;

同时更新a[0]的值。

在if语句上方的语句中也是如此

a[i] = sum; // new array element a[i] will be sum; 

可以通过以下演示程序中所示的以下方法更简单地定义该函数。

#include <stdio.h>

void subtotal( float a[], size_t n )
{
    for ( size_t i = 1; i < n; i++ )
    {
        a[i] += a[i-1];
    }
}    

int main(void) 
{
    float a[] = { 1.0f, 2.0f, 3.0f };
    const size_t N = sizeof( a ) / sizeof( *a );

    subtotal( a, N );

    for ( size_t i = 0; i < N; i++ )
    {
        printf( "%.1f ", a[i] );
    }

    putchar( '\n' );

    return 0;
}

程序输出为

1.0 3.0 6.0 

如果需要将部分和放置在另一个数组中,则可以通过以下方式定义函数

#include <stdio.h>

void subtotal( float a[], size_t n, float b[] )
{
    if ( n != 0 )
    {
        b[0] = a[0];

        for ( size_t i = 1; i < n; i++ )
        {
            b[i] = a[i] + b[i-1];
        }
    }       
}

int main(void) 
{
    float a[] = { 1.0f, 2.0f, 3.0f };
    float b[sizeof( a ) / sizeof( *a )];
    const size_t N = sizeof( a ) / sizeof( *a );

    subtotal( a, N, b );

    for ( size_t i = 0; i < N; i++ )
    {
        printf( "%.1f ", b[i] );
    }

    putchar( '\n' );

    return 0;
}

再次显示程序输出为

1.0 3.0 6.0 
© www.soinside.com 2019 - 2024. All rights reserved.