用c编程创建一棵圣诞树?

时间:2016-02-03 18:01:30

标签: c loops

我需要帮助在C中创建一个根据用户输入而变化的圣诞树。

首先,提示用户输入他们想要在树上的级别数。例如。第一级“*”,第二级“***”。每个级别都会添加两颗星。

有效等级在4到10之间运行。小于4或大于10的任何内容都无效,程序输出中将显示错误消息,并且还将显示树的最低级别(4级)。

树的最后部分是通过添加一个宽3星,高2星的树干来完成的。

这是我的c程序。它不完整,我不知道如何继续前进。我完全糊涂了。

 #include <stdio.h>
void main()
{
    char choice;
    int level, levelcount, star, starcount;



    printf("Do you want to print a Christmas Tree (Y/N)?");
    scanf_s(" %c", &choice);

    if (choice == 'Y')
    {
        printf("How tall is your Christmas Tree (Level 4 to 10)?");
        scanf_s("%d", &levelcount);

    starcount = 1;
    for (level = 1; level <= levelcount; level++)
    {
        for (star = 1; star <= starcount; star++)
        {
            printf("*");
        }
        printf("\n");
    }
        starcount += 2;
    }
    else if (choice == 'N')
    {
        printf("Merry Christmas and Goodbye!\n");
    }


}

1 个答案:

答案 0 :(得分:0)

首先,您的代码使用的是C而不是C ++。如果您使用的是C ++,则可以使用cincout等功能,但此处您正在使用printfscanf

要创建此树,您将拥有两个部分。一部分涉及主树,另一部分涉及树干。在下面的代码中,我使用变量offset来计算某个数字以确定树的中点。基本上,每个级别都有奇数个星。如果从星数中减去偏移量,您将在中间点找到该数字。从3开始,偏移量为1. 3 - 1 = 2,这是中点。对于添加到关卡中的每两颗星,偏移量必须加一。

打印树:

#include <stdio.h>
void main()
{
    char choice;
    int level, levelcount, star, starcount, offset;

    printf("Do you want to print a Christmas Tree (Y/N)?");
    scanf_s(" %c", &choice);

    if (choice == 'Y')
    {
        printf("How tall is your Christmas Tree (Level 4 to 10)?");
        scanf_s("%d", &levelcount);

        //Check if level is within valid range
        starcount = 1;
        offset = 0;
        if (levelcount < 4 || levelCount > 10)
        {
            //Prints default tree (4 levels)
            for (level = 1; level <= 4; level++)
        {
            for(star = 1; star <= starcount; star++)
            {
                printf("*");
            }
            printf("\n");
            //Adds two stars each level 
            starcount += 2;
            offset += 1;
        }
    }
        else 
        {
            //Prints tree with custom levels
            for (level = 1; level <= levelCount; level++)
            {
                for(star = 1; star <= starcount; star++)
                {
                    printf("*");
                }
                printf("\n");
                //Adds two stars each level 
                starcount += 2;
                offset += 1;
            }
        }

        //Finds out the mid-point of the tree
        int midpoint = starcount - offset;

        //Prints the trunk
        printf("%*s%s\n", offset - 1, "***");
        printf("%*s%s\n", offset - 1, "***");

    }
    else if (choice == 'N')
    {
        printf("Merry Christmas and Goodbye!\n");
    }
}

对于主干部分,由于它的固定宽度为3星,并且只有两个级别,因此不需要完整的环路,但最好包含它。 %*s是一个特定的修饰符,用于在左侧打印一些额外的空格,使其位于树的中点。

有关使用C check this answer by Bill the Lizard中的空格填充的更多信息。答案下方的评论之一将显示我如何设法打印由变量offset - 1确定的一定数量的空格。