Đề bài
Lưu thông tin cầu thủ cricket (tên, tuổi, trận đấu, trung bình điểm) vào struct, sắp xếp theo trung bình điểm, hiển thị dạng bảng.
Giải pháp
Nhập thông tin cầu thủ tại runtime dùng struct. Sắp xếp tăng dần theo điểm trung bình (average runs) để dễ so sánh.
Logic sắp xếp (Bubble Sort)
for(i = 0; i < 2; i++) {
for(j = i+1; j < 2; j++) {
if(c[i].avrn > c[j].avrn) {
temp1 = c[i];
c[i] = c[j];
c[j] = temp1;
}
}
}
Chương trình hoàn chỉnh
#include <stdio.h>
#include <string.h>
struct cricketer {
char name[50];
int age;
int match;
float avrn;
char temp; // Đọc \n
};
struct cricketer c[20], temp1;
void main() {
int i, j;
for(i = 0; i < 2; i++) {
printf("Nhập dữ liệu cầu thủ %d\n", i+1);
printf("Tên: ");
gets(c[i].name);
printf("Tuổi: ");
scanf("%d", &c[i].age);
printf("Số trận: ");
scanf("%d", &c[i].match);
printf("Điểm trung bình: ");
scanf("%f", &c[i].avrn);
scanf("%c", &c[i].temp); // Đọc \n
}
// Sắp xếp theo điểm trung bình tăng dần
for(i = 0; i < 2; i++) {
for(j = i+1; j < 2; j++) {
if(c[i].avrn > c[j].avrn) {
temp1 = c[i];
c[i] = c[j];
c[j] = temp1;
}
}
}
printf("\nDanh sách đã sắp xếp:\n");
for(i = 0; i < 2; i++) {
printf("%d\t%s\t%d\t%d\t%.2f\n\n",
i+1, c[i].name, c[i].age, c[i].match, c[i].avrn);
}
}
Kết quả chạy
Nhập dữ liệu cầu thủ 1
Tên: Dhoni
Tuổi: 39
Số trận: 150
Điểm trung bình: 200
Nhập dữ liệu cầu thủ 2
Tên: Virat
Tuổi: 36
Số trận: 135
Điểm trung bình: 190
Danh sách đã sắp xếp:
1 Virat 36 135 190.00
2 Dhoni 39 150 200.00