weixin_57715545
2021-05-16 14:20
采纳率: 100%
浏览 76

求求各位大佬帮忙解决一下孩子的作业吧

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;
    }
    
    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • 有问必答小助手 2021-05-17 16:40

    您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

    如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

    ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题