当前位置 :
c语言文件操作,结构体老师要统计所有同学的c语言成绩总分和排名,但是他又懒得算,就让你写个程序来帮他算。他将同学们的成绩存入了文件score.txt中,下面是score.in的样例5
更新时间: 2025-08-27 12:44:56
1人问答
问题描述:

c语言文件操作,结构体

老师要统计所有同学的c语言成绩总分和排名,但是他又懒得算,就让你写个程序来帮他算。他将同学们的成绩存入了文件score.txt中,下面是score.in的样例

5

Ultraman113101070

Zhanghua1551590

Tom40101570

Pikachu990080

Doraemon10151580

第一行是一个数字n,表示有n名同学。下面n行,每行分别表示每名同学的姓名、杭电ACM刷题数,课题表现分,实验分和笔试成绩。总成绩按照下面的方式进行计算:

1.总成绩满分100。

2.笔试成绩×70%后再加到总分上。

3.实验分和课堂分合计30分。若杭电刷题超过30,则每刷10道,可再实验分和课堂分中加1分(但不可超过30分上限),若杭电刷题超过80,则实验分和课堂分得满分。

使用以上方式计算每名同学的总分,并按总分从大到小的顺序,将每名同学的姓名与成绩存入rank.txt文件中。若总分相同,则姓名从首位开始ASCII码小的同学排在前面。例如上面给出的例子,输出文件为Doraemon86

Pikachu86

Zhanghua83

Ultraman79

Tom78

田光进回答:
  #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 %fn",pScore[i].m_strName,pScore[i].m_nSumScore);   }   CLEARNALL:   free(pScore);   fclose(fpDst);   CLEARNSRC:   fclose(fpSrc);   CLEARNNONE:   return 0;   }
最新更新
保卡通(baokatong.com)汇总了汉语字典,新华字典,成语字典,组词,词语,在线查字典,中文字典,英汉字典,在线字典,康熙字典等等,是学生查询学习资料的好帮手,是老师教学的好助手。
声明:本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
Copyright©2009-2021 保卡通 baokatong.com 版权所有