大佬们,救救孩子吧!C语言课程设计,不能用链表和全局变量。很急,就快要验收了。

是小菜 大学生  2020-03-17 10:18:45
足球比赛积分排行榜程序 与要求: 10个足球队进行9轮循环赛,胜一场积3分,平一场积1分,输一场积0分,如果两个队积分相同胜球的比较,如果净胜球再相同进行总进球的比较。编写一程序输入每轮比赛的比分,并可以存储。最后每轮比赛的积分榜。
...全文
471 点赞 收藏 18
写回复
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
luj_1768 2020-03-19
其实是个很有用的练手题,如果把比赛等同于比较、比对,就看出其实用价值了。如果做一个足球比赛的仿真组织规划套组程序,那么非常多的应用都可以参照编程了。
回复
hztltgg 2020-03-19
楼上给的代码,就是把全部的比赛结果一股脑一起输入了,和题目输入每比赛的比分,并可以存储。最后每比赛的积分榜要求不符。不过我怀疑你们老师出题也根本没考虑这个循环赛具体是意思,当作数学题的排列组合问题了,以为就是个双层循环,哎。。。。。。
回复
hztltgg 2020-03-19
循环赛的轮转表生成还是个比较麻烦的算法,涉及分治算法,从题目看可能也不是老师要考的点,可能需要先手工配置好每轮那个和那个队比赛,这样么又不通用了。
回复
九头蛇daze 2020-03-19
引用 15 楼 是小菜 的回复:
[quote=引用 13 楼 寻开心的回复:]增加个辅助结构,记录一下
sturct Score {
int nTeamA;
int nTeamB;
int nScoreA;
int nScoreB;
} scores[45];

输入的时候,输入数据到这里
从这里可以统计出,楼上的代码当中Team的数据, 后续的就都可以了

厉害感谢感谢[/quote]
你先仔细看看那代码能不能用吧
回复
九头蛇daze 2020-03-19
先别急着谢呢,那代码合适吗,第一队第一轮比9场,开玩笑?
回复
是小菜 2020-03-18
引用 1 楼 chxchxkkk的回复:
用结构体数组
我用结构体数组尝试了一下,但是我这学的一般,没做出来
回复
chxchxkkk 2020-03-18
用结构体数组
回复
是小菜 2020-03-18
引用 13 楼 寻开心的回复:
增加个辅助结构,记录一下
sturct Score {
int nTeamA;
int nTeamB;
int nScoreA;
int nScoreB;
} scores[45];

输入的时候,输入数据到这里
从这里可以统计出,楼上的代码当中Team的数据, 后续的就都可以了
厉害👍🏻👍🏻👍🏻感谢感谢
回复
是小菜 2020-03-18
引用 11 楼 x422833523的回复:
#include <stdio.h>

#define BIGGER 1
#define SMALLER 0
#define EQUAL 2

typedef struct Team
{
int team_num; //for 队伍编号
int score; //for 积分
int win_balls; //for 胜球
int lose_balls; //for 输球
}team;

void team_init(team *T)
{
int i;
for(i = 0;i<10;i++)
{
T[i].team_num = i;
}
}

void team_input_score(team *T)
{
int i,j;
for(i = 0; i < 9; i++)
{
printf("NO.%d round\n", i+1);//第几轮
for(j = i + 1; j < 10; j++)
{
printf("team%d vs team%d\n", i, j);
printf("input team[%d] score\n", i);
scanf("%d",&T[i].win_balls);
T[j].lose_balls = T[i].win_balls;
printf("input team[%d] score\n", j);
scanf("%d",&T[j].win_balls);
T[i].lose_balls = T[j].win_balls;

if(T[i].win_balls > T[j].win_balls)
{
T[i].score += 3;
}
else if(T[i].win_balls < T[j].win_balls)
{
T[j].score += 3;
}
else
{
T[i].score += 1;
T[j].score += 1;
}
}
}
}

//交换队伍排位 for排序
void swap_team(team *a, team *b)
{
team tmp;
memcpy(&tmp, a, sizeof(team));
memcpy(a, b, sizeof(team));
memcpy(b, &tmp, sizeof(team));
}

void print_team(team T)
{
printf("team[%d].score = %d\n", T.team_num, T.score);
printf("team[%d].winballs = %d\n", T.team_num, T.win_balls);
printf("team[%d].loseballs = %d\n", T.team_num, T.lose_balls);
printf("\n");
}

//比较队伍排名先后
int compare(team a, team b)
{
if(a.score > b.score)
{

return BIGGER;
}
else if(a.score < b.score)
{
return SMALLER;
}
else
{
if((a.win_balls - a.lose_balls) > (b.win_balls - b.lose_balls))
{
return BIGGER;
}
else if((a.win_balls - a.lose_balls) < (b.win_balls - b.lose_balls))
{
return SMALLER;
}
else
{
if(a.win_balls > b.win_balls)
{
return BIGGER;
}
if(a.win_balls > b.win_balls)
{
return SMALLER;
}
else
{
return EQUAL;
}
}
}
}

//给队伍冒泡排序
void Bubble_Sort(team *T)
{
int i, j;
for(i = 0;i < 9;i++)
{

for(j = 0;j < 9 - i; j++)
{
if(SMALLER == compare(T[j], T[j+1]))
{
swap_team(&T[i], &T[j]);
}
}
}
}

int main()
{
int i,j;
team teams[10] = {0};

team_init(teams);
team_input_score(teams);
Bubble_Sort(teams);

for(i =0;i<10;i++)
{
print_team(teams[i]);
}
return 0;
}
棒棒哒!
回复
寻开心 2020-03-18
增加个辅助结构,记录一下
sturct Score {
int nTeamA;
int nTeamB;
int nScoreA;
int nScoreB;
} scores[45];

输入的时候,输入数据到这里
从这里可以统计出,楼上的代码当中Team的数据, 后续的就都可以了
回复
寻开心 2020-03-18

引用 11 楼 x422833523 的回复:
#include <stdio.h>

#define BIGGER 1
#define SMALLER 0
#define EQUAL 2

typedef struct Team
{
int team_num; //for 队伍编号
int score; //for 积分
int win_balls; //for 胜球
int lose_balls; //for 输球
}team;

void team_init(team *T)
{
int i;
for(i = 0;i<10;i++)
{
T[i].team_num = i;
}
}

void team_input_score(team *T)
{
int i,j;
for(i = 0; i < 9; i++)
{
printf("NO.%d round\n", i+1);//第几轮
for(j = i + 1; j < 10; j++)
{
printf("team%d vs team%d\n", i, j);
printf("input team[%d] score\n", i);
scanf("%d",&T[i].win_balls);
T[j].lose_balls = T[i].win_balls;
printf("input team[%d] score\n", j);
scanf("%d",&T[j].win_balls);
T[i].lose_balls = T[j].win_balls;

if(T[i].win_balls > T[j].win_balls)
{
T[i].score += 3;
}
else if(T[i].win_balls < T[j].win_balls)
{
T[j].score += 3;
}
else
{
T[i].score += 1;
T[j].score += 1;
}
}
}
}

//交换队伍排位 for排序
void swap_team(team *a, team *b)
{
team tmp;
memcpy(&tmp, a, sizeof(team));
memcpy(a, b, sizeof(team));
memcpy(b, &tmp, sizeof(team));
}

void print_team(team T)
{
printf("team[%d].score = %d\n", T.team_num, T.score);
printf("team[%d].winballs = %d\n", T.team_num, T.win_balls);
printf("team[%d].loseballs = %d\n", T.team_num, T.lose_balls);
printf("\n");
}

//比较队伍排名先后
int compare(team a, team b)
{
if(a.score > b.score)
{

return BIGGER;
}
else if(a.score < b.score)
{
return SMALLER;
}
else
{
if((a.win_balls - a.lose_balls) > (b.win_balls - b.lose_balls))
{
return BIGGER;
}
else if((a.win_balls - a.lose_balls) < (b.win_balls - b.lose_balls))
{
return SMALLER;
}
else
{
if(a.win_balls > b.win_balls)
{
return BIGGER;
}
if(a.win_balls > b.win_balls)
{
return SMALLER;
}
else
{
return EQUAL;
}
}
}
}

//给队伍冒泡排序
void Bubble_Sort(team *T)
{
int i, j;
for(i = 0;i < 9;i++)
{

for(j = 0;j < 9 - i; j++)
{
if(SMALLER == compare(T[j], T[j+1]))
{
swap_team(&T[i], &T[j]);
}
}
}
}

int main()
{
int i,j;
team teams[10] = {0};

team_init(teams);
team_input_score(teams);
Bubble_Sort(teams);

for(i =0;i<10;i++)
{
print_team(teams[i]);
}
return 0;
}


题目要求:
输入每场比赛的成绩, 那就要45个数据呢
根据45场比赛统计出上述代码需要的数据就完整了

45场比赛输入两队的编号和各自的进球数目就可以了
上面代码的输入部分稍微改造一下就可以了
回复
x422833523 2020-03-18
#include <stdio.h>

#define BIGGER 1
#define SMALLER 0
#define EQUAL 2

typedef struct Team
{
int team_num; //for 队伍编号
int score; //for 积分
int win_balls; //for 胜球
int lose_balls; //for 输球
}team;

void team_init(team *T)
{
int i;
for(i = 0;i<10;i++)
{
T[i].team_num = i;
}
}

void team_input_score(team *T)
{
int i,j;
for(i = 0; i < 9; i++)
{
printf("NO.%d round\n", i+1);//第几轮
for(j = i + 1; j < 10; j++)
{
printf("team%d vs team%d\n", i, j);
printf("input team[%d] score\n", i);
scanf("%d",&T[i].win_balls);
T[j].lose_balls = T[i].win_balls;
printf("input team[%d] score\n", j);
scanf("%d",&T[j].win_balls);
T[i].lose_balls = T[j].win_balls;

if(T[i].win_balls > T[j].win_balls)
{
T[i].score += 3;
}
else if(T[i].win_balls < T[j].win_balls)
{
T[j].score += 3;
}
else
{
T[i].score += 1;
T[j].score += 1;
}
}
}
}

//交换队伍排位 for排序
void swap_team(team *a, team *b)
{
team tmp;
memcpy(&tmp, a, sizeof(team));
memcpy(a, b, sizeof(team));
memcpy(b, &tmp, sizeof(team));
}

void print_team(team T)
{
printf("team[%d].score = %d\n", T.team_num, T.score);
printf("team[%d].winballs = %d\n", T.team_num, T.win_balls);
printf("team[%d].loseballs = %d\n", T.team_num, T.lose_balls);
printf("\n");
}

//比较队伍排名先后
int compare(team a, team b)
{
if(a.score > b.score)
{

return BIGGER;
}
else if(a.score < b.score)
{
return SMALLER;
}
else
{
if((a.win_balls - a.lose_balls) > (b.win_balls - b.lose_balls))
{
return BIGGER;
}
else if((a.win_balls - a.lose_balls) < (b.win_balls - b.lose_balls))
{
return SMALLER;
}
else
{
if(a.win_balls > b.win_balls)
{
return BIGGER;
}
if(a.win_balls > b.win_balls)
{
return SMALLER;
}
else
{
return EQUAL;
}
}
}
}

//给队伍冒泡排序
void Bubble_Sort(team *T)
{
int i, j;
for(i = 0;i < 9;i++)
{

for(j = 0;j < 9 - i; j++)
{
if(SMALLER == compare(T[j], T[j+1]))
{
swap_team(&T[i], &T[j]);
}
}
}
}

int main()
{
int i,j;
team teams[10] = {0};

team_init(teams);
team_input_score(teams);
Bubble_Sort(teams);

for(i =0;i<10;i++)
{
print_team(teams[i]);
}
return 0;
}
回复
ggglivw 2020-03-18
难道你要和自己打一场?
回复
千梦一生 2020-03-18
10个足球队进行9轮循环赛。
我感觉哪里不对。难道不应该至少10轮才叫循环赛呀
回复
是小菜 2020-03-18
引用 5 楼 ggglivw的回复:
1.确实太简单。2.真要写也不是几行,10行代码能写完。你可以自己写,有问题贴出来大家回答。如果类似的题目几百行都要写了调试,我们都没时间工作了,全部给论坛做题。。。
哦哦 好的 谢谢大佬了
回复
ggglivw 2020-03-18
1.确实太简单。2.真要写也不是几行,10行代码能写完。你可以自己写,有问题贴出来大家回答。如果类似的题目几百行都要写了调试,我们都没时间工作了,全部给论坛做题。。。
回复
是小菜 2020-03-18
引用 3 楼 ggglivw的回复:
看描述很简单,结构体数组轻松搞定,没有必要用链表和全局变量,根本不需要的。
大佬,我一个初学者就算知道用结构体数组也编不出来。在你们看如此简单,在我看来,天要塌了
回复
ggglivw 2020-03-18
看描述很简单,结构体数组轻松搞定,没有必要用链表和全局变量,根本不需要的。
回复
相关推荐
发帖
C语言
创建于2007-09-28

6.4w+

社区成员

C语言相关问题讨论
申请成为版主
帖子事件
创建了帖子
2020-03-17 10:18
社区公告
暂无公告