4.7 学生管理系统
通过课程进入 | 题 号: | 110 | 4.7 学生管理系统 | 语言要求: | C++ |
编写学生管理系统,其中学生的信息有姓名(汉语拼音,最多20个字符,长度21的字符数组), 性别(男/女,用1表示男,2表示女,整数)、生日(19850101(年月日),整数)、身高(以m为单位,实数), 还需要处理C语言、微积分两门课的成绩(整数),请编写程序实现功能: 输入学生的人数和每个学生的信息;输出每门课程的总平均成绩、最高分和最低分,以及获得最高分的学生的信息。 需要注意的是某门课程最高分的学生可能不只一人。 输入输出格式要求: 身高输出时保留两位小数,请按照例子中进行输出,请勿输出其他字符 例如: 输入:3 zhangsan 1 19910101 1.85 85 90 lisi 1 19920202 1.56 89 88 wangwu 2 19910303 1.6 89 90回车 输出: C_average:87回车 C_max:89回车 lisi 1 19920202 1.56 89 88回车 wangwu 2 19910303 1.60 89 90回车 C_min:85回车 Calculus_average:89回车 Calculus_max:90回车 zhangsan 1 19910101 1.85 85 90回车 wangwu 2 19910303 1.60 89 90回车 Calculus_min:88回车 |
#include <stdio.h>
#include <string.h>
#define MAXN 100
struct Student {
char name[21]; // 姓名
int gender; // 性别,1代表男性,2代表女性
int birthdate; // 生日,格式为年月日,如:19910101
double height; // 身高,以m为单位
int c_score; // C语言成绩
int calculus_score; // 微积分成绩
};
int main() {
int n;
scanf("%d", &n);
struct Student students[MAXN];
for (int i = 0; i < n; i++) {
scanf("%s%d%d%lf%d%d", students[i].name, &students[i].gender, &students[i].birthdate,
&students[i].height, &students[i].c_score, &students[i].calculus_score);
}
// 计算C语言平均分、最高分、最低分及学生信息
int c_sum = 0, c_max = 0, c_min = 100;
int c_max_index[MAXN], c_max_count = 0;
for (int i = 0; i < n; i++) {
c_sum += students[i].c_score;
if (students[i].c_score > c_max) {
c_max = students[i].c_score;
c_max_count = 1;
c_max_index[0] = i;
} else if (students[i].c_score == c_max) {
c_max_index[c_max_count++] = i;
}
if (students[i].c_score < c_min) {
c_min = students[i].c_score;
}
}
double c_avg = (double)c_sum / n;
// 计算微积分平均分、最高分、最低分及学生信息
int calculus_sum = 0, calculus_max = 0, calculus_min = 100;
int calculus_max_index[MAXN], calculus_max_count = 0;
for (int i = 0; i < n; i++) {
calculus_sum += students[i].calculus_score;
if (students[i].calculus_score > calculus_max) {
calculus_max = students[i].calculus_score;
calculus_max_count = 1;
calculus_max_index[0] = i;
} else if (students[i].calculus_score == calculus_max) {
calculus_max_index[calculus_max_count++] = i;
}
if (students[i].calculus_score < calculus_min) {
calculus_min = students[i].calculus_score;
}
}
double calculus_avg = (double)calculus_sum / n;
// 输出结果
printf("C_average:%.0lf\n", c_avg);
printf("C_max:%d\n", c_max);
for (int i = 0; i < c_max_count; i++) {
struct Student s = students[c_max_index[i]];
printf("%s %d %d %.2lf %d %d\n", s.name, s.gender, s.birthdate, s.height, s.c_score, s.calculus_score);
}
printf("C_min:%d\n", c_min);
printf("Calculus_average:%.0lf\n", calculus_avg);
printf("Calculus_max:%d\n", calculus_max);
for (int i = 0; i < calculus_max_count; i++) {
struct Student s = students[calculus_max_index[i]];
printf("%s %d %d %.2lf %d %d\n", s.name, s.gender, s.birthdate, s.height, s.c_score, s.calculus_score);
}
printf("Calculus_min:%d\n", calculus_min);
return 0;
}