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)
如果喜欢的话请点个赞吧!