阅读以下说明和Java程序,填充代码中的空缺,将解答填入答题纸的对应档内。
【说明】
某学校在学生毕业时要求对其成绩进行综合评定,学生的综合成绩(GPA)由其课程加权平均成绩(Wg)与附加分(Ag)构成,即GPA=Wg+Ag。
设一个学生共修了n门课程,则其加权平均成绩(Wg)定义如下:
其中,gradei、Ci分别表示该学生第i门课程的百分制成绩及学分。
学生可以通过参加社会活动或学科竞赛获得附加分(Ag)。学生参加社会活动所得的活动分(Apoints)是直接给出的,而竞赛分(Awards)则由下式计算(一个学生最多可参加m项学科竞赛):
其中,li和Si分别表示学生所参加学科竞赛的级别和成绩。
对于社会活动和学科竞赛都不参加的学生,其附加分按活动分为0计算。
下面的程序实现计算学生综合成绩的功能,每个学生的基本信息由抽象类Student描述,包括学号(stuNo)、姓名(name)、课程成绩学分(grades)和综合成绩(GPA)等,参加社会活动的学生由类ActStudent描述,其活动分由Apoints表示,参加学科竞赛的学生由类CmpStudent描述,其各项竞赛的成绩信息由awards表示。
[Java代码】
abstract class Student{
protected String name;
protected int stuNo;
protected double GPA; /*综合成绩*/
protected int[][]grades; /*各门课程成绩和学分*/
//其他信息略
public Student(int stuNo,String name,int[][]grades){
this.stuNo=stuNo;this.name=name;this.grades=grades;
}
____(1)____;
double computeWg(){
int totalGrades=0,totalCredits=0:
for(int i=0;i<grades.length;i++){
totalGrades+=grades[i][0]*grades[i][1];
totalCredits+=grades[i][1];
}
return(double)totalGrades/totalCredits;
}
}
class ActStudent extends Student{
private int Apoints;
ActStudent(int stuNo,String name,int[][]grades,int Apoints){
____(2)____;
this.Apoints=Apoints;
}
public double getGPA(){
return GPA=____(3)____;
}
}
Class CmpStudent extends Student{
Private int[][]Awards;
CmpStudent(int stuNo,String name,int[][]grades,int[][]awards){
____(4)____;
this.Awards=awards;
}
publ ic double getGPA(){
int totalAwards=0;
for(int I=0;i<Awards.length;i++){
totalAwards+=Awards[i][0]*Awards[i][1];
}
return GPA=____(5)____;
}
}
public class GPASystem{//以计算3个学生的综合成绩为例进行测试
public static void main(String[]args){
int g1[][2]={{80,3),{90,2},{95,3},{85,4},{86,3)),
g2[][2]={{60,3),{60,2},{60,3},{60,4},{65,3)),
g3[][2]={{80,3},{90,2},(70,3},{65,4},{75,3));//课程成绩
int[][]e1={{2,3},{1,2)},e2={{1,3});//竞赛成绩
Student student[]={
new ActStudent(i01,”John”,g1,3),//3为活动分
new ActStudent(102,”Zhang”,g2,0),
new ActStudent(103,”Li”,g3,e2),
};
//输出每个学生的综合成绩
for(int i=0;i<student.length;i++){
System.out.println(____(6)____);
}
}
}