logo资料库

数据结构-约瑟夫环实验报告-C语言.doc

第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
资料共5页,全文预览结束
数据结构 实习报告 题目:1.2 约瑟夫环 一.需求分析 1.设有编号为 1,2,…,n 的 n(n)0)个人按顺时针方向围坐成一圈。从第一个人开 始顺时针报数,报到 m 的人(m 为正整数),令其出列。然后再从下一个开始,重新从 1 顺 时针报数,如此下去,直至所有人全部出列为止。程序依次输出列人的编号顺序。 2.演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“提示信息”之 后,由用户在键盘上输入演示程序中规定的运算命令;相应的输入数据和在运算结果显示 在其后。 3.测试数据 M 的初值为 20; N=7,7 个人的密码依次为:3,1,7,2,4,8,4 出列顺序为 6,1,4,7,2,3,5 二.概要设计 本程序包含了四个模块,分别为主函数 main 函数,子函数 outlist,enterpwd, Createlinklist 。 三.详细设计 1.链表存储类型
typedef struct LNode { int num;//定义人编号变量 int pwd;//定义密码变量 struct LNode *next; }LNode; 2.主函数和其它函数 void main() { int m,n;//m 为报数上限,n 为围圈人数 printf("=============约瑟夫环==============\n"); printf("\n 请输入 m,n:"); scanf("%d %d",&m,&n); if(n<=0 || m<0) { printf("\n\n\t\t 输入出错!最后一次重新输入机会~\n\n\n"); printf("请重新输入 m,n:"); scanf("%d %d",&m,&n); if(n<=0 || m<0) { printf("\n\n\t\t 输入出错!请退出!\n\n"); printf("\n\n\t"); } else { Createlinklist(n);//调用链表函数 enterpwd(n);//调用密码输入函数 printf("\n 围圈人的出列顺序依次是:\t"); outlist(m,n);//调用输出函数 printf("\n\n\t"); } } else { Createlinklist(n);//调用链表函数 enterpwd(n);//调用密码输入函数 printf("\n 出队的人依次是:"); outlist(m,n);//调用输出函数 printf("\n\n\t"); } } //建立循环链表函数,并传递 n int Createlinklist(int n) {
int i; head=( LNode*)malloc(sizeof(LNode)); if(!head) return Error; p=head; for(i=2;i<=n;i++) { pt= (LNode *)malloc(sizeof (LNode)); if(!pt) return Error; p->next=pt; p=pt; } p->next=head; pt=head; return True; } //建立输入密码函数 int enterpwd(int n) { int i,j; printf("\n 请输入密码:"); for(i=1;i<=n;i++) { scanf("%d",&j); pt->num=i; pt->pwd=j; pt=pt->next; } pt=p; return j; } //建立输出函数 int outlist(int m,int n) { int i; int a; for(i=1;i<=n;i++) { for(a=1;anext; } p=pt->next; m=p->pwd;
printf(" %d",p->num); pt->next=pt->next->next; free(p); } return 0; } 四.调试分析 1.最先没有对超出范围的 m、n 做相应的处理,使得输入错误后仍然继续运行。 添加了 if 语句判断处理; 2.for 循环中的初始值没取正确,以致运行结果出来以致不正确。改正 i 初始值 为 1; 3. 4.未注意题中要求的 m 值在变化,导致漏泄密码函数。添加了密码函数,切在 主函数中调用了密码函数。 五.用户手册 1.本程序的运行环境为 DOS 操作系统,执行文件是 fanshi4.exe. 2.进入演示程序后即显示文本方式的用户界面: 键入 M,N 值(按回车结束输入),界面显示为: 键入密码后按回车,界面会显示出序顺序,界面显示为:
六.测试结果 1. 输入 M, N 值:20 7 输入对应密码:3,1,7,2,4,8,4 出列顺序:6,1,4,7,2,3,5 七.附录 源程序文件名清单: stdio.H malloc.H fnshi4.C // 主程序
分享到:
收藏