#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义学生结构体
struct Student {
char name[50];
int age;
float score;
};
// 添加学生信息
void addStudent(struct Student** students, int* numStudents, struct Student newStudent) {
(*numStudents)++;
*students = (struct Student*)realloc(*students, (*numStudents) * sizeof(struct Student));
(*students)[*numStudents - 1] = newStudent;
}
// 显示所有学生信息
void displayStudents(struct Student* students, int numStudents) {
for (int i = 0; i < numStudents; i++) {
printf("Name: %s\n", students[i].name);
printf("Age: %d\n", students[i].age);
printf("Score: %.2f\n", students[i].score);
printf("\n");
}
}
// 根据姓名查找学生信息
struct Student findStudentByName(struct Student* students, int numStudents, char* name) {
for (int i = 0; i < numStudents; i++) {
if (strcmp(students[i].name, name) == 0) {
return students[i];
}
}
struct Student emptyStudent = {"", 0, 0.0};
return emptyStudent;
}
int main() {
struct Student* students = NULL; // 学生信息数组指针
int numStudents = 0; // 学生数量
// 添加学生信息示例
addStudent(&students, &numStudents, {"Alice", 20, 85.5});
addStudent(&students, &numStudents, {"Bob", 21, 90.0});
addStudent(&students, &numStudents, {"Charlie", 22, 78.5});
// 显示所有学生信息
displayStudents(students, numStudents);
// 根据姓名查找学生信息示例
char nameToFind[] = "Bob";
struct Student foundStudent = findStudentByName(students, numStudents, nameToFind);
printf("Found student: \n");
printf("Name: %s\n", foundStudent.name);
printf("Age: %d\n", foundStudent.age);
printf("Score: %.2f\n", foundStudent.score);
printf("\n");
// 释放内存
free(students);
return 0;
}
逐行解释:
-
#include <stdio.h>
、#include <stdlib.h>
、#include <string.h>
:引入标准库头文件,分别用于输入输出、动态内存分配和字符串处理。 -
struct Student {...};
:定义了一个名为Student
的结构体,包含了学生的姓名、年龄和分数。 -
void addStudent(struct Student** students, int* numStudents, struct Student newStudent) {...}
:函数用于向学生数组中添加新的学生信息。 -
void displayStudents(struct Student* students, int numStudents) {...}
:函数用于显示所有学生的信息。 -
struct Student findStudentByName(struct Student* students, int numStudents, char* name) {...}
:函数用于根据姓名查找学生的信息。 -
int main() {...}
:主函数开始。 -
struct Student* students = NULL;
、int numStudents = 0;
:声明并初始化学生信息的数组指针和学生数量。 -
addStudent(&students, &numStudents, {...});
:调用addStudent
函数添加了三个学生信息到学生数组中。 -
displayStudents(students, numStudents);
:调用displayStudents
函数显示所有学生信息。 -
char nameToFind[] = "Bob";
:声明一个字符串用于查找学生信息。 -
struct Student foundStudent = findStudentByName(students, numStudents, nameToFind);
:调用findStudentByName
函数根据姓名查找学生信息。 -
free(students);
:释放动态分配的内存空间。