用C画三角形和正方形

问题描述 投票:1回答:1

我必须在正方形上画一个带星号的三角形,预期输出如下图。

指令是这样的。编写一个C程序,从用户那里读取一个数字n,并允许用'*'字符打印一个有屋顶的房子。房子应该是一个n x n的正方形,屋顶是两条45度的对角线,形成一个屋顶(如果n是奇数,屋顶就会在顶部完美地关闭)。我创建了一个三角形和正方形,但我不能把它们结合起来。三角形

    {
    int i,j,k,x,h=0;
    printf("\n\n");

    for( i = 1; i <= 5; i++)
    {
        for( k = 1; k <=5-i; k++)
        {
            printf(" ");
        }
        printf("*");
        for( j = 2; j <= 2*i-2; j++)
        {
            printf(" ");
        }
        if(i>1) printf("*");
        printf("\n");
    }
    for ( i = 1; i <= 5; i++)
    {
            printf("* ");
    }


    printf("\n\n");
    return 0;
}

enter image description here

c shapes
1个回答
1
投票

首先,你可能会发现,你需要有两种情况。n 是奇数还是 n 是偶数。

那么如果 n 是奇数,你需要迭代一下 1+(n-1)/2 次,如果 n 是偶。n/2 次,以打印 ^ 形状。

当你打印出一个像 ^,你需要打印一行带有 n '*'s.

然后你需要迭代 n-2 次,并打印一行带有 '*', n-2 ' 's和另一 '*' 每次都是如此。

最后打印一行带有 n '*'s.

试着把每个句子转换成一个c代码块就可以了。


0
投票

这其中有些棘手的代码。

#include <stdio.h>

int main(void) {
    int width = 8;
    char stars[width];
    memset(stars, '*', width);

    printf((width%2)? "%*s\n" : "", (width+1)/2, "*");
    for(int i=0; i< (width)/2; ++i)
    {
        printf("%*s%*s\n", (width+1)/2-i-(width%2), "*", 2*(i+1) - !(width%2), "*");
    }
    printf("%.*s\n", width, stars);
    for(int i=0; i<width-2; ++i)
    {
        printf("*%*s\n", width-1, "*");
    }
    printf("%.*s\n", width, stars);
    return 0;
}

样本输出,有 width 作为 78:

Success #stdin #stdout 0s 4264KB
   *
  * *
 *   *
*     *
*******
*     *
*     *
*     *
*     *
*     *
*******

Success #stdin #stdout 0s 4356KB
   **
  *  *
 *    *
*      *
********
*      *
*      *
*      *
*      *
*      *
*      *
********
© www.soinside.com 2019 - 2024. All rights reserved.