已知,每个学生需要管理的信息包括:学号、姓名和四科考试成绩(语文、数学、外语、历史)、总分。完成以下编程: 1、为四科成绩定义一个结构体,再为学生定义一个结构体。 2、先输入一个学生数量,然后根据数量创建结构体数组,输入每个同学的学号、姓名和成绩。 3、按学生总分排序; 4、输入一个总分,在排好序的数组中查找对应总分学生;如果找到有对应总分的同学,输出其信息及其排名,如果找不到对应成绩,输出最接近且比该分数小的同学的排名; 注意:为便于程序运行,最好输入和输出都先有提示信息输出。
时间: 2023-08-24 08:03:51 浏览: 107
C/C++学生成绩管理系统
5星 · 资源好评率100%
以下是一个可能的解决方案,基于C语言实现:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NUM 100 // 最大学生数
// 定义四科成绩结构体
typedef struct {
int Chinese;
int Math;
int English;
int History;
} Scores;
// 定义学生结构体
typedef struct {
int id;
char name[20];
Scores scores;
int totalScore;
} Student;
// 比较函数,用于按总分排序
int cmp(const void *a, const void *b) {
return ((Student*)b)->totalScore - ((Student*)a)->totalScore;
}
int main() {
int n; // 学生数量
Student students[MAX_NUM]; // 学生数组
int i, j; // 循环计数器
int targetScore; // 目标总分
int found = 0; // 是否找到
int rank = 0; // 排名
// 输入学生数量
printf("请输入学生数量:");
scanf("%d", &n);
// 输入学生信息
for (i = 0; i < n; i++) {
printf("请输入第%d个学生的学号、姓名、四科成绩:", i + 1);
scanf("%d %s %d %d %d %d", &students[i].id, students[i].name, &students[i].scores.Chinese, &students[i].scores.Math, &students[i].scores.English, &students[i].scores.History);
// 计算总分
students[i].totalScore = students[i].scores.Chinese + students[i].scores.Math + students[i].scores.English + students[i].scores.History;
}
// 按总分排序
qsort(students, n, sizeof(Student), cmp);
// 输出排序结果
printf("按总分排序结果:\n");
for (i = 0; i < n; i++) {
printf("第%d名:%s(%d),总分:%d,语文:%d,数学:%d,英语:%d,历史:%d\n", i + 1, students[i].name, students[i].id, students[i].totalScore, students[i].scores.Chinese, students[i].scores.Math, students[i].scores.English, students[i].scores.History);
}
// 输入目标总分
printf("请输入目标总分:");
scanf("%d", &targetScore);
// 查找目标总分
for (i = 0; i < n; i++) {
if (students[i].totalScore == targetScore) {
found = 1;
rank = i + 1;
printf("找到目标总分为%d的学生:%s(%d),排名:%d\n", targetScore, students[i].name, students[i].id, rank);
break;
} else if (students[i].totalScore < targetScore) {
rank = i + 1;
} else {
break;
}
}
// 没有找到目标总分,输出最接近且比该分数小的同学的排名
if (!found) {
printf("没有找到目标总分为%d的学生,最接近且比该分数小的同学的排名为:%d\n", targetScore, rank);
}
return 0;
}
```
在这个程序中,我们首先定义了四科成绩的结构体和学生结构体。然后,根据输入的学生数量,创建了一个学生数组,并逐个输入学生的信息。在输入时,我们也计算了每个学生的总分。接下来,我们使用`qsort`函数按总分对学生数组进行排序,并输出排序结果。最后,我们输入一个目标总分,查找该分数的学生,并输出其信息及排名。如果没有找到对应成绩的同学,我们输出最接近且比该分数小的同学的排名。
阅读全文