C语言 棱形图案

目录

一、问题分析

上部分:

下部分:

二、代码演示


一、问题分析

如上图所示,我们可以将棱形进行拆解,分为上下两个部分。

上部分:

通过观察,我们得到 单边空格数 = 上半部分总行数 - 行数 - 1

星号 = 行数 × 2 + 1

所以我们设 line 为上半部分总行数 i 为行数 。

那么代码如下:

复制代码
	for(i=0; i<line; i++)
	{
		//打印一行
		//打印空格
		int j = 0;
		for(j=0; j<line-1-i; j++)
		{
			printf(" ");//打印空格
		}
		//打印*
		for(j=0; j<2*i+1; j++)
		{
			printf("*");//打印星号
		}
		printf("\n");
	}

下部分:

通过观察,我们得知 下半部分的 单边空格数 = 行数

下半部分的 星号 = (下半部分总行数 - 行数 )× 2 - 1

于是我们可以设 下半部分总行数为 上半部分行数-1 也就是 line -1 , i为行数

那么代码如下:

复制代码
	for(i=0; i<line-1; i++)
	{
		//打印一行
		int j = 0;
		for(j=0; j<=i; j++)
		{
			printf(" ");//打印空格
		}
		for(j=0; j<2*(line-1-i)-1; j++)
		{
			printf("*");//打印星号
		}
		printf("\n");
	}

二、代码演示

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


	//打印下半部分
	for(i=0; i<line-1; i++)
	{
		//打印一行
		int j = 0;
		for(j=0; j<=i; j++)
		{
			printf(" ");
		}
		for(j=0; j<2*(line-1-i)-1; j++)
		{
			printf("*");
		}
		printf("\n");
	}
	return 0;
}
相关推荐
小七在进步3 小时前
数据结构:线性表之顺序表
c语言·数据结构·算法
caimouse3 小时前
Reactos 第 4 章 对象管理 — 4.2 对象类型(Object Type)
c语言·windows·架构
广州山泉婚姻4 小时前
C 语言循环结构实现思路
c语言
LuminousCPP4 小时前
C 语言系列终章|编译与链接 + 预处理
c语言·经验分享·笔记·预处理·编译链接
十月的皮皮4 小时前
C语言学习笔记20260607-判断一个数是否为2的n次方(三种方法)
c语言·笔记·学习
caimouse4 小时前
Reactos 第 3 章 内存管理 — 【下篇】换出、Section、池
c语言·开发语言·windows·架构
San813_LDD4 小时前
[量化]《多线程数据同步精讲:std::mutex 的底层原理与最佳实践》
c语言·数据结构
secret_to_me4 小时前
buildRoot编译rootfs实战
linux·c语言·c++·ubuntu·电脑·buildroot
FFZero15 小时前
[mpv脚本系统] (四) 脚本加载与事件循环系统
c语言·音视频·lua·多媒体
草莓熊Lotso5 小时前
【Linux网络】深入理解传输层 UDP 协议:从底层原理到实战应用
linux·运维·服务器·c语言·网络·c++·udp