Рисование треугольников и квадратов с C - PullRequest
1 голос
/ 30 апреля 2020

Я должен нарисовать треугольник на квадрате со звездочкой ожидаемого результата, как показано на рисунке ниже.

Инструкция такова: написать программу C, которая читает число n от пользователя и позволяет распечатать дом с крышей, использующий символы *. Дом должен быть квадратным, а крыша - двумя диагональными линиями в 45 градусов, образующими крышу (если нечетно, крыша идеально закрывается сверху). Я создаю треугольник и квадрат, но я не могу их объединить. Треугольник

    {
    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

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

Сначала вы можете обнаружить, что вам нужно иметь два случая: n нечетно или n четно.

Затем, если n нечетно, вам нужно выполнить итерацию 1+(n-1)/2 раз, и если n является четным, n/2 раз, чтобы напечатать форму ^.

После того, как вы напечатали форму, подобную ^, вам необходимо напечатать строку с n '*' s.

Затем необходимо выполнить итерацию n-2 раз и напечатать строку с '*', n-2 ' ' с и еще '*' каждый раз.

Наконец напечатайте строку с n '*' с.

Попробуйте преобразовать каждое предложение в блок кода c, и все готово.

0 голосов
/ 30 апреля 2020

Некоторые хитрые коды в этом:

#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 как 7 и 8:

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

Success #stdin #stdout 0s 4356KB
   **
  *  *
 *    *
*      *
********
*      *
*      *
*      *
*      *
*      *
*      *
********
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...