** 大学数据结构课程设计报告题目:纸牌游戏院(系):计算机工程学院学生姓名 : 班级:学号 :起迄日期 : 2011.6.21---2011.7.1 指导教师 : 2010— 2011 年度 第 2 学期一、需求分析1. 问题描述 :随机产生 52 个数按照某一规则计算正面牌数。编号为1-52 张牌,正面向上,从第2 张开始,以 2 为基数,是2 的倍数的牌翻一次,直到最后一张牌;然后,从第3 张开始,以3为基数,是3 的倍数的牌翻一次,直到最后一张牌;然后⋯从第 4 张开始,以4 为基数,是 4 的倍数的牌翻一次,直到最后一张牌;...再依次 5 的倍数的牌翻一次,6 的, 7 的 直到 以 52 为基数的翻过,输出:这时正面向上的牌有哪些。 2.基本功能:选择纸牌是顺序排序还是随机排序随机,1 为随机排序,其他数字为顺序排序,输入一个数使程序运行,随机产生52 张纸牌,运行之后输出正面向上的牌。之后输入1 重新运行,输入其他数字回车停止3. 输入输出:1)输入一个数字选择是使用顺序放牌还是随机放牌,1 为随机放牌,其他数字为顺序放牌,输入一个正整数种子值,程序运行,输出52 张纸牌的排列顺序,列出纸牌序列,输出正面向上的牌,进入选择语句,是否再玩一局,输入1,程序从新运行,输入其他,程序运行结束。二、 概要设计1. 设计思路:当每个号码每次遇到是某个数的倍数的时候,都会相应的翻一次牌,这样,每张牌翻得次数就个不一样,可能很多次, 也可能只有一两次,结果就只是要输出在经过各个不同次数的反派后,正面向上的牌都有哪几个。例如 24,第一次他是2 的倍数时要从背面翻到背面,当进行到3 时,又要从背面返回来。如果他在多次翻拍后,正面还向上了,那么他就是要输出的结果之一。// 操作函数void operate(void) { rcard rc; int i,j; rc=Random();//获得纸牌不同排序方式 //翻面游戏 for(j=2;j<=NUM;j++) //j为基数,也是开始翻面的位置 { for(i=j;i<=NUM;i++)//i为纸牌位置 { if(rc.c[i-1].info%j==0) rc.c[i-1].state=rc.c[i-1].state?0:1; } } 2. 基本算法:算法的主要流程为:选择所需纸牌是随机还是顺序—>建立代表52 张牌的链表—>链表可以选择顺序链表和随机链表->输出这52 张牌—>调用翻牌算法按照规则进行翻牌->输出翻牌算法之后的结果->选择是否从新开始。3. 数据结构设计:实体: card[] 其中的特征为int info, int postion ,int state 实体: rcard[]...