动态数组打印杨辉三角

来源:互联网 发布:淘宝购物车排序 编辑:程序博客网 时间:2024/05/22 05:19

一般情况下,我们习惯性的将数组定义为静态数组,例如int arr[3][6];
当数组大小需要随时改变的时候,对于静态数组,我们需要在main函数下去修改数组的大小,这样反复修改很麻烦,动态数组(malloc)使得数组可以随意改变,
静态数组——在栈上申请的内存空间
动态数组——在堆上申请的内存空间,堆上的空间,在C语言中 ,内存空间由程序 员按需申请,必须由程序员主动释放,如果不释放,会造成内存泄露的问题。
例如;


int n=10;int **mem=(int**)malloc(sizeof(int*)*n)//表示mem数组申请了十个内存空间,内容为十个指针(int*),然后给每个(int*)申请空间

这里写图片描述


一:直角三角形

#include <stdio.h>#include<stdlib.h>#include<malloc.h>#include <assert.h>void show_yanghui(int n){    assert(n>0);    int **mem = (int **)malloc(sizeof(int*)*n);    if (mem==NULL)//判断是否申请内存成功    {        return;    }    int i = 0;    for (i = 0; i < n;i++)    {        mem[i] = (int*)malloc(sizeof(int)*n);    }    //code    int j = 0;    for (i = 0; i < n; i++)    {        for (j = 0; j <= i; j++)        {            if (j == 0||i==j)            {                mem[i][j] = 1;            }        }    }    for (i = 2; i < n;i++)    {        for (j = 1; j < i; j++)        {            mem[i][j] = mem[i - 1][j - 1] + mem[i - 1][j];        }    }    for (i = 0; i < n; i++)    {        for (j = 0; j <= i; j++)        {            printf("%d ", mem[i][j]);        }        printf("\n");    }    //释放内存空间    for (i = 0; i < n; i++)    {        free(mem[i]);    }    free(mem);}int main(){    printf("Please enter :");    int n = 0;    scanf("%d", &n);    show_yanghui(n);    system("pause");}

这里写图片描述


二:等腰三角形

#include <stdio.h>#include<stdlib.h>#include<malloc.h>#include <assert.h>void show_yanghui(int n){    assert(n>0);    int **mem = (int **)malloc(sizeof(int*)*n);    if (mem==NULL)//判断是否申请内存成功    {        return;    }    int i = 0;    for (i = 0; i < n;i++)    {        mem[i] = (int*)malloc(sizeof(int)*n);    }    //code    int j = 0;    for (i = 0; i < n; i++)    {        for (j = 0; j <= i; j++)        {            if (j == 0||i==j)            {                mem[i][j] = 1;            }        }    }    for (i = 2; i < n;i++)    {        for (j = 1; j < i; j++)        {            mem[i][j] = mem[i - 1][j - 1] + mem[i - 1][j];        }    }    for (i = 0; i < n; i++)    {        int k = 0;        for(; k < n-1-i; k++)        {            printf("%5c",' ');        }        for (j = 0; j <= i; j++)        {            printf("%5d%5c ",mem[i][j],' ');        }        printf("\n");    }    //释放内存空间    for (i = 0; i < n; i++)    {        free(mem[i]);    }    free(mem);}int main(){    printf("Please enter :");    int n = 0;    scanf("%d", &n);    show_yanghui(n);    system("pause");}

这里写图片描述