C语言打印菱形超详细版本,逐句解析

  • Post author:
  • Post category:其他



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 版权协议,转载请附上原文出处链接和本声明。