本关任务:编写一个基于结构体得学生成绩信息管理系统。主要功能如下: 1. 用结构体存放所有数据。 2. 每个功能都用函数实现。 3. 输入10个学生的学号和三门课程的成绩。 4. 计算每个学生的总分。 5. 按总分从高到低排序。 6. 加上名次一列。 7. 输出最后的二维表格样式的成绩,含学号、三门课成绩、总分、名次。
请填写五个函数完成相应功能的实现。其中:
input_data(STU s[]):输入原始数据函数。参数作用:
STU s[]:用来存放10个学生信息的结构体数组。
calculate(STU s[]):计算总分函数。参数作用:
STU s[]: 用于计算总分的学生信息结构体数组。
sort_total(STU s[]):根据总分降序排序函数。参数作用:
STU s[]: 用于总分排序的学生信息结构体数组。
add_rank(STU s[]):增加名次列函数。参数作用:
STU s[]: 用于添加名次的学生信息结构体数组(已排序)。
print_data(STU s[]):输出二维表格样式成绩的函数。参数作用:
STU s[]: 待打印输出的学生信息结构体数组。
#include <stdio.h>
// 定义学生结构体
typedef struct {
int student_id;
int score1;
int score2;
int score3;
int total_score;
int rank;
} Student;
// 输入原始数据函数
void input_data(Student STUs[]) {
printf("请输入10个学生的学号和三门课程的成绩:\n");
for (int i = 0; i < 10; i++) {
printf("学生%d的学号:", i+1);
scanf("%d", &STUs[i].student_id);
printf("学生%d的第一门课成绩:", i+1);
scanf("%d", &STUs[i].score1);
printf("学生%d的第二门课成绩:", i+1);
scanf("%d", &STUs[i].score2);
printf("学生%d的第三门课成绩:", i+1);
scanf("%d", &STUs[i].score3);
}
}
// 计算总分函数
void calculate(Student STUs[]) {
for (int i = 0; i < 10; i++) {
STUs[i].total_score = STUs[i].score1 + STUs[i].score2 + STUs[i].score3;
}
}
// 根据总分降序排序函数
void sort_total(Student STUs[]) {
Student temp;
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9 - i; j++) {
if (STUs[j].total_score < STUs[j+1].total_score) {
temp = STUs[j];
STUs[j] = STUs[j+1];
STUs[j+1] = temp;
}
}
}
}
// 增加名次列函数
void add_rank(Student STUs[]) {
for (int i = 0; i < 10; i++) {
STUs[i].rank = i + 1;
}
}
// 输出二维表格样式成绩的函数
void print_data(Student STUs[]) {
printf("学号\t成绩1\t成绩2\t成绩3\t总分\t名次\n");
for (int i = 0; i < 10; i++) {
printf("%d\t%d\t%d\t%d\t%d\t%d\n", STUs[i].student_id, STUs[i].score1, STUs[i].score2, STUs[i].score3, STUs[i].total_score, STUs[i].rank);
}
}
int main() {
Student students[10];
int choice;
printf("请选择操作:\n");
printf("1. 输入学生信息\n");
printf("2. 计算总分\n");
printf("3. 按总分排序\n");
printf("4. 增加名次列\n");
printf("5. 输出成绩表格\n");
printf("0. 退出\n");
while (1) {
printf("请输入操作编号:");
scanf("%d", &choice);
switch (choice) {
case 1:
input_data(students);
break;
case 2:
calculate(students);
break;
case 3:
sort_total(students);
break;
case 4:
add_rank(students);
break;
case 5:
print_data(students);
break;
case 0:
return 0;
default:
printf("输入有误,请重新输入。\n");
break;
}
}
return 0;
}
【以下回答由 GPT 生成】
input_data(STU s[])
函数实现def input_data(s):
for i in range(len(s)):
print("请输入第", i + 1, "个学生的信息:")
s[i].student_id = input("学号:")
for j in range(len(s[i].grades)):
s[i].grades[j] = int(input("请输入第" + str(j + 1) + "门课程的成绩:"))
calculate(STU s[])
函数实现def calculate(s):
for i in range(len(s)):
s[i].total = sum(s[i].grades)
sort_total(STU s[])
函数实现def sort_total(s):
s.sort(key=lambda x: x.total, reverse=True)
add_rank(STU s[])
函数实现def add_rank(s):
for i in range(len(s)):
s[i].rank = i + 1
print_data(STU s[])
函数实现def print_data(s):
print("学号\t课程1\t课程2\t课程3\t总分\t名次")
for i in range(len(s)):
print(s[i].student_id, end='\t')
for j in range(len(s[i].grades)):
print(s[i].grades[j], end='\t')
print(s[i].total, end='\t')
print(s[i].rank)
class STU:
def __init__(self):
self.student_id = None
self.grades = [0] * 3
self.total = 0
self.rank = 0
def input_data(s):
for i in range(len(s)):
print("请输入第", i + 1, "个学生的信息:")
s[i].student_id = input("学号:")
for j in range(len(s[i].grades)):
s[i].grades[j] = int(input("请输入第" + str(j + 1) + "门课程的成绩:"))
def calculate(s):
for i in range(len(s)):
s[i].total = sum(s[i].grades)
def sort_total(s):
s.sort(key=lambda x: x.total, reverse=True)
def add_rank(s):
for i in range(len(s)):
s[i].rank = i + 1
def print_data(s):
print("学号\t课程1\t课程2\t课程3\t总分\t名次")
for i in range(len(s)):
print(s[i].student_id, end='\t')
for j in range(len(s[i].grades)):
print(s[i].grades[j], end='\t')
print(s[i].total, end='\t')
print(s[i].rank)
def main():
students = [STU()] * 10
input_data(students)
calculate(students)
sort_total(students)
add_rank(students)
print_data(students)
if __name__ == "__main__":
main()
请注意,以上代码示例是用Python编写的,使用了一个STU
类来表示学生信息。请根据你所熟悉的编程语言进行相应的实现。