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各分段学生的百分比、并分别用直方图和饼图显示统计结果。 谢谢 展开
(1) 分别求每门课的最高分、最低分及相应学生序号;
(2) 分别求每门课的平均分及标准方差;
(3) 5门课总分的最高分、最低分及相应学生序号;
(4) 将5 门课总分按从大到小的顺序存入 zcj 中,相应学生序号存入xsxh;
(5) 统计每门课成绩在0~60、60~70、70~80、80~90、90~100各分段学生的百分比、并分别用直方图和饼图显示统计结果。 谢谢 展开
1个回答
展开全部
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
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
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询