matlab求解!

将90个学生5门功课的成绩存入矩阵P中,进行如下处理:(1)分别求每门课的最高分、最低分及相应学生序号;(2)分别求每门课的平均分及标准方差;(3)5门课总分的最高分、最... 将90个学生5门功课的成绩存入矩阵P中,进行如下处理:
(1) 分别求每门课的最高分、最低分及相应学生序号;
(2) 分别求每门课的平均分及标准方差;
(3) 5门课总分的最高分、最低分及相应学生序号;
(4) 将5 门课总分按从大到小的顺序存入 zcj 中,相应学生序号存入xsxh;
(5) 统计每门课成绩在0~60、60~70、70~80、80~90、90~100各分段学生的百分比、并分别用直方图和饼图显示统计结果。 谢谢
展开
 我来答
武陵笑天
2014-04-17 · TA获得超过160个赞
知道小有建树答主
回答量:74
采纳率:100%
帮助的人:34.8万
展开全部
clear;
clc;
load P.mat;%将90个学生5门功课的成绩存入矩阵P中,第一列为学生序号。这里序号为1:90。在此导入
i0=size(P);
%(1) 分别求每门课的最高分、最低分及相应学生序号;
maxStudent(i0(2)-1,10)=0;%用于保存每门课最高分的学生的序号及分数。
minStudent(i0(2)-1,10)=0;%用于保存每门课最低分的学生的序号及分数。
for i=2:i0(2)
k=find(P(:,i)==max(P(:,i)));
i1=size(k);%如果最高分有两名学生并列,k是一个向量
for j=1:i1
disp(strcat('科目',int2str(i-1),'的最高分学生编号与成绩:',num2str(P(k(j),1)),'___',num2str(P(k(j),i))));
maxStudent(i-1,2*j-1)=P(k(j),1);%保存学生编号
maxStudent(i-1,2*j)=P(k(j),i);%保存学生分数
end
k=find(P(:,i)==min(P(:,i)));
i1=size(k);%如果最高分有两名学生并列,k是一个向量
for j=1:i1
disp(strcat('科目',int2str(i-1),'的最低分学生编号与成绩:',num2str(P(k(j),1)),'___',num2str(P(k(j),i)) ));
minStudent(i-1,2*j-1)=P(k(j),1);%保存学生编号
minStudent(i-1,2*j)=P(k(j),i);%保存学生分数
end
end
%(2) 分别求每门课的平均分及标准方差;
aveAxigema(i0(2)-1,2)=0;%用于保存每门课的平均分和标准差
for i=2:i0(2)
disp(strcat('科目',int2str(i-1),'的平均分与标准差:',num2str(sum(P(:,i))/i0(1)),'___',num2str(sqrt(sum((P(:,i)-aveAxigema(i-1,1)).^2)/i0(1)))));
aveAxigema(i-1,1)=sum(P(:,i))/i0(1);%平均分
aveAxigema(i-1,2)=sqrt(sum((P(:,i)-aveAxigema(i-1,1)).^2)/i0(1));%标准差
end
%(3) 5门课总分的最高分、最低分及相应学生序号;
maxSumStudent(1,2)=0;%用于保存每门课最高分的学生的序号及分数。
minSumStudent(1,2)=0;%用于保存每门课最低分的学生的序号及分数。
P1=P(:,2:i0(2))';
P(:,i0(2)+1)=(sum(P1))';
k=find(P(:,i0(2)+1)==max(P(:,i0(2)+1)));
i1=size(k);%如果最高分有两名学生并列,k是一个向量
for j=1:i1
disp(strcat('总分的最高分学生编号及成绩:',num2str(P(k(j),1)),'___',num2str(P(k(j),i0(2)+1))));
maxSumStudent(1,2*j-1)=P(k(j),1);%保存学生编号
maxSumStudent(1,2*j)=P(k(j),i0(2)+1);%保存学生分数
end
k=find(P(:,i0(2)+1)==min(P(:,i0(2)+1)));
i1=size(k);%如果最高分有两名学生并列,k是一个向量
for j=1:i1
disp(strcat('总分的最低分学生编号及成绩:',num2str(P(k(j),1)),'___',num2str(P(k(j),i0(2)+1))));
minSumStudent(1,2*j-1)=P(k(j),1);%保存学生编号
minSumStudent(1,2*j)=P(k(j),i0(2)+1);%保存学生分数
end
%(4) 将5 门课总分按从大到小的顺序存入 zcj 中,相应学生序号存入xsxh
P2=sortrows(P,i0(2)+1);%按照总分排序
P2 = flipud(P2);
zcj=P2(:,i0(2)+1);
xsxh=P2(:,1);
%(5) 统计每门课成绩在0~60、60~70、70~80、80~90、90~100各分段学生的百分比、并分别用直方图和饼图显示统计结果
x(i0(2)-1,5)=0;%用于保存每科目的分数段向量
y(i0(2)-1,5)=0;%用于保存每科目的分数统计值
for i=2:i0(2)
[x(i-1,:),y(i-1,:)]=tongjifun(P(:,i));
end
sn=2;
sm=i0(2)-1;
for i=2:i0(2)
subplot(sn,sm,i-1);
bar(x(i-1,:),y(i-1,:),1);
subplot(sn,sm,sm+i-1);
pie(y(i-1,:),{'0~60','60~70','70~80','80~90','90~100'});
end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%补充统计函数:
function [x,y]=tongjifun(A,bu)
%该版本的统计函数为最后的版本。
[i,j]=size(A);
B=reshape(A,i*j,1);
m=i*j;
minB=min(B);
maxB=max(B);
n=(maxB-minB)/bu;%计算组数
n=floor(n);
a(5)=0;%统计数量
for i=1:m
if B(i)<60
a(1)=a(1)+1;
end
if B(i)<60
a(1)=a(1)+1;
end
if B(i)<60
a(1)=a(1)+1;
end
if B(i)<60
a(1)=a(1)+1;
end
end
x=minB+bu/2:bu:minB+n*bu-bu/2;
y=a/(m*bu);
%bar(x,a/(m*bu),'g');g/y/r/b/k
end
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式