班级有10个学生,参加5门科目的考试。M和N可以通过键盘输入。现要求编程实现: (1)录入每个学生的信息,每位学生的信息包括:姓名、学号、出生日期、每门考试成绩。 (2)计算该班级每门课程的平均成绩并输出。 (3)输入任意学号,输出该学号对应学生的其他所有信息。 (4)输入任意学号,输出该学生成绩的综合等级。综合等级按照学生N门课程的平均分进行判定。其中,平均分属于(90~100),包括90,判断等级为A;(80~90),包括80,判断等级为B;(60~80),包括60,判断等级为C,其他情况判定为D。(要求使用switch结构实现等级判定) (5)编写一个函数按学生的N门课程的平均分从高到低排出名次表,要求用指针做函数参数。
时间: 2024-02-26 09:56:20 浏览: 128
好的,我来回答你的问题。
1. 录入每个学生的信息
首先,我们需要定义一个结构体来存储每个学生的信息,包括姓名、学号、出生日期和每门考试成绩:
```c
struct student {
char name[20];
char id[20];
char birthDate[20];
int scores[5];
};
```
然后,我们可以通过循环来录入每个学生的信息:
```c
struct student stu[10]; // 定义一个包含10个学生的数组
for (int i = 0; i < 10; i++) {
printf("请输入第%d个学生的姓名:", i+1);
scanf("%s", stu[i].name);
printf("请输入第%d个学生的学号:", i+1);
scanf("%s", stu[i].id);
printf("请输入第%d个学生的出生日期:", i+1);
scanf("%s", stu[i].birthDate);
printf("请输入第%d个学生的5门科目的成绩:", i+1);
for (int j = 0; j < 5; j++) {
scanf("%d", &stu[i].scores[j]);
}
}
```
2. 计算每门课程的平均成绩并输出
我们可以定义一个数组来存储每门科目的总分和人数,然后通过循环计算平均分并输出:
```c
int total[5] = {0}; // 每门科目的总分
int count[5] = {0}; // 每门科目的人数
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 5; j++) {
total[j] += stu[i].scores[j];
count[j]++;
}
}
for (int i = 0; i < 5; i++) {
printf("第%d门科目的平均成绩为:%.2f\n", i+1, (float)total[i]/count[i]);
}
```
3. 输入任意学号,输出该学号对应学生的其他所有信息
我们可以通过循环查找学号,找到对应的学生信息并输出:
```c
char searchId[20];
printf("请输入要查询的学号:");
scanf("%s", searchId);
for (int i = 0; i < 10; i++) {
if (strcmp(stu[i].id, searchId) == 0) {
printf("姓名:%s\n", stu[i].name);
printf("学号:%s\n", stu[i].id);
printf("出生日期:%s\n", stu[i].birthDate);
printf("5门科目的成绩:");
for (int j = 0; j < 5; j++) {
printf("%d ", stu[i].scores[j]);
}
printf("\n");
break;
}
}
```
4. 输入任意学号,输出该学生成绩的综合等级
我们可以先计算该学生的平均分,然后使用switch结构进行等级判定:
```c
printf("请输入要查询的学号:");
scanf("%s", searchId);
float avgScore = 0; // 平均分
for (int i = 0; i < 10; i++) {
if (strcmp(stu[i].id, searchId) == 0) {
for (int j = 0; j < 5; j++) {
avgScore += stu[i].scores[j];
}
avgScore /= 5;
break;
}
}
char level; // 等级
switch ((int)avgScore/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);
```
5. 按学生的N门课程的平均分从高到低排出名次表
我们可以编写一个函数来完成这个任务,函数的参数为一个指向学生数组的指针。我们可以使用冒泡排序来实现排名:
```c
void sort(struct student *stuPtr) {
struct student temp;
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9-i; j++) {
float avgScore1 = 0, avgScore2 = 0;
for (int k = 0; k < 5; k++) {
avgScore1 += stuPtr[j].scores[k];
avgScore2 += stuPtr[j+1].scores[k];
}
avgScore1 /= 5;
avgScore2 /= 5;
if (avgScore1 < avgScore2) {
temp = stuPtr[j];
stuPtr[j] = stuPtr[j+1];
stuPtr[j+1] = temp;
}
}
}
}
```
然后,在主函数中调用该函数并输出排名:
```c
sort(stu); // 排名
printf("成绩排名如下:\n");
for (int i = 0; i < 10; i++) {
printf("第%d名:%s,平均分:%.2f\n", i+1, stu[i].name, (float)(stu[i].scores[0]+stu[i].scores[1]+stu[i].scores[2]+stu[i].scores[3]+stu[i].scores[4])/5);
}
```
希望我的回答能够对你有所帮助!
阅读全文