C:循环的替代品

时间:2013-10-07 20:21:25

标签: c loops

我需要创建一个空心矩形,但我只允许使用一个循环。该程序按原样工作,但我在代码中使用了两个循环,并且不知道如何继续减少最后一个。 (我们只学习了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++;
};

3 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分: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;
}

答案 2 :(得分:0)

使用以下代码,您可print frame使用1loop+ if-else,迭代次数为2*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;
}