标题:如何用循环结构做一棵树啊,就是简单的三角形下面加一个树干,用*号
只看楼主
阳光依旧耀眼
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2016-11-14
结帖率:0
已结贴  问题点数:20 回复次数:11 
如何用循环结构做一棵树啊,就是简单的三角形下面加一个树干,用*号
大一新生求帮助!!!
搜索更多相关主题的帖子: 大一新生 三角形 如何 
2016-11-14 11:07
EdmundDantes
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:62
专家分:173
注 册:2016-11-9
得分:10 
前几天刚做的,这是搭上面三角形的代码,你可以参考一下,树干更简单,我相信你看完这些做那个应该是得心应手的。同是新手,嘿嘿

#include <stdio.h>
int main(void)
{
    int i,j,k,a,layer;
    printf("要搭建的层数: ");
    scanf("%d",&layer);
    for(i = 1;i <= layer;++i)
    {
        for(j = 0;j < layer - i;++j)
          printf(" ");
        for(k = 0;k < layer - j;++k)
          printf("*");
        for(a = 0;a < (layer - 1) - j;++a)
          printf("*");
        printf("\n");
    }
    printf("\n");
    printf("第二种方法:");
    printf("\n");
    for(i = 1;i <= layer;++i)
    {
        for(j = 1;j < 2*layer;++j)
        {
            if(j > layer - i&& j < layer + i )
             printf("*");
            else
             printf(" ");
        }
        printf("\n");
    }
    printf("第三种方法:");
    printf("\n");
    for(i = 1;i <= layer;++i)
    {
        for(j = 1;j <= layer - i;++j)  //
          printf(" ");
        j--;
        for(k = 1;k <= (2*layer - 1) - j*2;++k )
          printf("*");
        printf("\n");
    }
}
2016-11-14 11:17
阳光依旧耀眼
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2016-11-14
得分:0 
谢了,这很强大,然后百度还有一个这个的


#include <stdio.h>
main()
{
    int i, n=9,j,k;
    char *sz="* * * * * * * * * *";
    for (i=0; i<n; i++)
    {
        printf("%*.*s\n", i+n, i*2+1, sz);
    }

   for(k=1;k<=5;k++)
      {
       printf("       ");
       for(j=1;j<=3;j++)
        printf("*");
        printf("\n");
   }

}


表示有点懵逼
2016-11-14 11:21
EdmundDantes
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:62
专家分:173
注 册:2016-11-9
得分:0 
这个我加了注释,说明一下我的逻辑
#include <stdio.h>
int main(void)
{
    int i,j,k,a,layer;       //layer为三角形的层数,其他是控制循环的变量。
    printf("要搭建的层数: ");  //获取层数
    scanf("%d",&layer);
    for(i = 1;i <= layer;++i)     //最外层循环,控制层数
    {
        for(j = 0;j < layer - i;++j) //*左侧空格数量(以第一层的*做数轴的原点来参考)
          printf(" ");
        for(k = 0;k < layer - j;++k) //原点*左侧(包括原点*) 的* 。(layer - j)中,j是此层左侧要输出的空格数。
          printf("*");
        for(a = 0;a < (layer - 1) - j;++a)   //原点*右侧的(不包括原点*)的* 。
           printf("*");
        printf("\n");                //加一个换行,进行下一层循环
    }
    printf("\n");
    printf("第二种方法:");
    printf("\n");
    for(i = 1;i <= layer;++i)   //这是论坛上看到的一个例子。
    {
        for(j = 1;j < 2*layer;++j)
        {
            if(j > layer - i&& j < layer + i )
             printf("*");
            else
             printf(" ");
        }
        printf("\n");
    }
    printf("第三种方法:");   
    printf("\n");
    for(i = 1;i <= layer;++i)
    {
        for(j = 1;j <= layer - i;++j)  //
          printf(" ");
        j--;
        for(k = 1;k <= (2*layer - 1) - j*2;++k )   //2*layer - 1 是三角形输出*最多的一层,可以把每层都看作是这个长度,每层除了*就是空格,最大层数是满*,计算每层的*和空格数量。
          printf("*");
        printf("\n");
    }
}
2016-11-14 11:29
阳光依旧耀眼
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2016-11-14
得分:0 
okok,多谢
2016-11-14 11:31
EdmundDantes
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:62
专家分:173
注 册:2016-11-9
得分:0 
百度上这个,是事先拟定好输出的层数,然后计算最大层数的*,然后控制每层输出的长度(char *sz="* * * * * * * * * *";这条就是最大层数的*), for(k=1;k<=5;k++)控制输出空格。
2016-11-14 11:34
阳光依旧耀眼
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2016-11-14
得分:0 

这个代码如果让树干和上面的三角形一起的话该怎么整,是直接加for语句么?然后那个j=0是什么意思
#include <stdio.h>
int main(void)
{
    int i,j,k,a,layer;       //layer为三角形的层数,其他是控制循环的变量。
    printf("要搭建的层数: ");  //获取层数
    scanf("%d",&layer);
    for(i = 1;i <= layer;++i)     //最外层循环,控制层数
    {
        for(j = 0;j < layer - i;++j) //*左侧空格数量(以第一层的*做数轴的原点来参考)
          printf(" ");
        for(k = 0;k < layer - j;++k) //原点*左侧(包括原点*) 的* 。(layer - j)中,j是此层左侧要输出的空格数。
          printf("*");
        for(a = 0;a < (layer - 1) - j;++a)   //原点*右侧的(不包括原点*)的* 。
           printf("*");
        printf("\n");                //加一个换行,进行下一层循环
    }
    printf("\n");
2016-11-14 11:36
EdmundDantes
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:62
专家分:173
注 册:2016-11-9
得分:0 
for(j = 0;j < layer - i;++j) layer - i 是本层原点*左侧的空格数,这一层完成后,j就是此层输出的空格数。
树干可以这么写
    int layer_down = 3;  //定义树干的长度,看个人喜好
    for( i = 0;i < 3;i++) //控制长度
    {
      for(j = 0;j<layer - 1;++j) //空格数,layer - 1 是最大空格数
        printf(" ");
      printf("*");     //我的树干是一个*,你也可以做成**
      printf("\n");
    }
2016-11-14 11:47
EdmundDantes
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:62
专家分:173
注 册:2016-11-9
得分:0 
回复 8楼 EdmundDantes
思路还是那样,先想好每层需要输入的空格数,然后输入*的数量,然后进去下一层的循环。
2016-11-14 11:48
阳光依旧耀眼
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2016-11-14
得分:0 
谢谢-。-
2016-11-14 14:30



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-471104-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.627957 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved