打印菱形,输出菱形金字塔

题目描述

打印菱形

如下图:

输入:7

在这里插入图片描述
从键盘输入一个数字,打印如图所示的菱形。

解题思路

思路:
仔细观察图形,可以发现,此图形中是由空格和 * 按照不同个数的输出组成的。
上三角:先输出空格,后输出 *,每行中空格:从上往下,一行减少一个,
每行:2 * i - 1的方式递增

下三角:先输出空格,后输出*,每行中空格:从上往下,每行多一个空格 从上往下,
按照2 * ( h - 1 - i )的方式减少,其中:h表示总共有多少行
按照上述方式,将上三角和下三角中的空格和*分别输出即可。

具体实现:

源代码:

#include <stdio.h>

int main()
{
    
    
	int h = 0;
	scanf("%d", &h);
	//打印上半部分
	for (int i = 1; i < h; i++)
	{
    
    
		//第一行空格
		for (int j = 1; j < h-i; j++)
		{
    
    
			printf(" ");
		}
		for (int j = 1; j < 2 * i; j++)
		{
    
    
			printf("*");
		}
		printf("\n");
	}
	//打印下半部分
	for (int i = 1; i < h; i++)
	{
    
    
		//第一行空格
		for (int j = 1; j <= i; j++)
		{
    
    
			printf(" ");
		}
		for (int j = 1; j < 2 * (h -1- i); j++)
		{
    
    
			printf("*");
		}
		printf("\n");
	}

	return 0;
}

在这里插入图片描述

封装成函数

我们也知道,为了方便函数复用,可以将以上方法封装成函数,需要使用的时候方便调用,大大减少了代码量:

void Func(int h)
{
    
    
	//打印上半部分
	for (int i = 1; i < h; i++)
	{
    
    
		//第一行空格
		for (int j = 1; j < h - i; j++)
		{
    
    
			printf(" ");
		}
		for (int j = 1; j < 2 * i; j++)
		{
    
    
			printf("*");
		}
		printf("\n");
	}
	//打印下半部分
	for (int i = 1; i < h; i++)
	{
    
    
		//第一行空格
		for (int j = 1; j <= i; j++)
		{
    
    
			printf(" ");
		}
		for (int j = 1; j < 2 * (h - 1 - i); j++)
		{
    
    
			printf("*");
		}
		printf("\n");
	}
}

注意:
使用for循环,一定要控制好循环条件,避免出错。

猜你喜欢

转载自blog.csdn.net/weixin_52142731/article/details/111272819