Для начала функция должна сделать одну вещь: обновить массив в соответствии с требованием.
Это основная функция, в которую должен быть выведен обновленный массив.
Ваша реализация функции неяснаи слишком сложно.
Например, в комментарии к этому оператору 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;
}
написано, что
// if 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