用c语音数据结构中的链式结构实现学生信息,包括学生姓名、学号、年龄、性别和三门成绩的录入,并在录入时打印学生信息。
时间: 2024-11-06 18:15:24 浏览: 28
在C语言中,我们可以使用链表数据结构来实现一个学生信息的数据结构。首先,我们需要定义一个名为`Student`的结构体,包含学生的各项属性:
```c
struct Student {
char name[50]; // 学生姓名
int id; // 学号
int age; // 年龄
char gender; // 性别 (通常用大写字母'M'表示男性,'F'表示女性)
float scores[3]; // 三门成绩 (假设是单科满分100分)
};
```
然后创建一个链表节点结构,用于存储学生信息:
```c
typedef struct Node {
struct Student info;
struct Node* next; // 指向下一个节点的指针
} StudentNode;
```
接下来,我们可以编写函数来添加学生信息到链表中并打印:
```c
void addStudent(StudentNode** head, const char* name, int id, int age, char gender, float scores[]) {
// 创建一个新的节点
StudentNode* newNode = (StudentNode*)malloc(sizeof(StudentNode));
if (!newNode) {
printf("Memory allocation failed.\n");
return;
}
// 设置新节点的信息
strncpy(newNode->info.name, name, sizeof(newNode->info.name) - 1);
newNode->info.id = id;
newNode->info.age = age;
newNode->info.gender = gender;
memcpy(newNode->info.scores, scores, sizeof(float) * 3);
// 如果链表为空,将新节点设置为头节点
if (*head == NULL) {
*head = newNode;
} else {
// 否则,将新节点添加到最后
StudentNode* temp = *head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode;
}
// 打印新添加的学生信息
printStudent(&newNode->info);
}
// 打印学生信息的辅助函数
void printStudent(const struct Student* student) {
printf("姓名:%s\n", student->name);
printf("学号:%d\n", student->id);
printf("年龄:%d岁\n", student->age);
printf("性别:%c\n", student->gender);
for (int i = 0; i < 3; i++) {
printf("成绩%d:%.2f\n", i + 1, student->scores[i]);
}
}
```
现在你可以通过`addStudent`函数录入学生信息并立即打印出来。记得在程序结束前释放不再需要的内存。
阅读全文