建学生结构体,包含(学号,姓名,性别,年龄,总分),最多可以存放100名学生信息,录入10名学生信息,输出。 1. 按照总分从高到低排序,输出 2. 再录入一名学生信息,插入到合适位置,保持总分顺序。
时间: 2024-10-27 10:14:54 浏览: 22
首先,我们可以创建一个名为`Student`的结构体,在C语言中定义如下:
```c
#include <stdio.h>
#include <string.h>
// 定义学生结构体
typedef struct {
int id; // 学号
char name[50]; // 姓名
char gender; // 性别 ( 'M' 或 'F' )
int age; // 年龄
float total_score; // 总分
} Student;
// 插入函数,用于在适当的位置添加新学生
void insert(Student students[], int size, Student new_student) {
if (size == 100) {
printf("学生容量已满,无法插入新的学生。\n");
return;
}
for (int i = 0; i < size; i++) {
if (students[i].total_score < new_student.total_score) {
memmove(&students[i + 1], &students[i], (size - i) * sizeof(Student));
students[i] = new_student;
break;
}
}
}
int main() {
const int MAX_STUDENTS = 100;
Student students[MAX_STUDENTS];
// 录入10名学生信息
for (int i = 0; i < 10; i++) {
printf("请输入第%d名学生的学号、姓名、性别、年龄和总分:\n", i + 1);
scanf("%d %s %c %d %f", &students[i].id, students[i].name, &students[i].gender, &students[i].age, &students[i].total_score);
}
// 输出所有学生信息
printf("\n原始学生信息(按总分升序):\n");
for (int i = 0; i < MAX_STUDENTS; i++) {
if (i < 10) {
printf("%d. 学号:%d 姓名:%s 性别:%c 年龄:%d 总分:%f\n", i + 1, students[i].id, students[i].name, students[i].gender, students[i].age, students[i].total_score);
} else {
break;
}
}
// 按照总分从高到低排序并输出
qsort(students, 10, sizeof(Student), compare_scores); // 假设compare_scores是一个比较函数
printf("\n学生信息(按总分降序):\n");
for (int i = 0; i < 10; i++) {
printf("%d. 学号:%d 姓名:%s 性别:%c 年龄:%d 总分:%f\n", i + 1, students[i].id, students[i].name, students[i].gender, students[i].age, students[i].total_score);
}
// 再录入一名学生信息
Student new_student;
printf("\n请输入新学生的学号、姓名、性别、年龄和总分:\n");
scanf("%d %s %c %d %f", &new_student.id, new_student.name, &new_student.gender, &new_student.age, &new_student.total_score);
// 插入新学生
insert(students, MAX_STUDENTS, new_student);
return 0;
}
```
在这个示例中,我们假设有一个自定义的比较函数`compare_scores`用于排序。注意,这个程序仅处理了前10名学生的情况,因为最大容量限制为100名。如果需要插入更多学生,你需要修改`insert`函数和`main`中的循环条件。
阅读全文