c语言编写一个程序,存储学生的学号,姓名,语文数学英语成绩,并统计各科成绩的平均值,优秀率,及格率,以及成绩排名
时间: 2024-05-15 16:17:56 浏览: 112
用C语言实现的学生成绩管理程序
5星 · 资源好评率100%
好的,关于您的问题,我可以为您提供一份示例代码,但是需要注意的是,程序的编写需要根据具体需求进行调整和优化。以下是示例代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENT_NUM 100 // 最大学生数
#define MAX_NAME_LEN 20 // 最大姓名长度
#define SUBJECT_NUM 3 // 学科数目
// 学生结构体
struct student {
char id[10]; // 学号
char name[MAX_NAME_LEN]; // 姓名
float score[SUBJECT_NUM]; // 成绩
float total; // 总分
int rank; // 排名
};
// 统计数据结构体
struct stats {
float avg[SUBJECT_NUM]; // 平均分
float excellent_rate; // 优秀率
float pass_rate; // 及格率
};
// 声明函数
void init_students(struct student students[]);
void input_scores(struct student students[], int num);
void calc_total(struct student students[], int num);
void sort_by_score(struct student students[], int num);
void calc_stats(struct student students[], int num, struct stats *stats);
void print_report(struct student students[], int num, struct stats stats);
int main() {
struct student students[MAX_STUDENT_NUM];
struct stats stats;
int num;
// 初始化学生信息
init_students(students);
// 输入学生成绩
printf("请输入学生数目:");
scanf("%d", &num);
input_scores(students, num);
// 计算总分并按成绩排序
calc_total(students, num);
sort_by_score(students, num);
// 计算统计数据
calc_stats(students, num, &stats);
// 打印报告
print_report(students, num, stats);
return 0;
}
// 初始化学生信息
void init_students(struct student students[]) {
for (int i = 0; i < MAX_STUDENT_NUM; i++) {
students[i].score[0] = students[i].score[1] = students[i].score[2] = 0;
}
}
// 输入学生成绩
void input_scores(struct student students[], int num) {
for (int i = 0; i < num; i++) {
printf("请输入第%d位学生的学号、姓名和各科成绩:", i+1);
scanf("%s%s%f%f%f", students[i].id, students[i].name,
&students[i].score[0], &students[i].score[1], &students[i].score[2]);
}
}
// 计算总分
void calc_total(struct student students[], int num) {
for (int i = 0; i < num; i++) {
students[i].total = students[i].score[0] + students[i].score[1] + students[i].score[2];
}
}
// 按成绩排序
void sort_by_score(struct student students[], int num) {
for (int i = 0; i < num-1; i++) {
for (int j = 0; j < num-i-1; j++) {
if (students[j].total < students[j+1].total) {
struct student tmp = students[j];
students[j] = students[j+1];
students[j+1] = tmp;
}
}
}
// 计算排名
for (int i = 0; i < num; i++) {
students[i].rank = i+1;
}
}
// 计算统计数据
void calc_stats(struct student students[], int num, struct stats *stats) {
float sum[SUBJECT_NUM] = {0};
int excellent_num = 0, pass_num = 0;
// 计算每个科目的总分
for (int i = 0; i < num; i++) {
sum[0] += students[i].score[0];
sum[1] += students[i].score[1];
sum[2] += students[i].score[2];
if (students[i].score[0] >= 90 && students[i].score[1] >= 90 && students[i].score[2] >= 90) {
excellent_num++;
}
if (students[i].score[0] >= 60 && students[i].score[1] >= 60 && students[i].score[2] >= 60) {
pass_num++;
}
}
// 计算平均分和及格率、优秀率
for (int i = 0; i < SUBJECT_NUM; i++) {
stats->avg[i] = sum[i] / num;
}
stats->excellent_rate = (float)excellent_num / num * 100;
stats->pass_rate = (float)pass_num / num * 100;
}
// 打印成绩报告
void print_report(struct student students[], int num, struct stats stats) {
printf("\n\n学生成绩报告\n");
printf("----------------------------------------------------\n");
printf("学号\t\t姓名\t\t语文\t数学\t英语\t总分\t排名\n");
printf("----------------------------------------------------\n");
for (int i = 0; i < num; i++) {
printf("%s\t%s\t\t%.2f\t%.2f\t%.2f\t%.2f\t%d\n", students[i].id, students[i].name,
students[i].score[0], students[i].score[1], students[i].score[2], students[i].total, students[i].rank);
}
printf("----------------------------------------------------\n");
printf("平均分\t\t\t%.2f\t%.2f\t%.2f\n", stats.avg[0], stats.avg[1], stats.avg[2]);
printf("及格率\t\t\t%.2f%%\n", stats.pass_rate);
printf("优秀率\t\t\t%.2f%%\n", stats.excellent_rate);
}
```
在这个程序中,我们使用了两个结构体:`student` 和 `stats`。其中,`student` 结构体包含每个学生的学号、姓名、三科成绩、总分和排名等信息,`stats` 结构体用于存储统计数据,包括每个科目的平均分、全局的及格率和优秀率。程序的主要流程可以分为以下几步:
1. 初始化学生信息。
2. 输入学生成绩,包括学号、姓名和三科成绩。
3. 计算每个学生的总分,并按总分排序,同时计算每个学生的排名。
4. 计算统计数据,包括每个科目的平均分、全局的及格率和优秀率。
5. 打印成绩报告,包括每个学生的详细成绩和排名,以及全局的统计数据。
上述代码只是给出了一个示例,实际的应用中需要根据具体需求进行调整和优化。希望对您有所帮助!
阅读全文