定义一个结构体类型,其成员包括:学号、姓名、性别(char型)、年龄、高数、计算机、物理、英语、总分、平均分。要求编写函数del()根据用户输入删除的位置将学生从学生信息数组中删除并显示删除后所有学生
时间: 2024-10-16 20:03:13 浏览: 45
在C语言中,你可以定义一个名为`Student`的结构体类型,包含你提到的所有成员变量。然后,可以创建一个动态数组来存储学生信息,并编写一个`del()`函数来删除指定位置的学生。这里是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义学生结构体
typedef struct {
int id; // 学号
char name[50]; // 姓名
char gender; // 性别
int age; // 年龄
float highmath; // 高数成绩
float comp; // 计算机成绩
float physics; // 物理成绩
float english; // 英语成绩
float total_score;
float average_score;
} Student;
// 动态内存分配和释放
void create_students(Student* students, int size) {
students = (Student*)malloc(size * sizeof(Student));
}
void delete_student(Student** students, int size, int pos) {
if (pos >= 0 && pos < size) {
// 将最后一个学生的数据移动到删除位置
memmove(&(*students)[pos], &(*students)[pos+1], (size - pos - 1) * sizeof(Student));
// 释放最后一个学生的内存
free(*students + size - 1);
// 更新数组大小
size--;
// 重新调整指向正确的地址
*students = (Student*)realloc(*students, size * sizeof(Student));
printf("已删除第 %d 位学生的信息。\n", pos + 1);
} else {
printf("无效的位置。\n");
}
}
// 显示学生信息
void display_students(const Student* students, int size) {
for (int i = 0; i < size; ++i) {
printf("学号:%d 姓名:%s 性别:%c 年龄:%d\n",
students[i].id, students[i].name, students[i].gender, students[i].age);
printf("高数:%.2f 计算机:%.2f 物理:%.2f 英语:%.2f\n",
students[i].highmath, students[i].comp, students[i].physics, students[i].english);
printf("总分:%.2f 平均分:%.2f\n\n", students[i].total_score, students[i].average_score);
}
}
int main() {
int size = 5; // 初始学生数
Student* students = NULL;
// 创建学生信息
create_students(&students, size);
// 添加一些学生信息(省略)
// 删除操作
int del_pos = 2; // 用户输入的位置
delete_student(&students, size, del_pos);
// 显示删除后的学生信息
display_students(students, size);
return 0;
}
```
在这个例子中,我们首先定义了一个`Student`结构体,接着创建了`create_students()`函数用于初始化数组,`delete_student()`函数负责删除指定位置的学生,以及`display_students()`函数来展示学生的详细信息。在`main()`函数里,你可以根据需要添加更多的学生并调用相应功能。
阅读全文