成绩排名次。某班期末考试科目为数学(MT)、英语(EN)和物理(PH),有最多不超过30人参加考试。考试后要求:
(1)计算每个学生的总分和平均分;
(2)按总分成绩由高到低排出成绩的名次;
(3)打印出名次表,表格内包括学生编号、各科分数、总分和平均分;
(4)任意输入一个学号,能够查找出该学生在班级中的排名及其考试分数。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 30
struct students {//声明结构体students
int index;
int XH;//学生编号
char name[N];
float MT;//数学成绩
float EN;//英语成绩
float PH;//物理成绩
float ave;//平均分
float sum;//总分
float score[3];
};
int i = 0;
void inputSt(struct students T[N]) { //录入学生信息
for (int i = 0; i < N; i++) {
T[N].index = i;
printf("请输入学号:");
scanf("%d\n", &T[i].XH);
printf("请输入名字:");
scanf("%s\n", &T[i].name);
printf("请输入数学成绩:");
scanf("%lf\n", &T[i].score[0]); //最多取3个字符
printf("请输入英语成绩:");
scanf("%lf\n", &T[i].score[1]); //最多取3个字符
printf("请输入物理成绩:");
scanf("%lf\n", &T[i].score[2]); //最多取3个字符
if (T[i].score[i] < 0)
break;
}
}
void all(struct students T[N]) { //算出每个学生的平均分和总分,
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
T[i].sum += T[i].score[j];
T[i].ave = T[i].sum / 3;
}
}
}
void sort(struct students T[N]) { //按总分成绩由高到低排出成绩的名次
struct students t;
for (i = 0; i < N; i++) {
for (int j = i; j < N; j++) {
if (T[i].ave < T[j].ave) {
t = T[i];
T[i] = T[j];
T[j] = t;
}
}
}
}
void printAll(struct students T[N]) { //打印出名次表,表格内包括学生编号、各科分数、总分和平均分;
for (int i = 0; i < N; i++) {
printf("|%d", T[i].index);
printf("|%d", T[i].XH);
printf("|%d", T[i].name);
for (int j = 0; j < 3; j++) {
printf("|%.2f", T[i].score[j]);
}
}
printf("|%0.2f", T[i].sum);
printf("|%0.2f", T[i].ave);
printf("|\n");
}
void searchp(struct students T[N]) { //任意输入一个学号,能够查找出该学生在班级中的排名及其考试分数。
int i = 0, j = 0;
int x;
printf("请输入学生的学号:");
scanf("%d", &x);
for (int i = 0; i < j - 1; i++) {
if (T[i].XH == x) {
printf("position= %d,score = %d\n", i, T[i].score[i]);
break;
}
}
printf("Not found!\n");
}
int main() {
struct students T[N];
inputSt(T);
sort(T);
all(T);
printAll(T);
}