软件课程设计第四阶段实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
编号:()字号
《软件课程设计》报告
班级:信科10--2
姓名:潘寿岭
学号: 08103502
指导老师:王志晓
2012年01 月
第四阶段
六、数据结构设计题4
6.1需求分析
1、设计一个统计选票的算法,输出每个候选人的得票结果
2、假设采用单链表存放选票,候选人编号依次为1,2,3,……,N,且每张选票选且只选一人
3、以单链表存放选票,每个结点的data域存放该选票所选的候选人。用一个数组a统计得票结果。
6.2概要设计
用函数CreateList ( )动态建立一个单链表,链表中每个节点的data域为空,返回头节点。Statistics( )函数统计各个后选人所得票数。
在主函数中先输入候选人数n,然后动态建立一维数组a[n]来存放每个候选人所得票数(如a[i]表示第i+1号候选人所得票数),统计选票时调用Statistics( )函数,将整个单链表全部遍历一遍,将各个候选人的得票个数计入到数组a[n]中,最后输出各个候选人的得票情况。
6.3详细设计与编码
流程图
程序代码
#include
using namespace std;
typedef struct node
{
int data;
struct node *next;
}LNode;
int n;
LNode *CreateList() //构建单链表,每投一票插入一个节点,节点data域存放所选的候选人号码
{
LNode *L,*p,*t;
int m,i;
L=new LNode;
L->next=NULL;
L->data=NULL; //头结点data域中为空
t=L;
cout<<"输入投选票的张数:";
cin>>m;
cout<<"请投选票:"< for(i=0;i { p=new LNode; cout<<"请输入要投第几号候选人:"; cin>>p->data; p->next=NULL; t->next=p; t=p; } return L; //返回头结点 } void Statistics(LNode *L,int *a) //统计投票情况 { LNode *p; p=L->next; while(p!=NULL) { a[p->data-1]++; //a[i]中存放第i+1号候选人的得票个数 p=p->next; } } void main() { int i; LNode *L; cout<<"请输入候选人人数:"; cin>>n; int *a=new int[n]; //动态建立数组,用来存放候选人得票个数 for(i=0;i a[i]=0; L=CreateList(); //构建单链表,返回头结点 Statistics(L,a); //统计投票情况 for(i=0;i cout<<"第"< } 运行结果 6.4调试分析 由于候选人数不确定,所以要根据输入的候选人人数动态建立数组来存放得票情况。在动态建立单链表的过程中系统出现过内存分配错误的问题,所以在建立链表时要保证尾节点的指针域始终为空,另设一个指针始终指向插入的节点,为下一个节点的插入做准备。创建单链表的函数返回头节点的地址,所以函数类型为指针类型。 6.5用户使用说明 用户进入界面后,先输入候选人数,在输入要投票数,接着开始投票,每输入一个号码后按回车,最终得到投票结果。 6.6设计心得 本题是一道简单的数据结构链表创建和遍历问题。通过本题的练习和思考,使我了解和掌握了单链表和循环链表的创建以及创建链表时应该注意的问题,了解了链表在解决一些问题时的优越性。 七、数据结构设计题9 7.1需求分析 1、从一副扑克牌(54张)中任意抽出27张(不重复),摆放在不同的三行上(每行9张),用户“暗记”某张纸牌,输入所“暗记”的那张纸牌处于哪一行。 2、之后计算机再两次将纸牌重新摆放,并让用户再回答两次相同的提问(那张纸牌在重新摆放后又处在哪一行上)。 3将用户所“暗记”的那张纸牌给挑出来,显示到屏幕上。 7.2概要设计 定义一个结构体pk,pk中存放扑克牌的数码和花色;成员函数有display( ),用来输出扑克牌的布局;int_char1( )函数用来将随机生成的整数转化为扑克牌的数码;int_char2 ( )函数用来将随机生成的整数转化为扑克牌的花色;move ( )函数用来重新摆放扑克牌,整数 1—15对应的扑克牌数码依此为A 1 2 3 4 5 6 7 8 9 10 J Q K X Z,整数1—4对应扑克牌花色依此为a b c d (红桃、黑桃、梅花、方块)。 在主函数中定义结构体数组p[27]用来存放取出的27张牌的数码和花色。先自动生成一张牌,之后每生成一张牌都要与前几张生成的牌进行比较,如果相同均要重新生成,直至生成27张不同的扑克牌为止;然后分三行显示这27张牌。之后调用move ( )函数,用户暗记一张牌并输入改牌所在的行数,然后计算机根据用户输入的行数决定重新洗牌的方式,洗完牌后将重新摆放的扑克牌布局显示到屏幕上,用户继续输入所记扑克牌的行数,计算机第二次将牌重新摆放,输出摆放的布局,用户再次回答提问,最终计算机将用户暗记的牌挑出来显示到屏幕上。 7.3详细设计与编码 流程图