程序设计题目:舞伴配对问题
1、问题描述
一班有 m 个女生、n 个男生(m 不等于 n), 举办一场舞会。男女生分别编号坐在舞 池两边的椅子上,每曲开始时, 依次从男生和女生中各出一人配对跳舞, 本曲没成功配对者坐着等待下一曲找舞伴,设计一个程序模拟舞伴配对过程。
基本要求:输入男、女学生的姓名、性别,由程序自动为男女生编号,输出每曲配对情况(包括男、女生的姓名、性别和编号),并能够处理异常情况, 如文件为空、只有男生或只有女生等情况。原始数据和结果数据必须保存到文件中。
提高要求:计算出任意一位男生(编号为 X)和任意一位女生(编号为 Y), 在第 K 曲配对跳舞的情况。
2.需求分析
程序的基本功能:
- 输入男、女学生的姓名、性别,由程序自动为男女生编号
- 输出每曲配对情况(包括男、女生的姓名、性别和编号)
- 能够处理异常情况, 如文件为空、只有男生或只有女生等情况
- 原始数据和结果数据必须保存到文件中
输入/输出形式:用户可以通过控制台,根据输入提示。
输入形式:
①输入参加舞会人员的姓名和性别。
②输入所要知道匹配情况的目标曲目k。
输出形式:
①输出男女舞伴的匹配情况
②输出目标曲目k的匹配情况
测试数据要求:分别选择男生多于女生、女生多于男生、男女生相等的三组测试数据。
3.概要设计
(1)抽象数据类型:
根据题目的要求,考虑用队列比较适合。
ADT cirqueue
Data
队列中元素具有相同类型及先进先出特性
Operation
cirqueue
前置条件:队列不存在
输入:无
功能:队列的初始化
输出:无
后置条件:构造一个空队列
~ cirqueue
前置条件:队列已存在
输入:无
功能:销毁队列
输出:无
后置条件:释放队列所占用的存储空间
enter
前置条件:队列已存在
输入:元素值x
功能:在队尾插入一个元素x
输出:如果插入不成功,抛出异常
后置条件:如果插入成功,队尾增加了一个元素
del
前置条件:队列已存在
输入:无
功能:删除队首元素
输出:如果删除成功,返回被删元素值,否则,抛出异常
后置条件:如果删除成功,队首减少了一个元素
get
前置条件:队列已存在
输入:无
功能:读取当前的队首元素
输出:若队列不空,返回当前的队首元素值
后置条件:队列不变
empty
前置条件:队列已存在
输入:无
功能:判断队列是否为空
输出:如果队列为空,返回1;否则,返回0
后置条件:队列不变
End ADT
(2)主程序流程:
图1:主程序流程图
(3)模块调用关系:
本程序中函数包括:main函数,DancerMach函数,DancerMach_K函数,文件操作相关函数和队列操作等相关函数
DancerMach函数:进行男女分队,并匹配舞伴。
DancerMach_K函数:计算出任意一位男生和任意一位女生在第 K 曲配对跳 舞的情况。
文件操作相关函数:进行文件保存和读取。
队列操作等相关函数:创建队列并对队列进行相应操作。
函数调用关系如下:
图2:函数调用关系
4.团队合作
(1)讨论问题:
程序无法进行文件存储与读取操作。
(2)讨论结果:
解决办法:对文件操作进行深入学习,最终找到格式化读写最适合本程序。