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

时间:2009-08-30 10:15:55

标签: c

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

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

6 个答案:

答案 0 :(得分: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]);

答案 1 :(得分: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;
}

答案 2 :(得分: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;
}

答案 3 :(得分:2)

你自己有多远?你知道怎么写for循环和print语句吗?到目前为止你有什么输出?

编程(部分)是为了尽可能地解决问题,无论是粗略还是不完整,然后考虑你能够做什么并逐步完善代码。因此,除非我知道你已经到达了哪里,否则我会冒险破坏学习经验。

到目前为止向我们展示您的代码怎么样?

答案 4 :(得分:1)

您是否坚持使用算法或如何在C中实现它?算法如下所示:

Let `n` be the width of the rectange
Print n stars followed by a newline
For i from n/2 to 1 (counting down in steps of 1):
    Print i stars, then n-2*i spaces, then i stars, then a newline

要在C中实现这一点,你需要一个for循环和一些输出函数,比如printf。

答案 5 :(得分:1)

#include < stdio.h >
int main() {
int i, j;
for (i = 0; i < 4; i++) {
  for (j = 0; j < 7; j++) {
    if (j <= 3 - i || j >= 3 + i)
      printf("*");
    else
      printf(" ");
  }
  printf("\n");
}
return 0;
}