實訓項目一 統計歌唱比賽成績
有10名選手參加某歌唱比賽,每位選手演唱自己參賽曲目後,7名評委亮出自己的評分,後臺人員會去掉最高分和最低分,將剩下的5個值求平均來計算該選手的比賽得分。比賽結束後,將根據此平均分進行排名和頒獎。
在實訓中,我們來模仿這一過程,由用戶輸入選手名稱和評委得分,然後由程序計算每位選手的最高分和最低分並輸出,去掉這兩個值求得並輸出其平均分,然後根據平均分將排名輸出。
具體實現步驟:
- 定義數組
- 輸入10名選手的名字並保存
- 輸入評委給的分數
- 找到每位選手的最高分
- 找到最低分
- 去掉最高分和最低分,求每位選手的平均分
- 根據選手得分排名次
- 輸出比賽結果
#include <stdio.h> int max[10],min[10]; double average[10]; int no[10]={0,1,2,3,4,5,6,7,8,9}; int main() { char names[10][10]; /*定義二維字符數組存放選手名字*/ int i; for(i=0;i<10;i++) { printf("please input the name of the No. %d singer\n",i+1); /*提示用戶輸入編號爲i+1的選手的名字*/ gets(names[i]); /*將用戶輸入的字符串作爲該選手的名字*/ } int score[10][7],j; for(i=0;i<10;i++) { printf("\nplease input the score of the No. %d singer\n",i+1); /*提示用戶輸入編號爲i+1的選手的成績*/ for(j=0;j<7;j++) scanf("%d",&score[i][j]); } for(i=0;i<10;i++) { max[i]=score[i][0]; for(j=1;j<7;j++) if(score[i][j]>max[i]) max[i] = score[i][j]; printf("the highest score of the No.%d singer is:%d\n", i+1, max[i]); } for(i=0;i<10;i++) { min[i]=score[i][0]; for(j=1;j<7;j++) if(score[i][j]<min[i]) min[i] = score[i][j]; printf("the lowest score of the No.%d singer is:%d\n", i+1, min[i]); } int sum,temp; /*清零*/ for(i=0;i<10;i++) { sum=0; for(j=0;j<7;j++) sum+=score[i][j]; /*累加*/ sum=sum-max[i]-min[i]; /*去掉最高和最低分*/ average[i] = (double)sum/5; /*計算平均分*/ printf("the average score of the No.%d singer is:%lf\n\n", i+1, average[i]); } for(i=1;i<=6;i++) { for(j=0;j<7-i;j++) { /*比較的average[no[j]],而不是no[j]本身*/ if(average[no[j]]<average[no[j+1]]) { temp=no[j]; no[j]=no[j+1]; no[j+1]=temp; /*交換排名位置*/ } } } for(i=0;i<10;i++) printf("%d : %s(number:%d) get %lf\n",i,names[no[i]],no[i]+1,average[no[i]]); return 0; }