057.运动会分数统计

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define n 4
#define m 3
#define w 2

struct achievement  //定义表示成绩的结构体
{int schoolnumber;//学校编号
char name[20];	//姓名
int mark;	//分数
int result;};

struct pro     //表示项目的结构体
{int tag;//项目编号
struct achievement ach[5];
int number;};

struct Node         
{struct pro date;
struct Node *next;};


void ListInitiate(struct Node * *head)    //初始化单链表
{
    if((*head=(struct Node*)malloc(sizeof(struct Node)))==NULL) exit(1);
    (*head)->next=NULL;
}


void main()
{
    int i,j,t;
    int x[n]={0};int y[n]={0};
    struct Node *head;
    struct Node *p;
    struct Node *q;
    ListInitiate(&head);
    p=head;
	for(i=0;i<m+w;i++)      //输入成绩
    {
        j=i+1;
        printf("请输入第%d个项目的信息\n",j);
        p->date.number=j;
        printf("所取的名次数为:");
        scanf("%d",&p->date.tag);
        while(p->date.tag!=3&&p->date.tag!=5)
        {printf("输入有误,请重新输入!");
		printf("所取的名次数为:");
		scanf("%d",&p->date.tag);}
        t=1;
        while(t<=p->date.tag)
        {
            printf("第%d名的名字:",t);
            scanf("%s",&p->date.ach[t-1].name);
            printf("第%d名的学校:",t);
            scanf("%d",&p->date.ach[t-1].schoolnumber);
            printf("第%d名的分数:",t);
            scanf("%d",&p->date.ach[t-1].mark);
            p->date.ach[t-1].result=t;
            t++;
        }
        q=(struct Node*)malloc(sizeof(struct Node));  //生成新结点
        p->next=q;
        p=q;
        p->next=NULL;
    }
	for(i=0;i<n;i++)     //产生成绩单
	{
		j=i+1;
		printf("学校%d成绩单\n",j);
		//t=1;
		p=head;
		do
		{
			t=1;
			while(t<=p->date.tag)
			{ 
				if(p->date.ach[t-1].schoolnumber==j)
				{            
					printf("获奖项目:%d   ",p->date.number);
					printf("名次:%d   \n",p->date.ach[t-1].result);
					printf("获奖人姓名:%s   ",p->date.ach[t-1].name);
					printf("所得分数:%d   ",p->date.ach[t-1].mark);
					if(p->date.number<=m)
						x[i]=x[i]+p->date.ach[t-1].mark;
					else
						y[i]=y[i]+p->date.ach[t-1].mark;
				}    
				t++;
			}
			p=p->next;
		}while(p!=NULL);
		printf("\n男子团体总分:%d   ",x[i]);
		printf("女子团体总分:%d   \n",y[i]);
		printf("\n团体总分:%d\n",x[i]+y[i]);
	}
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
[问题描述] 参加运动会有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、局部非法数据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中明;

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程与实战

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值