运动会分数统计 C语言 动态创建 链表

        有n个学校参加运动会,学校名对应的编号为1……n。比赛分成m个男子项目,和w个女子项目。每个项目取前三名积分,前三名的积分分别为:5、3、2;数据可以存储在一个数据文件中,数据结构、具体数据自定。

具体功能有:

(1)从键盘输入学校、项目、项目得分信息;

(2)能统计各学校总分;

(3)能统计各个项目的前三名;

(4)可以按学校编号或名称、学校总分、男女团体总分排序输出;

(5)可以按学校编号查询学校某个项目的情况;

(6)可以按项目编号查询取得前三名的学校。

(7)数据存入文件并能随时查询。

 zb大学 2018到2019年数据结构课设 17级 lzx 留,过去的祖传代码已经不适合当前需求了,学长在此留下代码,供后面的做些许参考,不希望写完的代码仅仅放在磁盘里。

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define N 20   //男子,女子项目的最大个数 
int n;  //学校的个数 
int m;  //男子项目的个数 
int w;   //女子项目的个数
FILE *fp;

typedef struct {
	int num;
	int score;
	int rank;    
}Woman;

typedef struct {
	int num;
	int score;
	int rank;     
}Man;

typedef struct Item {
	int num;  //学校编号
	char schoolName[N];   //学校名字
	int score;           //该学校所有成绩的综合 
	int Mscore;          //男子所有项目的成绩和
	int Wscore;           //女子所有项目的成绩和
	Man manItem[N];
	Woman womanItem[N];	
	struct Item *next;  
}Item,*ItemNode;

//链表的创建
void ListCreat(ItemNode &I){     
     ItemNode p,q,temp;
     printf("请问此次有多少学校参加运动会?\n");
     scanf("%d",&n); 
     printf("请问此次活动有多少男子项目?\n");
     scanf("%d",&m);
     printf("请问此次活动有多少女子项目?\n");
     scanf("%d",&w);
     p=I;
     if((fp=fopen("sports.txt","w"))==NULL){
     	printf("文件打开失败\n");
     	getchar();
     	exit(1);
	 } else {
	 	for(int i=1;i<=n;i++){
     	q = (ItemNode)malloc(sizeof(Item));
     	printf("第%d所学校的名字为:",i);
     	scanf("%s",q->schoolName);
     	fprintf(fp,"第%d所学校的名字为:",i);
     	fprintf(fp,"%s\n",q->schoolName);
     	
     	printf("第%d所学校的编号为:",i);
     	scanf("%d",&q->num);
     	fprintf(fp,"第%d所学校的编号为:",i);
     	fprintf(fp,"%d\n",q->num);
     	fprintf(fp,"第%d所学校男子信息录入\n",i);
        //男子项目信息的录入 
        for(int j=1;j<=m;j++){
     		printf("第%d所学校的第%d个男子项目的编号是:\n",i,j);
     		scanf("%d",&q->manItem[j].num);
     		printf("该学校该项目获得第几名?\n");
			scanf("%d",&q->manItem[j].rank);
			fprintf(fp,"编号:%d\t",j);
			fprintf(fp,"名次:%d\n",q->manItem[j].rank); 
		 }
		 
		 fprintf(fp,"第%d所学校女子信息录入\n",i);
		 //女子项目信息的录入 
		 for(int k=1;k<=w;k++){
     		printf("第%d所学校的第%d个女子项目的编号是:\n",i,k);
     		scanf("%d",&q->womanItem[k].num);	
     		printf("该学校该项目获得第几名?\n");
			scanf("%d",&q->womanItem[k].rank); 
			fprintf(fp,"编号:%d\t",k);
			fprintf(fp,"名次:%d\n",q->womanItem[k].rank); 			 	
		 } 
		 p->next = q;
		 p = q;
		 printf("\n******************************************\n\n");
		 fprintf(fp,"\n");
	 }
	 q->next = NULL;
	 fclose(fp);   
	 	
	 }
     
}
//对于得分情况的计算
void calculate(ItemNode &I){
	ItemNode p;
	int i,j,k;
	int Wresult=0;
	int Mresult=0;
    p=I;
    //对获得名次的项目赋值
    for(i=1;i<=n;i++){	
   		p=p->next;	 
   		//给男子项目计算分数 
   		for(j=1;j<=m;j++){
[问题描述] 参加运动会有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、局部非法数据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明;
以下是二叉树的链式存储C语言实现的示例代码: ```c #include <stdio.h> #include <stdlib.h> // 定义二叉树结构体 typedef struct TreeNode { int data; struct TreeNode *left; struct TreeNode *right; } TreeNode; // 创建二叉树 TreeNode* createTree() { int data; scanf("%d", &data); if (data == -1) { // -1表示空节点 return NULL; } TreeNode *node = (TreeNode*)malloc(sizeof(TreeNode)); node->data = data; node->left = createTree(); node->right = createTree(); return node; } // 遍历二叉树(前序遍历) void preOrder(TreeNode *root) { if (root == NULL) { return; } printf("%d ", root->data); preOrder(root->left); preOrder(root->right); } // 遍历二叉树(中序遍历) void inOrder(TreeNode *root) { if (root == NULL) { return; } inOrder(root->left); printf("%d ", root->data); inOrder(root->right); } // 遍历二叉树(后序遍历) void postOrder(TreeNode *root) { if (root == NULL) { return; } postOrder(root->left); postOrder(root->right); printf("%d ", root->data); } // 交换二叉树的左右子树 void swap(TreeNode *root) { if (root == NULL) { return; } TreeNode *temp = root->left; root->left = root->right; root->right = temp; swap(root->left); swap(root->right); } int main() { TreeNode *root = createTree(); printf("前序遍历:"); preOrder(root); printf("\n中序遍历:"); inOrder(root); printf("\n后序遍历:"); postOrder(root); printf("\n"); swap(root); printf("交换左右子树后的前序遍历:"); preOrder(root); printf("\n"); return 0; } ```
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值