【C语言】简单成绩表

时间:2022-07-02 19:53:56

题目:
1.从键盘输入一个班10个学生的学号和每个学生的高数,英语,计算机成绩,
2.算出每个学生的平均分总分
3.按学生平均分成绩优劣排序
4.最后打印一张按高分到低分名次排序的成绩表,要求:包括学号,序号,三科成绩,总分,平均分,
5.要有很好的人机交互界面

#include <stdio.h>
#include "stdafx.h"
#include <stdlib.h>
#include <math.h>
#define N 10

struct students
{
int num, index;
char *name;
float score[3] = {0, 0, 0};
float sum = 0, ave = 0;
};

//1.从键盘输入一个班10个学生的学号和每个学生的高数,英语,计算机成绩,w
void inputStudentData(struct students W[N])
{
for (int i = 0; i < N; i++)
{
W[i].index = i;
printf("Please input student index %d :\n", i);
printf("num : ");
scanf_s("%d", &W[i].num);
printf("name : ");
scanf_s("%s", &W[i].name, 3);//最多读取3个字符
printf("math score : ");
scanf_s("%f", &W[i].score[0]);
printf_s("english score : ");
scanf_s("%f", &W[i].score[1]);
printf("computer score : ");
scanf_s("%f", &W[i].score[2]);
}
}

//2.算出每个学生的平均分和总分,
void compute(struct students W[N])
{
for (int i = 0; i < N; i++)
{
for (int j = 0; j < 3; j++)
{
W[i].sum += W[i].score[j];
W[i].ave = W[i].sum / 3;
}
}
}

//3.按学生平均分成绩优劣排序,
void sort(struct students W[N])
{
struct students temp;
for (int i = 0; i < N;i++)
for (int j = i; j < N; j++)
{
if (W[i].ave < W[j].ave)
{
temp = W[i];
W[i] = W[j];
W[j] = temp;;
}
}
}

//4.最后打印一张按高分到低分名次排序的成绩表,要求:包括学号,序号,三科成绩,总分,平均分,
void printStudentData(struct students W[N])
{
for (int i = 0; i < 20;i++)
printf("-");
printf("\n|index|num|name|math|english|computer|sum|average|\n");
for (int i = 0; i < N; i++)
{
printf("|%d", W[i].index);
printf("|%d", W[i].num);
printf("|%s", &W[i].name);
for (int j = 0; j < 3; j++)
{
printf("|%0.2f", W[i].score[j]);
}
printf("|%0.2f", W[i].sum);
printf("|%0.2f", W[i].ave);
printf("|\n");
}
}
void main()
{
struct students W[N];
inputStudentData(W);
compute(W);
sort(W);
printStudentData(W);

system("pause");
}

结果如图:(N = 2为例)
【C语言】简单成绩表

博主很懒,所以良好的人机交互界面就不写了。