考虑到用二维数组存储杨辉三角中的各行的值,会有大量的空间被浪费,故考虑用一维数组来实现

/*关键:每一行的行数就是该行的元素个数;每一行的元素总和他们是成等差数列的,如1,2,3,4...;用右脑思维,然后用左脑表达*/
#include <stdio.h>
#define n 7
int main(void){
    int yanghui[(n*n + n)/2];   
    yanghui[0] = yanghui[1] = yanghui[2] = 1;

    int i, j;
    //对每一行进行操作
    for(i = 3; i <= n; i++){
        //首尾赋值
        yanghui[((i-1)*(i-1) + i-1)/2] = yanghui[((i-1)*(i-1) + i-1)/2 + i-1] = 1;
        //每一行中中间几个元素进行赋值
        for(j = 1; j <= i - 2; j++){
            yanghui[((i-1)*(i-1) + i-1)/2 + j] = yanghui[((i-2)*(i-2) + i-2)/2 + j-1] + yanghui[((i-2)*(i-2) + i-2)/2 + j];
        }
    }
    //输出杨辉三角,可能插在语句中更容易实现输出,但是不符合结构化原则
    for(i = 1; i <= n; i++){
        //控制前面的空格
        for(j = n - i; j > 0; j--){
            printf(" ");
        }
        for(j = 1; j <= i; j++){
            printf("%d ", yanghui[((i-1)*(i-1) + i)/2 + j-1]);
        }
        printf("\n");
    }