代码之家  ›  专栏  ›  技术社区  ›  Sam

尝试使用c中的for循环生成这个星形输出

c
  •  1
  • Sam  · 技术社区  · 15 年前

    我是C语言的初学者,想用 for 提供以下输出的循环:

    * * * * * * *
    * * *   * * *
    * *       * *
    *           *
    
    6 回复  |  直到 7 年前
        1
  •  16
  •   Guffa    15 年前

    我喜欢写一行代码来解决这样的简单问题。;

    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]);
    
        2
  •  8
  •   dreamlax    15 年前

    这是一个便宜的版本,它做的工作,但没有提供太多的灵活性。

    #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;
    }
    
        3
  •  5
  •   Jon Bright    15 年前

    你显然是在做作业。这是解决办法。但家庭作业的重点是你需要了解这是如何工作的,它在做什么,等等。只是复制我的代码不会帮助你学习。

    这里有两个循环。循环使用 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;
    }
    
        4
  •  2
  •   Ollie Glass    15 年前

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

    编程就是(部分地)尽最大努力解决一个问题,不管这个问题是粗略的还是不完全的,然后考虑你已经能够做什么,并逐步地改进你的代码。所以,除非我知道你已经到了哪里,否则我会冒着破坏学习经验的风险,向很多人透露。

    到目前为止给我们看看你的代码怎么样?

        5
  •  1
  •   sepp2k    15 年前

    你是否坚持使用这个算法,或者如何在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。

        6
  •  1
  •   NAVEEN MISHRA    7 年前
    #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;
    }