看板 ESOE-90 關於我們 聯絡資訊
早上那個是臨時趕出來的, 看底下的吧... qsort() 在 E3... ───────────────────────────────────── E1) # include <stdio.h> # include <stdlib.h> # define MAX_NAME_LEN (80 + 1) struct scores { int id; char name[MAX_NAME_LEN]; int calc; int com_prog; int sum; int rank; }; void input_scores(struct scores *, int); void dump_scores(struct scores *, int); int main() { int total; struct scores *scores; puts("How many students?"); if (scanf("%d", &total) < 1) exit(1); putchar('\n'); if ((scores = malloc(sizeof *scores * total)) == NULL) exit(1); input_scores(scores, total); dump_scores(scores, total); return 0; } void input_scores(struct scores *sc, int n) { int i; for (i = 0; i < n; i++, sc++) { printf("ID: %d\n", i + 1); sc->id = i + 1; puts("Name?"); scanf("%80s", sc->name); puts("Scores of Calculus/Computer Program?"); scanf("%d%d", &sc->calc, &sc->com_prog); sc->sum = sc->calc + sc->com_prog; putchar('\n'); } } void dump_scores(struct scores *sc, int n) { while (n--) { printf("[%d] %-20s : %3d %3d %3d\n", sc->id, sc->name, sc->calc, sc->com_prog, sc->sum ); sc++; } } ---------------------------- E1 output ---------------------------- How many students? 5 ID: 1 Name? 大雄 Scores of Calculus/Computer Program? 100 0 ID: 2 Name? 技安 Scores of Calculus/Computer Program? 60 50 ID: 3 Name? 阿福 Scores of Calculus/Computer Program? 40 40 ID: 4 Name? 宜靜 Scores of Calculus/Computer Program? 90 80 ID: 5 Name? 小叮噹 Scores of Calculus/Computer Program? 50 100 [1] 大雄 : 100 0 100 [2] 技安 : 60 50 110 [3] 阿福 : 40 40 80 [4] 宜靜 : 90 80 170 [5] 小叮噹 : 50 100 150 ───────────────────────────────────── E2) # include <stdio.h> # include <stdlib.h> # define MAX_NAME_LEN (80 + 1) # define N(x) (sizeof (x) / sizeof *(x)) struct scores { int id; char name[MAX_NAME_LEN]; int calc; int com_prog; int sum; int rank; }; int main() { int n; struct scores scores[] = { {1, "大雄", 100, 0, }, {2, "技安", 60, 50, }, {3, "阿福", 40, 40, }, {4, "宜靜", 90, 80, }, {5, "小叮噹", 50, 100, } }; struct scores *p; for (p = scores; p < scores + N(scores); p++) p->sum = p->calc + p->com_prog; while (1) { puts("\nWhich ID would you like to query?" " [-1 to exit]"); scanf("%d", &n); if (n == -1) break; else if (n < 1 || n > N(scores)) continue; p = scores + n - 1; printf("[%d] %-20s : %3d %3d %3d\n", p->id, p->name, p->calc, p->com_prog, p->sum ); } return 0; } ---------------------------- E2 output ---------------------------- Which ID would you like to query? [-1 to exit] 5 [5] 小叮噹 : 50 100 150 Which ID would you like to query? [-1 to exit] 3 [3] 阿福 : 40 40 80 Which ID would you like to query? [-1 to exit] 1 [1] 大雄 : 100 0 100 Which ID would you like to query? [-1 to exit] 4 [4] 宜靜 : 90 80 170 Which ID would you like to query? [-1 to exit] 2 [2] 技安 : 60 50 110 Which ID would you like to query? [-1 to exit] 0 Which ID would you like to query? [-1 to exit] 6 Which ID would you like to query? [-1 to exit] -1 ───────────────────────────────────── E3) # include <stdio.h> # include <stdlib.h> # define MAX_NAME_LEN (80 + 1) # define N(x) (sizeof (x) / sizeof *(x)) struct scores { int id; char name[MAX_NAME_LEN]; int calc; int com_prog; int sum; int rank; }; int cmp_scores(struct scores *, struct scores *); int main() { int i; struct scores scores[] = { {1, "大雄", 100, 0, }, {2, "技安", 60, 50, }, {3, "阿福", 40, 40, }, {4, "宜靜", 90, 80, }, {5, "小叮噹", 50, 100, } }; for (i = 0; i < N(scores); i++) scores[i].sum = scores[i].calc + scores[i].com_prog; qsort(scores, N(scores), sizeof *scores, (int (*)(const void *, const void *))cmp_scores); for (i = 0; i < N(scores); i++) printf("[%d] %-20s : %3d %3d %3d %3d\n", scores[i].id, scores[i].name, scores[i].calc, scores[i].com_prog, scores[i].sum, scores[i].rank = i + 1 ); return 0; } int cmp_scores(struct scores *p1, struct scores *p2) { return p2->sum - p1->sum; } ---------------------------- E3 output ---------------------------- [4] 宜靜 : 90 80 170 1 [5] 小叮噹 : 50 100 150 2 [2] 技安 : 60 50 110 3 [1] 大雄 : 100 0 100 4 [3] 阿福 : 40 40 80 5 ───────────────────────────────────── -- 新詩練習:新鮮。踩破初春裡的狗大便;不經意的滄桑,滿溢著嫩黃的喜悅。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.224.161.102