用C++语言写程序
3.室内平面图设计程序1)用户输入房间的长度和宽度,门、窗、家具的位置。放置规则:窗户和门必须在墙上且不能再拐角,窗户不能紧靠门,家具必须在室内且不能堵门。不合规则要提示...
3.室内平面图设计程序
1)用户输入房间的长度和宽度,门、窗、家具的位置。放置规则:窗户和门必须在墙上且不能再拐角,窗户不能紧靠门,家具必须在室内且不能堵门。不合规则要提示重新输入;
2)根据上述参数绘制房间图样,墙用'#'表示,门用空格表示,窗户用'|'或'-'表示(前者在竖墙上,后者在横墙上),家具用'*'表示。
###-######
# #
#
# #
# * #
# #
##########
这是一个10x7的房间,左上角坐标为(0,0),门在(9,2),窗在(3,0),家具在(2,4) 展开
1)用户输入房间的长度和宽度,门、窗、家具的位置。放置规则:窗户和门必须在墙上且不能再拐角,窗户不能紧靠门,家具必须在室内且不能堵门。不合规则要提示重新输入;
2)根据上述参数绘制房间图样,墙用'#'表示,门用空格表示,窗户用'|'或'-'表示(前者在竖墙上,后者在横墙上),家具用'*'表示。
###-######
# #
#
# #
# * #
# #
##########
这是一个10x7的房间,左上角坐标为(0,0),门在(9,2),窗在(3,0),家具在(2,4) 展开
1个回答
展开全部
【解题思路】这题的关键在判断房间的长宽,以及门、窗、墙和家具位置的合理性。这些东西确定下来之后,那剩下的输出就显示容易多了:用一个双重循环一个坐标一个坐标的输出,如果是墙就输#,如果是窗就输出|或-,如果是门就输出空格,如果是家具就输出*,什么都不是就输出空格。怎么来判断各个数据的合理性呢?
房间的长宽:题目虽然没做硬性的要求,但为了不太挤,我想房间的长和宽至少都不能少于4,如果少于4,则家具的位置很容易就没地方摆了。而为了不在输出的时候出现自动换行,宽度和长度也不宜太大,所以要做个合理的限制。
门的位置,首先是不能在四个拐角,假如房间的长和宽分别是 l 和 w ,那四个拐角分别就是(0,0)、(l,0)、(0,w)、(l,w),这是必须排除的,别个门必须在墙上,墙上坐标的特点就是要么x或y有一个等于0,要么x或y有一个等于房间的长或宽。
窗除了不能在拐角,也不能不在墙上,还要不能和门重复。
家具的坐标必须是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;} //结束程序
【运行结果】
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询