关于c语言编写程序问题

 

 有8个评委,5个歌手,评委为每个歌手打分。去掉最高分和最低分,求每个歌手的平均分并且将每个歌手以总分的高低排序输出他们的序号和总分。

编程要求:以表格的形式输出每个评委为每个歌手的评分和总分

代码如下:如有帮助,请采纳一下,谢谢。


#include <stdio.h>

class Singer
{
public:
	int id;
	int a[8];
	float avg;
	int sum;
	void fun()
	{
		int max = a[0];
		int min = a[0];
		sum = a[0];
		for (int i = 1; i < 8; i++)
		{
			sum += a[i];
			if (max > a[i])
			{
				max = a[i];
			}
			if (min < a[i])
			{
				min = a[i];
			}
		}
		avg = (sum - max - min)/6.0;

	}
};

int main()
{
	Singer arr[5];
	for(int i = 0; i < 5; i++)
	{
		printf("请输入学员%d的成绩:",i+1);
		arr[i].id = i + 1;
		scanf("%d %d %d %d %d %d %d %d",&arr[i].a[0],&arr[i].a[1],&arr[i].a[2],&arr[i].a[3],&arr[i].a[4],&arr[i].a[5],&arr[i].a[6],&arr[i].a[7]);
		arr[i].fun();
	}
	
	Singer temp;
	for (int i = 0; i < 4;i++)
	{
		for (int j = 0;j < 4-i; j++)
		{
			if (arr[j].sum < arr[j+1].sum) 
			{
				temp = arr[j];
				arr[j] = arr[j+1];
				arr[j+1] = temp;
			}
		}
	}
	printf("学员成绩:\n");
	printf("------------------------------------\n");
	printf("| id |  总成绩 |平均成绩|评分列表\n");
	for (int i = 0; i < 5; i++)
	{
		printf("-----------------------------------|\n");
		printf("|  %d |   %d    | %.2f |",arr[i].id,arr[i].sum,arr[i].avg);
		for(int j = 0; j < 8; j++)
			printf("%d ",arr[i].a[j]);
		printf("\n");
	}
	printf("------------------------------------\n");
	getchar();
	getchar();
	return 0;
}

 

 

 

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>

#define MAX 9
//单个记录的结构体
typedef struct 
{
    float key;
	int nod;
}SqNote;
//记录表的结构体
typedef struct {
    SqNote r[MAX];
    int length;
}SqList;
//交换两个记录的位置
void swap(SqNote *a,SqNote *b)
{
    float key=a->key;
    a->key=b->key;
    b->key=key;

	
    int noq =a->nod;
	
    a->nod=b->nod;
    b->nod=noq;
}
//查找表中关键字的最大值
int SelectMinKey(SqList *L,int i)
{
    int min=i;
    //从下标为 i+1 开始,一直遍历至最后一个关键字,找到最小值所在的位置
    while (i+1<L->length) 
	{
        if (L->r[min].key<L->r[i+1].key) 
		{
            min=i+1;
        }
        i++;
    }
    return min;
}
//简单选择排序算法实现函数
void SelectSort(SqList * L)
{
	int i=0;

    for (i=0; i<L->length; i++) 
	{
        //查找第 i 的位置所要放置的最小值的位置
        int j=SelectMinKey(L,i);
        //如果 j 和 i 不相等,说明最小值不在下标为 i 的位置,需要交换
        if (i!=j) {
            swap(&(L->r[i]),&(L->r[j]));
        }
    }
}

int main() 
{
    int x=0,y=0;
	float chengji[5][8];
 	SqList * L=NULL;
	int i=0;
	
	for(x=0;x<5;x++)
	{
		for(y=0;y<8;y++)
		{
			printf("请第%d位评委为第%d位歌手打分(对多保留两位小数):\n",y+1,x+1);
			scanf("%f",&chengji[x][y]);
		}
	}

    L=(SqList*)malloc(sizeof(SqList));
    L->length=5;

	printf("\n成绩榜\n");
	printf(" \t成绩1\t成绩2\t成绩3\t成绩4\t成绩5\t成绩6\t成绩7\t成绩8\t平均分\n");
	for(x=0;x<5;x++)
	{
		float total=0.0;
		float max=0.0;
		float min=999.9;
		
		printf("歌手%d\t",x+1);
		for(y=0;y<9;y++)
		{
			
			if(y==8)
			{
				float tm=0.0;
				tm=(total-max-min)/6;
				printf("%.2f\n",tm);
				L->r[x].key=total-max-min;
				L->r[x].nod=x+1;
			}
			else
			{
				printf("%.2f\t",chengji[x][y]);
				total+=chengji[x][y];
				if(chengji[x][y]>max)
				{
					max	= chengji[x][y];
				}
				if(chengji[x][y]<min)
				{
					min= chengji[x][y];
				}
			}
		}
		
	}
	SelectSort(L);
	printf("\n总榜\n");
	
	printf("歌手序号\t总成绩\n");
	
    for (i=0; i<L->length; i++) 
	{
        printf("%d\t\t%f\n",L->r[i].nod,L->r[i].key);
    }
	return 0;
	
}