资源描述
实验3(第3周实验指导) 约瑟夫序列
一、实验题目
求解《约瑟夫序列》的问题
二、实验课时
2课时。
三、实验目的
1.掌握“管理信息系统”书本第3章的相关内容
2.学习“单向链表”的数据结构及其有关操作
3.学习编写程序
四、实验内容
1. 学习约瑟夫序列
2. 学习《约瑟夫序列》程序的例子(本例从一号开始报数)
3.作业:编写程序求解以下问题,现有运动会门票要赠与你们班(两个班各有67人,学号从1到67)的10个幸运儿,要求采用约瑟夫序列来抽签,全班以学号顺序排号围坐在一张圆桌周围。从编号为18的人开始顺序报数,数到18的那个人出列;他的下一个人又从1开始报数,数到18的那个人又出列;依此规律重复下去,直到圆桌周围的剩下10个人就是幸运儿。程序有如下要求:
a) 读取你们班名单文本文件的内容,存入一个单向链表,并以学号排序,节点要求保存学号,姓名和性别等信息。
b) 针对这个链表进行以上的问题求解。
c) 程序输出10个幸运儿的学号,姓名,性别
五、实验报告要求
1. 独立完成,作业交电子版
2. 给出程序源代码。
3. 写出10个幸运儿的名字
4. 写实验心得或小结。
程序代码:#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int number;
char info[100]; //将学生的学号,姓名,性别等信息都利用info[]来存储
struct node *next;
}dlnode,*dlink;
struct node *head,*p,*temp1,*temp2;
FILE *fp;
struct node* Creatlist(int num) //创建班级列表
{
int i;
head=(dlnode*)malloc(sizeof(dlnode));
head->number=1;
head->next=head;
p=head;
if((fp=fopen("E:\\Program Files\\class1.txt","rb"))==NULL) //打开存储学生信息的文本class2.txt
{
printf("\nCannot open file strike any key exit!");
exit(1);
}
fgets(head->info,100,fp); //头结点可用于存储标题信息
for(i=1;i<=num;i++)
{
temp1=(dlnode*)malloc(sizeof(dlnode));
temp1->number=i;
fgets(temp1->info,100,fp); //将每个学生的信息导入入相应的info字符数组中,
//每个学生对应一条info[]信息
temp1->next=p->next;
p->next=temp1;
p=temp1;
}
p=head;
printf("班级名单如下:\n");
printf("序号 学号 姓名 性别\n\n");
printf(" %s\n",head->info);
while(p->next!=head)
{
printf(" %s\n",p->next->info);
p=p->next;
}
return head;
}
void drowlots(dlnode *head,int num,int m) //主处理函数
{
int i,j;
p=head;
i=1;
j=num;
while(j!=10)
{
if(i==m&&p->next!=head)
{
temp2=p->next;
printf(" %d \n",temp2->number); //可输出被淘汰的学生的序号
p->next=temp2->next;
free(temp2);
i=1;
j=j-1;
}
else
{
if(p->next==head) i--;
p=p->next;
i++;
}
}
p=head->next;
printf("\n10名幸运儿如下:\n\n");
printf("序号 学号 姓名 性别\n\n");
printf(" %s\n",head->info);
while(p!=head)
{
printf(" %s\n",p->info);
p=p->next;
}
}
void main() //主函数
{
int n,m;
n=67;
head=Creatlist(n);
printf("输入报数的编号:");
scanf("%d",&m);
drowlots(head,n,m);
system("pause");
}
3.实验心得
在本实验中,存在的难点是就是如何导入文件已经如何建立链表,特别是在导入文件的过程中我也遇到了门槛,就是在写导入路径时,WIN7系统只识别英文,汉字和数字是无法识别,比如文档一班.txt在路径D的文件programfiles下是无法读入的,所以应该把文档名一班.txt更改为class1.txt才能被识别!
展开阅读全文