我正在练习在以下结果中生成星星,但我失败了。

1.

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

2.
     *
    **
   ***
  ****
 *****

对于我在这种情况下的逻辑,我认为可以通过在循环上使用宽度对齐控制来生成,但结果表明这是错误的......
*    *    *    *    *
*    *    *    *
*    *    *
*    *
*

使用代码:
    int i,j;
    char ch='*';//created for using of alignment
    for(i=1;i<=5;i++)
    {
        for(j=5;j>=i;j--)
        {
            printf("%5c", ch);
        }
        printf("\n");
    }

对于我的逻辑,我假设可以通过使用对齐方法 (%5c) 来生成。
然而,结果和我预期的不一样。

我已经成功生成了如下所示的星星:
*****
****
***
**
*

使用代码:
    int i,j;
    for(i=1;i<=5;i++)
    {
        for(j=5;j>=i;j--)
        {
            printf("*");
        }
        printf("\n");
    }

我对制作模式1和2的方法有错误的想法吗?
还是错误编码的正确思维?

最佳答案

要对齐,您实际上可能正在绘制一个矩形。在每一行中,您输出一系列星号(可能为空,即零星号)和一系列空格(可能为空,即没有空格)。

它是 (condition) ? (value_if_true) : (value_if_false) 结构的理想应用。您总是绘制完整的矩形,并且图案仅因条件而变化:“这是空格还是星号?”

int i, j;
for(i=1;i<=5;i++)
{
    for(j=1;j<=5;j++)
    {
        // This generates a full rectangle
        // printf("%c", '*');
        // This generates an empty rectangle ;-)
        // printf("%c", ' ');
        // This generates a triangle
        printf("%c", (i >= j) ? '*' : ' ');
    }
    printf("\n");
}

有两个自上而下的三角形由条件 (i >= j) 或 (i
   when j is       6-j is
       1              5
       2              4
      ...            ...
       5               1

所以测试是 ((6-j) <= i)

关于c - 对准控制上的星形图案练习,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12685122/

10-12 18:08