早教吧作业答案频道 -->其他-->
c语言文件操作,结构体老师要统计所有同学的c语言成绩总分和排名,但是他又懒得算,就让你写个程序来帮他算。他将同学们的成绩存入了文件score.txt中,下面是score.in的样例5
题目详情
c语言文件操作,结构体
老师要统计所有同学的c语言成绩总分和排名,但是他又懒得算,就让你写个程序来帮他算。他将同学们的成绩存入了文件score.txt中,下面是score.in的样例
5
Ultraman 113 10 10 70
Zhanghua 15 5 15 90
Tom 40 10 15 70
Pikachu 99 0 0 80
Doraemon 10 15 15 80
第一行是一个数字n,表示有n名同学。下面n行,每行分别表示每名同学的姓名、杭电ACM刷题数,课题表现分,实验分和笔试成绩。总成绩按照下面的方式进行计算:
1.总成绩满分100。
2.笔试成绩×70%后再加到总分上。
3.实验分和课堂分合计30分。若杭电刷题超过30,则每刷10道,可再实验分和课堂分中加1分(但不可超过30分上限),若杭电刷题超过80,则实验分和课堂分得满分。
使用以上方式计算每名同学的总分,并按总分从大到小的顺序,将每名同学的姓名与成绩存入rank.txt文件中。若总分相同,则姓名从首位开始ASCII码小的同学排在前面。例如上面给出的例子,输出文件为Doraemon 86
Pikachu 86
Zhanghua 83
Ultraman 79
Tom 78
老师要统计所有同学的c语言成绩总分和排名,但是他又懒得算,就让你写个程序来帮他算。他将同学们的成绩存入了文件score.txt中,下面是score.in的样例
5
Ultraman 113 10 10 70
Zhanghua 15 5 15 90
Tom 40 10 15 70
Pikachu 99 0 0 80
Doraemon 10 15 15 80
第一行是一个数字n,表示有n名同学。下面n行,每行分别表示每名同学的姓名、杭电ACM刷题数,课题表现分,实验分和笔试成绩。总成绩按照下面的方式进行计算:
1.总成绩满分100。
2.笔试成绩×70%后再加到总分上。
3.实验分和课堂分合计30分。若杭电刷题超过30,则每刷10道,可再实验分和课堂分中加1分(但不可超过30分上限),若杭电刷题超过80,则实验分和课堂分得满分。
使用以上方式计算每名同学的总分,并按总分从大到小的顺序,将每名同学的姓名与成绩存入rank.txt文件中。若总分相同,则姓名从首位开始ASCII码小的同学排在前面。例如上面给出的例子,输出文件为Doraemon 86
Pikachu 86
Zhanghua 83
Ultraman 79
Tom 78
▼优质解答
答案和解析
#include <stdio.h>
#define SCORERADIX 0.7
typedef struct tagScore
{
double m_nSumScore;
long m_lACM;
int m_nClass;
int m_nDone;
int m_nScore;
char m_strName[15];
}SCORE,*PSCORE;
int main()
{
FILE *fpSrc = NULL,*fpDst = NULL;
PSCORE pScore = NULL;
long lCnt = 0l,i = 0l;
int nIncr = 0;
fpSrc = fopen("score.txt","r");
if (NULL == fpSrc)
{
/*提示信息*/
goto CLEARNNONE;
}
fpDst = fopen("rank.txt","w");
if (NULL == fpDst)
{
/*提示信息*/
goto CLEARNSRC;
}
if (EOF == fscanf(fpSrc,"%ld",&lCnt) || lCnt < 0l)
{
/*提示信息*/
goto CLEARNALL;
}
pScore = (PSCORE)calloc(lCnt,sizeof(SCORE));
if (NULL == pScore)
{
/*提示信息*/
goto CLEARNALL;
}
for(i = 0l;i < lCnt;++i)
{
if (EOF == fscanf(fpSrc,"%s%ld%d%d%d",pScore[i].m_strName,&pScore[i].m_lACM,&pScore[i].m_nClass,&pScore[i].m_nDone,&pScore[i].m_nScore))
{
/*提示信息*/
break;
}
pScore[i].m_nSumScore = (double)pScore[i].m_nScore * SCORERADIX;
nIncr = pScore[i].m_nClass + pScore[i].m_nDone;
if (pScore[i].m_lACM >= 80)
{
nIncr = 30;
}
else if (pScore[i].m_lACM > 30)
{
nIncr += ((pScore[i].m_lACM - 30) / 10) * 2;
if (nIncr > 30)
{
nIncr = 30;
}
}
else
{
/*do nothing*/
}
pScore[i].m_nSumScore += nIncr;
}
/*排序*/
for(i = 0l;i < lCnt;++i)
{
/*........*/
}
/*输出*/
for(i = 0l;i < lCnt;++i)
{
fprintf(fpDst,"%s %f\n",pScore[i].m_strName,pScore[i].m_nSumScore);
}
CLEARNALL:
free(pScore);
fclose(fpDst);
CLEARNSRC:
fclose(fpSrc);
CLEARNNONE:
return 0;
}
看了 c语言文件操作,结构体老师要...的网友还看了以下:
帮我算算体积60X27X31cms,38X20X13cms,总体积是多少呀?总体积是多少CBM? 2020-06-14 …
请帮帮我算算体积,.急..圆柱的直径是45公分,长是160CM请帮忙换算成立方米, 2020-06-14 …
帮算算体积,方形体积减去圆柱体积方形是31X21X49.3(厘米)圆柱是(高)32.5X(半径)5 2020-06-14 …
请知道英语六级如何算分的朋友帮帮算一下!做了一套六级题,快速阅读错了三个,听力短对话错了五个,填词 2020-06-24 …
兵不厌诈,下一句是什么?还有~一个圆椎体我在中间锯成2半,上面尖的部分不要,怎么算下面的?帮帮算看 2020-07-03 …
圆缺体积计算公式我现在要计算一个圆缺体的体积,弧长是1020,半径是2000,高是3000.求它的 2020-07-21 …
谁帮我写一篇话题作文啊:晨曦要求:600字的话题作文大体内容:新的学期,站在同一起跑线上,你有什么 2020-07-23 …
树干体积怎么计算?大头直径45厘米,小头直径25厘米,高450厘米.整体匀称…帮我算算体积是多少?我 2020-11-16 …
会议内容写一句话,我语文功底不行,哈哈第一次写不会,帮个忙(简要汇报去年工作今年工作打算及本科人员情 2020-11-26 …
如何计算体积货物尺寸为270*52*52,2箱,毛重790,如何计算出体积为3货物尺寸为270*52 2020-12-02 …