C語言每日一練
2022年1月1日
在歌星大獎賽中,有10個評委為參賽的選手打分,分數為1〜100分。選手最後得分為:去掉一個最高分和一個最低分後其餘8個分數的平均值。請編寫一個程式實現。
提高:題目條件不變,但考慮同時對評委評分進行裁判,即在10個評委中找出最公平(即評分最接近平均分)和最不公平(即與平均分的差距最大)的評委,程式應該怎樣實現?
這道題難度較低,實現思路:
#include<stdio.h>
int main()
{
float score[10] = {0};
int i = 0;
float sum = 0;
float min = 0, max = 0, avg = 0;
//獲取分數
printf("請輸入10個評委的分數(1-100)\n");
for(i = 0; i < 10; i++)
scanf("%f", &score[i]);
//初始化最高分和最低分
min = max = score[0];
//求最高分和最低分
for(i = 1; i < 10; i++)
{
if(score[i] < min)
min = score[i];
else if(score[i] > max)
max = score[i];
}
//求總分sum,初始值為0
for(i = 0; i < 10; i++)
sum += score[i];
//去除最高分和最低分後的選手平均分
avg = (sum - max - min) / 8;
printf("該選手最後得分為:%.1f\n", avg);
return 0;
}
這裡再重複一下附加的題目:
題目條件不變,但考慮同時對評委評分進行裁判,即在10個評委中找出最公平(即評分最接近平均分)和最不公平(即與平均分的差距最大)的評委,程式應該怎樣實現?
實現思路
程式碼
#include<stdio.h>
/**
* @brief 獲取絕對值(absolute value)
* @param num 目標值
* @return 返回num的絕對值
*/
float Get_Abs(float num)
{
if(num < 0)
return -num;
else
return num;
}
int main()
{
float score[10] = {0};
int i = 0;
float sum = 0;
float min = 0, max = 0, avg = 0;
float diff[10] = {0};
//獲取分數
printf("請輸入10個評委的分數(1-100)\n");
for(i = 0; i < 10; i++)
scanf("%f", &score[i]);
//初始化最高分和最低分
min = max = score[0];
//求最高分和最低分
for(i = 1; i < 10; i++)
{
if(score[i] < min)
min = score[i];
else if(score[i] > max)
max = score[i];
}
//求總分sum,初始值為0
for(i = 0; i < 10; i++)
{
sum += score[i];
}
//去除最高分和最低分後的選手平均分
avg = (sum - max - min) / 8;
//將每位評委的評分與平均分的差值存入diff陣列
for(i = 0; i < 10; i++)
{
diff[i] = Get_Abs(score[i] - avg);
}
//初始化評分最公平和最不公平評委的評分與平均分的差值
min = max = diff[0];
//求評分最公平和最不公平評委的評分
for(i = 1; i < 10; i++)
{
if(diff[i] < min)
min = diff[i];
else if(diff[i] > max)
max = diff[i];
}
printf("該選手最後得分為:%.1f\n", avg);
//找出評分最公平的評委(可能不止一個)
printf("評分最公平的評委為:");
for(i = 0; i < 10; i++)
//浮點數比較相等(用if(diff[i] == min)也行,但不嚴謹)
if(diff[i] - min < 0.000001 && diff[i] - min > -0.000001)
printf("%d號:%.1f分 ", i + 1, score[i]);
//找出評分最不公平的評委(可能不止一個)
printf("\n評分最不公平的評委為:");
for(i = 0; i < 10; i++)
//浮點數比較相等(用if(diff[i] == max)也行,但不嚴謹)
if(diff[i] - max < 0.000001 && diff[i] - max > -0.000001)
printf("%d號:%.1f分 ", i + 1, score[i]);
printf("\n");
return 0;
}
執行結果