根据注释,空〔2)所在的for语句要找出剩下数中的最小者,也就是要找出sieve中第一个值不等于0的数组元素sieve[k],顺序地考察sieve的元素即可,因此空〔2)处应填入“k++〞。
空〔3)应填入“k>N〞或其等价形式,表示要找的最小素数己经大于N,应完毕处理。
空〔4)和〔5)所在for语句用于将刚找出的素数k及其倍数从序列中去掉,用i表示k的倍数〔包括k自己〕时,i的取值为k,2k,3k在i的初值己设置为k的情况下,i的迭代方式为i=i+k,因此空〔4)处应填入“i+k〞,空〔5)处应填入“sieve[i]=0〞
试题四
N个游戏者围成一圈,从1〜N顺序编号,游戏方式如下:
从第一个人开场报数〔从1到3报数),凡报到3的人退出圈子,直到剩余一个游戏者为止,该游戏者即为获胜者。
下面的函数playing(LinkListhead)模拟上述游戏过程并返回获胜者的编号。
其中,N个人围成的圈用一个包含N个结点的单循环链表来表示,如图4-1所示,游戏者的编号放在结点的数据域中。
在函数中,以删除结点来模拟游戏者退出圈子的处理。
整型变量c(初值为1)用于计数,指针变量p的初始值为head(如图4-1所示)。
游戏时,从p所指向的结点开场计数,p沿链表中的指针方向遍历结点,c的值随p的挪动相应地递增。
当c计数到2时,就删除P所指结点的下一个结点〔因下一个结点就表示报数到3的游戏者〕,如图4-2所示,然后将c设置为0后继续游戏过程。
阅读以上说明和C程序,填充函数中的空缺,将解答填入答题纸的对应栏内。
(1)1
(2)q->next或p->next->next
(3)0
(4)p->next
(5)p->code
此题考察数据构造的应用和C程序的运算逻辑,主要涉及指针和链表。
由于游戏最后剩一人时完毕,因此空〔1)处应填入“1〞,表示N>1时游戏过程要继续。
当c等于2时,p所指结点的后继表示为q(q=p->next),q所指结点即为要删除的结点,即如下列图所示。
此时,需要修改p所指结点的指针域,令其指向q所指结点的后继结点,对应的操作为p->next=q->next(等同于p->next=p->next->next),因此空〔2)处应填入“q->next〞或“p->next->next〞。
将q所示结点删除后的相关指针如下列图所示。
试题五
某学校在学生毕业时要对其成绩进展综合评定,学生的综合成绩〔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表示。
阅读说明和C++代码,填充代码中的空缺,将解答填入答题纸的对应栏内。
(1)virtualdoublegetGPA()=0
(2)Student(stuNo,name,gs)
(3)computeWg()+Apoints或Student:
:
computeWg()+Apoints
(4)Student(stuNo,name,gs)
(5)computeWg()+Awards或Student:
:
computeWg()+Awards
(6)students[i]->getGPA()
此题考察C++语言程序设计的才能,涉及类、对象、函数的定义和相关操作。
要求考生根据给出的案例和执行过程说明,认真阅读理清程序思路,然后完成题目。
先考察题目说明。
以学校计算综合成绩(GPA)为背景。
此题目中综合成绩除了考虑根底课程加权平均成绩〔吵〕之外,还有附加分〔处〕,程序的主要任务是计算加权平均成绩和附加分,并根据情况选择社会活动或学科竞赛获得的不同附加分:
活动分(Apoints)或竞赛分〔Jwarcfa)。
每种成绩计算方式如题中所述。
根据说明,将学生设计为一种类型,设计为类Student,学号〔stuNo)、姓名〔name)、课程成绩学分〔grades)和综合成绩〔GPA)分别作为其数据属性,构造函数中对stuNo、name,grades进展初始化,用相应的get函数获取相关属性值。
对于GPA的获取值的函数,因为不同附加分的计算方法不同,设计为纯虚函数,详细实现由子类完成。
将计算加权平均成绩设计为doublecomputeWg()。
将有活动附加分的学生设计为ActStudent,有竞赛附加分的学生设计为CmpStudent,都作为Student的子类。
子类中,继承父类中访问属性为protected的属性,其构造函数进展初始化时,调用父类Student中的构造函数对学号、工程和学分成绩进展初始化,并对活动分或竞赛分进展初始化。
ActStudent(constintstuNo,conststring&name,intgs[][2],intApoints)
:
Student(stuNo,name,gs)
或
CmpStudent(constintstuNo,conststring&name,intgs[][2],intawards[][2])
:
Student(stuNo,name,gs)
在子类中,实现了获取GPA的函数getGPA,根据题目描绘,GPA的计算方式为加权平均成绩〔吟)和附加分〔)之和,所以返回值就是:
computeWg()+Apoints或computeWg()+Awards
其中,computeWg()在父类Student中定义,子类直接可以作为自己的函数一样使用。
主控逻辑代码在main函数中实现。
初始化学生的各科学分和成绩,用数组gi表示,学生的竞赛分用数组ci表示。
用Student*student定义学生数组,而每个详细的学生是ActStudent或CmpStudent类型的对象,这里会自动向上转型成为Student类型。
用for循环对每个学生的综合成绩进展输出,调用时会继续动态绑定每个数组元素的实际类型,并调用其getGPA函数,艮P:
cout«students[i]->getGPA()«endl;
使用完指针数组对象之后,需要用delete操作进展释放,即:
delete*students;0
因此,空〔1)需要指向定义纯虚函数getGPA(),即为virtualdoublegetGPA()=0;空〔2)和空(4)需要调用父类的构造函数,即Student(stuNo,name,gs);空〔3)处计算附加分为活动分的GPA,调用computeWg()计算加权平均分,再加上附加分Apoints,即空〔3)为computeWg()+Apoints;空〔5)处计算附加分为竞赛分的GPA,调用computeWg()计算加权平均分,再加上计算出来的总竞赛分Awards,即空〔5)为computeWg()+Awards;空〔6)处为在循环中根据数组下标所表示的每个学生对象调用getGPA()输出每个学生的GPA,即students[i]->getGPA()。
试题六
某学校在学生毕业时要对其成绩进展综合评定,学生的综合成绩〔GM)由其课程加权平均成绩〔Wg)与附加分〔处)构成,即GPA=吟+处。
设一个学生共修了n门课程,那么其加权平均成绩〔吟〕定义如下:
其中,gradei、C;分别表示该学生第i门课程的百分制成绩及学分。
学生可以通过参加社会活动或学科竞赛获得附加分〔dg)。
学生参加社会活动所得的活动分〔Apoints)是直接给出的,而竞赛分〔dwarfs)那么由下式计算〔一个学生最多可参加m项学科竞赛):
其中,li和Si分别表示学生所参加学科竞赛的级别和成绩。
对于社会活动和学科竞赛都不参加的学生,其附加分按活动分为0计算。
下面的程序实现计算学生综合成绩的功能,每个学生的根本信息由抽象类Studem描绘,包括学号〔stuNo)、姓名〔name)、课程成绩学分〔grades)和综合成绩〔GPA)等,参加社会活动的学生由类ActStudent描绘,其活动分由Apoints表示,参加学科竞赛的学生由类CmpStudent描绘,其各项竞赛的成绩信息由awards表示。
阅读说明和Java程序,填充代码中的空缺,将解答填入答题纸的对应栏内。
(1)abstractdoublegetGPA()
(2)super(stuNo,name,grades)
(3)computeWg()+Apoints或superputeWg()+Apoints
(4)super(stuNo,name,grades)
(5)computeWg()+totalAwards或superputeWg()+totalAwards
(6)studentsfi].getGPA()
此题考査Java语言程序设计的才能,涉及类、对象、方法的定义和相关操作。
要求考生根据给出的案例和执行过程说明,认真阅读理清程序思路,然后完成题目。
先考察题目说明。
以学校计算综合成绩(GPA)为背景。
此题目中综合成绩除了考虑根底课程加权平均成绩〔Wg)之外,还有附加分〔Ag),其主要任务是计算加权平均成绩和附加分,并根据情况选择社会活动或学科竞赛获得的不同附加分:
活动分(Apoints)或竞赛分〔Awards)。
每种成绩计算方式如题中所述。
根据说明,将学生设计为一种类型,设计为类Student,学号〔stuNo)、姓名〔name)、课程成绩学分〔grades)和综合成绩〔GPA)分别作为其数据属性,构造方法中对stuNo、name、grades进展初始化,用相应的get方法获取相关属性值。
对于GPA的获取值的方法,因为不同附加分的计算方法不同,设计为抽象方法,实现由子类完成。
因为类中包含抽象方法,所以Student必须设计为抽象类。
将计算加权平均成绩设计为方法doublecomputeWg()。
将有活动附加分的学生设计为ActStudent,有竞赛附加分的学生设计为CmpStudent,都作为Student的子类。
子类中,继承父类中访问属性为protected的属性,其构造方法进展初始化时,调用父类Student中的构造方法对学号、工程和学分成绩进展初始化,并对活动分或竞赛分进展初始化。
Java中,调用父类的构造方法在构造方法体内的第一条语句,即:
ActStudent(intstuNo,Stringname,int[][]grades,intApoints){
在子类中,实现了获取GPA的方法getGPA,根据题目描绘,GPA的计算方式为加权平均成绩〔Ag〕和附加分〔Wg)之和,所以返回值就是:
computeWg()+Apoints或computeWg()+totalAwards
其中,computeWg()在父类Student中定义,子类直接可以作为自己的方法一样使用。
主控逻辑代码在GPASystem类中的main方法中实现。
初始化学生的各科学分和成绩,用数组gi表示,学生的竞赛分用数组ei表示。
用Studentstudent^定义学生数组,而每个详细的学生是ActStudent或CmpStudent类型的对象,这里会自动向上转型成为Student类型。
用for循环对每个学生的综合成绩进展输出,调用时会动态绑定每个数组元素的实际类型,并调用其getGPA()方法,即:
System.out.println(students[i].getGPA());
因此,空〔1)需要指向定义抽象方法getGPA(),即为abstractdoublegetGPA();空
(2)和空(4)需要调用父类的构造方法,即super(stuNo,name,grades);空(3)处计算附加分为活动分的GPA,调用computeWgO计算加权平均分,再加上附加分Apoints,即空(3)为computeWg()+Apoints;空(5)处计算附加分为竞赛分的GPA,调用computeWg()计算加权平均分,再加上计算出来的总竞赛分totalAwards,即空〔5)为computeWg()+totalAwards;空〔6)处为在循环中根据数组下标所表示的每个学生对象调用getGPA()输出每个学生的GPA,即students[i].getGPA()。