有一个学生结构体,其数据成员有: 学号, 姓名, 3 门课程。从键盘上输入 5 个学生的信息。要求输出: 1.按照学号递增输出全部学生信息,每个学生的信息一行。(格式: 学号 姓名 分数1 分数 2 分数 3 总分) 2.输出每门课程最高分的学生的信息 3.输出每门课程的平均分 4.按照总分输出学生排名
#define _CRT_SECURE_NO_DEPRECATE
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 5
typedef struct student
{
int stuID;
char name[20];
double score[3];
}STU;
void Print_InFo(STU *);
void Print_RankstuID(STU *);
void Print_MaxScoreOfOne(STU *);
void Print_AvegerScore(STU *);
void Print_RankOfTotal(STU *);
int main()
{
STU stus[5];
int i = 0;
for (; i < 5; i++)
{
scanf("%d%s%lf%lf%lf", &stus[i].stuID, &stus[i].name, &stus[i].score[0], &stus[i].score[1], &stus[i].score[2]);
}
Print_RankstuID(stus);
printf("-------------------------------------------------------\n");
Print_MaxScoreOfOne(stus);
printf("-------------------------------------------------------\n");
Print_AvegerScore(stus);
printf("-------------------------------------------------------\n");
Print_RankOfTotal(stus);
system("pause");
return 0;
}
//打印学生信息
void Print_InFo(STU *stus)
{
int i = 0;
for (; i < N; i++)
{
printf("学号:%d 姓名:%s 分数1:%5.2 分数2:lf%5.2 分数3:lf%5.2 总分:lf%5.2lf", stus[i].stuID, stus[i].name, stus[i].score[0], stus[i].score[1], stus[i].score[2],stus[i].score[0]+stus[i].score[1]+ stus[i].score[2]);
}
}
//按照学号顺序输出学生信息
void Print_RankstuID(STU *stus)
{
int i = 0, j = 0;
for (i = N; i > 0; i++)//外层控制无序数的数量
{
for (j = N; j > 0; j++)//内层控制比较
{
if (stus[j].stuID > stus[j + 1].stuID)
{
STU s = stus[j];
stus[j] = stus[j + 1];
stus[j + 1] = s;
}
}
}
printf("按照学生的学号排序如下:\n");
Print_InFo(stus);
}
//输出每门课程最高分的学生信息
void Print_MaxScoreOfOne(STU *stus)
{
STU* s;
int i = 0, j = 0;
for (i = 0; i < 3; i++)
{
s = &stus[0]; //认为第一个是最大的,让s始终指向最大的
printf("课程%d最高分的学生信息为:\n", i + 1);
for (j = 1; j < N; j++)
{
if (stus[j].score[i] > s->score[i])
{
s = &stus[j];
}
}
printf("学号:%d 姓名:%s 分数1:%5.2lf 分数2%5.2lf 分数3%5.2lf 总分%5.2lf\n", s->stuID, s->name, s->score[0], s->score[1], s->score[2], s->score[0] + s->score[1] + s->score[2]);
}
}
//打印每门课程的平均分
void Print_AvegerScore(STU *stus)
{
int i = 0, j = 0;
double ave = 0;
for (i = 0; i < 3; i++)
{
ave = 0;
for (j = 0; j < N; j++)
{
ave += stus[j].score[i];
}
ave /= N;
printf("课程%d的平均分为%5.2lf\n", i + 1, ave);
}
}
//按照总分高低输出学生排名
void Print_RankOfTotal(STU *stus)
{
int i = 0, j = 0;
for (i = 0; i < N - 1; j++)
{
for (j = 0; j < N - 1 - i; j++)
{
if (stus[j].score[0] + stus[j].score[1] + stus[j].score[2] < stus[j + 1].score[0] + stus[j + 1].score[1] + stus[j + 1].score[2])
{
STU s = stus[j];
stus[j] = stus[j + 1];
stus[j + 1] = s;
}
}
printf("按照学生的总分排名如下:\n");
Print_InFo(stus);
}
}
版权声明:本文为weixin_43139128原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。