程序设计题目:舞伴配对问题

程序设计题目:舞伴配对问题

1、问题描述

一班有 m 个女生、n 个男生(m 不等于 n), 举办一场舞会。男女生分别编号坐在舞 池两边的椅子上,每曲开始时, 依次从男生和女生中各出一人配对跳舞, 本曲没成功配对者坐着等待下一曲找舞伴,设计一个程序模拟舞伴配对过程。

基本要求:输入男、女学生的姓名、性别,由程序自动为男女生编号,输出每曲配对情况(包括男、女生的姓名、性别和编号),并能够处理异常情况, 如文件为空、只有男生或只有女生等情况。原始数据和结果数据必须保存到文件中。

提高要求:计算出任意一位男生(编号为 X)和任意一位女生(编号为 Y), 在第 K 曲配对跳舞的情况。

 2.需求分析

程序的基本功能:

  1. 输入男、女学生的姓名、性别,由程序自动为男女生编号
  2. 输出每曲配对情况(包括男、女生的姓名、性别和编号)
  3. 能够处理异常情况, 如文件为空、只有男生或只有女生等情况
  4. 原始数据和结果数据必须保存到文件中

输入/输出形式:用户可以通过控制台,根据输入提示。

输入形式:

①输入参加舞会人员的姓名和性别。

②输入所要知道匹配情况的目标曲目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讨论结果:

解决办法:对文件操作进行深入学习,最终找到格式化读写最适合本程序。

注:点赞,转发,关注博主获取程序源代码。

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值