いい加減に書くが、こんな感じで伝わるだろうか?
標準関数使ってるから、関数の意味はググって調べてくれい。
#include <stdio.h>
#define ZERO_POINT 9
#define LENMAX 80
/* 中略 */
int* s;
s = malloc(n * sizeof(int));
/* ここで先のプログラム流用して、s[i]にそれぞれ累計が保存されてるとおもいねえ */
/* +1 -1 +1 +1 +1 という結果だったら s[0]=1, s[1]=0, s[2]=1, s[3]=2, s[4]=3となる感じでひとつ */
{
int i;
char exstr[LEXMAX+1];
char blankstr[]=" ";
for(i=0; i!=n; i++){
if(i==0){
/* <-------> ここのながさ、ZERO_POINT=9文字分
puts(" 0 0 0");
puts(" 0 0---------|-------------------");
puts(" 0 0 *");
continue;
}
strcpy(exstr, "");
strncpy(exstr, blankstr, ZERO_POINT + s[i]);
strcat(exstr, "*");
printf("%3d %+3d%s\n", i+1, s[i], exstr);
}
free(s);
}