/* 编写一程序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,请多包涵!
1 回答
- 1 回答
- 0 关注
- 1564 浏览
添加回答
举报
0/150
提交
取消