使用循环在C中打印图案

使用循环在C中打印图案,c,C,要打印的图案(用于用户输入n)为: 我的尝试: #include <stdio.h> int main() { int i,j,k,l,p,n,tc,i1,j1,k1; n=4; for(i=1;i<=n*2-1;i++) { p=n; if(i<=n) { for(j=1;j<=i-1;j++) { printf("%d "

要打印的图案(用于用户输入n)为:

我的尝试:

#include <stdio.h>

int main() 
{
    int i,j,k,l,p,n,tc,i1,j1,k1;
    n=4;

    for(i=1;i<=n*2-1;i++)
    {
        p=n;
        if(i<=n)
        {
        for(j=1;j<=i-1;j++)
        {
            printf("%d ",p);
            p--;
        }
        for(k=j;k<=n*2-j;k++)
            printf("%d ",p);
        for(l=k;l<=n*2-1;l++)
        {
            p++;
            printf("%d ",p);
        }
        }
        else
        {
            p=n;
            for(i1=1;i1<=n*2-i-1;i1++)
            {
                printf("%d ",p);
                p-=1;
            }
            for(j1=i1;j1<=n*2-i1;j1++)
                printf("%d ",p);
            for(k1=j1;k1<=n*2-1;k++)
            {
                p+=1;
                printf("%d ",p);
            }
        }
        printf("\n");
    }
   return 0;
} //main

我哪里出错了?我想不出来。我在GCC4.x中尝试了这段代码,得到了正确的输出。

在上一个循环中,您增加了错误的变量

for(k1=j1;k1<=n*2-1;k++){
   p+=1;
   printf("%d ",p);
}

for(k1=j1;k1在上一个循环中,您增加了错误的变量

for(k1=j1;k1<=n*2-1;k++){
   p+=1;
   printf("%d ",p);
}

<代码> >(K1= J1;K1请A)。请编辑一致的缩进,它现在使代码解释不必要的硬。BTW如果考虑坐标<代码> x< /代码>和<代码> y>代码>,从(N-1) N-1</Code >,在每个位置中,打印的值是 max(ABS(i),ABS(j))。+1
。利用这一事实,代码变得更加简单(实际上,它只变成了两个嵌套循环)。(上述示例:)意大利语MaTeo意大利语谢谢。请制作一个一致的缩进,它现在使代码解释不必要的硬。BTW如果你考虑坐标<代码> x y>代码>,从(N-1) N-1,在每个位置上打印的值是 max(ABS(i),ABS(j))+1。利用这一事实,代码变得更加简单(事实上,它变成了两个嵌套循环)。@Matteo Italia谢谢。这很好地说明了变量的有意义名称以及将变量范围限制在最内部循环(语句块)的重要性这很好地说明了变量的有意义的名称有多重要,以及将变量范围限制在使用它们的最内部循环(语句块)的值。
for(k1=j1;k1<=n*2-1;k++){
   p+=1;
   printf("%d ",p);
}