我帮你编了三个程序(我老师给我的练习题目),你拿去用吧,我花了两个小时才编好的,分要给我哦。
第一题:
某数据文件’aa.dat’的格式为:
student number
1 2 3 4 5 6 7 8 9 10
Chinese score
80 85 70 79 98 90 73 83 86 90
English score
80 85 70 79 98 90 73 83 86 90
Math score
80 85 70 79 98 90 73 83 86 90
Physics score
80 85 70 79 98 90 73 83 86 90
设计一matlab程序,实现下面的功能:
根据输入的学号和课程名,查询该学生该门功课的成绩。
根据输入的学号,查询该学生各门功课的成绩,输出该信息(学号、功课名、成绩)。
在同一张图中绘制学号—各门功课成绩分布图,并保存图形。
按列(学号、功课1、功课2、…)输出信息保存到文件中。
第二题:
编写Matlab程序,构造以下的图形(图在最下面)
第三题
编写Matlab程序,实现以下功能:
1、 从外部文件中读入10个学生5门课的成绩;
2、 用独立的函数分别求:
a) 每个学生的平均分;
b) 每门课的平均分;
c) 找出最高的分数所对应的学生和课程;
d) 求平均分方差。
对应的程序:第一题:
function firstone
clear all
fin=fopen('firstone.txt','r');
global chengji
str=fgetl(fin);
[str1 str2 num1 num2 num3 num4 num5 num6 num7 num8 num9 num10]...
=strread(str,'%s %s %d %d %d %d %d %d %d %d %d %d','delimiter',' ');
num=[num1 num2 num3 num4 num5 num6 num7 num8 num9 num10];
chengji=zeros(4,10);
contor=1;
while feof(fin)==0
str=fgetl(fin);
[str1 str2 fenshu1 fenshu2 fenshu3 fenshu4 fenshu5 fenshu6 fenshu7 fenshu8 fenshu9 fenshu10]...
=strread(str,'%s %s %d %d %d %d %d %d %d %d %d %d','delimiter',' ');
fenshu=[fenshu1 fenshu2 fenshu3 fenshu4 fenshu5 fenshu6 fenshu7 fenshu8 fenshu9 fenshu10];
str3{contor}=str1;
if fenshu
chengji(contor,:)=fenshu;
end
contor=contor+1;
end
%根据学号和课程名称查询该生此课程的成绩
function f1(kecheng,xuehao)
for i=1:4
str=str3{i};
if strcmp(kecheng,str)
break
end
end
fprintf('%d号学生的%s的成绩是%d;\n',xuehao,kecheng,chengji(i,xuehao));
end
%输入的学号,查询该学生各门功课的成绩
function f2(xuehao)
s={'Physics' 'English' 'Math' 'Chinese'};
for i=1:4
fprintf('%d号学生%s的成绩是%d;\n',xuehao,s{i},chengji(i,xuehao));
end
end
%在同一张图中绘制学号—各门功课成绩分布图,并保存图形
rou=zeros(4,5);
% 统计分学科各分数段的人数,将其保存在rou数组中
for i=1:4
for j=1:10
if chengji(i,j)<60
rou(i,1)=rou(i,1)+1;
elseif chengji(i,j)<70
rou(i,2)=rou(i,2)+1;
elseif chengji(i,j)<80
rou(i,3)=rou(i,3)+1;
elseif chengji(i,j)<90
rou(i,4)=rou(i,4)+1;
else
rou(i,5)=rou(i,5)+1;
end
end
end
subplot(1,4,1);
for i=1:4
a=rou(i,:);
str=str3{i};
label={'<60','60~70','70~80','80~90','>90'};
for j=1:5
if a(j)<0
a(j)=[];
label{j}=[];
end
end
subplot(1,4,i);
pie(a,label);
title(str);
end
%按列(学号、功课1、功课2、…)输出信息保存到文件中
fenshu=zeros(5,10);
for i=1:10
for j=1:4
fenshu(1,i)=num(i);
fenshu(j+1,i)=chengji(j,i);
end
end
dlmwrite('tongji.txt',fenshu, 'delimiter',' ');
%示例查询课程分数
f1('Math',3);
f2(3);
end
运行结果:
3号学生的Math的成绩是70;
3号学生Physics的成绩是70;
3号学生English的成绩是70;
3号学生Math的成绩是70;
3号学生Chinese的成绩是70;
第二题:
function secendone
figure(1)
axis([0 25 -20 5]);
box('on');
xlabel('X(m)');
ylabel('Z(m)');
title('Model No.1 of DC resistivity');
X1=[0 25];
Y1=[0 0];
Y2=[-5 -5];
line(X1,Y1);
line(X1,Y2);
X2=[5 10];
Y3=[-5 0];
line(X2,Y3);
X3=[10,20];
Y4=[-10 -10];
Y5=[-15 -15];
line(X3,Y4);
line(X3,Y5);
X4=[10 10];
X5=[20 20];
Y6=[-15 -10];
line(X4,Y6);
line(X5,Y6);
text(2.5,-2.5,'p1');
text(12.5,-2.5,'p2');
text(5,-12.5,'p3');
text(12.5,-12.5,'p4');
Y7=[-10,0];
line(X4,Y7,'linestyle',':','color','linewidth',1,[0.5 0.6 1]);
line(X5,Y7,'linestyle',':','color',[0.5 0.6 1]);
end
运行结果:
第三题:
function disanti
fn=input('file name is:','s');
fin=fopen(fn,'r');
global str1
str=fgetl(fin);
[str1]=strread(str,'%s','delimiter',' ');
global chengji
chengji=zeros(10,5);
contor=1;
while feof(fin)==0
str=fgetl(fin);
[num math english chinese physics chemistry]=strread(str,'%d %d %d %d %d %d','delimiter',' ');
fenshu=[math english chinese physics chemistry];
if fenshu
chengji(contor,:)=fenshu;
end
contor=contor+1;
end
fclose(fin);
function f1
for i=1:10
sum=0;
for j=1:5
sum=chengji(i,j)+sum;
aver=sum/5;
end
fprintf('%d号学生的平均分是%d;\n',i,aver);
end
end
%每门课的平均分的函数
function f2
for i=1:5
sum=0;
for j=1:10
sum=sum+chengji(j,i);
aver=sum/10;
end
fprintf('%s的平均分是%d;\n',str1{i+1},aver);
end
end
%寻找各学科分数最高的学生
function f3
for i=1:5
fenshu=chengji(:,i);
for j=1:10
m=max(fenshu);
if m==fenshu(j)
fprintf('%s的最高分是%d及其最高分学生号是%d;\n',str1{i+1},fenshu(j),j);
end
end
end
end
%求平均分差
function f4
for i=1:5
sum1=0;
sum2=0;
for j=1:10
sum1=sum1+chengji(j,i)*chengji(j,i);
sum2=sum2+chengji(j,i)
end
aver1=sum1/10;
aver2=(sum2/10)^2;
thida=aver1-aver2;
fprintf('%s的成绩方差是%d;\n',str1{i+1},thida);
end
end
f1;
f2;
f3;
f4;
end