面试题答案
一键面试#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义学生结构体
typedef struct Student {
char name[50];
int age;
float score;
} Student;
// 初始化学生结构体数组
Student* initStudents(int num) {
Student* students = (Student*)malloc(num * sizeof(Student));
if (students == NULL) {
printf("内存分配失败\n");
return NULL;
}
return students;
}
// 输入学生信息
void inputStudents(Student* students, int num) {
for (int i = 0; i < num; i++) {
printf("请输入第 %d 个学生的姓名: ", i + 1);
scanf("%s", students[i].name);
printf("请输入第 %d 个学生的年龄: ", i + 1);
scanf("%d", &students[i].age);
printf("请输入第 %d 个学生的成绩: ", i + 1);
scanf("%f", &students[i].score);
}
}
// 按照成绩排序(冒泡排序,使用指针操作)
void sortStudentsByScore(Student* students, int num) {
for (int i = 0; i < num - 1; i++) {
for (int j = 0; j < num - i - 1; j++) {
if ((students + j)->score < (students + j + 1)->score) {
Student temp = *(students + j);
*(students + j) = *(students + j + 1);
*(students + j + 1) = temp;
}
}
}
}
// 释放内存
void freeStudents(Student* students) {
free(students);
}
// 打印学生信息
void printStudents(Student* students, int num) {
for (int i = 0; i < num; i++) {
printf("姓名: %s, 年龄: %d, 成绩: %.2f\n", (students + i)->name, (students + i)->age, (students + i)->score);
}
}
int main() {
int num;
printf("请输入学生数量: ");
scanf("%d", &num);
Student* students = initStudents(num);
if (students == NULL) {
return 1;
}
inputStudents(students, num);
printf("\n排序前学生信息:\n");
printStudents(students, num);
sortStudentsByScore(students, num);
printf("\n排序后学生信息:\n");
printStudents(students, num);
freeStudents(students);
return 0;
}
上述代码实现了以下功能:
- 初始化:通过
initStudents
函数使用malloc
动态分配内存来存储学生结构体数组。 - 信息输入:
inputStudents
函数用于从用户处获取每个学生的姓名、年龄和成绩。 - 排序:
sortStudentsByScore
函数使用冒泡排序算法,通过指针操作对学生结构体数组按照成绩进行降序排序。 - 内存释放:
freeStudents
函数使用free
释放动态分配的内存。 - 打印:
printStudents
函数用于打印学生的信息。
在main
函数中,引导用户输入学生数量,调用上述函数完成各项操作。