用C++语言写程序

3.室内平面图设计程序1)用户输入房间的长度和宽度,门、窗、家具的位置。放置规则:窗户和门必须在墙上且不能再拐角,窗户不能紧靠门,家具必须在室内且不能堵门。不合规则要提示... 3.室内平面图设计程序
1)用户输入房间的长度和宽度,门、窗、家具的位置。放置规则:窗户和门必须在墙上且不能再拐角,窗户不能紧靠门,家具必须在室内且不能堵门。不合规则要提示重新输入;
2)根据上述参数绘制房间图样,墙用'#'表示,门用空格表示,窗户用'|'或'-'表示(前者在竖墙上,后者在横墙上),家具用'*'表示。

###-######
# #
#
# #
# * #
# #
##########
这是一个10x7的房间,左上角坐标为(0,0),门在(9,2),窗在(3,0),家具在(2,4)
展开
 我来答
czy7812
2018-11-05 · TA获得超过2671个赞
知道小有建树答主
回答量:518
采纳率:88%
帮助的人:191万
展开全部

【解题思路】这题的关键在判断房间的长宽,以及门、窗、墙和家具位置的合理性。这些东西确定下来之后,那剩下的输出就显示容易多了:用一个双重循环一个坐标一个坐标的输出,如果是墙就输#,如果是窗就输出|或-,如果是门就输出空格,如果是家具就输出*,什么都不是就输出空格。怎么来判断各个数据的合理性呢?

  1. 房间的长宽:题目虽然没做硬性的要求,但为了不太挤,我想房间的长和宽至少都不能少于4,如果少于4,则家具的位置很容易就没地方摆了。而为了不在输出的时候出现自动换行,宽度和长度也不宜太大,所以要做个合理的限制。

  2. 门的位置,首先是不能在四个拐角,假如房间的长和宽分别是 l 和 w ,那四个拐角分别就是(0,0)、(l,0)、(0,w)、(l,w),这是必须排除的,别个门必须在墙上,墙上坐标的特点就是要么x或y有一个等于0,要么x或y有一个等于房间的长或宽。

  3. 窗除了不能在拐角,也不能不在墙上,还要不能和门重复。

  4. 家具的坐标必须是x小于房间的宽,大于0,y小于房间的长,大于0,而且不能有一个坐标和门一样且另一个坐标和门差1。

明白了这些条件,程序就很好写了。代码如下,虽然有点长,但主要在判断合理性。

【程序代码】
#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{int l,w,                            //房间长和宽
     x1,y1,                          //门的坐标
     x2,y2,                          //窗的坐标
     x3,y3,                          //家具的坐标
     i,j;                            //循环变量
 do{printf("请输入房间的长和宽:");   //显示提示
    scanf("%d,%d",&l,&w);            //输入房间的长和宽
    if(l<4||w<4||l>40||w>20)         //规定房间的合理尺寸
      {printf("输入错误\n");         //显示尺寸错误提示 
       continue;}                    //输错了重新输入
    break;}while(1);                 //如果没不符条件,退出循环
 do{printf("请输入门的坐标:");       //显示提示
    scanf("%d,%d",&x1,&y1);          //输入门的坐标
    if((x1==0&y1==0)||               //如果门的坐标在拐角上
       (x1==l-1&y1==0)||             //拐角有4个 
       (x1==0&y1==w-1)||             //由于坐标从0开始,所以l,w必须-1 
       (x1==l-1&y1==w-1))
      {printf("门不能在拐角\n");     //显示位置错误提示 
       continue;}                    //重新循环,重新输入
    if(x1!=0&y1!=0&x1!=l-1&y1!=w-1)  //如果门不在墙上 
      {printf("门不在墙上\n");       //显示位置错误提示 
       continue;}                    //输错了重新输入
    break;}while(1);                 //如果没不符条件,退出循环
 do{printf("请输入窗的坐标:");       //显示提示
    scanf("%d,%d",&x2,&y2);          //输入窗的坐标
    if((x2==0&y2==0)||               //如果窗的坐标在拐角上
       (x2==l-1&y2==0)||             //拐角有4个 
       (x2==0&y2==w-1)||             //由于坐标从0开始,所以l,w必须-1 
       (x2==l-1&y2==w-1))
      {printf("窗不能在拐角\n");     //显示位置错误提示 
       continue;}                    //重新循环,重新输入
     if(x2!=0&y2!=0&x2!=l-1&y2!=w-1) //如果窗不在墙上 
      {printf("窗不在墙上\n");       //显示位置错误提示
       continue;}
     if(x2==x1&y2==y1)               //如果窗和门坐标一样
      {printf("窗不能在门上\n");     //显示位置错误提示
       continue;}
    break;}while(1);                 //如果没不符条件,退出循环
 do{printf("请输入家具的坐标:");     //显示提示
    scanf("%d,%d",&x3,&y3);          //输入家具的坐标
    if(x3<1||x3>=l||y3<1||y3>=w)     //如果家具不在房间内
      {printf("家具不在房内\n");     //显示位置错误提示 
       continue;}                    //重新循环,重新输入
    if((x3==x1&abs(y3-y1)==1)||      //如果空具在门后
       (y3==y1&abs(x3-x1)==1))       //判断标准就是一个坐标相同,一个相差1
      {printf("家具不能在门后\n");   //显示位置错误提示 
       continue;}
    break;}while(1);                 //如果没不符条件,退出循环
 for(i=0;i<w;i++)                    //用一个双重循环输出房门图形
    {for(j=0;j<l;j++)
        {if(j==x1&i==y1)             //如果该位置是门
           {printf(" ");             //输出空格
            continue;}               //进入下一轮循环
         if(j==x2&i==y2)             //如果该位置是窗
           {if(j==0||j==l-1)         //如果窗在垂直的墙上
               printf("|");          //则输出|
            else printf("-");        //否则输出-
            continue;}               //进入下一轮循环
         if(j==x3&i==y3)             //如果该位置是家具
           {printf("*");             //输出*
            continue;}               //进入下一轮循环
         if(j==0||i==0||
            j==l-1||i==w-1)          //如果该位置是墙
           {printf("#");             //显示#
            continue;}               //进入下一轮循环
         printf(" ");}               //如果都不是,则输出空格
     printf("\n");}                  //换行
            
 system("PAUSE");                    //暂停屏幕,以看清结果
 return 0;}                          //结束程序

【运行结果】

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式