🧑 博主简介:现任阿里巴巴嵌入式技术专家,15年工作经验,深耕嵌入式+人工智能领域,精通嵌入式领域开发、技术管理、简历招聘面试。CSDN优质创作者,全网11W+粉丝博主,提供产品测评、学习辅导、简历面试辅导、毕设辅导、项目开发、C/C++/Java/Python/Linux/AI等方面的服务,同时还运营着十几个不同主题的技术交流群,如有需要请站内私信或者联系VX(
gylzbk),互相学习共同进步。
家人们!还在为C语言的复杂语法头秃吗?别慌!今天咱们不搞虚的,直接上手一个超实用的C语言案例 —— 学生成绩管理系统!通过这个案例,你能把C语言的数组、结构体、函数这些核心知识点串起来,直接拿捏编程实战技巧,话不多说,开冲!
需求分析
咱们要实现的学生成绩管理系统,得具备以下核心功能:
录入学生信息:包括学生姓名、学号以及语文、数学、英语三门课程的成绩。
计算学生总分与平均分:根据录入的成绩,自动算出每个学生的总分和平均分。
显示学生信息:将录入的学生信息、总分和平均分全部展示出来。
排序功能:能按照学生的总分从高到低进行排序,方便查看成绩排名。
代码实现
定义结构体
首先,我们使用结构体来存储学生的信息,代码如下:
#include \<stdio.h>
#include \<string.h>
//定义学生结构体
typedef struct
char nme\[50];
int id
float chinse;
float math
float englih;
float total;
float average;
} Student;
在这个结构体中,name用于存储学生姓名,id存储学号,chinese、math、english分别存储语文、数学、英语成绩,total和average则用来保存总分和平均分。
录入学生信息
接下来,编写函数实现学生信息的录入:
// 录入学生信息
void inputStudent(Student \*students, int n) {
for (int i = 0; i < n; i++) {
printf("请输入第 %d 个学生的姓名: ", i + 1);
scanf("%s", students\[i].name);
printf("请输入第 %d 个学生的学号: ", i + 1);
scanf("%d", \&students\[i].id);
printf("请输入第 %d 个学生的语文成绩: ", i + 1);
scanf("%f", \&students\[i].chinese);
printf("请输入第 %d 个学生的数学成绩: ", i + 1);
scanf("%f", \&students\[i].math);
printf("请输入第 %d 个学生的英语成绩: ", i + 1);
scanf("%f", \&students\[i].english);
}
}
这个函数通过循环,依次让用户输入每个学生的各项信息,并存储到结构体数组students中。
计算总分和平均分
然后,编写函数计算每个学生的总分和平均分:
// 计算总分和平均分
void calculateScore(Student \*students, int n) {
for (int i = 0; i < n; i++) {
students\[i].total = students\[i].chinese + students\[i].math + students\[i].english;
students\[i].average = students\[i].total / 3;
}
}
函数遍历结构体数组,将每个学生的三门成绩相加得到总分,再除以 3 算出平均分。
显示学生信息
再编写函数将学生的信息、总分和平均分展示出来:
// 显示学生信息
void displayStudent(Student \*students, int n) {
printf("姓名\t学号\t语文\t数学\t英语\t总分\t平均分\n");
for (int i = 0; i < n; i++) {
printf("%s\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n",
students\[i].name, students\[i].id, students\[i].chinese, students\[i].math, students\[i].english,
students\[i].total, students\[i].average);
}
}
该函数先打印表头,然后通过循环遍历结构体数组,按照指定格式输出每个学生的详细信息。
按总分排序
最后,使用冒泡排序法实现按学生总分从高到低排序:
// 按总分排序
void sortByTotal(Student \*students, int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (students\[j].total < students\[j + 1].total) {
Student temp = students\[j];
students\[j] = students\[j + 1];
students\[j + 1] = temp;
}
}
}
}
冒泡排序的核心逻辑是通过两层循环,不断比较相邻学生的总分,如果顺序不对就交换位置,经过多次循环后,就能实现按总分从高到低排序。
主函数调用
在主函数中调用上述函数,完成整个系统的功能:
int main() {
  int n;
  printf("请输入学生人数: ");
  scanf("%d", \&n);
  Student students\[n];
  inputStudent(students, n);
  calculateScore(students, n);
  sortByTotal(students, n);
  displayStudent(students, n);
  return 0;
}
主函数先获取学生人数,创建对应大小的结构体数组,然后依次调用录入、计算、排序和显示函数,实现完整的学生成绩管理系统功能。
总结与拓展
通过这个学生成绩管理系统案例,我们不仅巩固了C语言中结构体、数组和函数的使用,还掌握了数据处理和排序的基本逻辑。当然,这个系统还有很多可以优化和拓展的地方,比如增加成绩查询功能、将数据保存到文件中实现持久化存储等。
家人们,赶紧动手敲一敲代码,亲自体验C语言的魅力吧!如果在实现过程中有任何问题,欢迎在评论区留言讨论,咱们一起进步!要是觉得这篇文章有用,别忘了点赞、收藏、转发三连哦~下期还想看什么C语言案例,也可以告诉我!