利用指针实现打印杨辉三角

1、概述

   杨辉三角作为C语言常见的练习题有着很多的解法,本文将利用该题从而理解数组与指针之间的相关性,杨辉三角是二项式系数在三角形中的一种几何排列如下图

2、解题思路、

(1)数组

  从上图可以看出如果将空白处补0那么除首行的1以外其他的数都满其上一行的相邻的两个数的和,那么可以看出它的行与列之间的关系,这样我们就可以想到,利用二维i数组可以实现,一个行列的结构,代码如下

#include<stdio.h>
int main(int argc, char const *argv[])
{
  int a[32][32]={};//为防止数组越界,将数组定义的大些
      a[1][1]=1;//定义初始的1,其余为0
  for (int i = 2; i < 10; i++)
    for (int j = 1; j <= i; j++)
      a[i][j]=a[i-1][j]+a[i-1][j-1];
//*****************************************************************************************
  for (int i = 0; i < 10; i++)//循环遍历
  {
    for (int j = 0; j <= i+1; j++)
      printf("%-4d",a[i][j]);
  putchar('\n');//换行
  }
  return 0;
}

  这里为防止数组越界问题发生,要将二维数组定义的大一些,比你想要打印的行数还要大一行一列,for循环i从2开始是为了将第一列空位0,j从1开始就是从每一行第二列开始赋值,程序运行结果如下

 调整循环遍历即可打印正常的杨辉三角(将0去除版)

    至此我们就完成了用二维数组的方法打印杨辉三角了,有人可能会觉得本文跑题了,其实先用二维数组完成杨辉三角会让我们更好的理解指针的方法

(2)指针

指针的本质是地址,指针变量是变量,该变量是用来存储地址的。我们只要理解了这一点,那么就可以用指针替换二维数组了,因为数组名及是数组的首地址,我们只需定义个指针变量指向数组的首地址,对数组的地址进行操作就可以赋予数组元素值了;

#include<stdio.h>
int main(int argc, char const *argv[])
{
  int a[32][32]={};//为防止数组越界,将数组定义的大些
      int (*p)[32]=a;
      *(*(p+1)+1)=1;//将p(行地址)+1,转为第二行第一列,*(p+1)将行地址降级成列地址,+1平移第二行第二列的地址,*(*(p+1)+1)取地址内容
  for (int i = 2; i < 10; i++)
    for (int j = 1; j <= i; j++)
      *(*(p+i)+j)=*(*(p+i-1)+j)+*(*(p+i-1)+(j-1));
  for (int i = 0; i < 10; i++)//循环遍历
  {
    for (int j = 0; j <= i+1; j++)
      printf("%-4d",*(*(p+i)+j));
  putchar('\n');//换行
  }
  return 0;
}

将p(行地址)+i,转为第i行第一列,*(p+i)将行地址降级成列地址,+j平移第i行第j列的地址,*(*(p+i)+j)取地址内容进行赋值等效于a[i][j]。结果如下

 到此我们就完成了用指针打印杨辉三角。

3.结语

   本文利用二维数组作为中间过渡,进而实现指针打印杨辉三角。

最后谢谢大家的观看,本人也是初入C语言的后辈,如有错误请各位前辈指正

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

F_DJ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值