数组累加
想用一个数组b[n]表示a[n]数组的累加值,比如b[0]=a[0];
b[1]=a[0]+a[1];
b[2]=a[0]+a[1]+a[2];
...
b[n]=a[0]+...a[n];
请问这个用C语言的程序该怎么实现呢?
程序代码:#include <stdio.h>
#include <string.h>
int plus_v(char *v, int idx)
{
if(0 == idx) return v[idx];
return v[idx] + plus_v(v, idx - 1);
}
int main(int argc, char *argv[])
{
char a[100];
int b[100];
int i;
memcpy(a, main, 100);
for(i = 0; i < sizeof(a); i++) {
b[i] = plus_v(a, i);
printf("b[%02d] = %d\n", i, b[i]);
}
return 0;
}
程序代码:#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE_A 5
#define PRINT_ON
int main(int argc, char *argv[]);
static int cs;
void init_A(char *v)
{
int i;
memcpy(v, main, SIZE_A);
#ifdef PRINT_ON
for(i = 1; i <= SIZE_A; i++) {
printf("a[%d] = %d\t", i - 1, v[i - 1]);
if(0 == i % 5) puts("");
}
#endif
}
int plus_v(char *v, int idx)
{
if(0 == idx) {
#ifdef PRINT_ON
printf("call stack[%d], return a[0]-----", cs++);
#endif
return v[idx];
} else {
#ifdef PRINT_ON
printf("call stack[%d]\n", cs++);
printf("return a[%d] + plus_v(a, %d),\n", idx, idx - 1);
#endif
}
return v[idx] + plus_v(v, idx - 1);
}
void gcc_make(void)
{
//system("rm -r *;ls");
//system("gcc -D PRINT_ON *.c -o v.out");
}
int main(int argc, char *argv[])
{
char a[SIZE_A];
int b[SIZE_A];
int i;
init_A(a);
for(i = 0; i < sizeof(a); i++) {
b[i] = plus_v(a, i);
#ifdef PRINT_ON
printf("b[%02d] = %d\n", i, (cs = 0, b[i]));
puts("-----next-----");
#endif
}
gcc_make();
return 0;
}
程序代码:#include <stdio.h>
void std_partial_sum( const int a[restrict], int b[restrict], size_t n )
{
if( n == 0 )
return;
b[0] = a[0];
for( size_t i=1; i!=n; ++i )
b[i] = b[i-1] + a[i];
}
int main( void )
{
int a[] = { 1, 2, 3, 5, 7, 9, 11 };
enum { LEN=sizeof(a)/sizeof(*a) };
int b[LEN]; // 期待结果是 { 1, 3, 6, 11, 18, 27, 38 }
std_partial_sum( a, b, LEN );
for( size_t i=0; i!=LEN; ++i )
printf( "%d\n", b[i] );
}