C 练习实例23

**题目:**打印出如下图案(菱形)。

*

***

*****

*******

*****

***

*


题目分析:

先打印前4行,因为是递增关系。

第0行:打印3个空格,1个*

第1行:打印2个空格,3个*

第2行:打印1个空格,5个*

第3行:打印0个空格,7个*

不难发现规律:(设行序列为 i )

空格数是行序列以3的补码,

第 i 行打印的空格数 =3 - i

第 i 行打印 * 的个数 = 2 * i + 1

后打印后三行,因为是递减规律。(行序号自己定,就是个循环标号,怎么方便怎么来,无所谓)

i = 2时,第 2 行 空格数 = 1,* 数 = 5

i = 1时,第 1 行 空格数 = 2,* 数 = 3

i = 0时,第 0 行 空格数 = 3,* 数 = 1

**规律:**空格数 = 3 - i , * 数 = 2 * i + 1

代码:

cpp 复制代码
#include <stdio.h>
int main()
{
	int i,j,k;
	//打印前4行
	for(i=0;i<4;i++){	//最外层循环控制行,打印换行符
		for(j=0;j<3-i;j++){	//打印空格,i(行序号)=0时,循环打印3次空格
			printf(" ");			//  i(行序号)=1时,循环打印2次空格
		}							//  i(行序号)=2时,循环打印1次空格
		for(k=0;k<2*i+1;k++){//打印 * ,i(行序号)=0时,循环打印1次 * 
			printf("*");	// 	        i(行序号)=1时,循环打印3次 * 
		}					//    	    i(行序号)=2时,循环打印5次 * 
		printf("\n");
	}
	//打印行3行
	for(i=2;i>=0;i--){
		for(j=0;j<3-i;j++){	//打印空格,i(行序号)=2时,循环打印1次空格
			printf(" ");			//  i(行序号)=1时,循环打印2次空格
		}							//  i(行序号)=0时,循环打印3次空格
		for(k=0;k<2*i+1;k++){//打印 * ,i(行序号)=2时,循环打印5次 * 
			printf("*");	//    	    i(行序号)=1时,循环打印3次 * 
		}					//    	    i(行序号)=2时,循环打印5次 * 
		printf("\n");
	}
	return 0;
}

结果:

bash 复制代码
   *
  ***
 *****
*******
 *****
  ***
   *

--------------------------------
Process exited after 0.2859 seconds with return value 0
请按任意键继续. . .
相关推荐
草莓熊Lotso26 分钟前
【C++】递归与迭代:两种编程范式的对比与实践
c语言·开发语言·c++·经验分享·笔记·其他
鹿鹿学长8 小时前
2025年全国大学生数学建模竞赛(C题) 建模解析|婴儿染色体数学建模|小鹿学长带队指引全代码文章与思路
c语言·开发语言·数学建模
伴杯猫8 小时前
【ESP32-IDF】基础外设开发2:系统中断矩阵
c语言·单片机·嵌入式硬件·mcu·物联网·github
Want59511 小时前
C/C++圣诞树①
c语言·开发语言·c++
l1t12 小时前
轻量级XML读写库Mini-XML的编译和使用
xml·c语言·解析器
小莞尔14 小时前
【51单片机】【protues仿真】基于51单片机停车场的车位管理系统
c语言·开发语言·单片机·嵌入式硬件·51单片机
xianyinsuifeng15 小时前
Oracle 10g → Oracle 19c 升级后问题解决方案(Pro*C 项目)
c语言·数据库·oracle
学c语言的枫子15 小时前
数据结构——双向链表
c语言·数据结构·链表
3壹17 小时前
数据结构精讲:栈与队列实战指南
c语言·开发语言·数据结构·c++·算法
etcix17 小时前
dmenux.c: integrate dmenu project as one file
c语言·前端·算法