题目>>>

用C语言打印杨辉三角。杨辉三角参考图如下:

分析>>>

于是不清楚杨辉三角的同学们可以上网查查,可以立刻知道它的相关推理归纳和公式总结。它的简介如下:

所以我们可以使用二项式的方法来写代码。但我下面要讲的是直接观察已有数据来写。

下面再放上一张多数据的图便于我们找规律:

直观看出三角形的两边都是 1 ,每一行的数的个数等于该行行数。(从第三行开始)被两边的 1 包围着的数据中,每个数等于它上一行前一列的数和上一行本列数之和。OK ,这是关于数字。

不要忘了“三角形”效果,我们知道要打印出三角形效果就要在每行开始先打印空格,把数字挤到中间,在按照行数依次减少空格。

思考>>>

仔细观察,根据以上分析,我们发现每步打印都与该行行数相关。中间数据由其上一行数据控制,而上一行数据最终由三角形边上的 1 控制。所以我们可以使用二维数组。使用二维数组就可以同时对相邻两行的数据按照相同的规则进行操作,三角形中间数据的计算和使用恰好要同时使用两行数据。

接着先写循环把二维数组对应三角形的边的部分赋值为 1 ,就可以处理中间数据了。

在这里需要注意的是,因为对上一段落代码的实现有些小复杂。 我们先研究数字打印,最后在无脑加上这些空格,还原成三角形。然后一步一步来写,写完一步打印出来看看结果,正确了就继续写。

代码>>>

就是先实现这张图:

打印 1 >>>

每行首元素是 1 ,第 n 行 的第 n 个元素是 1 。(末位)

#include<stdio.h>
int main()
{int arr[10][10] = { 0 }; //要先初始化int a = 1;int b = 1;for (a = 0;  a < 10; a++){arr[a][0] = 1; //每行首元素是 1for (b = 0; b <=a; b++){if(a==b)arr[a][b] = 1; //每行末位是 1}}//打印出来看看上面写的对不对for (a = 0; a < 10; a++){for (b = 0; b <=a; b++){printf("%d ", arr[a][b]);}printf("\n");}return 0;
}

注意访问数组是从下标0开始的。(数组的最低下标是0)此处数组下标0对应第一行。

打印结果图:

打印中间数据 >>>

要操作每个中间数据,就继续在循环内部加上 arr[a][b]的值在打印。

#include<stdio.h>
int main()
{int arr[10][10] = { 0 };int a = 1;int b = 1;    for (a = 0;  a < 10; a++){arr[a][0] = 1;for (b = 0; b <=a; b++){if(a==b){arr[a][b] = 1;}if(a>1 && b>=1)        //注意这里的判断条件{arr[a][b] = arr[a - 1][b - 1] + arr[a - 1][b];//上一行前一列和本列数之和}printf("%d ", arr[a][b]);//赋值完一行后直接整行数据都打印}printf("\n");}return 0;
}

打印效果图:

注意这里的判断条件,1表示的是视觉上的第二行(行数从0开始计算)。根据“杨辉三角”我们可以看出在视觉上的第三行第二列才开始计算中间数据。

打印空格>>>

b-- 先使用再减减。

//b = 10 - a;
//while (b--)
//{
//  printf(" ");
//}//喜欢两种循环的都可以参考一下,上面精简点for (b = 10 - a; b > 0; b--)
{printf(" ");
}

总代码>>>

int main()
{int arr[10][10] = { 0 };int a = 1;int b = 1;for (a = 0;  a < 10; a++){b = 10 - a;while (b--){printf(" ");}arr[a][0] = 1;//注意访问数组是从0开始(数组的最低下标是0)for (b = 0; b <=a; b++){if(a==b)arr[a][b] = 1;if(a>1 && b>=1)arr[a][b] = arr[a - 1][b - 1] + arr[a - 1][b];//上一行前一列和本列数之和printf("%d ", arr[a][b]);//赋值完一行后直接打印得到的整体打印效果就是直接}printf("\n");}return 0;
}

最终效果图:

emmmm,好像现实打印出来的三角还是丑了点,至于解决办法,我暂时没想到。(菜还是我菜.jpg) 哪位大侠知道的话请告诉我,在此受小女子一拜。 ^ ^

小小思考>>>

使用二维数组可以同时改变相关性强的行和列,注意它的巧妙使用。可以看看我写的C语言游戏来练习二维数组的使用。嘿嘿,博客链接 —> [C语言] [游戏] 三子棋  和 [C语言] [游戏] 扫雷

刚开始分着写,每写完一层后就打印确认一下。写完后发现赋值和打印使用的相同的循环,故可以把它们放在一起写,还有那个while循环的后置加加条件也很好,精简了代码。

我们对下一行的数来赋值,这样做的好处是不改变上一行的值,对于本题也更符合实际规律,让其按顺序打印,这样避免了可能的手滑。

最重要的话>>>

不理解的记得私信我哦 ^ ^。

(直接评论区留言也可以^ ^)

[C语言] [典例详解] 打印杨辉三角(找规律简单实现)相关推荐

  1. [C语言][典例详解]打印杨辉三角(找规律简单实现)

    目录 杨辉三角的相关知识 杨辉三角图: 杨辉三角的规律 在编程中实现 第一步 :我们先实现数字的打印,后面再加上空格构成三角形形状: ​编辑 1.首先我们可以直观的看出三角形的两个斜边都是1:所以我们 ...

  2. 杨辉三角详解--及杨辉三角正输出与倒向输出

    PS:再次感谢官方大大推荐的关注,非常非常蟹蟹啦 关于杨辉三角,这里引用百度百科的简介 杨辉三角,是二项式系数在三角形中的一种几何排列,中国南宋数学家杨辉1261年所著的<详解九章算法>一 ...

  3. Java打印杨辉三角

    Java打印杨辉三角 打印杨辉三角首先要理清楚思路,找到其中的规律,,然后通过其中的规律用java循环的方法想办法解决掉.我们通过仔细的观察不难发现杨辉三角除每行最左侧和最右侧的数字外,每个数字等于它 ...

  4. 利用C语言打印杨辉三角

    利用C语言打印杨辉三角 此次打印的杨辉三角格式如下: 我们此次以15行的杨辉三角为例. 首先来说一下基本的思路 通过观察可知,如果把杨辉三角看成是一个大的三角形,其第一列和对角线的值均为1. 从第3行 ...

  5. 【C语言练习——打印杨辉三角及其变形】

    CSDN话题挑战赛第1期 活动详情地址:活动地址 参赛话题:大学学习月/季度总结 话题描述:对自己大学的月/季度学习的复盘及展望 杨辉三角及其变形 前言 1.杨辉三角之左对齐 1.1 写法1 1.2 ...

  6. C语言打印杨辉三角的多种方法

    3.在屏幕上打印杨辉三角. 1 1 1 1 2 1 1 3 3 1 解法一: #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> in ...

  7. pta——点赞,打印杨辉三角,吃火锅(c语言)

    程序设计实训8月16日小组编程 今日碎碎念:今天稀里糊涂地在规定时间内倒是都做出来了,但是还有些问题没有想明白再回顾一下.(大佬都在自己的博客上写学习笔记,我只能用用CSDN了唔) 7-1 点赞 微博 ...

  8. C语言每日一练——第72天:打印杨辉三角(使用两种方法)

    C语言每日一练 2022年1月5日 文章目录 题目描述 问题分析 1. 使用数组法(打印直角三角) 2. 使用数组法(打印等腰三角) 3. 使用公式法(打印等腰三角) 网上参考 题目描述 打印杨辉三角 ...

  9. 多种语言多种方法打印杨辉三角(二项式展开式各项系数)

    打印杨辉三角&二项式展开式各项系数 C语言实现 法一:数学排列组合公式法 法二:找规律法,二维数组,通俗易懂 法三:法二优化,一维数组 法四:递归 Java实现 Python实现 (a + b ...

最新文章

  1. 项目管理六大制约因素_知道了这7点,软件项目管理会变得更简单!
  2. 2021年中国计算机视觉人才调研开启啦,诚邀各位开发者们参与~
  3. 数据封装以及解封的过程
  4. 将Spring源码转换为工程 + 导入Eclipse时缺失jar包
  5. 用C语言编程计算下列表达式:s=1! 2...,2012年全国计算机等级二级C语言模拟试题及答案(3)...
  6. 如何在SQL Server中分析存储子系统性能
  7. unity, 不要用TextMesh,用图片代替
  8. 【李宏毅2020 ML/DL】P15 Why Deep-
  9. 【转载】Maven pom文件详解
  10. CCS软件的基本使用 MSP430 5529核心板简单了解
  11. 用命令启动java我的世界_我的世界Minecraft Mod开发学习笔记 - 实现一个简单的命令Mod...
  12. 用户即将一分钟后关闭计算机,Win10开机提示“你的电脑将在一分钟后自动重启”怎么办?...
  13. python f检验 模型拟合度_多元线性回归模型检验和预测
  14. JavaScript 实现大地坐标系转换为空间直角坐标系(BLH→XYZ)
  15. COOX平台(SCADA MES)
  16. 为什么你的孩子应该学习编程思维?如何选择第一本编程思维启蒙书?
  17. 点云可视化:使用open3d实现点云连续播放
  18. 如何处理java接口防重提交
  19. 双极型晶体管(BJT)的学习总结ⅱ
  20. mysql死锁异常分析及解决

热门文章

  1. 浅谈怎样提高百度空间排名(非原创)
  2. Mac Vue 脚手架创建
  3. 围“桌”详谈|本周六直播,一起聊聊「发版」那些事儿!
  4. ftp连不上,但是能ping通开发板
  5. 鸿蒙os价格表,搭载鸿蒙 OS!华为智慧屏新品来袭:价格 3000+
  6. 你知道Application吗?
  7. 吃鸡服务器维护公告10月19日,绝地求生12月19日怎么进不去 绝地求生12月19日维护公告内容一览...
  8. 若依ruoyi左侧菜单栏增加新的主题色
  9. OpenCASCADE BRep Projection
  10. 回家的行囊装着“年”