程序原码:
clc;
clear;
s1=struct('stu_id','201010001','name','韩**','score',[98 100 98],'sex','F');%定义每个学生的信息
s2=struct('stu_id','201010002','name','马*同','score',[92 85 92],'sex','F');
s3=struct('stu_id','201010003','name','董*','score',[95 99 92],'sex','F');
s4=struct('stu_id','201010004','name','郭*','score',[98 85 92],'sex','F');
s5=struct('stu_id','201010005','name','白*','score',[19 69 100],'sex','F');
s6=struct('stu_id','201010006','name','*双双','score',[19 69 90],'sex','F');
s7=struct('stu_id','201010007','name','黄*坤','score',[19 69 88],'sex','F');
s8=struct('stu_id','201010008','name','王**','score',[65 69 100],'sex','M');
s9=struct('stu_id','201010009','name','刘雪*','score',[59 69 100],'sex','M');
s10=struct('stu_id','201010010','name','张*亭','score',[99 95 100],'sex','F');
student={s1,s2,s3,s4,s5,s6,s7,s8,s9,s10};%将所有学生的信息放在一个结构体内
s_course={{'微分方程'},{'泛函分析'},{'矩阵论'}};
s_grade={};%定义等级结构体
s_score=[];%定义成绩结构体
s_count=length(student);%计算一共有多少学生
c_count=length(s_course);%计算一共有几个科目
for j=1:s_count
for i=1:c_count
score=student{1,j}.score; %将第j个学生的分数信息取出,赋值给score
grade=score(i); %将第i门的成绩,赋值个grade
s_score(j,i)=grade; %将没门成绩给到一个矩阵
c=fix(grade/10); %对成绩除以10,向下取整
switch c %通过switch循环,自动每个成绩的等级进行判断
case 10
grade='满分';
case 9
grade='优秀';
case 8
grade='良好';
case 7
grade='中等';
case 6
grade='及格';
otherwise
grade='不及格';
end
s_grade{j,i}=grade;
end
end
s_grade;
s_score;
fprintf('各科成绩都是优秀或满分的同学:\n\n')
for i=1:s_count %依次循环判断,每名学生学生是不是全是满分或优秀
s=all(s_score(i,:)>90);
if s==1
name=student{1,i}.name;
stu_id=student{1,i}.stu_id;
score=student{1,i}.score;
fprintf('姓名:%s 学号:%s\n',name,stu_id)
for j=1:c_count
fprintf('科目:%s 分数:%d\n',char(s_course{1,j}),score(j)) %循环打印出科目和分数
end
fprintf('\n') %换行
end
end
运行图:
注1:这种题目只能是练习matlab的使用,只是起到练习作用,离实际应用差太远了。一个数学老师,他也不懂数据库,只能用结构体来做,如果懂计算机编程的感觉这个太low,那就请您理解吧,数学系普通教师不懂数据库。
注2:其实我本来应该是将 分数存在另外结构体中,会更加合理。因为明天早上还有课,这样也符合要求了!就不接着改了,毕竟这是个选修课的作业,这也应该是我们班的最高水平之一了,还有同学催着我分享给他。
注3:缺陷是每个学生的课只能一样,如果用到数据库,甚至是将数据存在Excel中,比struct合理的多,实现起来比这也简单!不多扯了,我要睡觉了!