某班级有M(M不小于10)个学生,参加N(N不多于5)门科目的考试。M和N可以通过键盘输入。现要求C语言编程实现: (1)录入每个学生的信息,每位学生的信息包括:姓名、学号、出生日期、每门考试成绩。 (2)计算该班级每门课程的平均成绩并输出。 (3)输入任意学号,输出该学号对应学生的其他所有信息。 (4)输入任意学号,输出该学生成绩的综合等级。综合等级按照学生N门课程的平均分进行判定。其中,平均分属于(90~100),包括90,判断等级为A;(80~90),包括80,判断等级为B;(60~80),包括60,判断等级为C,其他情况判定为D。(要求使用switch结构实现等级判定) (5)编写一个函数按学生的N门课程的平均分从高到低排出名次表,要求用指针做函数参数。
时间: 2024-03-03 17:46:53 浏览: 80
好的,我会根据您的要求进行回答。下面是问题的解答:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义学生结构体
struct Student {
char name[20]; // 姓名
char id[20]; // 学号
char birth[20]; // 出生日期
int score[5]; // 每门考试成绩
float avg; // 平均分
};
// 计算每门课程的平均分并输出
void calculateAvg(struct Student students[], int m, int n) {
int sum[5] = {0}; // 每门课程的总分
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
sum[j] += students[i].score[j];
}
}
for (int i = 0; i < n; i++) {
printf("第%d门课程的平均分为%.2f\n", i+1, (float)sum[i]/m);
}
}
// 根据学号查询学生信息
void queryStudent(struct Student students[], int m) {
char id[20];
printf("请输入学号:");
scanf("%s", id);
for (int i = 0; i < m; i++) {
if (strcmp(students[i].id, id) == 0) {
printf("姓名:%s\n", students[i].name);
printf("学号:%s\n", students[i].id);
printf("出生日期:%s\n", students[i].birth);
printf("成绩:");
for (int j = 0; j < 5; j++) {
printf("%d ", students[i].score[j]);
}
printf("\n");
return;
}
}
printf("未找到该学号的学生\n");
}
// 计算综合等级并输出
void calculateLevel(struct Student students[], int m, int n) {
char id[20];
printf("请输入学号:");
scanf("%s", id);
int index = -1;
for (int i = 0; i < m; i++) {
if (strcmp(students[i].id, id) == 0) {
index = i;
break;
}
}
if (index == -1) {
printf("未找到该学号的学生\n");
} else {
float avg = students[index].avg;
char level;
switch ((int)avg/10) {
case 10:
case 9:
level = 'A';
break;
case 8:
level = 'B';
break;
case 7:
case 6:
level = 'C';
break;
default:
level = 'D';
break;
}
printf("该学生成绩的综合等级为%c\n", level);
}
}
// 按平均分从高到低排出名次表
void sortStudents(struct Student students[], int m) {
for (int i = 0; i < m-1; i++) {
for (int j = 0; j < m-i-1; j++) {
if (students[j].avg < students[j+1].avg) {
struct Student tmp = students[j];
students[j] = students[j+1];
students[j+1] = tmp;
}
}
}
printf("名次\t姓名\t学号\t平均分\n");
for (int i = 0; i < m; i++) {
printf("%d\t%s\t%s\t%.2f\n", i+1, students[i].name, students[i].id, students[i].avg);
}
}
int main() {
int m, n;
printf("请输入学生人数和科目数:");
scanf("%d%d", &m, &n);
struct Student students[m];
// 录入学生信息
for (int i = 0; i < m; i++) {
printf("请输入第%d个学生的信息:\n", i+1);
printf("姓名:");
scanf("%s", students[i].name);
printf("学号:");
scanf("%s", students[i].id);
printf("出生日期:");
scanf("%s", students[i].birth);
printf("成绩:");
for (int j = 0; j < n; j++) {
scanf("%d", &students[i].score[j]);
}
// 计算平均分
float sum = 0;
for (int j = 0; j < n; j++) {
sum += students[i].score[j];
}
students[i].avg = sum / n;
}
// 计算每门课程的平均分并输出
calculateAvg(students, m, n);
// 查询学生信息
queryStudent(students, m);
// 计算综合等级并输出
calculateLevel(students, m, n);
// 按平均分从高到低排出名次表
sortStudents(students, m);
return 0;
}
```
希望对您有帮助!
阅读全文