早上那個是臨時趕出來的, 看底下的吧...
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