如何在C中打印多个正方形的星形图案?

时间:2014-10-27 04:03:37

标签: c

我想打印下面的图案,用户输入n和m(4和6),外面应该是星星,里面应该用圆形填充。

******    ******    ******    ******    
*oooo*    *oooo*    *oooo*    *oooo*
*oooo*    *oooo*    *oooo*    *oooo*
*oooo*    *oooo*    *oooo*    *oooo*
*oooo*    *oooo*    *oooo*    *oooo*
******    ******    ******    ******    

******    ******    ******    ******    
*oooo*    *oooo*    *oooo*    *oooo*
*oooo*    *oooo*    *oooo*    *oooo*
*oooo*    *oooo*    *oooo*    *oooo*
*oooo*    *oooo*    *oooo*    *oooo*
******    ******    ******    ******    

******    ******    ******    ******    
*oooo*    *oooo*    *oooo*    *oooo*
*oooo*    *oooo*    *oooo*    *oooo*
*oooo*    *oooo*    *oooo*    *oooo*
*oooo*    *oooo*    *oooo*    *oooo*
******    ******    ******    ******    

******    ******    ******    ******    
*oooo*    *oooo*    *oooo*    *oooo*
*oooo*    *oooo*    *oooo*    *oooo*
*oooo*    *oooo*    *oooo*    *oooo*
*oooo*    *oooo*    *oooo*    *oooo*
******    ******    ******    ******    

******    ******    ******    ******    
*oooo*    *oooo*    *oooo*    *oooo*
*oooo*    *oooo*    *oooo*    *oooo*
*oooo*    *oooo*    *oooo*    *oooo*
*oooo*    *oooo*    *oooo*    *oooo*
******    ******    ******    ******

******    ******    ******    ******    
*oooo*    *oooo*    *oooo*    *oooo*
*oooo*    *oooo*    *oooo*    *oooo*
*oooo*    *oooo*    *oooo*    *oooo*
*oooo*    *oooo*    *oooo*    *oooo*
******    ******    ******    ******    

我只能使用此代码打印此内容。我做错了什么?

#include <stdio.h>
#include <stdlib.h>


int main(void)
{
int n,i,j,k,m,n1;
printf("enter table size and enter square size");
scanf("%d %d", &n, &n1);

for (i = 0; i < n; i++) {
    for (j = 0; j < n1; j++) 
    {
        for ( k = 0; k < n; k++) 
        {
            for ( m = 0; m < n1; m++) 
            {
                {
            if(i==0 || i==n-1)
                {
            printf("*");
                }
            else if(j==0 || j==n-1)
                {
            printf("*");
                }
            else
                {
            printf("o"); 
                }
                }
            }
            printf(" ");
        }
        printf("\n");
    }
    printf("\n");
}
system("pause");
return 0;

}

2 个答案:

答案 0 :(得分:1)

试试这个

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int i;
    int j;
    int side;

    printf("Enter side\n");
    scanf("%d",&side);
    for(int m=0;m<side;m++)
    {
        for(j=0;j<side;j++)
        {
            for(i=0;i<side;i++)
            {
                for(int k=0;k<side;k++)
                    printf("*");
                printf(" ");
            }
            printf("\n");
        }
        printf("\n");
    }
    system("Pause");
    return 0;
}

答案 1 :(得分:1)

算法和逻辑非常简单。 如果以正确的顺序row{height{length{column{...}}}}包含这些for循环,您将获得所需的结果:

  1. 它会打印* length次,然后是'空格'。并重复column次。

  2. 然后它将移动到下一行并执行相同的height次。之后,它将打印换行符\n

  3. 该计划将重复步骤1(column次)和2(height次)row次。

  4. 但是 如果您想要打印一些不同的东西,您可以随意更改此算法。将所有变量重命名为number并运行它 - 您将获得number x number个方格,其边长等于number。或者将rowcolumn重命名为side并运行它 - 您将获得一个side x side个方格,其边heightlength。等等...

    我可以建议您使用以下算法打印各种方块。

    #include <stdio.h>
    #include <stdlib.h>
    
    
    int main(void)
    {
        int row, column, height, length;
        int i,j,k,m;
        scanf("%d %d %d %d", &row, &column, &height, &length);
    
        for (i = 0; i < row; i++) {
            for (j = 0; j < height; j++) {
                for ( k = 0; k < column; k++) {
                    for ( m = 0; m < length; m++) {
                        printf("*");
                    }
                    printf(" ");
                }
                printf("\n");
            }
            printf("\n");
        }
    
        return 0;
    }
    /* OUTPUT:
    2  // rows
    4  // columns
    3  // height
    5  // length
    ***** ***** ***** *****
    ***** ***** ***** *****
    ***** ***** ***** *****
    
    ***** ***** ***** *****
    ***** ***** ***** *****
    ***** ***** ***** *****
    */