⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 歌手评分.cpp

📁 初学者的源c代码
💻 CPP
字号:
/*1.	某大奖赛中,有10个评委为参赛的选手打分,分数为1~100分。选手最
后得分为:去掉一个最高分和一个最低分后其余8个分数的平均值。请编写一个
程序实现:
a)	从文件中读入选手信息,包括:姓名,选手编号,评委打的分数。
b)	计算选手最后得分,并根据选手得分从高到低进行排序。
c)	按照以下格式,存入文件中:
 例:一等奖   3个   姓名:歌手2、歌手3、歌手4
  
d)	同时考虑对评委评分进行裁判,即在10个评委中找出最公平(即评分最接近
均分)和最不公平(即与平均分的差距最大)的评委;
*/
#include <iostream>
#include <math.h>
#include <malloc.h>
using namespace std;
class player_file
{
public:
	int num;
	char name[10];
	int judge[10];
	int score;
};

void input(char *filename,player_file player[]	,int *n);//把数据保存到结构体中
void get_avrage(player_file player[],int n);//求每位选手的平均分
void sort(player_file player[],int n);//对选手的成绩排序
void output(player_file player[],int n,char award[50]);//把排名结果输出到指定文件中去
void judger_compare(player_file player[],int n);//裁判排序
void get_maxmin(player_file player[],int i,int *max,int *min);

void main()
{
	char filename[50];
	player_file player[50];
	int n;

	cout<<"请输入文件路径:"<<endl;
	gets(filename); 	
	input(filename,player,&n);
	get_avrage(player,n);	
}
void input(char *filename,player_file player[],int *n)
{
	int i=0,j;
	FILE *fp;

	if((fp=fopen(filename,"r"))==NULL)
	{
		cout<<"cann't open file"<<endl;
		cout<<"请从新输入文件路径:"<<endl;
		while((fp=fopen(filename,"r"))==NULL)
		{
			gets(filename); 
		}
	}
	while(1)
	{
		fscanf(fp,"%d%s",&player[i].num,player[i].name);
		for(j=0;j<10;j++)
		{
			fscanf(fp,"%d",&player[i].judge[j]);
		}
		if(feof(fp))
			break;
		else
		{
			i++;
		}
	}
	*n=i;
	fclose(fp);
}
void get_avrage(player_file player[],int n)
{
	int i,j;
	int sum;
	int	*max,*min;

	max=(int *)malloc(sizeof(j));
	min=(int *)malloc(sizeof(j));
	cout<<"比塞结果:"<<endl;
	for(i=0;i<n;i++)
	{
		sum=0;
		*max=player[i].judge[0];
		*min=player[i].judge[0];
		get_maxmin(player,i,max,min);	
		for(j=0;j<10;j++)
		{
			sum=sum+player[i].judge[j];			
		}
		player[i].score=(sum-*max-*min)/8;//max,min 为最大和最小得分
		cout<<endl<<"第"<<i+1<<"名选手,去掉一个最高分:"<<*max<<"分,去掉一个最低分:"<<*min<<"分,最后得分:"<<player[i].score<<"分"<<endl;
		cout<<"评委排名:"<<endl;
		judger_compare(player,i);
	}
	sort(player,n);
}
void get_maxmin(player_file player[],int i,int *max,int *min)
{
	int j;
	
	for(j=0;j<10;j++)
	{
		if(*max<player[i].judge[j])
		{
			*max=player[i].judge[j];
		}
		if(*min>player[i].judge[j])
		{
			*min=player[i].judge[j];
		}
	}
	
}
void sort(player_file player[],int n)
{
	int i,j,maxi;
	player_file tmp;
	char award[50];
	
	for(i=0;i<n;i++)
	{
		maxi=i;
		for(j=i;j<n;j++)
		{
			if(player[j].score>player[maxi].score)
			{
				maxi=j;
			}
		}
		tmp=player[maxi];
		player[maxi]=player[i];
		player[i]=tmp;
	}
	output(player,n,award);
}
void output(player_file player[],int n,char award[50])
{
	int i,j,k=0,m=1;
	FILE *fp;
	
	cout<<"请输入存储获奖名单路径:"<<endl;
	gets(award);
	if((fp=fopen(award,"w"))==NULL)
	{
		cout<<"cann't open file"<<endl;
		cout<<"请从新输入存储文件路径:"<<endl;
		while((fp=fopen(award,"w"))==NULL)
		{
			gets(award); 
		}
	}
	cout<<"选手获奖名单:"<<endl;
	for(i=0;i<n;i++)
	{		
		if(player[i].score==player[i+1].score)
		{
			m++;
		}
		else
		{
			k++;
			fprintf(fp,"第%d名  %d个 成绩:%d  姓名:",k,m,player[i].score);
			cout<<"第"<<k<<"名  "<<m<<"个 成绩:"<<player[i].score<<"姓名:";
			k=k+m-1;
			for(j=i;j<i+m&&j<10;j++)
			{
				fprintf(fp,"%s ",player[j].name);
				cout<<player[j].name;
			}
			fprintf(fp,"\n");
			cout<<endl;
			m=1;
		}
	}
	fclose(fp);
}
void judger_compare(player_file player[],int n)
{
	int i,j,a[10],tmp,count_i=1,k=1,b[10]={0};	
		
	for(i=0;i<10;i++)
		a[i]=i;
	for(i=0;i<10;i++)
	{
		
		for(j=i+1;j<10;j++)
		{
			if(fabs(player[n].judge[a[i]]-player[n].score)>fabs(player[n].judge[a[j]]-player[n].score))
			{
				tmp=a[i];
				a[i]=a[j];
				a[j]=tmp;				
			}			
		}
	}
	j=0;
	for(i=0;i<10;i++)
	{
		if(fabs(player[n].judge[a[i]]-player[n].score)==fabs(player[n].judge[a[i+1]]-player[n].score))
		{
			k++;	
			count_i++;
		}
		else 
		{			
			if(k>0)
			{
				count_i=count_i-k+1;
				cout<<"第"<<count_i<<"名"<<k<<"个 下标:";
				for(;j<count_i+k-1;j++)
				{
					cout<<a[j]<<" ";
				}
				cout<<endl;				
			}
			count_i=count_i+k;
			k=1;			
		}		
	}
	cout<<endl;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -