面试题答案
一键面试#include <stdio.h>
#include <string.h>
// 定义Course结构体
struct Course {
char name[50];
int credit;
};
// 定义Student结构体
struct Student {
char name[50];
int age;
struct Course* courses[5];
int courseCount;
};
// 向学生的课程数组中添加一门课程
void addCourse(struct Student* student, struct Course* course) {
if (student->courseCount < 5) {
student->courses[student->courseCount++] = course;
} else {
printf("该学生已选满5门课程,无法添加更多课程。\n");
}
}
// 计算一个学生所选课程的总学分
int calculateTotalCredit(struct Student* student) {
int totalCredit = 0;
for (int i = 0; i < student->courseCount; i++) {
totalCredit += student->courses[i]->credit;
}
return totalCredit;
}
// 找出总学分最高的学生,并返回该学生的姓名
const char* findStudentWithMaxCredit(struct Student* students, int length) {
int maxCredit = 0;
const char* maxStudentName = "";
for (int i = 0; i < length; i++) {
int currentCredit = calculateTotalCredit(&students[i]);
if (currentCredit > maxCredit) {
maxCredit = currentCredit;
maxStudentName = students[i].name;
}
}
return maxStudentName;
}
你可以使用以下方式调用这些函数:
int main() {
struct Course course1 = {"数学", 3};
struct Course course2 = {"英语", 2};
struct Course course3 = {"计算机科学", 4};
struct Student student1 = {"Alice", 20, {}, 0};
struct Student student2 = {"Bob", 21, {}, 0};
addCourse(&student1, &course1);
addCourse(&student1, &course2);
addCourse(&student2, &course3);
const char* maxCreditStudent = findStudentWithMaxCredit(&student1, 2);
printf("总学分最高的学生是: %s\n", maxCreditStudent);
return 0;
}
代码说明
-
结构体定义:
struct Course
结构体包含课程名称name
和学分credit
。struct Student
结构体包含学生姓名name
、年龄age
、一个struct Course
类型的指针数组courses
以及当前已选课程数量courseCount
。
-
addCourse
函数:- 用于向学生的课程数组中添加一门课程,如果课程数量未达到5门,则添加成功;否则提示已选满。
-
calculateTotalCredit
回调函数:- 计算一个学生所选课程的总学分,遍历学生的课程数组,累加每门课程的学分。
-
findStudentWithMaxCredit
函数:- 接受一个
struct Student
类型的数组指针和数组长度,使用calculateTotalCredit
回调函数找出总学分最高的学生,并返回该学生的姓名。
- 接受一个
-
main
函数:- 创建了一些课程和学生实例,并调用上述函数进行测试。