实习一约瑟夫环.docVIP

  • 3
  • 0
  • 约1.13万字
  • 约 26页
  • 2018-11-29 发布于天津
  • 举报
实习一约瑟夫环

实习一 约瑟夫环 题目:编制一个演示约瑟夫环的程序。 班级:信息与计算科学08-1班 姓名:朱嘎 学号:200801051128 完成日期:2010.9.26 一 需求分析 1.本演示程序中,由用户确定约瑟夫环中的人数,用户按照计算机终端上显示的提示信息来输入各人员密码的同时,程序自动完成环形链表的建立。 2.程序执行的命令包括: 1)构造环形链表;2)按照问题要求依次输出要出列人员的身份号。 3.测试数据: 输入初值密码m=20;n=7,7个人密码依次为:3,1,7,2,4,5,4,首先m值为6,输出顺序为6,1,4,7,2,3,5。 二 概要设计 上述程序以环形链表为基础,创建了结构体student来存储各成员信息。 1.结构体定义为: struct student { int number; int mima; struct student *next; }; 2.操作函数定义为: struct student *creat(int n); 操作结果:构造一个含有n个成员的环形链表,并返回链表的尾指针。 void func(struct student *head,struct student *tail,int n,int m); 操作结果:按问题的要求依次输出要出列人员的身份号。 三 详细设计 #includestdio.h #includemalloc.h struct student//定义结构体 { int number; int mima; struct student *next; }; struct student *creat(int n)//创建环形链表并返回链表尾指针 { struct student *head=NULL,*p1,*p2;int i; for(i=1;i=n;i++) { p1=(struct student *)malloc(sizeof(struct student)); printf(输入第%d个人的密码:,i); scanf(%d,p1-mima); p1-number=i; p1-next=NULL; if(i==1) head=p1; else p2-next=p1; p2=p1; } p1-next=head; return p1; } void func(struct student *head,struct student *tail,int n,int m)//按问题要求依次输出要出列人员 { int i,j; for(i=n;i0;i--) { struct student *L; L=head; for(j=1;jm;j++)//找到报数为m的人员 { L=L-next; tail=tail-next; } printf(%d ,L-number);//输出该出列人员的身份号 m=L-mima; head=L-next; tail-next=head; free(L);//释放指向出列人员的指针 } printf(\n); } void main() { int m,n,i; printf(输入人数:); scanf(%d,n); struct student *p1=creat(n); printf(输入m:); scanf(%d,m); func(p1-next,p1,n,m);//分别将环形链表尾指针、头指针、人数和初始密码传入函数 } 四 调试分析 1.由于对循环链表的建立不熟悉,导致在建立链表时浪费了不少时间。 2.链表返回的是循环链表的尾指针,使寻找链表的头指针变的简便。 3.func()函数传值时将链表的头指针和尾指针传递进去,使程序便于理解,而且使人员的寻找、输出变得简便,同时使相关指针的释放变得简便。 五 用户手册 1.本程序的运行环境为DOS操作系统,执行文件为:约瑟夫环.exe 2.根据界面的提示依次输入合法的数据,敲enter即可显示正确结果。 六 测试结果 输入m=20;n=7,7个人密码依次为:3,1,7,2,4,8,4,输出为: 七 附录 源程序文件名: 约瑟夫环.cpp 实习二 汉诺塔 题目:编制一个演示汉诺塔的程序。 班级:信息与计算科学08-1班 姓名:朱嘎 学号:200801051128 完成日期:2010.10.22 一 需求分析 1.本演示程序中,用户按照计算机终端上显示的提示信息输入圆盘的个数。 2.移动规则: 1)每次只能移动一个圆盘; 2)圆盘可以插在x、y和z中的任一塔座上; 3)任一时刻都不能将一个较大的圆盘压在较小的圆盘之上。 3.测试数据: 输入圆盘

文档评论(0)

1亿VIP精品文档

相关文档