打印空的星号三角形c

打印空的星号三角形c,c,loops,printing,draw,C,Loops,Printing,Draw,我查了一下,只发现了普通三角形的问题。 这个有点棘手 给定一个N,你的程序应该创建一个N边大小的星号未填充三角形 这是我的尝试,我只能低效地创建一个填充三角形 void q39(){ int n,i,b; printf("Inform N: "); scanf ("%i",&n); for ( i = 0; i < n; ++i) { printf("*"); for ( b = 1; b < n; ++b) {

我查了一下,只发现了普通三角形的问题。 这个有点棘手

给定一个N,你的程序应该创建一个N边大小的星号未填充三角形

这是我的尝试,我只能低效地创建一个填充三角形

void q39(){
    int n,i,b;
    printf("Inform N: ");
    scanf ("%i",&n);
    for ( i = 0; i < n; ++i)
    {
    printf("*");
    for ( b = 1; b < n; ++b)
    {
        if (i==0)
        {
        printf("*");
        }
        else if (i==1 && b>1)
        {
            printf("*");
        }
        else if (i==2 && b>2)
        {
            printf("*");
        }
        else if(i==3 && b>3){
            printf("*");
        }
        else if(i==4 && b>4){
            printf("*");
        }
        else if(i==5 && b>5){
            printf("*");
        }
        else if(i==6 && b>6){
            printf("*");
        }
        else if(i==7 && b>7){
            printf("*");
        }
        else if (i==8 && b>8){
            printf("*");
        }
    }
        printf("\n");
    }

}
void q39(){
int n,i,b;
printf(“通知N:”);
scanf(“%i”和“&n”);
对于(i=0;i1)
{
printf(“*”);
}
else如果(i==2&&b>2)
{
printf(“*”);
}
else如果(i==3&&b>3){
printf(“*”);
}
else如果(i==4&&b>4){
printf(“*”);
}
else如果(i==5&&b>5){
printf(“*”);
}
else如果(i==6&&b>6){
printf(“*”);
}
else如果(i==7&&b>7){
printf(“*”);
}
else如果(i==8&&b>8){
printf(“*”);
}
}
printf(“\n”);
}
}

我只是给你一个逻辑,你可以处理它。 你可以绕三圈。一行表示i,第二行表示*(星号)表示j,第三行表示空格(空三角形)表示k。现在,我希望你们知道如何用I,j来做一个三角形。 k的逻辑可能是,它的执行时间应比行的循环(即第j个循环)少1,并应打印一个空格(“”)

你可以像这样把你的问题分成几个模块

print_asterisk(n);
print_hollow_asterisk();
print_asterisk(1);

您需要考虑打印三角形的算法。您(可能)需要绘制三种不同类型的线:

  • 一排N个星号
  • 开始时有星号,中间有一个,中间有n-2个空间。
  • 带有1个星号的行(只是#1的子集)
  • 第1步-了解如何打印上述行


    第2步-确定何时打印上述行,这是一个可以大量优化的问题的较长版本

     void print_start_and_end_asterix( int n )
        {
                int i = 0;
                for ( ; i < n ; i ++ )
                {
                        if( i == 0 || i == n-1 )
                                printf("*");
                        else
                                printf(" ");
                }
                printf("\n");
        }
    
    
    void print_full_row( int n )
    {
            int i = 0;
            for ( ; i < n ; i ++ )
                    printf("*");
            printf("\n");
    }
    
    int main (){
            int n;
            scanf("%d", &n);
            int row = 0 , col = n;
            for ( row = 0 ; row < n ; row ++ , col--) {
                    if( row == 0 )
                            print_full_row(col);
                    else
                            print_start_and_end_asterix(col);
            }
    
    
            return 0;
    }
    
    void print\u start\u和\u end\u asterix(int n)
    {
    int i=0;
    对于(;i
    正在绘制的三角形是二维图形,因此可以使用两个嵌套的
    for
    循环来绘制。外部循环跟踪正在绘制的行。内部循环跟踪列。对于
    的每个组合,必须做出一个非常简单的决定,我们是输出一个星号,还是输出一个空格

    从外环开始。外部循环从N倒计时到1是有意义的,因为一行中的字符数从N开始,一直减少到1。所以外环是

    for ( row = N; row >= 1; row-- )
    
    接下来是内部循环。内部循环需要计算每行的字符数。我们已经安排好了,使得外部循环中的
    变量等于字符数。因此,内部循环非常简单

    for ( col = 0; col < row; col++ )
    
    最后,内部循环完成后,我们需要输出换行符以开始下一行

    putchar( '\n' );
    

    这就是它的全部内容。

    您只需要认为第一行应该用
    *

    第二件事是每行的第一个字符应该是
    *

    最后一个字符也应该是
    *
    。在这两者之间,你需要填充空格

    int main()
    {
        int n=6;
        for(int i=n-1;i>=0;i--) // using n-1, bcz loop is running upto 0
        {
            for(int j=0;j<=i;j++)
            {
                if(i==n-1 || j==0 ||i==j)
                    printf("*");
                else
                    printf(" ");
            }
            printf("\n");      
        }
        return 0;
    }
    

    请尝试做你自己的工作。Stackoverflow不是代码编写服务。如果你对你的代码有任何特别的困难,那么请发布它(作为一个),解释问题并问一个特别的问题。我已经做了一个尝试“发布代码并问一个特别的问题”部分如何?对不起,只是我认为我的代码太糟糕了,无法向你们展示,但我还是会发布它。。。如果这不是你的本意,我向你道歉。但是你需要从读者的角度来看待它。您转储的作业问题没有尝试的代码,也没有特定的问题。你希望人们得出什么结论?即使现在你仍然没有问一个问题。你是说代码太长了,或者运行时间太长了,或者只是一般来说,如何才能更好地编写代码,或者。。。?我猜是后者…但我只是想解释清楚问题是你的职责,而不是我们的职责。谢谢,我想也许我可以制作一个函数,它可以打印一行,每行有两个星号,每边有一个指定的大小,比如:1**,2将打印**,3**你知道吗?一个接受整数的函数,该整数是2之间的空格数asterisks@LeonardoDias是的,有很多方法可以解决这个问题。如果复杂性不重要,你可以选择你最喜欢的方法。
    putchar( '\n' );
    
    int main()
    {
        int n=6;
        for(int i=n-1;i>=0;i--) // using n-1, bcz loop is running upto 0
        {
            for(int j=0;j<=i;j++)
            {
                if(i==n-1 || j==0 ||i==j)
                    printf("*");
                else
                    printf(" ");
            }
            printf("\n");      
        }
        return 0;
    }
    
    ******
    *   *
    *  *
    * *
    **
    *