成绩排序"/>
C语言 统计一个班的学生成绩排序
功能:
(1) 每个学生的学号和四门功课的成绩从键盘读入。
(2) 计算每个学生的总分和平均分。
(3) 按平均成绩进行排序,输出排序后的成绩单(包括学号、四门功课的成绩和平均分),给出名次。如果分数相同,则名次并列,其他学生名次不变。
实验步骤与要求:
(1) 每个功能为一个独立的函数。
(2) 调试程序时,可先输入少量学生的成绩作为实验数据。如可输入3名学生4门课成绩:
学号 成绩
9701 67,72,65,80
9702 75,82,94,95
9703 70,74,80,76
完整代码:
#include<stdio.h>
#define N 3 //定义有3个学生
//定义学生结构体
struct student
{int n;float c, m, e, p,aver;};
void paixu(struct student x[N])
{printf("-----------------------------------成绩单-------------------------------------\n");printf("名次 学号 英语 语文 数学 物理 平均分\n");int i, j, k, temp;for (i = 0; i < N - 1; i++){k = i;for (j = i + 1; j < N; j++){if (x[i].aver > x[j].aver)//如果 后面比前面小k = j;if (k != j)//如果前面比后面小{temp = x[j].aver;x[j].aver = x[i].aver;x[i].aver = temp;temp = x[j].n;x[j].n = x[i].n;x[i].n = temp;temp = x[j].c;x[j].c = x[i].c;x[i].c = temp;temp = x[j].m;x[j].m = x[i].m;x[i].m = temp;temp = x[j].e;x[j].e = x[i].e;x[i].e = temp;temp = x[j].p;x[j].p = x[i].p;x[i].p = temp;//将两个结构组交换}}}int a;for (a=0; a < N; a++){printf("%d %d %f %f %f %f %f\n", a + 1, x[a].n, x[a].e, x[a].c, x[a].m, x[a].p, x[a].aver);}}
//计算模块
float jisuan(float c, float m, float e, float p)
{float aver, sum;sum = c + m + e + p;aver = sum / 4;printf("总分是:%f,平均值是:%f\n", sum,aver);return aver;
}
//输入模块
void fun1()
{int a;struct student x[N];for (a = 0; a < N; a++){printf("请输入学号:");scanf("%d", &x[a].n);printf("英语:");scanf("%f", &x[a].e);printf("语文:");scanf("%f", &x[a].c);printf("数学:");scanf("%f", &x[a].m);printf("物理:");scanf("%f", &x[a].p);x[a].aver= jisuan(x[a].c, x[a].m, x[a].e, x[a].p);}paixu(x);
return;
}//排序模块,排 x[a].averint main()
{fun1();//完成输入后,由结构体数组储存学生的信息}
思路:运用了结构体数组储存学生信息的思想,用循环结构输入输出学生的信息。
运用了模块化的思想,各个函数模块化,实现调用
更多推荐
C语言 统计一个班的学生成绩排序
发布评论