54 lines
1.6 KiB
C
54 lines
1.6 KiB
C
#include <stdio.h>
|
||
|
||
struct student {
|
||
int id, c;
|
||
float x, y, z;
|
||
float sum;
|
||
} stu[3];
|
||
|
||
/**
|
||
* 交换两个结构体中的内容
|
||
* a、b:待交换的结构体指针
|
||
*/
|
||
void swap(struct student* a, struct student* b) {
|
||
struct student c;
|
||
c = *a;
|
||
*a = *b;
|
||
*b = c;
|
||
}
|
||
|
||
/**
|
||
* 对结构体数组进行冒泡排序
|
||
* p:待排序的结构体数组指针
|
||
* n:结构体数组长度
|
||
*/
|
||
void sort(struct student* p, int n) {
|
||
for (int i = 0; i < n; i++) {
|
||
for (int j = 0; j < n - i - 1; j++) {
|
||
if ((p + j)->c > (p + j + 1)->c || ((p + j)->c == (p + j + 1)->c && (p + j)->sum < (p + j + 1)->sum)) {
|
||
swap(p + j, p + j + 1);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
int main() {
|
||
// 使用指针读取输入数据
|
||
scanf("%d,%d,%f,%f,%f", &((stu + 0)->c), &((stu + 0)->id), &((stu + 0)->x), &((stu + 0)->y), &((stu + 0)->z));
|
||
scanf("%d,%d,%f,%f,%f", &((stu + 1)->c), &((stu + 1)->id), &((stu + 1)->x), &((stu + 1)->y), &((stu + 1)->z));
|
||
scanf("%d,%d,%f,%f,%f", &((stu + 2)->c), &((stu + 2)->id), &((stu + 2)->x), &((stu + 2)->y), &((stu + 2)->z));
|
||
// 计算总成绩
|
||
(stu + 0)->sum = (stu + 0)->x + (stu + 0)->y + (stu + 0)->z;
|
||
(stu + 1)->sum = (stu + 1)->x + (stu + 1)->y + (stu + 1)->z;
|
||
(stu + 2)->sum = (stu + 2)->x + (stu + 2)->y + (stu + 2)->z;
|
||
|
||
sort(stu, 3);
|
||
|
||
// 使用指针输出结果
|
||
printf("%d,%d,%.1f\n", (stu + 0)->c, (stu + 0)->id, (stu + 0)->sum);
|
||
printf("%d,%d,%.1f\n", (stu + 1)->c, (stu + 1)->id, (stu + 1)->sum);
|
||
printf("%d,%d,%.1f\n", (stu + 2)->c, (stu + 2)->id, (stu + 2)->sum);
|
||
|
||
return 0;
|
||
}
|