m0_64766728 2022-06-19 16:15 采纳率: 50%
浏览 33
已结题

求解以下问题(用Matla解决)

随机生成100个学生的三门课程成绩存入矩阵P中,并进行如
下处理:
•分别求每门课的最高分、最低分及其相应学生学号
•三门课总分的最高分、最低分及相应学生学号
•分别统计3门课在50-59、60-69、…分数段的人数。

  • 写回答

1条回答 默认 最新

  • 胸毛男 2022-06-19 23:01
    关注

    主要用了max和min返回最值和最值位置的特点,还有矩阵的条件筛选 。。。&。。。 这样写更快。

    A.XueHao=0;
    A.YuWen=0;
    A.Shuxue=0;
    A.YingYu=0;
    matA = repmat(A,100,1);
    for i=1:1:100
        matA(i,1).XueHao=i;
        matA(i,1).YuWen = floor(rand()*100);
        matA(i,1).Shuxue= floor(rand()*100);
        matA(i,1).YingYu= floor(rand()*100);
    end
    %分别求每门课的最高分、最低分及其相应学生学号
    [Max_YuWen,number_YuWen] = max([matA.YuWen]);
    [Max_Shuxue,number_Shuxue] = max([matA.Shuxue]);
    [Max_YingYu,number_YingYu] = max([matA.YingYu]);
    
    disp(['语文最高分:',num2str(Max_YuWen),',学号:', num2str(number_YuWen)]);
    disp(['数学最高分:',num2str(Max_Shuxue),',学号:', num2str(number_Shuxue)]);
    disp(['英语最高分:',num2str(Max_YingYu),',学号:', num2str(number_YingYu)]);
    
    [Min_YuWen,number_YuWen] = min([matA.YuWen]);
    [Min_Shuxue,number_Shuxue] = min([matA.Shuxue]);
    [Min_YingYu,number_YingYu] = min([matA.YingYu]);
    
    disp(['语文最低分:',num2str(Min_YuWen),',学号:', num2str(number_YuWen)]);
    disp(['数学最低分:',num2str(Min_Shuxue),',学号:', num2str(number_Shuxue)]);
    disp(['英语最低分:',num2str(Min_YingYu),',学号:', num2str(number_YingYu)]);
    
    %三门课总分的最高分、最低分及相应学生学号
    Zong=zeros(100,2);
    for i=1:1:100
        Zong(i,1) =matA(i,1).XueHao;
        Zong(i,2)=matA(i,1).YuWen+matA(i,1).Shuxue+matA(i,1).YingYu;
    end
    
    [ZongMax,ZongNum] = max(Zong(:,2));
    disp(['总分最高:',num2str(ZongMax),',学号:', num2str(ZongNum)]);
    [ZongMin,ZongNum] = min(Zong(:,2));
    disp(['总分最低:',num2str(ZongMin),',学号:', num2str(ZongNum)]);
    
    %分别统计3门课在50-59、60-69、…分数段的人数。
    Count_50_div10_100_YuWen_ShuXue_YingYu=zeros(5,3);
    MatDoubleA = [matA.YuWen;matA.Shuxue;matA.YingYu]';
    for col =1:1:3
            k=1;
        for score = 50:10:90
            if(score==90)
                Count_50_div10_100_YuWen_ShuXue_YingYu(k,col)=size(MatDoubleA(MatDoubleA(:,col)>=score & MatDoubleA(:,col)<=score+10,:),1);
            else
                Count_50_div10_100_YuWen_ShuXue_YingYu(k,col)=size(MatDoubleA(MatDoubleA(:,col)>=score & MatDoubleA(:,col)<score+10,:),1);
            end
            if(col==1)
                kemu = '语文';
                else if (col==2)
                    kemu = '数学';
                    else if (col==3)
                        kemu = '英语';
                    end
                end
            end
            disp([kemu,'在',num2str(score),'-',num2str(score+10),'分人数:',num2str(Count_50_div10_100_YuWen_ShuXue_YingYu(k,col))]);
            k=k+1;
        end
    end
    

    语文最高分:97,学号:11
    数学最高分:98,学号:63
    英语最高分:98,学号:86
    语文最低分:1,学号:1
    数学最低分:0,学号:78
    英语最低分:0,学号:52
    总分最高:240,学号:36
    总分最低:25,学号:89
    语文在50-60分人数:12
    语文在60-70分人数:7
    语文在70-80分人数:15
    语文在80-90分人数:11
    语文在90-100分人数:4
    数学在50-60分人数:7
    数学在60-70分人数:11
    数学在70-80分人数:7
    数学在80-90分人数:10
    数学在90-100分人数:10
    英语在50-60分人数:14
    英语在60-70分人数:9
    英语在70-80分人数:9
    英语在80-90分人数:7
    英语在90-100分人数:10

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 6月28日
  • 已采纳回答 6月20日
  • 创建了问题 6月19日

悬赏问题

  • ¥15 目详情-五一模拟赛详情页
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line