十三週OJ2從檔案中讀資料
阿新 • • 發佈:2019-01-31
問題的及程式碼
/* 煙臺大學計算機與控制工程學院 檔名稱:從檔案中讀資料 作 者:展一 完成時間: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; }
執行結果
知識點總結
學習心得