- 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)