C 语言程序设计课程设计专 业: 轨道交通信号与控制 班 级: 信号 1402 姓 名: 牛志强 学 号: 202509217 指导老师: 张振海 兰州交通大学自动化与电气工程学院评语:考勤(10)纪律(10)过程(40)设计报告(30) 答辩(10)总成绩(100)2025 年 7 月 22 日一、基础题1、题目 有 17 个人围成一圈,从 0 号的人开始报数,凡报到 3 的倍数的人离开圈子,然后再数下去
直到最后只剩下一个人为止
问此人原来的位置是多少号
2、解题分析 利用结构体数组中加入指针构成循环链模拟进行报数,并加入标志,表示此人是否离开游戏
游戏开始,报数等于三的倍数的人离开,直到淘汰 16 个玩家为止,则剩余一人为胜利者,输出该游戏者的结构体数组位置即是此人原来的位置
3、流程图图 1 基础题流程图4、源程序#includestruct Sign{int no_out;//出局标志int nextp;//指针指向下一个元素,形成圈形链表}sign[17];main(){printf("有 17 个人围成一圈,从 0 号的人开始报数,凡报到 3 的倍数的人离开圈子,然后再数下去
直到最后只剩下一个人为止
问此人原来的位置是多少号
\n");int i, j, k,l;for (i = 0; i < 17; i++)//循环链表赋初值{sign[i]
no_out = 1;sign[i]
nextp = i + 1;}sign[16]
nextp = 0;printf("初始队列情况(Y 代表存在,N 代表出局):");for (i = 0; i < 17; i++)printf("%c%c", sign[i]
no_out
'Y' : 'N',(i+1)%17
'\0':'\n&#