14.输入10个学生5门课的成绩,分别用函数实现下列功能: ①计算每个学生的平均分; ②计算每门课的平均分; ③找出所有50个分数中最高的分数所对应的学生和课程; ④计算平均分方差: 参考成绩管理系统,设计一个系统,实现14题的4个功能,同时增加: 1.按学生总分从高到低排序输出 2.求出每门课所有分数对应级别的数量和百分比,例如将等级分为A,B,C,D,课程1的A级有多少人,占百分比多少,B级有多少人,占比多少,如此类推。 怎么实现全部功能呀?
2条回答 默认 最新
- qfl_sdu 2021-05-16 15:16关注
代码如下,如有帮助,请采纳一下,谢谢。
#include <stdio.h> #include <algorithm> using namespace std; int main() { int buf[10][5] = {0}; //保存所有成绩 float avstu[10] ={0}; //每个学生的平均 float avkc[5] = {0}; //每科的平均 for (int i = 0; i <10; i++) { printf("请输入每个学生的成绩\n"); scanf("%d %d %d %d %d",&buf[i][0],&buf[i][1],&buf[i][2],&buf[i][3],&buf[i][4]); } //1计算学生的平均分 printf("每个学生的平均分:\n"); for (int i = 0; i < 10; i++) { float sum = 0.0; for (int j = 0; j <5;j++) { sum += buf[i][j]; } avstu[i] = sum/5.0; printf("%.2f\n",avstu[i]); } //2计算科目的平均分 printf("每个科目的平均分:\n"); for (int i = 0; i < 5;i++) { float sum = 0.0; for (int j = 0; j < 10; j++) { sum += buf[j][i]; } avkc[i] = sum / 10.0; printf("%.2f\n",avkc[i]); } //3找最高分 int indexx = 0; int indexy = 0; int max = buf[0][0]; for (int i = 0; i < 10;i++) { for (int j = 0; j < 5;j++) { if (buf[i][j] > max) { indexx = i; indexy = j; max = buf[i][j]; } } } printf("最高分:%d,学生(从0开始编号):%d,课程(从0开始编号):%d",max,indexx,indexy); //4.每个科目的方差 float fc[5] = {0}; printf("各科均分方差:\n"); for (int i = 0; i <5; i++) { float d = 0.0; for (int j = 0;j < 10;j++) { d += (buf[j][i] - avkc[i])*(buf[j][i] - avkc[i]); } fc[i] = d/10.0; printf("%f\n",fc[i]); } //总分由高到底排序 //计算总分 int zfs[10] = {0}; for (int i = 0; i < 10; i++) { int sum = 0; for (int j = 0; j < 5; j++) { sum += buf[i][j]; } zfs[i] = sum; } int indsort[10] = {0}; for (int i = 0; i < 10; i++) { indsort[i] = i; } sort(indsort,indsort+10,[&](const int& a, const int& b){ return (zfs[a] > zfs[b]); }); printf("按总分数由高到低排序:\n"); for (int i = 0; i < 10; i++) { int ii = indsort[i]; printf("%d,%d\n",ii,zfs[ii]); } //5.每个科目A/B/C级别的比例 int bl[5][3] = {0}; for (int i = 0; i < 5; i++) { int cntA = 0; int cntB = 0; int cntC = 0; for (int j = 0; j < 10;j++) { if (buf[j][i] >= 90) //>90认为A { cntA++; }else if (buf[j][i] >= 80 && buf[j][i] < 90) { cntB++; }else cntC++; } bl[i][0] = cntC; bl[i][1] = cntB; bl[i][2] = cntC; printf("科目%d的A数量=%d,B数量=%d,C数量=%d\n",i,cntA,cntB,cntC); } getchar(); getchar(); return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 乌班图ip地址配置及远程SSH
- ¥15 怎么让点阵屏显示静态爱心,用keiluVision5写出让点阵屏显示静态爱心的代码,越快越好
- ¥15 PSPICE制作一个加法器
- ¥15 javaweb项目无法正常跳转
- ¥15 VMBox虚拟机无法访问
- ¥15 skd显示找不到头文件
- ¥15 机器视觉中图片中长度与真实长度的关系
- ¥15 fastreport table 怎么只让每页的最下面和最顶部有横线
- ¥15 java 的protected权限 ,问题在注释里
- ¥15 这个是哪里有问题啊?