使用for循环打印出X模式中的字符

时间:2014-11-28 19:54:00

标签: c for-loop spacing

我试图打印这个大X模式:

 x       x
  x     x
   x   x
    x x
     x
    x x
   x   x
  x     x
 x       x

我无法弄清楚算法来制作它。我刚刚开始进行C编程并陷入困境。

到目前为止我所拥有的是

#include <stdio.h>
int main()
{
    int j,i;
    char ch[] = "$";
    for(int j = 5; j >= 0 ; --j)
    {
        for(i = 5; i>=0; --i)
        {
            if(j%2 == 1)
            {
                 printf("%s",ch);
            }

        }
    printf("\n");
    }
    return 0;
}

我也想出了这个模式,

0  5  0
1  3  1 
2  1  2
3  0  3
2  1  2
1  3  1
0  5  0 

边缘的数字是*应该出现的位置。中间的数字是空格应该出现的位置。我错过了什么?

4 个答案:

答案 0 :(得分:2)

为了一点乐趣:

int main (void)
{
    int i;
    int w = 7;
    for (i=1;i<=w*(w+1);i++)
        printf (
            "%c",
            i % (w+1) == 0 ? '\n' : 
            i % (w) == 0 || i % (w+2) == 1 ? '*' : ' ');

}

答案 1 :(得分:2)

对于十字架上面的一个好的解决方案的轻微扩展最终不仅仅是跨越x&#39;

#include <stdio.h>

int main(){
    int n = 4 - 1;
    char ch[] = "x";
    int i = 0, dx = 1;

    printf ("\n  __\n  ||----------------------------\n");
    do {
        printf ("  %s %*s%*.*s %*c\n", "||", 4*i+1, ch, 8*(n-i), 8*(n-i), ch, 4*i+1, '|');
        if ((i += dx)==n)
            dx = -dx;
    } while (i>=0);
    printf ("  ||----------------------------\n");
    for (i = 0; i < 10; i++)
        printf ("  ||\n");
    printf ("------\n\n");

    return 0;
}

<强>输出:

$ ./bin/flag

  __
  ||----------------------------
  || x                       x |
  ||     x               x     |
  ||         x       x         |
  ||             x             |
  ||         x       x         |
  ||     x               x     |
  || x                       x |
  ||----------------------------
  ||
  ||
  ||
  ||
  ||
  ||
  ||
  ||
  ||
  ||
------

答案 2 :(得分:1)

#include <stdio.h>

int main(){
    int n = 5 - 1;
    char ch[] = "x";
    int i = 0, dx = 1;

    do{
        printf("%*s%*.*s\n", i+1, ch, 2*(n-i),2*(n-i), ch);
        if((i += dx)==n)
            dx = -dx;
    }while(i>=0);
    return 0;
}

for(;;){
    printf("%*s%*.*s\n", i+1, ch, 2*(n-i),2*(n-i), ch);
    if((i += dx)==n)
        dx = -dx;
    else if(i < 0)
        break;
}

int n = 5 - 1;
char ch[] = "x";
int i = 0;

for(; i < n ; ++i){
    printf("%*s%*.*s\n", i+1, ch, 2*(n-i),2*(n-i), ch);
}
for(; i >=0 ; --i){
    printf("%*s%*.*s\n", i+1, ch, 2*(n-i),2*(n-i), ch);
}

答案 3 :(得分:0)

这是您的程序,只需进行最少的修改即可完成您的工作:

#include <stdio.h>
int main()
{
  int j,i;
  char ch[] = "x";               // (1)
  int sz = 8;                    // (2)
  for( j = sz; j >= 0 ; --j)
    {
      for(i = sz; i>=0; --i)
        {
          if(sz-j == i || i == j)// (3) 
          {
             printf("%s",ch);
          } else {
             printf(" ");        // (4)
          }
        }
      printf("\n");
    }
  return 0;
}

说明:

(1)首先,如果你想要x,你应该打印x:)

(2)使用变量作为大小,这样你就可以玩它......

(3)你必须每行打印两个x,即在内环中的两个位置。

  

这些位置位于两个对角线上,其中x == y(此处为i   == j),或x == 8 - y(此处为i == sz -j)

(4)你必须打印一个空格

见这里:https://eval.in/228155