数组实现打分时去除最高分最低分求平均值

什么是数组:在程序设计中,为了处理方便,通常把具有相同的若干变量按有序的形式组织起来,这些顺序排列的同类数据元素的集合称为数组

一般定义式: 类型说明符 数组名 [常表达式]
类型说明符:任一种基本数据类型或构造数据类型,即为数组元素的类型
常量表达式:表示数组元素的个数,也称为数组的长度
例如: int a[10]; 声明数组a,有十个元素,且有10个元素都是int型
数组元素的引用: 数组名[下标值] 下标从0开始

计算10个评委给出的分,并将最大最小值取出后,计算平均值

思路一:思路1:找出最大最小值后从总分中减去

int dAvg() {
	float score[10], sum, max, min, ave;
	int i, len = 10;
	//评委输入分数
	for (i = 0; i < len; i++)
	{
		scanf("%f", &score[i]);//循环接收输入的分数
	}
	//用循环求评委的总和,最高分和最低分
	sum = 0;
	max = min = score[0];//将score[o]赋值给max和min作为后续的比大小
	for (i = 0; i < len; i++)
	{
		sum = sum + score[i];//累加评委给的分数
		if (score[i] > max)  //将数组中的元素循环和 score[0](max)进行对比  大于则将该元素给max
		{
			max = score[i];
		}
		if (score[i] < min)
		{
			min = score[i];
		}
	}
	//计算平均值
	ave = (sum - max - min) / 8;
	//输出最后分数
	printf("ave=%f", ave);
	return 0;
}

思路二:将数组中的元素进行冒泡排序后取中间八个值进行计算
什么是冒泡排序:

冒泡排序的英文Bubble Sort,是一种最基础的交换排序。之所以叫做冒泡排序,因为每一个元素都可以像小气泡一样,根据自身大小一点一点向数组的一侧移动。

冒泡排序的原理:

在这里可以理解为依次比较相邻的两个数,将小数放在前面,大数放在后面,经过循环实现小数不断向前移动,而大数则被置换到后面
int dAvg_maop() {
	float score[10], sum, max, min, ave;
	int i,j, len = 10,temp;//temp 用于冒泡排序时暂时存放值
	//评委输入分数
	for (i = 0; i < len; i++)
	{
		scanf("%f", &score[i]);//循环接收输入的分数
	}
	//采用冒泡排序方法,对评委按照从小到大的顺序重新排序
	
	for ( i = 1; i < len; i++)
	{
		for ( j = 0; j < len-i; j++)
		{
			if (score[j] > score[j + 1])//依次比较相邻的两个数,将小数放在前面,大数放在后面
			{
				temp = score[j];  
				score[j] = score[j + 1];
				score[j + 1] = temp;

			}
		}
	}

	//计算中间八个数据的和
	sum = 0;
	for ( i = 1; i < len-1; i++)
	{
		sum += score[i];//该for循环累加从下标为 1 到 下标为 8 的数据,因为下表为 0 和 9 分别为最小和最大值 
	}
	//计算平均值
	ave = sum / 8;
	//输出最后分数
	printf("ave=%f", ave);
	return 0;
}

二维数组

上面我们考虑得是只有一个选手,如果参赛的选手有很多个,那这时就需要用到二维数组或者多纬数组了
二维数组的定义: 类型说明符 数组名[常量表达式1][常量表达式2]
其中常量表达式1表示的是一维下标的长度,常量表达式2表示的是第二维下标的长度

#define NUM_XUANSHOU 10
#define NUM_PINGWEI 10   
//定义全局常量  该常量名一般定义为大写
int dAvg_dou() {

	float score[NUM_XUANSHOU][NUM_PINGWEI], sum, max, min;
	float ave[NUM_XUANSHOU];//存放选手的平均分数
	int i, j;
	//输入分数
	for ( i = 0; i < NUM_XUANSHOU; i++)
	{
		for ( j = 0; j <NUM_PINGWEI; j++)
		{
			scanf("%d",&score[i][j]);
		}
	}

	//采用双重循环以及计算各选手的总分,最大值,最低分,并计算其最后得分
	for ( i = 0; i < NUM_XUANSHOU; i++)
	{
		sum = 0;
		max = score[i][0];
		min = score[i][0];
		for ( j = 0; j < NUM_PINGWEI; j++)
		{
			sum += score[i][j];
			if (max > score[i][j]) {
				max = score[i][j];
			}
			if (min > score[i][j])
			{
				min = score[i][j];
			}
		}
		ave[i] = (sum - max - min) / (NUM_PINGWEI - 2);
	}
	//输出各选手的平均成绩
	for ( i = 0; i < NUM_XUANSHOU; i++)
	{
		printf("选手%d的平均成绩是:%f", i + 1, ave[i]);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值