引言

各位大佬好,我是一名大一的学生,目前只学习了C语言的语法基础,在CSDN这个平台上将自己所学的东西记录下来,同时分享给和我一样的C语言学习者,一起交流一起进步!

想法的诞生

刷朋友圈的时候看到有同学在展示圣诞树,我想,我是否能用刚学的C语言做一个简易的圣诞树呢,于是我开始了“创作”。

一棵简易的圣诞树怎么构成

我的想法是不同大小的多个梯形以及一个长方形树干组成

梯形的代码

梯形如图
在这里插入图片描述
代码如下

#include<stdio.h>
int main()
{
    int i,j,k;
    for(i=1;i<6;i++)
    {
        for(k=0;k<(5-i);k++)
        //要想使每一行对称,则要输入空格
        //每一行输入的空格数应为(5*2-i*2)/2=5-i
        //这一种以最后一排为基准来空格的思想待会也要用到
            printf(" ");
        for(j=0;j<i*2;j++)//i*2能够让其梯形内部逐行递增2个“*”
            printf("*");
        printf("\n");
    }
    return 0;
}

值得积累的是,要使每一行的星号居中,我想到的一种方法就是以最后一排的星号个数为基准,任意一行前输出的空格数=(最后一行星号数 - 当行的星号数)÷2

梯形的叠加

梯形也并不是简单的叠加,应是从上至下,逐个梯形的大小递增,话不多说直接上代码:

#include<stdio.h>
int main()
{
    int i,j,m,n,k=6,p=5;
    //(p-1)表示梯形个数,(k-1)表示每个梯形内部的层数
    //经我目测,以k=6,p=5为宜,当然也可由自己灵活处理
    for(n=0;n<p;n++)
	{
        for(j=1;j<k;j++)
	    {
		    for(m=0;m<(k+p*2-n*2-j-3);m++)
		       printf(" ");
	//这里是以最后一个梯形的最后一排为基准来实现每一行都居中
		    for(i=0;i<(j+n*2)*2;i++)
   //这里表示每个梯形的第一行比上一个梯形的第一行递增4个星号
	           printf("*");
		    printf("\n");
	    }
	}
	return 0;
}

做一个长方形树干

代码如下:

#include<stdio.h>
int main()
{
    int t,q;
	for(q=0;q<9;q++)
	{
		for(t=0;t<(k+2*p-5);t++)
	        printf(" ");
	  //这里同样是以最后一个梯形的最后一排星号个数为基准来实现树干居中
		printf("****\n");
	}
    return 0;
}

总代码及其输出的简易圣诞树

总代码如下:

#include<stdio.h>
int main()
{
	int i,j,m,n,k=6,p=5;
    for(n=0;n<p;n++)
	{
        for(j=1;j<k;j++)
	    {
		    for(m=0;m<(k+p*2-n*2-j-3);m++)
		       printf(" ");
		    for(i=0;i<(j+n*2)*2;i++)
	           printf("*");
		    printf("\n");
	    }
	}
	int t,q;
	for(q=0;q<9;q++)
	{
		for(t=0;t<(k+2*p-5);t++)
	        printf(" ");
		printf("****\n");
	}
return 0;
}

输出结果如下:
在这里插入图片描述
如果你有更好的想法请在评论区一起留言,大家一起讨论共同进步!

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐