C程序打印不规则的星形图案

C程序打印不规则的星形图案,c,ascii-art,C,Ascii Art,我正试图写一个程序,使一个模式的明星。最后一句话真把我绊倒了。我必须只使用printf*生成代码;printf;printf\n;声明一次。我想用for循环和if语句来实现这一点 应该是这样的: * - 5 spaces before * * * - 4 spaces before * * * * - 3 spaces before * * * * * * * - 0 spaces before * 这就是我迄今为止所尝试的: main() {

我正试图写一个程序,使一个模式的明星。最后一句话真把我绊倒了。我必须只使用printf*生成代码;printf;printf\n;声明一次。我想用for循环和if语句来实现这一点

应该是这样的:

* - 5 spaces before * * * - 4 spaces before * * * * - 3 spaces before * * * * * * * - 0 spaces before * 这就是我迄今为止所尝试的:

main()
{
    int i, j, k;
    i=1;
    j=1;
    for(i=4;i>=1;i--)
    {
        for(j=1;j<=4;j++)
        {
            if(j>=i || ((i+j)==5) && !(j==2) && !(j==3))
            {
                printf("*");
            }
            else
            {
                printf(" ");
            }
        }
        printf("\n");
    }
}


我认为我的第一个方法是远远不够的。但我想我在第二个环节中找到了一些东西。我试着在第四行打印*和额外的2次。编译器的第二个链接似乎忽略了| |运算符。如何更改if语句以使此模式工作

在开始任何操作之前,先看看需要实现的算法。假设我们想做一个4号的三角形。 在第一个*之前将有3个空格。然后在下一行,它将是2个空格,依此类推。递减每行的空格数,并以此递增每行的*s数

我们的第一个循环,外循环,将是需要转到下一行的循环

for(i = 0; i < size; i++)
printf("\n");
不,我们需要让它打印出每行正确的空格数。知道第一行有大小为-1的空格,我们得到

spaces = size - 1;
for(x = 0; x < spaces; x++)
printf(" ");
现在我们把它放在外循环的范围内,因为我们希望它对每一行都这样做。 我们还需要更改每行后面空格的值,因为它会使每行递减

int x, i;
spaces = size - 1;
for(i = 0; i < size; i++){
 for(x = 0; x < spaces; x++)
  printf(" ");
 spaces--;
 printf("\n");
}
最后我们需要它来打印*s。正如您所注意到的,*s的数量从1开始,每行递增一次。所以我们做另一个for循环

int stars = 1;
for(a = 0; a < stars; a++)
  printf("*");
完成后,我们需要把它放在外循环的范围内,在空格之后

int x, i, a;
spaces = size - 1;
stars = 1;
for(i = 0; i < size; i++){
 for(x = 0; x < spaces; x++)
  printf(" ");
 for(a = 0; a < stars; a++)
  printf("*");
 spaces--;
 stars++;
 printf("\n");
}
就在这里。我在论坛框中输入了所有这些,所以可能会有一些语法错误,但这应该足够了。这是基本的开始绘图方法。现在你要做的就是不规则的部分。
不过,我会让您处理这个问题,只需初始化spaces变量以补偿最后一行的长度。补偿空格后,让最后一行代码打印出所有的星号

您试图在函数main中一次执行太多操作,这就是为什么逻辑失败的原因。将问题分解为更小、独立的部分

例外情况应该很容易添加到这一点上


PrintnSpace和printNStars非常相似,可以合并为一个通用函数void printNchar c,int count,但这样您就不会使用所需的printf和printf*语句。

程序是静态的还是要更改要打印的行数?为什么会从5,4,3降到0?将代码内联发布以保持与其他网站的独立性。代码是静态的。我希望前三行遵循一种模式,第四行是该模式的一个例外。我想我可以通过一个if语句来实现这一点。
int x, i, a;
spaces = size - 1;
stars = 1;
for(i = 0; i < size; i++){
 for(x = 0; x < spaces; x++)
  printf(" ");
 for(a = 0; a < stars; a++)
  printf("*");
 spaces--;
 stars++;
 printf("\n");
}
#include <stdio.h>
void printNSpaces(int count);
void printNStars(int count);

int main(void) {
    int n;

    for (n = 1; n <= 6; ++n) {
        printNSpaces(6 - n);
        printNStars(n);
        (void) printf("\n");
    }
    return 0;
}

void printNSpaces(int count) {
    while (count--) {
        (void) printf(" ");
    }
}

void printNStars(int count) {
    while (count--) {
        (void) printf("*");
    }
}