時間限制: 1 sec 記憶體限制: 128 mb
問題描述
李華大學已經上過乙個學期了,也了解了大學的考試,在沒出成績之前,他還是很擔心的,在成績出來後心裡的那塊石頭終於落下了。但在成績單上他看到了一些高中沒見到的名詞,成績單上有每科的學分,自己獲得學分,還有平均學分績點。然後他問問了學長,學長告訴他成績排名是按平均學分績點來排的,並告訴他了平均學分績點是如何算的,假設他的考試科門有高數,英語,導論,這3門的學分分別是5,4,4;學分績點的計算:不及格的學分績點為:0,及格的學分績點為:學分*(成績-50)*0.1;平均學分績點的計算:總科目學分績點相加除以總科目學分相加(結果保留兩位小數)。
假設李華這3門的成績分別為:97,85,87;取得的學分績點分別為:23.5,14,14.8;平均學分績點為:4.02。
他現在知道了室友的成績但不知道平均學分績點,他在第一學期學了程式,現在想用程式來計算並對乙個寢室的人進行排名,大家來幫幫他。(按平均學分績點從大到小的順序排,平均學分績點相同的,依次按照高數,英語,導論的順序來排,都相等的按姓名的字典序排)
輸入格式
第一行為乙個整數n代表寢室的人數
每個學生的成績佔4行
一行包括姓名,
另三行是3科的科目名和成績中間用空格隔開
輸出格式
輸出有n行,每行為乙個學生的資訊,學生資訊按姓名 平均學分績點 高數學分績點 英語學分績點 導論學分績點 (中間用空格隔開,保留兩位小數)
樣例輸入
3
lihua
math 97
english 85
theory 87
easter
math 90
english 80
theory 85
aidan
math 97
english 87
theory 85
樣例輸出
aidan 4.02 23.50 14.80 14.00
lihua 4.02 23.50 14.00 14.80
easter 3.54 20.00 12.00 14.00
題意統計學生姓名和三科成績,根據學分和成績計算各個學生的績點並排名
思路
可以使用三個函式來實現三種指令功能的呼叫,使用string 字串陣列來儲存檔案的名字和路徑名字。
#include //標頭檔案
#include //包含printf函式
using namespace std;
//定義儲存室友資料的結構體
struct roomate
human[10];//使用結構體陣列儲存多個人的資訊
//主函式
int main()
human[i].spoint[0] = (human[i].spoint[1]+human[i].spoint[2]+human[i].spoint[3])/(5+4+4);
}//使用氣泡排序的結構,對所有人進行排序
//依照1.平均學分績點2.高數學分績點3.英語學分績點4.導論學分績點5.姓名詞典序
for (i=0;ihuman[j+1].name[0])//5.姓名詞典序【暴力排序【排了五個字母
else if (human[j].name[0]==human[j+1].name[0])
else if (human[j].name[1]==human[j+1].name[1])
else if (human[j].name[2]==human[j+1].name[2])
else if (human[j].name[3]==human[j+1].name[3])}}
}}}}
}}for (i=0;i執行結果
本題的難點是結構體的運用以及複雜的資料和條件,理清思路就很簡單辣~
3 16 按績點排名
成績60分及以上的課程才予以計算績點 績點計算公式 課程成績 50 10 學分 學生總績點為所有績點之和除以10 輸入格式 班級數 課程數 各個課程的學分 班級人數 姓名 各科成績 輸出格式 class 班級號 姓名 佔10個字元,左對齊 績點 先按績點排序,再按姓名ascii碼排序。輸入樣例 1 ...
C 算24 解題思路
給出4個小於10個正整數,你可以使用加減乘除4種運算以及括號把這4個數連線起來得到乙個表示式。現在的問題是,是否存在一種方式使得得到的表示式的結果等於24。這裡加減乘除以及括號的運算結果和運算的優先順序跟我們平常的定義一致 這裡的除法定義是實數除法 比如,對於5,5,5,1,我們知道5 5 1 5 ...
1004 成績排名(C語言)
20 分 讀入 n 0 名學生的姓名 學號 成績,分別輸出成績最高和成績最低學生的姓名和學號。每個測試輸入包含 1 個測試用例,格式為 第 1 行 正整數 n 第 2 行 第 1 個學生的姓名 學號 成績 第 3 行 第 2 個學生的姓名 學號 成績 第 n 1 行 第 n 個學生的姓名 學號 成績...