c语言打印菱形图案_small_planet的博客-CSDN博客_打印菱形图案c语言
首先感谢上面的大佬给我的启示,本文是在上面大佬的版本下进行的优化。
在屏幕上输出以下图案:
*
***
*****
*******
*********
***********
*************
***********
*********
*******
*****
***
*
如题,我们要分析题目包含了几个元素,以及需要的方式,本题中只需要循环和控制即可,首先是打印菱形 ,我们需要输入奇数行(因为偶数行的输入会导致不对称,无法打印),分上下两部分分析,我们需要一个变量n描述输入的行数,一个变量i描述当前的打印中的行数,一个变量j描述空格的数量,一个变量k描述“*”的数量,最后,一个变量m描述中间的行数,现在可以开始编码了。
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main() { int n, i, m, j, k;//n为输入的总行数,i为循环时表示正在第几行,m表示中间行,j表示“ ”的数量,k表示“*”的数量 scanf("%d", &n); m = (n + 1) / 2; for (i = 0; i <= n; i++) { if (i <= m)//分上下两部分讨论 { for (j = 0 ; j <m - i;j++)//上半部分每一行需要打印的空格数为m-i(另外半边的空格是不需要打印的!为中间行减当前行数,规律为每次增1,故这样使用) { printf(" "); }//打印完空格后跳出循环进入到打印“*”的循环中 for (k = 0; k <2 * i - 1 ; k++)//上半部分每一行需打印的“*”,可把看做是数列求解通项 { printf("*"); } } else//现在讨论下半部分 { for (j =0; j < i - m; j++) printf(" "); for (k = 0; k <(n-(i-m)*2); k++)//此处核心思想是用中间行的总打印数减去两边的空格数(右边的空格没打印但是物理上存在) printf("*"); } printf("\n");//别忘了换行 } return 0; }
以上是输出结果 (运行环境为VS2019)
如果喜欢的话请点个赞吧!
版权声明:本文为LukeYZW原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。