如何在c中使用for循环输出倒三角形?

ffdz8vbo  于 2023-11-16  发布在  其他
关注(0)|答案(2)|浏览(95)

我创建了一个代码,通过输入值来制作钻石。上面三角形的输出很好,但我对反转三角形感到困扰。我认为//反转三角形有问题,所以我改变了i条件表达式,但问题没有解决。我应该如何制作反转三角形?

#include <stdio.h>

int main() {
    
    int n, i, j, k;
    
    scanf("%d", &n);
    
    //an upper triangle
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n - i - 1; j++) {
            printf(" ");
        }
        for (k = 0; k < 1 + i * 2; k++) {
            printf("*");
        }
    
        printf("\n");
    }
    
    //reverse triangle
    for (i = 0; i < n - 1; i++) {
        for (j = 0; j < 1 + i; j++) {
            printf(" ");
        }
        for (k = 0; k < n - i * 2; k++) {
            printf("*");
        }
        printf("\n");
    }
    return 0;
}

字符串

a64a0gku

a64a0gku1#

当你用循环绘图时,首先你必须找到输入值和输出图之间的依赖关系-生成多少行,每行(列)有多少个字符等等。
在你的例子中,你有“n”,你的图形由“(n2)-1”行组成。如果你有“n=3”,你的菱形将是“(32)-1”行= 5行。你的菱形增长到行数“n”,即如果n = 3,上三角形的底部(你称之为)将在第3行。
在第一行,两边各有“n-1”个空格和1颗星星。每隔一行,空格的数量减少,每边1颗,而星星的数量增加,每行2颗。你可以画一行的空格和星星的数量,然后修改它们的值。这一直持续到行号“n”。在绘制行“n”之后-您不得在此方向上进一步修改空格和星号的数量。
现在是“钻石”的第二部分-从第“n+1”行一直到第“(n*2)-1”行。它向后移动-每隔一行,你必须用+1增加星星两边的空间,用每行-2减少星星的数量。首先修改值,然后绘制符号。
以下是我的方法:

#include <stdio.h>

int main()
{
    int n;
    scanf("%i", &n);
    int spaces, stars;
    spaces = n-1;
    stars = 1;
    for (int i = 1; i <= (n*2)-1; i++) //Rows
    {
        if (i <= n)
        {
            for (int a = 1; a <= spaces; a++)
            {
                printf(" ");
            }
            for (int b = 1; b <= stars; b++)
            {
                printf("*");
            }
            for (int c = 1; c <= spaces; c++)
            {
                printf(" ");
            }
            printf("\n");

            if (i < n)
            {
                spaces--, stars+=2;
            }
        }

        else
        {
            spaces++, stars-=2;
            for (int a = 1; a <= spaces; a++)
            {
                printf(" ");
            }
            for (int b = 1; b <= stars; b++)
            {
                printf("*");
            }
            for (int c = 1; c <= spaces; c++)
            {
                printf(" ");
            }
            printf("\n");
        }

    }

    return 0;
}

字符串
输入:4路输出:

*   
  ***  
 ***** 
*******
 ***** 
  ***  
   *


输入:5输出:

*    
   ***   
  *****  
 ******* 
*********
 ******* 
  *****  
   ***   
    *

lnvxswe2

lnvxswe22#

你可以试试下面的代码来创建钻石形状:

#include <stdio.h>

int main() {
    
    int n, i, j, k;
    
    scanf("%d", &n);

    //UPPER TRIANGLE
    for (int i = 0; i < n; i++)
    {
        for (int k = i; k <= n; k++)
        {
            printf(" ");
        }
        for (int j = 0; j <= i; j++)
        {
            printf(" *");
        }
        printf("\n");
    }
    
    //reverse triangle
    for (int i = 0; i < n; i++)
    {
        for (int k = 0;  k<= i; k++)
        {
            printf(" ");
        }
        for (int j = n-i; j >0;j--)
        {
            printf(" *");
        }
        printf("\n");
    }
    return 0;
}

字符串

相关问题