资源描述:
《C语言程序设计作业模板2》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、《程序设计基础(C语言)》课程设计学院:班级:学号:姓名:日期:2012年7月课程设计要求:1.本课程设计作为《程序设计基础(C语言)》的期末考查,占学期总成绩的70%。2.本课程设计的题目由学生自选。3.知识点要求包括:(1)文件常用操作(打开,读/写数据,关闭等);(2)选择结构;(3)循环结构;(4)自定义函数;(5)数组的使用;(6)指针的定义与引用;(7)在相应的代码处注释出以上知识点;4.课程设计的主体包括题目名称,算法分析,流程设计,代码设计及运行结果。《C语言程序设计》题目名称:约瑟夫环问题算法分析:需求分析1问题描述任务:编号是1,2,……,n
2、的n个人按照顺时针方向围坐一圈,每个人只有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个开始顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。设计一个程序来求出出列顺序。2.功能要求:利用单向循环链表存储结构模拟此过程,按照出列的顺序输出各个人的编号。3.测试数据m的初值设为20,n=7;对应密码依次是:3,2,6,4,5,9,8;正确的出列顺序为6243157概要设计首先,设计实现约瑟夫环问题的存储结构。由于约瑟夫环问题本身具有循
3、环性质,考虑采用循环链表。将循环链表的结点定义为如下结构类型:structnode{//定义一个结构体(结点),其中包含一个数据域和一个指针域intnum;intpw;structnode*next;};流程设计:-6-《C语言程序设计》核心思想:构造一个空链表,成功则初始化个人信息。为每个人编号。每个人的密码。任选一个数M,约瑟夫环开始。M出列,释放节点。M的密码作为新密码继续约瑟夫环。知道所有人出列,结束。释放节点。代码设计:#include#includestructnode{//定义一个结构体(结点),其中包含一个数
4、据域和一个指针域intnum;intpw;structnode*next;};structnode*head;voidmain()//进入主函数{Haha();//调用无用的外部函数,作业要求……汗!!!!!!system("color1e");printf("信息与电气工程学院郝立勇");printf("***系统说明:编号是1,2,……,n的n个人按照顺时针");printf("***方向围坐一圈,每个人只有一个密码(正整数)。");printf("一开始任选一个***正整数作为报数上限值m,从第一个仍开始顺时针方向自1开***始
5、顺序报数,");printf("报到m时停止报数。报m的人出列,将他的密码作为新的***m值,从他在顺时针方向的下");printf("一个人开始重新从1报数,如此下去,***直到所有人全部出列为止。");printf("此程序用来求出出列顺序。");intn,i,b,m,j;head=(structnode*)malloc(sizeof(structnode));//申请一个空间(头结点head)structnode*p,*q;//定义两个可以指向结点的指针printf("请输入总人数:");-6-《C语言程序设计》scanf("%d",&n)
6、;q=head;for(j=1;j<=n;j++){printf("请输入第%d号同学的密码:",j);scanf("%d",&b);printf("");q->next=(structnode*)malloc(sizeof(structnode));q=q->next;q->pw=b;q->num=j;}q->next=head->next;printf("请任意输入一个正整数m:");loop:scanf("%d",&m);if(m<=0){printf("输入错误(只能是正整数),请重新输入:");gotoloop;}printf("**出列顺
7、序为:");printf("序号对应密码");while(q->next!=q){for(i=1;inext;p=q->next;q->next=p->next;printf("%d%d",p->num,p->pw);m=p->pw;free(p);}printf("%d%d",q->num,q->pw);//输出最后一个结点free(q);//释放最后一个结点free(head);//释放头结点printf("******约瑟夫环结束,欢迎下次光临~·~**
8、***");}Voi