如何用C打印此图案?

如何用C打印此图案?,c,for-loop,C,For Loop,我必须打印这个: 0 1 0 1 2 1 0 1 2 3 2 1 0 1 2 3 4 3 2 1 0 1 2 3 4 5 4 3 2 1 0 1 2 3 4 5 我的代码: #include<stdio.h> int main() { int i,j,k,l; for(i=1;i<=6;i++)

我必须打印这个:

          0          
        1 0 1        
      2 1 0 1 2      
    3 2 1 0 1 2 3    
  4 3 2 1 0 1 2 3 4  
5 4 3 2 1 0 1 2 3 4 5
我的代码:

#include<stdio.h>
    int main()
    {
        int i,j,k,l;

        for(i=1;i<=6;i++)
        {
            for(j=6;j>i;j--)
            {
                printf(" ");
            }

            for(k=i-1;k>=0;k--)
            {
                printf("%d",k);
            }

            for(l=1;l<i;l++)
                printf("%d",l);
            printf("\n");
        }
        return 0;
    }
我刚刚开始用C编写代码,所以这对我来说是新的。如何在数字之间留出空间,使最终输出看起来比当前更优雅


我在
printf(“%d”,k)中尝试了
%-6d
调整宽度,但输出的缩进错误。

这很容易修复。在当前打印字符的任何位置(换行符除外),只需打印该字符,后跟空格即可

如果您这样做,您将看到您想要的输出:

          0 
        1 0 1 
      2 1 0 1 2 
    3 2 1 0 1 2 3 
  4 3 2 1 0 1 2 3 4 
5 4 3 2 1 0 1 2 3 4 5 
我不会给你看代码,因为这几乎肯定是课堂作业,如果你自己动手,你会成为一个更好的程序员。但我会告诉你,有三条线需要改变。这应该足以解决问题

作为旁注,这还将在每行末尾的最后一位后面打印一个空格。如果这是不允许的,有一些方法可以修复它,主要是通过更改最终循环,这样它就不会为行上的最终项输出空间

如果你开始尝试使用两位数,它也会开始失败。要解决这个问题,您需要知道最宽的数字,并使用宽度为的
printf
字段说明符。但是,因为它不在原始规范中,所以我没有实现它(请参阅)


如果您想实现类似的功能(使用较大的数字和行末尾的删除空间),可以使用以下功能:

#include<stdio.h>

#define COUNT 15

int main(void) {
    // Sanity check.

    if (COUNT < 1) return 0;

    // Get maximum width.

    int width = 1, value = COUNT;
    while (value > 9) {
        value /= 10;
        width++;
    }

    // For each line.

    for (int line = 1; line <= COUNT; line++) {
        // Output leading spaces.

        for (int column = COUNT; column > line; column--)
            printf("%*s ", width, "");

        // Output descending digits.

        for (int column = line - 1; column >= 0; column--)
            printf("%*d ", width, column);

        // Output ascending digits.

        for (int column = 1; column < line; column++) {
            printf("%*d", width, column);
            if (column < line - 1) putchar(' ');
        }

        // Finish off line.

        putchar('\n');
    }

    return 0;
}
#包括
#定义计数15
内部主(空){
//精神检查。
如果(计数<1)返回0;
//获得最大宽度。
int width=1,value=COUNT;
而(值>9){
数值/=10;
宽度++;
}
//每行。
对于(int-line=1;line-line;column--)
printf(“%*s”,宽度“”);
//输出降序数字。
对于(int column=line-1;column>=0;column--)
printf(“%*d”,宽度,列);
//输出升序数字。
for(int column=1;column
它有以下优点:

  • 它允许可变宽度
  • 它使用更合适的命名(更少)循环变量
  • 它不会输出每行末尾的空格

如果这是课堂作业,你几乎肯定会被发现。

这很容易解决。在当前打印字符的任何位置(换行符除外),只需打印该字符,后跟空格即可

如果您这样做,您将看到您想要的输出:

          0 
        1 0 1 
      2 1 0 1 2 
    3 2 1 0 1 2 3 
  4 3 2 1 0 1 2 3 4 
5 4 3 2 1 0 1 2 3 4 5 
我不会给你看代码,因为这几乎肯定是课堂作业,如果你自己动手,你会成为一个更好的程序员。但我会告诉你,有三条线需要改变。这应该足以解决问题

作为旁注,这还将在每行末尾的最后一位后面打印一个空格。如果这是不允许的,有一些方法可以修复它,主要是通过更改最终循环,这样它就不会为行上的最终项输出空间

如果你开始尝试使用两位数,它也会开始失败。要解决这个问题,您需要知道最宽的数字,并使用宽度为的
printf
字段说明符。但是,因为它不在原始规范中,所以我没有实现它(请参阅)


如果您想实现类似的功能(使用较大的数字和行末尾的删除空间),可以使用以下功能:

#include<stdio.h>

#define COUNT 15

int main(void) {
    // Sanity check.

    if (COUNT < 1) return 0;

    // Get maximum width.

    int width = 1, value = COUNT;
    while (value > 9) {
        value /= 10;
        width++;
    }

    // For each line.

    for (int line = 1; line <= COUNT; line++) {
        // Output leading spaces.

        for (int column = COUNT; column > line; column--)
            printf("%*s ", width, "");

        // Output descending digits.

        for (int column = line - 1; column >= 0; column--)
            printf("%*d ", width, column);

        // Output ascending digits.

        for (int column = 1; column < line; column++) {
            printf("%*d", width, column);
            if (column < line - 1) putchar(' ');
        }

        // Finish off line.

        putchar('\n');
    }

    return 0;
}
#包括
#定义计数15
内部主(空){
//精神检查。
如果(计数<1)返回0;
//获得最大宽度。
int width=1,value=COUNT;
而(值>9){
数值/=10;
宽度++;
}
//每行。
对于(int-line=1;line-line;column--)
printf(“%*s”,宽度“”);
//输出降序数字。
对于(int column=line-1;column>=0;column--)
printf(“%*d”,宽度,列);
//输出升序数字。
for(int column=1;column
它有以下优点:

  • 它允许可变宽度
  • 它使用更合适的命名(更少)循环变量
  • 它不会输出每行末尾的空格
如果这是课堂作业,你几乎肯定会被发现。

使用printf(“%d”,k)而不是printf(“%d”,k)。

使用printf(“%d”,k)而不是printf(“%d”,k)。

使用这个。。 在所有三个循环中添加一个空格

int i, j, k, l;
for (i = 1; i <= 6; i++) {
    for (j = 6; j > i; j--) {
        System.out.printf("  ");
    }
    for (k = i - 1; k >= 0; k--) {
        System.out.printf("%d ", k);
    }
    for (l = 1; l < i; l++) {
        System.out.printf("%d ", l);
    }
    System.out.printf("\n");
}
inti,j,k,l;
对于(i=1;i;j--){
System.out.printf(“”);
}
对于(k=i-1;k>=0;k--){
System.out.printf(“%d”,k);
}
对于(l=1;l
使用此。。 在所有三个循环中添加一个空格

int i, j, k, l;
for (i = 1; i <= 6; i++) {
    for (j = 6; j > i; j--) {
        System.out.printf("  ");
    }
    for (k = i - 1; k >= 0; k--) {
        System.out.printf("%d ", k);
    }
    for (l = 1; l < i; l++) {
        System.out.printf("%d ", l);
    }
    System.out.printf("\n");
}
inti,j,k,l;
对于(i=1;i;j--){
System.out.printf(“”);
}
对于(k=i-1;k>=0;k--){
System.out.printf(“%d”,k);
}
对于(l=1;l
如果我是你,我开始构建2d矩阵,然后打印输出结果。如果我是你,我开始构建2d矩阵,然后打印输出结果。@LPs,我尝试过了,你在答案中看到的输出就是我得到的。@LPs:答案中说,“空格是一个字符而不是换行符。@海洋生物学家:除了换行符以外的所有字符!!!!!!!:-)这意味着,你的一行,吐出一个空格,应该吐出其中两个空格。那个w