课程结束了,要计算平均绩点,编个程序解决吧
过程:复制教务信息到TXT文件保存→读入MATLAB获取学分和成绩(分数和评级)信息→根据绩点规则计算平均绩点
主要涉及字符串分割、字符串的判断和数值大小的判断
暂时有如下几门出了成绩:
复制教务的成绩信息到txt文件之后读取处理:
绩点计算方法:
程序:
%% 计算绩点
clc;
clear all;
close all;
feature('DefaultCharacterSet', 'UTF8');
a=importdata('gp.txt');
sizea = size(a);
gplist=cell(sizea(1),2);
credit=zeros(sizea(1),1);
score=zeros(sizea(1),1);
majorsinglegp=zeros(sizea(1),1);
electivesinglegp=zeros(sizea(1),1);
mposition=zeros(sizea(1),1);
eposition=zeros(sizea(1),1);
%%计算单门课程绩点
for i=1:sizea(1)
p = regexp(a{i}, '\s+', 'split');
gplist{i,1} = p{2};
credit(i,1)= str2double(gplist{i,1});
gplist{i,2} = p{4};
q = isstrprop(gplist{i,2},'digit');%判断字符串逐位是否为数字,是数字的话,对应位置值为1,不是为0
if q==0 %如果为0,也就是是汉字(这里除了汉字就是数字)
eposition(i,1)=1;
if gplist{i,2} == '优'
electivesinglegp(i,1)=4;
elseif gplist{i,2} == '良'
electivesinglegp(i,1)=3;
elseif gplist{i,2} == '中'
electivesinglegp(i,1)=2;
end
else
mposition(i,1)=1;
score(i,1)=str2double(gplist{i,2});
if score(i,1)>=90
majorsinglegp(i,1)=4;
elseif score(i,1)>=85
majorsinglegp(i,1)=3.7;
elseif score(i,1)>=82
majorsinglegp(i,1)=3.3;
elseif score(i,1)>=78
majorsinglegp(i,1)=3;
elseif score(i,1)>=75
majorsinglegp(i,1)=2.7;
elseif score(i,1)>=72
majorsinglegp(i,1)=2.3;
elseif score(i,1)>=68
majorsinglegp(i,1)=2;
elseif score(i,1)>=64
majorsinglegp(i,1)=1.5;
elseif score(i,1)>=60
majorsinglegp(i,1)=1;
else
majorsinglegp(i,1)=0;
end
end
end
%%计算平均绩点
majorgp=sum(sum(majorsinglegp.*credit*0.65))/sum(sum(mposition.*credit));
electivegp=sum(sum(electivesinglegp.*credit*0.35))/sum(sum(eposition.*credit));
gp=majorgp+electivegp;
fprintf('your GPA: %f',gp);
结果:
有个问题就是,只能运行一次,得到评级课程的绩点,运行第二次的时候就判别不了‘优良中差’字符了,需要重启MATLAB才行,暂时没找到原因
分数有些低呀,希望暂时没出成绩的其他的课程都拿高分!!!