2

我需要创建一个空心矩形,但我只能使用一个循环。该程序按原样工作,但我在代码中使用了两个循环,不知道如何继续减少最后一个循环。(我们只学习了 printf、scanf、if/else 和循环,所以没有数组等。)程序扫描框架的高度、宽度和厚度。

谁能指出我正确的方法?

代码如下:

row = 0;
while(row < height)
{
    column = 0;
    while(column < width)
    {
        if(thickness > row)    // upper border
            { printf("*");};
        if( some conditions )  // left border
            { printf("*");};
        if( conditions )    // hollow
            { printf(" ");};
        if( conditions )   // right border
            { printf("*");};
        if( conditions )     // bottom border
            { printf("*");};

        column++;
    };

puts("");
row++;
};
4

3 回答 3

9

这是一条线索:在 0...m 循环中执行 0...n 循环与执行 0...(n*m) 循环相同。您可以使用除法和模数计算行和列。

于 2013-10-07T20:31:49.087 回答
1

仅当您完全卡住或想查看不同的解决方案时才阅读它。
如您所见,没有扫描输入。

#include <stdio.h>

int main(void)
{
  int width=5;
  int height=6;
  int thick=1;
  int x=1;
  int y=height;

  while(y>0)
  {
    if(y>(height-thick) || y<=thick || x<=(thick) || x>(width-thick))
      printf("*");
    else
      printf(" ");
    if(x==width)
    {
      x=1;
      printf("\n");
      y--;
    }
    else
    {
      x++;
    }
  }
  return 0;
}
于 2013-10-07T20:51:11.800 回答
0

使用下面的代码,您可以通过使用和迭代次数来打印帧1loop+ if-else2*column+width-2

    int i, column = 6,width=5;

        for(i=1;i<=2*column+(width-2);i++) 
        {
               if( i <= column || i-column>=width-1) 
               printf("* ");
               else    
               printf("\n*%*s\n",2*(column-1),"*");  // prints newline and `*` then Width of 2*(colomn-1) times space and  again * and newline.  
               //if you don't want newline two times, remove trailing one add if statement inside else check i==column+width-2 print newline. 
        };  

广义的。

#include <stdio.h>

int main(void) {
int i, column ,width;
printf("Enter two");
scanf("%d%d",&column,&width);
    for(i=1;i<=2*column+(width-2);i++)
    {
           if(i <= column || i-column>=width-1)
           printf("*");
           else
            {
            printf("\n*%*s",(column-1),"*");
            if (i-column==width-2)
            printf("\n");
            }
    };

    printf("\n");
        return 0;
}
于 2013-10-07T21:08:46.743 回答