用c语言编写使用结构体表示,一个学生的信息包括学号,姓名,性别,生日,班级,每门课的成绩,并编写程序完成学生信息的录入,查询信息列表,能按指定项目排序显示的功能
时间: 2024-05-13 12:15:00 浏览: 145
以下是用 C 语言编写的使用结构体表示一个学生信息的示例代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX_GRADE_NUM 10 // 最大课程数
#define MAX_STUDENT_NUM 100 // 最大学生数
// 学生信息结构体
typedef struct student_info {
char stu_id[20]; // 学号
char name[20]; // 姓名
char sex[5]; // 性别
char birthday[20]; // 生日
char class[20]; // 班级
float grades[MAX_GRADE_NUM]; // 成绩数组
float total_grade; // 总成绩
} student_info;
// 学生信息数组
student_info students[MAX_STUDENT_NUM];
// 根据指定项目排序学生信息
void sort_students(int sort_item, int student_num) {
int i, j;
student_info tmp;
for (i = 0; i < student_num - 1; i++) {
for (j = i + 1; j < student_num; j++) {
switch (sort_item) {
case 0: // 按学号排序
if (strcmp(students[i].stu_id, students[j].stu_id) > 0) {
tmp = students[i];
students[i] = students[j];
students[j] = tmp;
}
break;
case 1: // 按姓名排序
if (strcmp(students[i].name, students[j].name) > 0) {
tmp = students[i];
students[i] = students[j];
students[j] = tmp;
}
break;
case 2: // 按总成绩排序
if (students[i].total_grade < students[j].total_grade) {
tmp = students[i];
students[i] = students[j];
students[j] = tmp;
}
break;
default:
break;
}
}
}
}
int main() {
int student_num = 0; // 学生数目
int grade_num = 0; // 课程数目
int sort_item = 0; // 排序项目
int i, j;
// 录入学生信息
printf("请输入学生数目:");
scanf("%d", &student_num);
printf("请输入课程数目:");
scanf("%d", &grade_num);
for (i = 0; i < student_num; i++) {
printf("请输入第%d个学生的信息:\n", i + 1);
printf("学号:");
scanf("%s", students[i].stu_id);
printf("姓名:");
scanf("%s", students[i].name);
printf("性别:");
scanf("%s", students[i].sex);
printf("生日:");
scanf("%s", students[i].birthday);
printf("班级:");
scanf("%s", students[i].class);
for (j = 0; j < grade_num; j++) {
printf("第%d门课成绩:", j + 1);
scanf("%f", &students[i].grades[j]);
students[i].total_grade += students[i].grades[j];
}
}
// 查询学生信息列表
printf("\n学生信息列表:\n");
for (i = 0; i < student_num; i++) {
printf("%s\t%s\t%s\t%s\t%s\t", students[i].stu_id, students[i].name, students[i].sex, students[i].birthday, students[i].class);
for (j = 0; j < grade_num; j++) {
printf("%.1f\t", students[i].grades[j]);
}
printf("%.1f\n", students[i].total_grade);
}
// 按指定项目排序并显示学生信息
printf("\n请输入排序项目(0:学号,1:姓名,2:总成绩):");
scanf("%d", &sort_item);
sort_students(sort_item, student_num);
printf("\n排序后的学生信息列表:\n");
for (i = 0; i < student_num; i++) {
printf("%s\t%s\t%s\t%s\t%s\t", students[i].stu_id, students[i].name, students[i].sex, students[i].birthday, students[i].class);
for (j = 0; j < grade_num; j++) {
printf("%.1f\t", students[i].grades[j]);
}
printf("%.1f\n", students[i].total_grade);
}
return 0;
}
```
在该程序中,我们使用了一个 `student_info` 结构体来表示一个学生的信息,包括学号、姓名、性别、生日、班级、每门课的成绩和总成绩。同时,我们定义了一个 `students` 数组来存储所有学生的信息。
在主函数中,我们首先通过用户输入录入了学生信息,并展示了一个学生信息列表。然后,用户可以输入排序项目(学号、姓名或总成绩)来对学生信息进行排序,并展示排序后的学生信息列表。
需要注意的是,该程序没有进行任何输入校验,例如输入的学号或姓名是否重复、输入的性别是否为“男”或“女”等。在实际开发中,我们需要根据具体需求进行相应的输入校验。
阅读全文