P1080 MOOC期終成績

2022-06-13 01:33:12 字數 2350 閱讀 2821

1080 mooc期終成績 (25分)

現在的問題是,每次考試都產生一張獨立的成績單。本題就請你編寫程式,把不同的成績單合為一張。

列印出獲得合格證書的學生名單。每個學生佔一行,格式為:

學生學號g​p​​ g​mid−term​​ g​final​​ g

如果有的成績不存在(例如某人沒參加期中考試),則在相應的位置輸出「−」。輸出順序為按照總評分數(四捨五入精確到整數)遞減。若有並列,則按學號遞增。題目保證學號沒有重複,且至少存在1個合格的學生。

6 6 7

01234 880

a1903 199

ydjh2 200

wehu8 300

dx86w 220

missing 400

ydhfu77 99

wehu8 55

ydjh2 98

dx86w 88

a1903 86

01234 39

ydhfu77 88

a1903 66

01234 58

wehu8 84

ydjh2 82

missing 99

dx86w 81

missing 400 -1 99 99

ydjh2 200 98 82 88

dx86w 220 88 81 84

wehu8 300 55 84 84

這道題,我放到了倒數第二題才來寫,當初怎麼想都不明白,現在指標終於指明白了

整體思路:

按照學號排序(qsort)。

讀取期中考試成績。使用二分查詢(bsearch)找到該學號的記錄並更新。找不到(返回null)的說明沒有程式設計成績,也就無需做什麼了。

讀取期末考試成績,並計算總評。

按總評降序和學號公升序排序。

依次輸出總評60及以上的成績。

寫qsort/bsearch的比較(cmp)函式時,真的能檢驗對指標的理解程度

我狗一般的三個比較函式

int cmp_bsearch(const

void *a, const

void *b)

int cmp_id(const

void *a, const

void *b)

int cmp_total(const

void *a, const

void *b)

那個最長的比較函式長這樣

int cmp_total(const

void *a, const

void *b)

完整ac**:

#define _crt_secure_no_warnings#include 

#include

#include

#define max_size 10000typedef

struct

score;

int cmp_bsearch(const

void *a, const

void *b)

int cmp_id(const

void *a, const

void *b)

int cmp_total(const

void *a, const

void *b)

int main(void

), *s = buf; //

避免移動結構體

scanf("

%d %d %d

", &p, &m, &n);

for (int i = 0; i < p; i++)

}//接下去的輸入需要匹配id在這裡排個序,便於bsearch

qsort(scores, count, sizeof(scores[0

]), cmp_id);

void *result; //

void的指標指向null,可以指向任何型別

for (int i = 0; i < m; i++)

}for (int i = 0; i < n; i++)

else}}

//按總分排序

qsort(scores, count, sizeof(scores[0

]), cmp_total);

for (score **p = scores; *p && (*p)->total_mark >= 60; p++)

return0;

}

pat不易,諸君共勉!

1080 MOOC期終成績

最後乙個測試點 6分 如果有的成績不存在 例如某人沒參加期中考試 則在相應的位置輸出 1 如果有的成績為0,則相應的位置應該輸出的是 0 注意不要也輸出成 1 了 額外輸入樣例 2 2 2 aaa 0 bbb 200 aaa 0 bbb 0 aaa 0 bbb 60 正確的輸出樣例 bbb 200 ...

PAT 1080 MOOC期終成績

g g mi d te rm 40 g fi nal 60 g g mi d te rm 40 g fi nal 60 如果g mid term gf inal g m id t er m gf inal 否則總評 g 就是 gf inal g fi na l。這裡 gm id t erm gmi ...

PAT 1080 MOOC期終成績

現在的問題是,每次考試都產生一張獨立的成績單。本題就請你編寫程式,把不同的成績單合為一張。列印出獲得合格證書的學生名單。每個學生佔一行,格式為 學生學號g p g mid term g final g 如果有的成績不存在 例如某人沒參加期中考試 則在相應的位置輸出 輸出順序為按照總評分數 四捨五入精...