/* 编写一程序P415.C实现以下功能 设有10名歌手(编号为1-10)参加歌咏比赛,另有6名评委打分,每位歌手的得分从键盘输入:先提示“Please input singer's score: ”,再依次输入第1个歌手的6位评委打分(10分制,分数为整型,分数之间使用空格分隔), 第2个歌手的6位评委打分...以此类推。计算出每位歌手的最终得分(扣除一个最高分和一个最低分后的平均分,最终得分保留2位小数),最后按最终得分由高到低的顺序输出每位歌手的编号及最终得分。 注意:变量数据类型的选择应适当,在保证满足设计要求精度的情况下,养成不浪费内存空间和计算时间的好习惯。 编程可用素材:printf ("Please input singer's score:\n")、printf("\nscores:\n")、 printf("No.…: …。 程序的运行效果应类似地如图1所示,其中的红色部分是从键盘输入的内容。 */ /* 1 4 7 3 6 3 8 7 8 5 9 8 7 5 6 8 5 4 7 6 7 5 6 5 3 5 6 7 5 5 7 7 7 8 9 6 9 4 3 7 3 6 4 8 6 7 5 8 8 7 8 8 9 8 7 7 6 7 6 8 */ #include<stdio.h> int main(void) { int score[10][6],i,j,max,imax,min,imin;//定义分数,循环控制i,j;最大max,最大时的i值,最小值,最小值时的i值 float countave[10][2],temp2,temp;//定义每个人的平均值;countave[I][0]为分数,[1]为编号 float sum;//去掉最高最低分后的总和。 printf("Please input singer's score:\n"); for(i=0;i<10;i++) { scanf("%d %d %d %d %d %d",&score[i][0],&score[i][1],&score[i][2],&score[i][3],&score[i][4],&score[i][5]); } for(i=0;i<=9;i++) { max=score[i][0]; imax=0; min=score[i][0]; imin=0; for(j=0;j<=5;j++) { if(score[i][j]>=max) {max=score[i][j];imax=j;} } for(j=0;j<=5;j++) { if(score[i][j]<=min) {min=score[i][j];imin=j;} } score[i][imax]=0; score[i][imin]=0; sum=score[i][0]+score[i][1]+score[i][2]+score[i][3]+score[i][4]+score[i][5]; //当定义sum为float时会报:从int到float的强制转换会丢失数据的警告(后面的数组都是整型)【不能有警告】,但是我要使得下面countave的运算结果有小数点,这道题如果用double的话得分为0:【未实现:数据类型的选择应考虑空间和时间开销,本程序不应使用double类型】,定义sum为int的话,为什么float定义的countave没有小数点呢?我该怎么做呢?(VC++6.0)。感谢大佬!强制转换问题到底是为什么会出现呢?~ countave[i][0]=sum/4; countave[i][1]=i; } printf("\nscores:\n"); for(i=0;i<=9;i++) { for(j=1;j<=9;j++) { if(countave[j][0]<countave[j-1][0]) { temp=countave[j][0]; countave[j][0]=countave[j-1][0]; countave[j-1][0]=temp; temp2=countave[j][1]; countave[j][1]=countave[j-1][1]; countave[j-1][1]=temp2; } } } for(i=9;i>=0;i--) { printf("NO.%.0lf:%.2lf\n",countave[i][1]+1,countave[i][0]); count--; } return 0; }
感谢大佬帮助!初学C,请多包涵!
相关分类