什么是数组:在程序设计中,为了处理方便,通常把具有相同的若干变量按有序的形式组织起来,这些顺序排列的同类数据元素的集合称为数组
一般定义式: 类型说明符 数组名 [常表达式]
类型说明符:任一种基本数据类型或构造数据类型,即为数组元素的类型
常量表达式:表示数组元素的个数,也称为数组的长度
例如: 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]);
}
}