在歌星大奖赛中,有10个评委为参赛的选手打分,分数为1到100分的整数。选手最后得分为:去掉一个最高分和一个最低分后其余8个分数的平均值。请编写代码实现该计分程序。
**输入格式要求:"%d" 提示信息:"Input score %d\n"
**输出格式要求:"Canceled max score: %d\nCanceled min score: %d\n" "Average score: %d\n"
程序运行示例如下:
Input score 1
98
Input score 2
87
Input score 3
89
Input score 4
84
Input score 5
83
Input score 6
87
Input score 7
89
Input score 8
92
Input score 9
93
Input score 10
95
Canceled max score: 98
Canceled min score: 83
Average score: 89
#include <stdio.h>
int number(int score[]);
int Max(int score[]);
int Min(int score[]);
int Average(int score[]);
int main()
{
int score[10];
number(score[10]);
printf("Canceled max score: %d\nCanceled min score: %d\n",Max(score[10]),Min(score[10]));
printf("Average score: %d\n",Average(score[10]));
return 0;
}
int Max(int score[])//找出最大数
{
int i,j,k;
for(i=0;i<9;i++)
{
for(j=i+1;j<10;j++)
{
if(score[i]>score[j])
{
score[j]=score[i];
}
}
}
return score[9];
}
int Min(int score[])//找出最小数
{
int i,j;
for(i=0;i<9;i++)
{
for(j=i+1;j<10;j++)
{
if(score[i]<score[j])
{
score[j]=score[i];
}
}
}
return score[9];
}
int Average(int score[])//去除最大最小数后,求平均值
{
int sum=0;
int i,k;
for(i=0;i<=9;i++)
{
sum=sum+score[i];
}
k=(sum-Max(score[10])-Min(score[10]))/8;
return k;
}
int number(int score[])//记录十个数
{
int i;
for(i=1;i<=10;i++)
{
printf("Input score %d\n",i);
scanf("%d",&score[i-1]);
}
}
题主代码修改处见注释,供参考:
#include <stdio.h>
int number(int score[]);
int Max(int score[]);
int Min(int score[]);
int Average(int score[]);
int main()
{
int score[10];
number(score); //number(score[10]);
printf("Canceled max score: %d\nCanceled min score: %d\n",Max(score),Min(score));
//printf("Canceled max score: %d\nCanceled min score: %d\n",Max(score[10]),Min(score[10]));
printf("Average score: %d\n",Average(score));
//printf("Average score: %d\n",Average(score[10]));
return 0;
}
int Max(int score[])//找出最大数
{
int i,j,k = score[0];
for(i=0;i<10;i++) //for(i=0;i<9;i++)
{
//for(j=i+1;j<10;j++)
//{
if(score[i]>k) //if(score[i]>score[j])
{
k = score[i];//score[j]=score[i];
}
//}
}
return k; //score[9];
}
int Min(int score[])//找出最小数
{
int i,j = score[0];
for(i=0;i<10;i++) //for(i=0;i<9;i++)
{
//for(j=i+1;j<10;j++)
//{
if(score[i] < j) //if(score[i]<score[j])
{
j = score[i]; //score[j]=score[i];
}
//}
}
return j; //score[9];
}
int Average(int score[])//去除最大最小数后,求平均值
{
int sum=0;
int i,k;
for(i=0;i<=9;i++)
{
sum=sum+score[i];
}
k=(sum-Max(score)-Min(score))/8;
//k=(sum-Max(score[10])-Min(score[10]))/8;
return k;
}
int number(int score[])//记录十个数
{
int i;
for(i=1;i<=10;i++)
{
printf("Input score %d\n",i);
scanf("%d",&score[i-1]);
}
}
感觉你的做法有点繁琐了,建议直接对10个数据排序,这样数组的首尾就分别是最大最小了,参考代码:
#include<stdio.h>
int main()
{
int i, j, temp, sum = 0, len, a[10];
double ave;
for (i = 0; i < 10; i++)
{
printf("Input score %d:\n", i + 1);
scanf_s("%d", &a[i]);
}
len = i;
for (i = 0; i < len - 1; i++) //排序
{
for (j = 0; j < len - 1 - i; j++)
{
if (a[j] > a[j + 1])
{
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
for (i = 1; i < len - 1; i++)
sum += a[i];
ave = 1.0 * sum / (len - 2);
printf("Canceled max score:%d\n", a[len-1]);
printf("Canceled min score:%d\n", a[0]);
printf("Average score: %d\n", (int)ave);
return 0;
}