C++二维图形的打印 详解
今天,总结一下二维图形的打印问题,也是当时困扰我的一大难题哈哈哈哈,好在随着知识的沉淀,对这个知识点的理解也愈发清晰,今天就来举几个例子来探讨一下吧。
其实图形的打印就两种思路,一种是直接输出,另一种是定义二维数组,然后填之。
一、下三角图形的打印
#include<iostream>
using namespace std;
int main()
{int i , j ;for(i = 1 ; i <= 3 ; i ++){for (j = 1; j <= (2 * i - 1); j++){cout << "*";}cout << endl ;}return 0 ;}
首先这个图形有三行,为了便于表示,i 直接从 1 开始,至 3 结束,表示纵向一行一行,然后用 j 来横向描述每一行的情形。通过找规律易知,每一行的 * 个数与 i 之间是 2*i-1 的关系,然后就在每一行结束的时候添加换行即可。
二、中三角二维图形的打印
#include<iostream>
using namespace std;
int main() {int i, j;for (i = 1; i <= 4; i++){for (j = 1; j <= 4 - i; j++){cout << " ";}for (j = 1; j <= 2 * i - 1; j++){cout << "*";}cout << endl;}return 0;
}
首先,这个图形有四行,每一行需要打印两个元素,一个是前面的空格,另一个就是 * ,行数还是从i= 1 开始标记,横向的 j 每一次要先打印完空格才能打印 * ,而通过找规律可知,前面的空格与行数 i 有空格数 = 4-i 的规律,然后看每一次的 * 呈奇数的关系,即与行数呈 2*i-1 的关系,最后在每一个i结束的时候加上换行即可。
三、上三角图形的打印
#include<iostream>
using namespace std;
int main() {int i, j;for (i = 1; i <= 3; i++){for (j = 0; j <= 2 * i - 2; j++){cout << " ";}for (j = 1; j <= 5 - (2 * i - 2); j++){cout << "*";}cout << endl;}return 0;
}
这个题是当时困扰我最久的了,哎,当时陷入了固定思维,一直在思考这个 * 的个数与i之间的直接联系,0, 2, 4,当真是没找到有啥关系,许是我太笨了,确实没找到有啥关系式可以表示,后来在网上看了别人写的代码,懂得了还有一种表示方法,简直是豁然开朗,醍醐灌顶,当每一行需要表示两种元素的时候,如果一种表示方法很简单,可以用总的长度减去这种简单表示的式子来表示那个较难表示的数量,这种思想跟高数中积分那里有种解题思路相仿。
再来说这个题,首先一共三行,纵向的i从1 开始赋值,到等于3 ,接着是横向的每一行需要表示的元素,空格的数量根据行数一次是0, 2, 4 这种偶数跟i 之间的关系,很容易便知是 2*i-2 的关系,接着就是这个题新开拓出来的方法,用总的数量减去第一种的数量就是第二种的数量,即 5- (2*i-1),然后就是最后了,依旧跟往常一样,在每一行结束的时候加一个换行即可。
四、九九乘法表的打印
#include<iostream>
using namespace std;
int main() {int i, j;for (i = 1; i <= 9; i++){for (j = 1; j <= i; j++){cout << i << "*" << j << "=" << i * j << '\t';}cout << endl;}return 0;
}
这个当初写的时候还花费了蛮长时间,现在重新写竟一下就可以完成,不禁感叹真的是随着见到的知识越来越多,写的一个个小程序也越来越多,真的是能体会到积土成山,风雨兴焉的感慨,哈哈哈回归正题。
这个看着麻烦,其实找到规律,跟之前写的并无两样,行数还是从1 开始表示,可以发现,每一行中的另一个元素 j 都是从1 开始一直到 i ,都是 <= i ,所以这个核心规律就找到了,这个题最重要的是最后输出时的表示方法,因为输出的时候 i ,j 要在不断的变,所以都不需要加双引号, 然后就是根据每一个小单元的输出格式,不变的元素字符就加上双引号,最后为了整洁美观,在输出完每一个小结都要加上一个制表符 \t 来整齐美观,that's all.
最后,我想说的是,我最开始写的时候不知道如何表示每一行的元素个数的方法,依我现在的总结方法就是,努力使每一个式子都跟行数 i 形成直接或间接的关系。
最后的最后,欢迎大家来批评指正~
C++二维图形的打印 详解相关推荐
- python生成二维码_python生成二维码的实例详解
python生成二维码的实例详解 版本相关 操作系统:Mac OS X EI Caption Python版本:2.7 IDE:Sublime Text 3 依赖库 Python生成二维码需要的依赖库 ...
- python中quad_python用quad、dblquad实现一维二维积分的实例详解
背景: python函数库scipy的quad.dblquad实现一维二维积分的范例.需要注意dblquad的积分顺序问题. 代码: import numpy as np from scipy imp ...
- 二维码QRCODE原理详解
QR(Quick-Response) CODE是被广泛使用的一种二维码,解码速度快. 如上图是一个二维码的基本结构,其中: 位置探测图形.位置探测图形分隔符.定位图形:用于对二维码的定位,对每个QR码 ...
- uniapp扫码和生成二维码 qrcodejs 实现详解
1.扫码 官网:uniapp官网-扫码 在HBuilderX中建议使用真机进行调试(真机调试步骤请看第3点),运行成功后方可扫码,在这里进行了限制.需要注意的只有一点,res.scanType 打印出 ...
- szu 寒训第二天 树状数组 二维树状数组详解,以及树状数组扩展应用【求逆序对,以及动态第k小数】
树状数组(Binary Index Tree) 树状数组可以解决可以转化为前缀和问题的问题 这是一类用以解决动态前缀和的问题 (有点像线段树简版) 1.对于 a1 + a2 + a3 + - + an ...
- python二维元素向量_详解python Numpy中求向量和矩阵的范数
在python Numpy中求向量和矩阵的范数实例 np.linalg.norm(求范数):linalg=linear(线性)+algebra(代数),norm则表示范数. 函数参数 x_norm=n ...
- php 二维数组根据键值合并二维数组_php数组实现根据某个键值将相同键值合并生成新二维数组的方法详解...
这篇文章主要介绍了php数组实现根据某个键值将相同键值合并生成新二维数组的方法,涉及php数组的遍历.赋值相关运算技巧,需要的朋友可以参考下 本文实例讲述了php数组实现根据某个键值将相同键值合并生成 ...
- Matlab二维绘图---plot函数详解
plot函数是matlab中最主要的二维作图函数.(参考文献--MATLAB HELP 文档) 一.常用的函数主要的形式有以下几种: plot(X,Y) plot(X,Y,LineSpec) p ...
- Java二维数组(超详解)
二维数组 什么是二维数组? 元素为一维数组的数组就称为二维数组 二维数组的定义格式? 格式一:元素的数据类型[][] 数组的名字 = new 元素的数据类型[二维数组的长度][一维数组的长度];int ...
最新文章
- 构建之法 第6~7章读后感和对Scrum的理解
- Kubernetes上的负载均衡详解
- POJ1611-嫌犯【图论,并查集】
- IO流的体系及FileReader、FileWriter
- 计算机网络与维护考试题,《网络管理与维护》试题库.doc
- 数据产品经理的5大阶段和6步作战模型
- cjson 使用时遇到的问题找不到库
- 精通~Scrum为什么会转型困难
- oracle中ipad是什么意思,Oracle中Ipad和Rpad函数的用法
- python-网络编程-tcp/ip认识(一)
- EdgeGallery — MEP — APIs
- html页面悬浮提示框,js实现页面悬浮框
- MySOL(狂殴26K字只为博君一赞)
- 开发团队建设与管理的一些心得
- 记录wps js 宏学习过程中积累的一些函数模板
- 神经元轴突发育的探索简史
- c语言函数求1到n的k次方和
- matlab伽玛分布如何表示,伽玛分布(伽玛分布的性质及其应用)
- 分布式文件系统FastDFS集群搭建
- 游戏讯app技术支持