数组累加
想用一个数组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] ); }