尝试使用C中的for循环来制作此星形输出

1 c

我是C的初学者,想要使用for循环创建一个程序,它提供以下输出:

* * * * * * *
* * *   * * *
* *       * *
*           *
Run Code Online (Sandbox Code Playgroud)

Guf*_*ffa 16

我喜欢写一行来解决像这样的简单问题.;)

for(int i=0;i<60;i++)putchar(" *\r\n"[i%15>=11?i%15-11:abs(i%15-6)>(i/15)*2-1&&i%15%2==0?1:0]);
Run Code Online (Sandbox Code Playgroud)

  • 哇,一个downvote.整整一年后.我想这些作业每年都在使用,而今年的学生们正在寻找他们作业的解决方案...... (2认同)
  • 两个月之后另一次投票.今年你的第一份任务交付时间非常非常晚...... (2认同)

dre*_*lax 8

这是一个便宜的版本,它完成了工作,但没有提供太大的灵活性.

#include <stdio.h>

int main (int argc, char *argv[])
{
    char *strings[4] = { "* * * * * * *",
                         "* * *   * * *",
                         "* *       * *",
                         "*           *" };
    int i;

    for (i = 0; i < 4; i++)
    {
        puts (strings[i]);
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • +1,虽然将`strings`声明为指向*constant*`char`的指针数组会很好. (2认同)

Jon*_*ght 5

你显然是把它作为家庭作业.这是解决方案.但是,功课的重点是你需要了解它是如何工作的,它正在做什么等等.只是复制我的代码不会帮助你学习.

这里有两个循环.使用的循环r用于行.使用的循环c用于列.有7列是星星或空格.在第一排,他们都是明星.在第二行,第3列是一个空格(记住我们从零开始编号).这是因为在第二行r是1.因此if条件是if (c>3-1 && c<3+1),或者if (c>2 && c<4)- 当c为3时,将打印空格.对于其他列,将打印星号.在下一行,它最终为if (c>1 && c<5)- 所以如果c是2,3或4,则打印空格.

尝试使用该程序,更改数字,更改打印内容以便更好地了解其正在执行的操作.

#include <stdio.h>

int main(void)
{
    int r,c;
    for (r=0; r!=4; r++)
    {
        for (c=0; c<7; c++)
        {
            if (c>3-r && c<3+r)
                printf("  ");
            else
                printf("* ");
        }
        printf("\n");
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • 在我看来,如果你想要某人学习,你就不应该给他们代码.+1表示良好的代码和解释,但-1表示答案.总共+/- 0. (4认同)
  • 当问到问题的人显然没有努力尝试自己回答问题时,我认为你不应该提供完整的家庭作业问题答案.显然我在这里是少数,但我现在不能删除我的投票,显然它"太老了". (3认同)