- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
“程序设计(Ⅱ)”综合编程实验报告
( 2012 - 2013 学年第 2 学期)
实验项目名称: 值班安排
一、实验内容与要求
医院有A、B、C、D、E、F、G 7位大夫,在一星期内(星期一至星期天)每人要轮流值班一天,如果已知:
(1)A大夫比C大夫晚1天值班;
(2)D大夫比E大夫晚1天值班;
(3)E大夫比B大夫早2天值班
(4)B大夫比G大夫早4天值班;
(5)F大夫比B大夫晚1天值班;
(6)F大夫比C大夫早1天值班;
(7)F大夫星期四值班。
就可以确定周一至周日的值班人员分别为:E、D、B、F、C、A、G。
编写程序,根据输入的条件,输出星期一至星期天的值班人员。
输入数据时,先输入一个整数n,再输入n组条件,要求能够根据输入的条件确定唯一的值班表,且输入的n组条件中能够直接或间接得到任意两位大夫的关联关系,例如上面的条件(2)直接显示了D与E间的关系,而通过条件(1)、(6)、(5)可以间接得到A与B的关系。
条件的输入格式有2种:
格式1:编号 比较运算符 编号 天数
其中比较运算符有2种: 或 ,分别表示“早”或“晚”
例如:AC1 表示:A大夫比C大夫晚1天值班
格式2:编号 = 数值
例如:F=4 表示:F大夫在星期四值班
输入输出示例
7
AC1
DE1
EB2
BG4
FB1
FC1
F=4
EDBFCAG
二、系统设计
1、解题思路
通过寻找有等号的条件,确定其医生的位置,然后把这个医生及其位置作为已知的结点,寻找与该医生有关的条件,确定另一位医生的位置,并把该位医生作为结点,继续寻找,以此递归。
2、数据结构描述
可以定义一个二维字符数组保存条件数据,大小为10*20,但从a[1]开始存放,以便与输入数据(位置值)匹配,另外用a[][0]来标记条件,还有定义为全局变量,因为函数里要用到。
3、程序框架结构
定义全局字符数组s[30]来存放排好序的医生的位置。
定义 void func(char node,int ka);
4、关键算法描述
(1)初始化用来存放顺序的数组为0
for(i=0;i=29;i++)//初始化用来存放顺序的数组为0
s[i]=0;
(2)存放测试数据的条件及标记这些条件
for(i=1;i=n;i++)//存放测试数据的条件及标记这些条件
{
a[i][0]=0;
scanf(%s,a[i][1]);
}
(3)寻找条件中有等于号的,确定该位医生的值班时间,并通过该位医生 确定其他与这位医生有关医生的值班时间
for(i=1;i=n;i++)//寻找条件中有等于号的,确定该位医生的值班时间, //并通过该位医生确定其他与这位医生有关医生的值班时间
{
if(a[i][2]===)
{
ka=a[i][3]-0;
s[ka]=a[i][1];
node=a[i][1];
a[i][0]=1;//把已确定时间的条件标记为1,避免再次确定位置(避免重复搜索该条件)
func(node,ka);//调用函数,确定与该医生有关系的医生的值班时间
}
}
(4) 考虑有些条件没有等于号,且还未确定值班时间的医生,通过假设该医生的位置,同时确定与该医生有关的医生值班时间
for(i=1;i=n;i++)//考虑有些条件没有等于号,且还未确定值班时间的医生,通过假设该医生的位置,同时确定与该医生有关的医生值班时间
{
if(a[i][0]==0)//判断是否被标记过
{
node=a[i][1];
s[20]=node;//假设该医生的时间是在20
ka=20;//记录该医生的位置
func(node,ka);//同过函数,确定与该医生有关的医生与该医生的相对位置
}
}
(5) 星期一到星期五是否都有医生值班
for(i=1;i=7;i++)//判断星期一到星期五是否都有医生值班
if(s[i]==0)
{
aa=i;
flag=1;//如果哪一天没人值班,记下那一天的时间并把flag标记为1;
break;
}
(6) 通过假设的位置,填充到数组的相应位置
if(flag==1)//通过假设的位置,填充到数组的相应位置
{
for(i=10;i=29;i++)
if(s[i]!=0)
{
ab=i;
break;
}
for(i=aa;i=7;i++)
{
if(s[i]==0)
s[i]=s[ab-aa+i];
}
您可能关注的文档
最近下载
- 一种具有调节皮肤微生态作用的多糖组合物及其制备方法与应用.pdf VIP
- 一种道路交通视频中敏感信息自动脱敏处理方法及系统.pdf VIP
- 面向对象的系统分析与设计.docx
- 广播电视编导-媒介融合背景下地方传统媒体的转型发展策略.docx
- 一种皮肤屏障修护和细胞修复抗皱组合物及其制备方法.pdf VIP
- 人教部编版七年级下册语文精品课件 第三单元 大概念引领下的大单元复习 (6).ppt VIP
- 一种抗敏消炎纳米组合物及其制备方法和应用.pdf VIP
- 2025北京市地铁运营有限公司公开选拔中层副职领导人员笔试参考题库附带答案详解.docx
- 一种靶向线粒体的自组装硒肽纳米材料及其制备方法和应用.pdf VIP
- 关于大学校园二手交易市场的调查分析.doc VIP
文档评论(0)