
运动会分数统计(用C语言)
任务:参加运动会有n个学校,学校编号为1……n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1……m,女子m+1……m+w。不同的项目取前五名或前三名积分;取前五...
任务:参加运动会有n个学校,学校编号为1……n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1……m,女子m+1……m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m<=20,n<=20)
功能要求:
1).可以输入各个项目的前三名或前五名的成绩;
2).能统计各学校总分;
3).可以按学校编号、学校总分、男女团体总分排序输出;
4).可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。
规定:输入数据形式和范围:20以内的整数(如果做得更好可以输入学校的名称,运动项目的名称) 展开
功能要求:
1).可以输入各个项目的前三名或前五名的成绩;
2).能统计各学校总分;
3).可以按学校编号、学校总分、男女团体总分排序输出;
4).可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。
规定:输入数据形式和范围:20以内的整数(如果做得更好可以输入学校的名称,运动项目的名称) 展开
1个回答
展开全部
#include <stdio.h>
#include <stdlib.h>
/* 链表结点 */
typedef struct _linknode {
int nIndex;
int nPassword;
struct _linknode* next;
} NODE, *PNODE;
/* 函数声明 */
PNODE CreateLinkList(int* pn);
PNODE AddNode(PNODE pHead, int index);
PNODE DelNode(PNODE pHead, int index, int* pm);
void SimOut(PNODE pHead, int m, int count);
/* 主函数 */
int main(void)
{
int m, n;
PNODE pHead = CreateLinkList(&n);
printf("Please input m: ");
scanf("%d", &m);
SimOut(pHead, m, n);
return 0;
}
/* 创建链表,并返回头结点 */
PNODE CreateLinkList(int* pn)
{
int n, i;
PNODE p, q;
/* 初始化头结点 */
p = (PNODE)malloc(sizeof(NODE));
p->nIndex = -1;
p->nPassword = -1;
p->next = NULL;
/* 取得总人数 */
printf("Please input the number of the peoples: ");
scanf("%d", &n);
*pn = n;
/* 创建其它结点 */
for (i = 0; i < n; i++)
q = AddNode(p, i);
/* 创建约瑟夫环 */
q->next = p->next;
free(p);
return q;
}
/* 添加一个结点,返回其地址 */
PNODE AddNode(PNODE pHead, int index)
{
PNODE p, q;
int i = 0;
/* 定位结点 */
for (p = pHead; p->next != NULL; p = p->next)
if (i++ == index)
break;
/* 创建结点 */
q = (PNODE)malloc(sizeof(NODE));
q->nIndex = index + 1;
printf("Please input person #%d password: ", index + 1);
scanf("%d", &q->nPassword);
p->next = q;
q->next = NULL;
return q;
}
/* 删除结点,并返回前一个结点 */
PNODE DelNode(PNODE pHead, int index, int* pm)
{
PNODE p, q;
int i = -1;
/* 定位结点 */
for (p = pHead ; p != NULL; p = p->next)
if (++i == index)
break;
/* 删除结点 */
q = p->next;
printf("Number %d is out.\n", q->nIndex);
p->next = q->next;
/* pm传回新的m值 */
*pm = q->nPassword;
free(q);
/* 返回前一个结点,以备下次删除之用 */
return p;
}
/* 模拟约瑟夫环的报数过程 */
void SimOut(PNODE pHead, int m, int count)
{
int x = m;
int n = count;
PNODE p = pHead;
while (n > 0)
{
p = DelNode(p, x % n != 0 ? x % n - 1 : n - 1, &x);
n--;
}
}
#include <stdlib.h>
/* 链表结点 */
typedef struct _linknode {
int nIndex;
int nPassword;
struct _linknode* next;
} NODE, *PNODE;
/* 函数声明 */
PNODE CreateLinkList(int* pn);
PNODE AddNode(PNODE pHead, int index);
PNODE DelNode(PNODE pHead, int index, int* pm);
void SimOut(PNODE pHead, int m, int count);
/* 主函数 */
int main(void)
{
int m, n;
PNODE pHead = CreateLinkList(&n);
printf("Please input m: ");
scanf("%d", &m);
SimOut(pHead, m, n);
return 0;
}
/* 创建链表,并返回头结点 */
PNODE CreateLinkList(int* pn)
{
int n, i;
PNODE p, q;
/* 初始化头结点 */
p = (PNODE)malloc(sizeof(NODE));
p->nIndex = -1;
p->nPassword = -1;
p->next = NULL;
/* 取得总人数 */
printf("Please input the number of the peoples: ");
scanf("%d", &n);
*pn = n;
/* 创建其它结点 */
for (i = 0; i < n; i++)
q = AddNode(p, i);
/* 创建约瑟夫环 */
q->next = p->next;
free(p);
return q;
}
/* 添加一个结点,返回其地址 */
PNODE AddNode(PNODE pHead, int index)
{
PNODE p, q;
int i = 0;
/* 定位结点 */
for (p = pHead; p->next != NULL; p = p->next)
if (i++ == index)
break;
/* 创建结点 */
q = (PNODE)malloc(sizeof(NODE));
q->nIndex = index + 1;
printf("Please input person #%d password: ", index + 1);
scanf("%d", &q->nPassword);
p->next = q;
q->next = NULL;
return q;
}
/* 删除结点,并返回前一个结点 */
PNODE DelNode(PNODE pHead, int index, int* pm)
{
PNODE p, q;
int i = -1;
/* 定位结点 */
for (p = pHead ; p != NULL; p = p->next)
if (++i == index)
break;
/* 删除结点 */
q = p->next;
printf("Number %d is out.\n", q->nIndex);
p->next = q->next;
/* pm传回新的m值 */
*pm = q->nPassword;
free(q);
/* 返回前一个结点,以备下次删除之用 */
return p;
}
/* 模拟约瑟夫环的报数过程 */
void SimOut(PNODE pHead, int m, int count)
{
int x = m;
int n = count;
PNODE p = pHead;
while (n > 0)
{
p = DelNode(p, x % n != 0 ? x % n - 1 : n - 1, &x);
n--;
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询