1. 程式人生 > >十三週OJ2從檔案中讀資料

十三週OJ2從檔案中讀資料

問題的及程式碼

/*
煙臺大學計算機與控制工程學院
檔名稱:從檔案中讀資料
作    者:展一
完成時間:2016年11月28日
題目描述
 文字檔案score.dic 中儲存了n名學生的資訊(班級編號,姓名,成績),每個學生資訊佔一行,每行的資料之間使用製表符分割,如下所示:

145811  fuxin 100
145811  chengxian 90
145812  zhangxue 92
145812  lijun 88
……
  檔案中儲存的學生資訊按照班級編號升序排列,每個班級的人數可以不同,要求讀取檔案中所有學生的成績,計算每個班級的平均成績,將班級編號和平均成績輸出。
  主程式已給出,請根據提示補充缺失程式碼並提交該部分。
輸入
n名學生的資訊(班級編號,姓名,成績)(檔案讀入)
輸出
 每個班級的班級編號和平均成績
樣例輸入
 無(除錯時請自建檔案作為輸入)
樣例輸出
145811 95
145812 90
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int num=0;          /* 班級人數計數 */
    int sumScore=0;     /* 累計成績*/
    int curClass;       /* 當前班級 */
    int curScore;       /* 當前成績 */
    int lastClass;      /* 上一個班級*/
    int readItems;      /* 正確讀入資料數目 */
    FILE *fin;          /* 輸入檔案 */
    fin=fopen("score.dic","r");     /* 開啟輸入檔案讀 */
    if(!fin) /* 檔案開啟失敗 */
    {
        fprintf(stderr,"error open file!\n");   /* 輸出錯誤資訊到標準錯誤裝置 */
        exit(-1);   /* 強制退出,並返回錯誤碼 */
    }
    /****************/
    char name[20];//在本題中,姓名只讀入卻不做處理
    fscanf(fin,"%d%s%d",&curClass, name, &curScore);
    sumScore=curScore;
    lastClass=curClass;
    num=1;
    while(fscanf(fin,"%d%s%d",&curClass, name, &curScore)!=EOF)
    {
        if(lastClass==curClass)
        {
            num++;
            sumScore+=curScore;
        }
        else
        {
            printf("%d\t%d\n",lastClass,sumScore/num);
            num=1;
            sumScore=curScore;
            lastClass=curClass;
        }
    }
    printf("%d\t%d\n",lastClass,sumScore/num);
    fclose(fin);
    /*****************/
    return 0;
}


執行結果

知識點總結

學習心得