打印菱形这道题对于初学编程者来讲简直是噩梦,曾经我就是栽在这上面的,后来编程编多了以后对打印菱形也以为再也不那么难了,去年在公众号写了一篇推送是关于打印菱形的,以为对一些师弟师妹仍是有所帮助的,今天就把这道题分享出来。如下是我遇到的各类各样的菱形:

普通菱形,输入n,输出n行n列的菱形web

难度系数:♥

n行空心菱形,输入n,输出n行空心菱形编程

难度系数:♥♥

n行挖空菱形,输入n,输出n行n列空格菱形svg

难度系数:♥♥♥工具

n行数字菱形,输入n,输入n行数字从外到内递增的数字菱形code

难度系数:♥♥♥♥

有边框空心菱形,输入n,输出n行带有边框的空心菱形xml

难度系数:♥♥♥♥♥blog

首先咱们要明确这是一个随着n的大小改变的菱形,因此咱们确定要用到循环,而且循环的次数与n有关。若是题目要求是输出n行,那咱们的循环就是0(n-1)或者1n;若是要求是输出(2n+1)行,那咱们的循环就0-2n或者1~(2n+1)便可。(后面以输出n行为例分析)

第一个是普通的实心菱形,循环n行你们都懂,问题就在列要怎样循环。难道是看出来的吗?不错,我就是经过看得出来的循环次数。具体怎么看呢?

根据图直接看有点难度,因此咱们根据各行数据来看

咱们须要将整个菱形分红四块来考虑,从上到下空格的个数先从n/2递减到0后递增到n/2,而行循环因子i又从0递增到n,故天然可联想到用i与n/2来表示空格个数。由于空格个数是非负数,因此咱们引进绝对值|n/2-i|表示空格个数。打完空格以后,咱们就要正式用 ’ * '打印菱形了。经过观察咱们发现 * 号的个数为奇数,而且变化规律跟空格正好相反,因此号个数便是-2*(空格个数)+1+C(常数)=-2*(空格个数)+C(常数),经过观察咱们发现这个常数C正好是n/2。因而第一种菱形就能够顺利完成了!

第二个是空心菱形,与实心菱形类似,可当作在实心菱形上再打了一个空格菱形。因为每行的号数很少,而且能够看到号正好位于空格菱形的外围,因此咱们能够将打印号放在打印空格菱形先后顺便打印,即在打印空格菱形以前打号,打印完空格菱形以后再打印号。一样,咱们将相关数据列出来而后观察规律。号前空格与实习菱形一致,而咱们发现n-2|n/2-i|-2的值除了首尾两行外,其余都与空格菱形的空格个数一致,而首尾两行是-1表示在该处不需打空格反而须要退一个格,但因为咱们当前位置为号,而退格后依旧要打号,因此咱们能够直接判断是否为第一行或最后一行,是则少打印一个号便可。

第三个是挖空菱形,该菱形是上述两个的合体,咱们能够当作把一个实心菱形的各个字符替换成另外一种字符,再插入一个空心菱形。因此咱们把该菱形分红输出空心菱形先后号和输出空心菱形两部分。经过数据对比,咱们不难发现,输出空心菱形先后号的数据与实心菱形输出号前空格个数一致,而后就是输出一个空心菱形,最后要记得在输出空心菱形以后输出空心菱形以后的号,根据对称可知,空心菱形后号个数与空心菱形前号一致。

第四个是数字菱形,该菱形的特色是数字从外到内逐层递增。咱们发现该菱形中轴线数字的变化规律是先从1递增到(n+1)/2,而后再递减到1,而且每一行的数字也是从1递增到中轴线,再递减到1,所以咱们要找到中轴线所在的位置(方便判断循环因子是否到达中轴线)。经过列数据咱们发现中轴线所在位置(j从0开始循环)为n/2-|n/2-i|,因此在每一行中咱们的数字加到“j==n/2-|n/2-i|”处时应该转成递减,因此咱们引进要填充的数字k,在每一行开始时k为1,在j从0到n/2-|n/2-i|-1中,k逐次递增,在j从n/2-|n/2-i|到n-2*|n/2-i|-1中k递减。而后将打印星号改成打印数字便可。

第五个是边框空心菱形。从名字可知,该菱形由边框和空心菱形组成,咱们能够将边框和空心菱形分开来考虑。第一行和最后一行为边框,可直接用从0到n-1打印号实现。左右边框在每一行的开头和结尾打印号便可实现。中间便是空心菱形的领域,基本上跟打印空心菱形同样,只是要注意被边框覆盖的地方空格和号要省略。

将打印空格和打印号分开考虑,经过数字之间的关系特色,运用循环完成菱形的打印。图片

因为菱形是对称的,因此绝对值是最好的数据描述工具,要巧妙地运用绝对值,将对称部分的循环用同一个带有绝对值的表达式表示出来。it

值得注意的是n/2为整数除,因此不会获得小数,也不是四舍五入。循环

中轴线所在位置(j从0开始循环)为n/2-|n/2-i|。

//挖空菱形

for(i=0;i

for(j=0;j

printf("*");

printf("*");

for(j=0;j

printf(" ");

if(j!=0)

printf("*");

for(j=0;j

printf("*");

printf("\n");

}

printf("\n");

//边框菱形

for(i=0;i

if(i==0||i==n-1){

for(j=0;j

printf("*");

printf("\n");

}

else{

printf("*");

for(j=0;j

printf(" ");

if(j!=0)

printf("*");

for(j=0;j

printf(" ");

if(j!=0)

printf("*");

for(j=0;j

printf(" ");

if(j!=0)

printf("*");

printf("\n");

}

}

//数字菱形

for(i=0;i

int k=1;

for(j=0;j

printf(" ");

for(j=0;j

printf("%d",k);

if(j

k++;

else

k--;

}

printf("\n");

}

//实心菱形

for(i=0;i

for(j=0;j

printf(" ");

for(j=0;j

printf("*");

printf("\n");

}

printf("\n");

//空心菱形

for(i=0;i

for(j=0;j

printf(" ");

printf("*");

for(j=0;j

printf(" ");

if(j!=0)

printf("*");

printf("\n");

}

C语言输出一个19行实心菱形,C语言打印菱形相关推荐

  1. c语言输出一个n行m列的图形

  2. C语言输出一个菱形图案

    用c语言输出一个由星号*组成的菱形图案 #include<stdio.h> int main() {//首先写菱形的上半部分int line = 0;printf("请输入行数& ...

  3. C语言 输入一个5行5列的数组。1.求数组主对角线上元素的和。2.求出辅对角线上元素的积。3.找出主对角线上最大的值及其位置

    C语言 输入一个5行5列的数组.1.求数组主对角线上元素的和.2.求出辅对角线上元素的积.3.找出主对角线上最大的值及其位置 主对角线是什么: 在一个n阶方阵(或是n阶行列式)中,从左上角到右下角这一 ...

  4. c语言输出字母随机数,你好,怎样用c语言输出一个1到100的随机数

    你好,怎样用c语言输出一个1到100的随机数以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 你好,怎样用c语言输出一个1 ...

  5. 用c语言手搓一个600行的类c语言解释器: 给编程初学者的解释器教程(1)- 目标和前言

    用c语言手搓一个600行的类c语言解释器: 给编程初学者的解释器教程(1)- 目标和前言 用c语言手搓一个600行的类c语言解释器: 给编程初学者的解释器教程(1)- 目标和前言 用c语言手搓一个60 ...

  6. 找出这个图形的规律,并输出一个n行m列的图形

    问题描述 利用字母可以组成一些美丽的图形,下面给出了一个例子: ABCDEFG BABCDEF CBABCDE DCBABCD EDCBABC 这是一个5行7列的图形,请找出这个图形的规律,并输出一个 ...

  7. 字母图形:利用字母可以组成一些美丽的图形,请找出这个图形的规律,并输出一个n行m列的图形。

    问题描述 利用字母可以组成一些美丽的图形,下面给出了一个例子: ABCDEFG BABCDEF CBABCDE DCBABCD EDCBABC 这是一个5行7列的图形,请找出这个图形的规律,并输出一个 ...

  8. 用C语言输出一个字符串的所有子串

    前言 啥是子串? 串中任意个连续字符组成的子序列称为该串的子串. 包含子串的串相应地称为主串. ①空串是任意串的子串. ②任意串是其自身的子串. 例:字符串"12"它的字串为&qu ...

  9. 用java输出m列n行的矩形_C | 输出一个n行m列矩形方阵 发现的几个问题

    原题: 请对p_star50(void)进行20次调用,p_star50(void)实现在一行输出50个"*"号. 即输出一个20*50的矩形阵嘛,思路是先搞定p_star50(v ...

  10. 用c语言输出一个字母的,用c语言编写程序输出一个短句

    1. 输入一个数然后输出一句话的程序用C语言怎么编写 用if或switch语句如`: switch((int)x) { case 9:printf("你好\n");break; c ...

最新文章

  1. 50万买只波士顿动力机器狗,只为训练它“尿”啤酒,还让女朋友尝尝
  2. 损害计算机系统,哪些情况下容易导致电脑系统崩溃损坏?
  3. pytorch torch.norm(input, p=2) → float、torch.norm(input, p, dim, out=None) → Tensor(求范数)
  4. python中的列表生成式
  5. 【maven】改造已有项目
  6. 洛谷P2995奇数偶数
  7. 张首晟:量子计算、人工智能与区块链
  8. DataSet.Tables[].Rows[][]的用法
  9. 3640 交换机实验的一些摘要【待进一步更新】
  10. python转换函数使用_Python基础学习之时间转换函数用法详解
  11. Android 登陆界面Edittext
  12. VC Redist Installer 1.6下载
  13. 数字电子技术基础笔记【阎石第六版】 第一章 数字与编码
  14. 方向余弦矩阵与四元数
  15. STM32单片机最小系统
  16. 日常办公,无特殊要求者怎么选择显示器?
  17. 将RTSP网络摄像机进行网页和微信直播的方案
  18. Microsoft系统端口及服务对应汇总
  19. 1987 三 比尔·哈利 Bill Haley
  20. 上传文件到GPU服务器,上传文件到GPU服务器并运行文件

热门文章

  1. 怎么用dos系统进入服务器,怎么进入dos_如何进入dos的方法(图文介绍)
  2. python基础项目 --爬取金山词霸翻译功能
  3. python几个循环_python 几个循环的效率测试
  4. 深度走心字节跳动内推
  5. Bootstrap系列之导航条(Navbar)
  6. discuz论坛模板文件目录
  7. 二补数 (2's complement)
  8. ACM-ICPC 2018 北京赛区网络预赛 B Tomb Raider(二进制枚举暴力)
  9. 放弃高薪的程序员,体制内或许才是最好的归宿
  10. VR全景视频、图片播放器