一、问答题
1、
阅读以下说明和流程图,填写流程图中的空缺,将解答填入答题纸的对应栏内。
【说明】
设[a1b1],[a2b2],...[anbn]是数轴上从左到右排列的n个互不重叠的区间(a1<b1<a2<b2...<an<bn),以下流程图将一个新的区间[A,B](A<B)添加到上述区间集,形成新的从左到右排列的n个互不重叠的区间(最后若A、B落在原有的两个区间,则以原有区间最左端和最右端点为基准,形成新的区间),最后依次输出这些区间的端点。
例如,给定区间集[1,2],[4,6],[8,10],[13,15],[17,20],添加区间[5,14]后,依次输出1,2,4,15,17,20,表示合并后的区间集:[1,2],[4,15],[17,20]。
该流程图采用的算法是:先在a1,b1,a2,b2...,an,bn中扫描定位A点,再继续扫描定位B点,在扫描过程中随时输出已确定的区间的端点值。

参考答案:
1.A
2.ai
3.bi
4.A 、B
5.B
解析:
根据说明和流程图,我们可以按照以下步骤填写流程图中的空缺:
-
在流程图的开始部分,需要判断新区间[A,B]的左端点A与原有区间集的最左区间的左端点a1的关系。如果A小于等于a1,则输出A,否则输出a1。因此,此处应填写“A”。
-
接着,我们需要找到第一个满足条件“区间左端点ai小于等于A并大于等于前一个区间的右端点”的区间。如果找不到这样的区间,说明新区间的左端点A已经超出了原有区间的范围,此时应输出A。因此,此处应填写“ai”。
-
对于新区间的右端点B的处理,我们需要找到第一个满足条件“区间右端点bi大于等于B并大于等于前一个区间的右端点”的区间。如果找不到这样的区间,说明新区间的右端点B已经超出了原有区间的范围,此时应输出原有区间的最右端点作为新的区间的右端点。因此,此处应填写“bi”。
-
在找到新区间的左右端点后,需要输出新的区间的左右端点。因此,此处应填写“A、B”。
-
最后,在扫描完所有区间并确定新的区间后,输出新的区间的右端点作为最后一个区间的右端点。因此,此处应填写“B”。
2、阅读以下C代码,回答问题1和问题2,将解答填入答题纸的对应栏内。
【C代码1】
【问题2】
写出【代码2】的运行时的输出结果。
参考答案:
(1)输入-1331的结果是:
Palindromic number.
a=-1331 b=1331
输入795的结果是:
a=795 b=597
(2) Passed,point=4
Passed,point=1
Passed,point=1
Passed,point=1
Failed
解析:
根据提供的C代码,当输入一个数时,程序会检查该数是否为回文数,并输出相应的结果。回文数是从前往后读和从后往前读都一样的数。对于输入-1331,它是回文数,所以输出为Palindromic number.,同时程序会计算其反转数b并输出;对于输入795,它不是一个回文数,所以只输出原数和其反转数b。
3、
阅读以下C代码,回答问题(1)~(6),将解答填入答题纸的对应栏内。
【说明】
某地电价分三档:
(1)当月用电量不超过180度时,每度电0.5元;
(2)当月用电量超过180度时但不超过360度的部分,每度电0.55元;
(3)当月用电量超过360度时,每度电0.7元;
例如,某户A一个月的用电量为150度,其电费为150*0.5=75.00元,某户B用电量为280度,其电费为180*0.5+(280-180)*0.55=145.00元;某户C用电量为450度,其电费为180*0.5+(360-180)*0.55+(450-360)*0.7=99.0+63.0=252.0元。
下面程序运行时度日m(m>0)个住户某月的用电量,计算该月每户应交的电费并输出,同时找出这m户中改约的最大用电量和最小用电量。


参考答案:
(1)qt<=180
(2)qt<=360
(3)180*0.5+(360-180)*0.55+(qt-360)*0.7
(4)minimum>qt
(5)maximun<qt
(6)m--
解析:
这是一个关于电费计算的程序。根据题目描述,电价分为三档,根据用电量不同,每度电的电费也不同。程序需要计算给定月份每户居民的电费,并找出最大和最小的用电量。
(1)对于第一个问题,当用电量qt不超过180度时,电费计算简单,直接乘以0.5即可。因此,条件判断应为if (qt <= 180)。
(2)当用电量超过180度但不超过360度时,需要按照每度电0.55元来计算。这部分的代码应该是else if (qt <= 360),因为电量还没有超过第二档的最高值。
(3)对于超过360度的用电量,电费计算更为复杂,需要考虑三个档次的电费累加。计算公式为:double cost = 180 * 0.5 + (360 - 180) * 0.55 + (qt - 360) * 0.7。这个公式涵盖了超过360度用电量的全部情况。
(4)在寻找最小用电量的过程中,我们需要比较当前的电量qt与已记录的最小值minimum。如果当前的电量比记录的最小值还小,那么更新最小值。因此,条件判断为if (minimum > qt)。
(5)寻找最大用电量的逻辑与寻找最小用电量相似,只是比较的方向相反。我们需要判断如果当前的电量qt大于已记录的最大值maximum,则更新最大值。因此,条件判断为if (maximum < qt)。
(6)最后一个问题是在计算完每户居民的电费后,需要减少m的值,表示已经处理完一户居民的电费计算。因此,这里应该是m–,表示计数减一。
4、
阅读以下C代码,回答问题(1)~(6),将解答填入答题纸的对应栏内。
【说明】
函数insertElem的功能是在元素升序排列的数组中加入一个新元素并保持数组元素升序排列的特点。在main函数中输入若干表示价格的实数,输入为0或负数或实数个数超出限定数量时终止,调用insertElem将价格按升序保存在数组pdata中,最后输出所输入的实数。

参考答案:
(1)arr[n]
(2)arr[i+1]=arr[i]
(3)arr[i+1]
(4)break
(5)pdata,n,price
(6)idx<n
解析:
(1)根据说明,函数insertElem的功能是在元素升序排列的数组中加入一个新元素并保持数组元素升序排列的特点。因此,新元素应该被插入到数组的末尾,即arr[n]的位置。
(2)为了插入新元素并保持数组的升序排列,需要将原数组中比新元素大的元素向后移动一个位置,为新元素腾出空间。因此,需要将arr[i]的元素赋值给arr[i+1],即将元素向后移动一个位置。
(3)完成元素的移动后,将新元素插入到正确的位置,即arr[i+1]。
(4)根据说明,当输入为0或负数时,应该终止输入。因此,在输入价格时,如果price小于等于0,应该使用break语句终止循环。
(5)调用inserElem函数时,需要传递保存价格的数组pdata、元素的数量n以及新输入的价格price作为参数。
(6)为了确保遍历数组中的所有元素并输出结果,需要确保遍历的条件是idx小于n。
5、
阅读以下C代码,回答问题(1)~(5),将解答填入答题纸的对应栏内。
【说明】
以下java代码实现一个简单乐器系统,音乐类(Music)可以使用各类乐器(Instrument)进行演奏和调音等操作。对部分乐器进行建模,其类图如题5-1所示,包括:乐器(Instrument)、打击乐器(Percussion)、弦乐器(Stringed)、管乐器(Wind)、木管乐器(Woodwind)、铜管乐器(Brass)。



参考答案:
1)abstract void play(Note n)
(2)extends Instrument
(3)extends Wind
(4)ArryList< Instrument >
(5)Music
解析:
(1)根据题目描述,第一空需要定义一个抽象方法,方法名为play,接受一个Note类型的参数。这是因为乐器类需要定义演奏音乐的抽象方法,但具体的实现细节将由子类提供。
(2)第二空需要用一个类继承自Instrument类。这是根据类图关系,许多乐器都是Instrument类的子类。
(3)第三空需要用一个类继承自Wind类。这是因为Wind是乐器的一种类型,代表管乐器,所以具体的乐器类如长笛等应该继承自Wind类。
(4)第四空需要使用ArrayList来创建存储Instrument对象的列表。这是因为题目中的类图展示了乐器系统包含多种乐器,可以使用ArrayList来动态管理这些乐器对象。
(5)最后一空关于Music类的创建或使用相关功能操作对象。题目描述中提到音乐类(Music)可以使用各类乐器(Instrument)进行演奏和调音等操作,因此需要创建Music对象或调用其相关方法来操作乐器进行演奏等活动。
6、
阅读以下C++代码,回答问题(1)~(5),将解答填入答题纸的对应栏内。
【说明】
以下C++代码实现一个简单乐器系统,音乐类(Music)可以使用各类乐器(Instrument)进行演奏和调音等操作。对部分乐器进行建模,其类图如题6-1所示,包括:乐器(Instrument)、打击乐器(Percussion)、弦乐器(Stringed)、管乐器(Wind)、木管乐器(Woodwind)、铜管乐器(Brass)。



参考答案:
(1)Virtul void play(Note n)=0
(2)Public Instrument
(3)Public Wind
(4)Vector</ Instrument* >
(5)Music*
解析:
(1)根据题目描述,第一空需要定义一个虚方法,虚方法使用关键字virtual进行声明,并且方法的返回类型为void,方法名为play,参数为Note类型的n,并且使用“=0”表示这是一个纯虚函数。因此答案为virtual void play(Note n)=0;。
(2)第二空需要用extends关键字继承一个类,题目中给出的提示是继承对应的类,由于题目中没有给出具体的基类名称,所以我们可以假设这个类是一个公共的基类,命名为Instrument。因此答案为public class Instrument {}。
(3)第三空同样需要继承一个类,这次继承的是Wind类。因此答案为public class Wind extends Instrument {}。
(4)第四空需要使用容器向量创建乐器类Instrument的多个对象。因此答案应该是vector<Instrument*> instruments;,其中vector是C++标准库中的动态数组容器,用于存储指向Instrument对象的指针。
(5)第五空需要创建一个Music对象。因此答案应该是Music* music = new Music();,表示创建一个Music类的对象指针并赋值给变量music。
喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!