中易网

C语言 运动会分数统计

答案:3  悬赏:10  
解决时间 2021-04-28 00:06
  • 提问者网友:离殇似水流年飞逝
  • 2021-04-27 16:20
任务:参加运动会有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以内的整数(如果做得更好可以输入学校的名称,运动项目的名称)
输出形式:有中文提示,各学校分数为整形
界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。
存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。(数据文件的数据读写方法等相关内容在c语言程序设计的书上,请自学解决)请在最后的上交资料中指明你用到的存储结构;
测试数据:要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明
最终需要的东西;1;问题分析.
2;程序框图或算法
3 程序代码
4 程序调试分析和结果(要求运动会的相关数据要存储在数据文件中,指明你用到的存储结构.)
上面的东西少一样也没有分~~~
做完后发到邮箱中;[email protected]

最终需要的东西;
1;问题分析.
2;程序框图或算法
3 程序代码
4 程序调试分析和结果(要求运动会的相关数据要存储在数据文件中,指明你用到的存储结构.)
上面的东西少一样也没有分~~~ 做好后有追加分
做完后发到邮箱中;[email protected]
最佳答案
  • 二级知识专家网友:虚伪的现实
  • 2021-04-27 16:42
#include
#include
#include
#include
#define NULL 0
#define MaxSize 30

typedef struct athletestruct
{
char name[20];
int score;
int range;
int item;
}ATH;
typedef struct schoolstruct
{
int count;
int serial;
int menscore;
int womenscore;
int totalscore;
ATH athlete[MaxSize];
struct schoolstruct *next;
}SCH;

int nsc,msp,wsp;
int ntsp;
int i,j;
int overgame;
int serial,range;
int n;
SCH *head,*pfirst,*psecond;
int *phead=NULL,*pafirst=NULL,*pasecond=NULL;

input ()
{
char answer;
head = (SCH *)malloc(sizeof(SCH));
head->next = NULL;
pfirst = head;
answer = 'y';
while ( answer == 'y' )
{
Is_Game_DoMain:
printf("\nGET Top 5 when odd\nGET Top 3 when even");
printf("\n输入运动项目序号 (x<=%d):",ntsp);
scanf("%d",pafirst);
overgame = *pafirst;
if ( pafirst != phead )
{
for ( pasecond = phead ; pasecond < pafirst ; pasecond ++ )
{
if ( overgame == *pasecond )
{
printf("\n这个项目已经存在请选择其他的数字\n");
goto Is_Game_DoMain;
}
}
}
pafirst = pafirst + 1;
if ( overgame > ntsp )
{
printf("\n项目不存在");
printf("\n请重新输入");
goto Is_Game_DoMain;
}
switch ( overgame%2 )
{
case 0: n = 3;break;
case 1: n = 5;break;
}
for ( i = 1 ; i <= n ; i++ )
{
Is_Serial_DoMain:
printf("\n输入序号 of the NO.%d (0
scanf("%d",&serial);
if ( serial > nsc )
{
printf("\n超过学校数目,请重新输入");
goto Is_Serial_DoMain;
}
if ( head->next == NULL )
{
create();
}
psecond = head->next ;
while ( psecond != NULL )
{
if ( psecond->serial == serial )
{
pfirst = psecond;
pfirst->count = pfirst->count + 1;
goto Store_Data;
}
else
{
psecond = psecond->next;
}
}
create();
Store_Data:

pfirst->athlete[pfirst->count].item = overgame;
pfirst->athlete[pfirst->count].range = i;
pfirst->serial = serial; ("Input name:) : ");

scanf("%s",pfirst->athlete[pfirst->count].name);
}
printf("\n继续输入运动项目(y&n)?");
answer = getch();
printf("\n");
}
}

calculate()
{
pfirst = head->next;
while ( pfirst->next != NULL )
{
for (i=1;i<=pfirst->count;i++)
{
if ( pfirst->athlete[i].item % 2 == 0 )
{
switch (pfirst->athlete[i].range)
{
case 1:pfirst->athlete[i].score = 5;break;
case 2:pfirst->athlete[i].score = 3;break;
case 3:pfirst->athlete[i].score = 2;break;
}
}
else
{
switch (pfirst->athlete[i].range)
{
case 1:pfirst->athlete[i].score = 7;break;
case 2:pfirst->athlete[i].score = 5;break;
case 3:pfirst->athlete[i].score = 3;break;
case 4:pfirst->athlete[i].score = 2;break;
case 5:pfirst->athlete[i].score = 1;break;
}
}
if ( pfirst->athlete[i].item <=msp )
{
pfirst->menscore = pfirst->menscore + pfirst->athlete[i].score;
}
else
{
pfirst->womenscore = pfirst->womenscore + pfirst->athlete[i].score;
}
}
pfirst->totalscore = pfirst->menscore + pfirst->womenscore;
pfirst = pfirst->next;
}
}

output()
{
pfirst = head->next;
psecond = head->next;
while ( pfirst->next != NULL )
{
clrscr();
printf("\n第%d号学校的结果成绩:",pfirst->serial);
printf("\n\n项目的数目\t学校的名字\t分数");
for (i=1;i<=ntsp;i++)
{
for (j=1;j<=pfirst->count;j++)
{
if ( pfirst->athlete[j].item == i )
{

printf("\n %d\t\t\t\t\t\t%s\n %d",i,pfirst->athlete[j].name,pfirst->athlete[j].score);break;

}
}
}
printf("\n\n\n\t\t\t\t\t\t按任意建 进入下一页");
getch();
pfirst = pfirst->next;
}
clrscr();
printf("\n运动会结果:\n\n学校编号\t男运动员成绩\t女运动员成绩\t总分");
pfirst = head->next;
while ( pfirst->next != NULL )
{
printf("\n %d\t\t %d\t\t %d\t\t %d",pfirst->serial,pfirst->menscore,pfirst->womenscore,pfirst->totalscore);
pfirst = pfirst->next;
}
printf("\n\n\n\t\t\t\t\t\t\t按任意建结束");
getch();
}

create()
{

pfirst = (struct schoolstruct *)malloc(sizeof(struct schoolstruct));
pfirst->next = head->next ;
head->next = pfirst ;

pfirst->count = 1;
pfirst->menscore = 0;
pfirst->womenscore = 0;
pfirst->totalscore = 0;
}
void Save()
{FILE *fp;
if((fp = fopen("school.dat","wb"))==NULL)
{printf("can't open school.dat\n");
fclose(fp);
return;
}
fwrite(pfirst,sizeof(SCH),10,fp);
fclose(fp);
printf("文件已经成功保存\n");
}

main()
{
system("cls");
printf("\n\t\t\t 运动会分数统计\n");
printf("输入学校数目 (x>= 5):");
scanf("%d",&nsc);
printf("输入男选手的项目(x<=20):");
scanf("%d",&msp);
printf("输入女选手项目(<=20):");
scanf("%d",&wsp);
ntsp = msp + wsp;

phead = calloc(ntsp,sizeof(int));
pafirst = phead;
pasecond = phead;
input();
calculate();
output();
Save();
}
全部回答
  • 1楼网友:余生继续浪
  • 2021-04-27 18:28
#include #include 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 = 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--; } }
  • 2楼网友:许你一世温柔
  • 2021-04-27 17:52
不错,我会把题弄回家试试的. 你要等我,等我哦,我一定会回来的. Ka~~~ 导演,我的二分是不是到手了? (TT)p 开心一下,有机会大家研究研究.
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息