中易网

C++文件的输入与输出怎么写?????怎么样可以完成这个程序???

答案:2  悬赏:0  
解决时间 2021-11-08 07:42
  • 提问者网友:花之森
  • 2021-11-08 01:45
比赛结果数据处理

参赛选手n人(n>1),评委m人(m>2),评委给每一选手打一个分数score(分数score为小于等于10的一个正实数)。选手的最后得分lastScore计算方法为

(1)m<9时,去掉一个最高分和一个最低分后另m-2个得分的平均值。

(2)m≥9时,去掉两个最高分和两个最低分后另m-4个得分的平均值。

假设事先已经建立了text型的数据文件f1.txt,其中依次记录着n个选手的编号(一个正整数)、姓名(一个字符串)以及m个评委给出的得分。

请编制程序,依次从数据文件f1.txt中读入n个选手的有关信息,而后按上述规定方法计算出每一个选手的最后得分,而且往屏幕上以及另一个text型文件f2.txt中同时输出如下形式的结果信息。

假设参赛选手人数n=5,评委人数m=7,磁盘文件f1.txt中的初始数据为:

1 zhangjin 8.8 9.3 7.9 8.7 8.9 9.7 9.2

2 lintao 8.9 8.2 8.6 8.8 8.5 9.1 9.3

3 guojian 8.9 8.4 8.7 8.6 8.6 8.4 8.6

4 maling 7.9 8.3 8.5 8.6 8.5 8.9 8.3

5 liuyifan 9.5 9.1 9.8 9.2 9.0 9.5 8.9
那么,程序执行后,屏幕显示结果以及磁盘文件f2.txt中的结果均应该为:
----------------------------------------------------------
参赛号 姓 名 最高分 最低分 累积分 最后得分
----------------------------------------------------------
1 zhangjin
9.7 7.9
44.9 8.98
2
lintao 9.3
8.2
43.9 8.78
3
guojian
8.9 8.4
42.9 8.58
4
maling
8.9 7.9
42.2 8.44
5 liuyifan
9.8 8.9
46.3 9.26
----------------------------------------------------------
思考:可进一步考虑找出比赛的第1至第k名,也在屏幕以及f2.txt中同时输出相关的结果信息(k小于等于n,并规定若多个选手最后得分相同时,则有效分(即已删除原来的最高分后)中最高分高者名次优先)。
最佳答案
  • 二级知识专家网友:何必打扰
  • 2021-11-08 03:25
#include
#include

//评委人数m<9时的处理
void func1(int m){
int i,id;
float x,sum,ave,max,min;
char name[15];
FILE *pfr,*pfw;
pfr=fopen("f1.txt","r");
pfw=fopen("f2.txt","w");
printf("参赛号 姓 名 最高分 最低分 累积分 最后得分\n");
fscanf(pfr,"%d%s",&id,name);
while(!feof(pfr)){
max=0, min=11,sum=0;
for(i=0; i fscanf(pfr,"%f",&x);
sum+=x;
if(x>max) max=x;
if(x }
sum=sum-max-min;
ave=sum/(m-2);
printf("%8d%10s%8.1f%8.1f%8.1f%8.2f\n",id,name,max,min,sum,ave);
fprintf(pfw,"%2d%10s %4.1f %4.1f %5.1f %5.2f\n",id,name,max,min,sum,ave);
fscanf(pfr,"%d%s",&id,name);
}
fclose(pfr);
fclose(pfw);
}

//评委人数m>=9时的处理
void func2(int m){
int i,n,id;
float x,sum,ave,max1,min1,max2,min2;
char name[15];
FILE *pfr,*pfw;
pfr=fopen("f1.txt","r");
pfw=fopen("f2.txt","w");
printf("参赛号 姓 名 最高分1 最高分2 最低分1 最低分2 累积分 最后得分\n");
fscanf(pfr,"%d%s",&id,name);
while(!feof(pfr)){
max1=max2=0, min1=min2=11,sum=0;
for(i=0; i fscanf(pfr,"%f",&x);
sum+=x;
if(x>max1) { max2=max1; max1=x; }
else if(x>max2) max2=x;
if(x else if(x }
sum=sum-max1-max2-min1-min2;
ave=sum/(m-4);
printf("%8d%10s%8.1f%8.1f%8.1f%8.1f%8.1f%8.2f\n",id,name,max1,max2,min1,min2,sum,ave);
fprintf(pfw,"%2d%10s %4.1f %4.1f %4.1f %4.1f %4.1f %4.1f %5.1f %5.2f\n",id,name,max1,max2,min1,min2,sum,ave);
fscanf(pfr,"%d%s",&id,name);
}
fclose(pfr);
fclose(pfw);
}

void main(){
func1(7);
return;
}
全部回答
  • 1楼网友:夢想黑洞
  • 2021-11-08 04:04
我暂时保留我的看法!
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息