编写一个基于结构体得学生成绩信息管理系统。
主要功能如下: 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 no;
float sc[3];
float total;
int rank;
}STU;
void input_data(STU s[])
{
/********** Begin **********/
int n, i;
for (i = 0; i < 10; i++) {
scanf("%d", &s[i].no);
for (n = 0; n < 3; n++) {
scanf("%f", &s[i].sc[n]);
}
}
/********** End **********/
}
void calculate(STU s[])
{
/********** Begin **********/
int n, i;
for (n = 0; n < 10; n++) {
s[n].total = 0;
for (i = 0; i < 3; i++) {
s[n].total = s[n].sc[i] + s[n].total;
}
}
/********** End **********/
}
void sort_total(STU s[])
{
/********** Begin **********/
int n,i;
STU temp;
for(i=0;i<9;i++){
for(n=0;n<9-i;n++){
if (s[n+1].total>s[n].total) {
temp = s[n];
s[n] = s[n + 1];
s[n + 1] = temp;
}
}
}
/********** End **********/
}
void add_rank(STU s[])
{
/********** Begin **********/
int n,i;
for(i=1,n=0;i<11;i++,n++){
s[n].rank=i;
}
/********** End **********/
}
void print_data(STU s[])
{
/********** Begin **********/
int n;
printf("学号: 语文: 数学: 英语: 总分: 名次:\n");
for(n=0;n<10;n++) {
if(n<9)
printf("%-15d%-15.1f%-15.1f%-15.1f%-15.1f%d\n", s[n].no,s[n].sc[0],s[n].sc[1],s[n].sc[2],s[n].total,s[n].rank);
else{
printf("%-15d%-15.1f%-15.1f%-15.1f%-15.1f%d", s[n].no,s[n].sc[0],s[n].sc[1],s[n].sc[2],s[n].total,s[n].rank);
}
}
/********** End **********/
}
int main()
{
STU s[10];
input_data(s);
calculate(s);
sort_total(s);
add_rank(s);
print_data(s);
return 0;
}