题目
有一个学生结构体,其数据成员有: 学号, 姓名, 3 门课程。从键盘上输入 5 个学生 的信息。要求输出:
(1) 按照学号递增输出全部学生信息,每个学生的信息一行。(格式: 学号 姓名 分数 1 分数 2 分数 3 )(其实结构体本来有个总分项的,不过我一开始没看到,anyway)
(2) 输出每门课程最高分的学生的信息
(3) 输出每门课程的平均分
(4) 按照总分输出学生排名
#include<stdio.h>
#include<stdlib.h>
typedef struct student //定义结构体
{
int num;
char name[20];
float score1;
float score2;
float score3;
}stu;
void swap(stu* a, stu* b) //交换两个数
{
stu temp = *a;
*a = *b;
*b = temp;
}
void bubblesort(stu a[], int n) { //按学号排序
for (int i = 0; i < n - 1; i++)
{
for (int j = 0; j < n - i - 1; j++)
{
if (a[j].num > a[j + 1].num)
{
swap(&a[j + 1], &a[j]);
}
}
}
}
void selectsort1(stu a[], int n, float* average1) {//第一门成绩最高分和平均分
int max = 0;
float sum = a[0].score1;
for (int j = 1; j < n; j++)
{
sum += a[j].score1;
if (a[max].score1 < a[j].score1) {
max = j;
}
*average1 = sum / n;
}
swap(&a[max], &a[0]);
}
void selectsort2(stu a[], int n, float* average2) {//第二门成绩最高分和平均分
int max = 0;
float sum = a[0].score2;
for (int j = 1; j < n; j++)
{
sum += a[j].score2;
if (a[max].score2 < a[j].score2) {
max = j;
}
*average2 = sum / n;
}
swap(&a[max], &a[0]);
}
void selectsort3(stu a[], int n,float*average3) { //第三门成绩最高分和平均分
int max = 0;
float sum = a[0].score3;
for (int j = 1; j < n; j++)
{
sum += a[j].score3;
if (a[max].score3 < a[j].score3)
{
max = j;
}
*average3 = sum / n;
}
swap(&a[max], &a[0]);
}
void totalrank(stu a[], int n,float sum[]) { //总分排名
for (int i = 0; i < n - 1; i++)
{
for (int j = 0; j < n - 1 - i; j++)
{
if( (a[j].score1+ a[j].score2 + a[j].score3 ) <( a[j + 1].score1+ a[j + 1].score2 + a[j + 1].score3 ))
{
swap(&a[j + 1], &a[j]);
}
}
}
for (int j = 0; j < 5; j++)
{ //记录总分排名
sum[j] = a[j].score1 + a[j].score2 + a[j].score3;
}
}
int main()
{
stu sarr[5];
float average1, average2, average3, sum[5];
for (int i = 0; i < 5; i++)
{
scanf_s("%d %s %f %f %f", &sarr[i].num, sarr[i].name, 20, &sarr[i].score1, &sarr[i].score2, &sarr[i].score3);
}
bubblesort(sarr, 5);
for (int i = 0; i < 5; i++)
{
printf("%d %s %5.1f %5.1f %5.1f\n", sarr[i].num, sarr[i].name, sarr[i].score1, sarr[i].score2, sarr[i].score3);
}
selectsort1(sarr, 5, &average1);
printf("the student with the highest score1 is: %d %s %5.1f %5.1f %5.1f\naverage1=%5.2f\n", sarr[0].num, sarr[0].name, sarr[0].score1, sarr[0].score2, sarr[0].score3, average1);
selectsort2(sarr, 5, &average2);
printf("the student with the highest score2 is: %d %s %5.1f %5.1f %5.1f\naverage2=%5.2f\n", sarr[0].num, sarr[0].name, sarr[0].score1, sarr[0].score2, sarr[0].score3, average2);
selectsort3(sarr, 5, &average3);
printf("the student with the highest score3 is: %d %s %5.1f %5.1f %5.1f\naverage3=%5.2f\n", sarr[0].num, sarr[0].name, sarr[0].score1, sarr[0].score2, sarr[0].score3, average3);
totalrank(sarr, 5, sum);
printf("the total point ranking is:\n");
for (int i = 0; i < 5; i++)
{
printf("%d %s %5.1f %5.1f %5.1f %5.1f\n", sarr[i].num, sarr[i].name, sarr[i].score1, sarr[i].score2, sarr[i].score3,sum[i]);
}
return 0;
}
运行实例:
4 li 95 92 93
3 sheng 92 96 94
2 guo 97 94 95
1 qiu 94 95 96
5 xie 90 91 98