问答题

试题六(共15分)<br>阅读以下说明和Java代码,填补Java代码中的空缺(1)~(5),将解答写在答题纸的对应栏内。<br>【说明】<br>已知某公司主要有两大类耗电资产(Asset):计算机(ComputerAsset)和建筑物(Building Asset)。为了节约能源,通过控制各种电源,将可关闭的房灯、计算机显示器等在夜间关闭。<br>为了实现上述需求,设计了如图6-1所示的类图,并用下面的Java代码加以实现。<br>【Java代码】<br>abstract class Asset{ /*通用资产,基类*/}<br>interface PowerSwitchable{ /*可在夜间关闭电源的物体实现该接口*/<br>public void powerDown();<br>public void powerUp();<br>}<br>abstract class BuildingAsset extends Asset{/*建筑物资产*/<br>protected int room;<br>public BuildingAsset(int room){ this.room= room; }<br>}<br>abstract class BuildingLight extends BuildingAsset{<br>//灯的通用信息:flourescent/incandescent等,略<br>BuildingLight(int roomNumber){ super(roomNumber);}<br>}<br>classEmergencyLight (1) {/*应急灯,永不关闭*/<br>EmergencyLight(int roomNumber){<br>super(roomNumber);<br>}<br>}<br>class RoomLights (2) {<br>RoomLights(int roomNumber){ super(roomNumber); }<br>public void powerDown(){ /*关电源,代码略*/}<br>public void powerUp(){/*开电源,代码略*/}<br>}<br>/*ComputerAsset、 Computer CPU和Computer Monitor代码略*/<br>public class BuildingManagement{<br>Asset things[]= new Asset[24];<br>int numltems=0;<br>public void goodNight(){/*值班员定时“关闭”时调用,关闭可关闭的电源*/<br>for (int i=0; i<things.length; i++)<br>if(things[i] instanceof (3) )<br>((PowerSwitchable)things[i]).powerDown();<br>}<br>/*goodMorning()与goodNight()类似,依次调用powerUp(),其实现细节此处略*/<br>public void add(Asset thing){ /*为建筑添加资产*/<br>things[ (4) ]=thing;<br>}<br>public static void main(String[] args){<br>BuildingManagementbl= (5) BuildingManagement();<br>bl.add(new RoomLights(101)); //101房间的控制灯<br>bl.add(new EmergencyLight(101)); //101房间的应急灯<br>bl.add(new ComputerCPU(10104));//101房间4号桌上的计算机主机<br>bl.add(new ComputerMonitor(10104)); // 101房间4号桌上的计算机显示器<br>bl.goodNight();<br>}<br>}


问答题

阅读以下应用说明及Visual Basic程序代码,将应填入(n)处的字句写在对应栏内。<br>【应用说明】<br>某应用程序可选择打开用户指定的文本文件,将其内容显示在指定的文本框内供用户编辑,并将编辑后的结果保存在用户指定的文件中。运行时的窗口如图6-1所示,其中有6个标签、一个驱动器列表框、一个目录列表框、一个文件列表框、一个文件类型组合框、一个文件编辑文本框、一个文件名文本框以及两个命令按钮。<br>该程序的开发要求如下。<br>(1)通过驱动器列表框(Drivel)、目录列表框(Dirl)和文件列表框(Filel),选择文件。<br>(2)文件类型组合框(Cmb_type)设置为下拉式列表框,其中有三个供选项,分别为“所有文件(*.*)”、“文本文件(*.txt)”和“可执行文件(*.exe)”。在文件列表框中列出的文件类型会自动与文件类型组合框中选择的文件类型相匹配。<br>(3)在文件列表框中单击一个文件名时,该文件名会显示在文件名文本框 (Txt filename)中。<br>(4)在文件列表框中双击一个文件名时,若是文本文件,则在文件编辑文本框 (Txt file)中显示该文件的内容并可进行编辑;若不是文本文件,则弹出一个对话框,提示“请选择文本文件!”。<br>(5)对于编辑后的文本文件,可在文件名文本框中输入新的文件名,并单击命令按钮(Cmd save)进行保存。<br>【Visual Basic程序代码】<br>Private Sub Form_Load()<br>Cmb_type.Addltem "所有文件(*.*)"<br>Cmb_type.Addltem "文本文件(*.txt)"<br>Cmb_type.Addltem "可执行文件(*.exe)"<br>Cmb_type.ListIndex=0<br>Filel.Pattern="*.*": Txt_filename.Text=" "<br>Txt_file.Text= " "<br>End Sub<br>Private Sub Dirl Change()<br>Filel.Path=(1)<br>End Sub<br>Private Sub Drivel Change()<br>Dirl.Path=Drivel.Drive<br>End Sub<br>Private Sub Cmb_type_click()<br>Select Case Cmb_type.(2)<br>Case 0<br>Filel.Pattern="*.*"<br>Case 1<br>Filel.Pattern="*.txt"<br>Case 2<br>Filel.Pattern="*.exe"<br>End Select<br>End Sub<br>Private Sub Cmd_save_Click()<br>usrFile=GetFileName() '函数GetFileName获得要保存的文件名<br>Open usrFile For Output As 1 '定义usrFile为1号输出文件<br>Print 1,Txt file.Text '输出到1号文件<br>Close 1<br>End Sub<br>Private Sub Filel_DblClick()<br>If right(Filel.FileName,3)<>(3)Then<br>MsgBox "请选择文本文件!"<br>Exit Sub<br>End If<br>usrFile=GetFileName() '函数GetFileName获得要打开的文件名<br>Open usrFile For Input As 1 '定义usrFile为1号输入文件<br>Txt_file.Text=" "<br>DO While (4) EOF(1)<br>Line Input l,fContext '从1号文件读入一行<br>Txt_file.Text;Txt file.Text +(5)+vbCrLf<br>Loop<br>Close 1<br>End Sub<br>'其他代码略


问答题

阅读以下说明和算法,完善算法并回答问题,将解答写在对应栏内。<br>[说明]<br>假设以二维数组G[1..m,1..n]表示一幅图像各像素的颜色,则G[i,j]表示区域中点(i,j]处的颜色,颜色值为0到k的整数。<br>下面的算法将指定点(i0,j0)所在的同色邻接区域的颜色置换为给定的颜色值。约定所有与点(i0,j0)同色的上、下、左、右可连通的点组成同色邻接区域。<br>例如,一幅8×9像素的图像如图1-1所示。设用户指定点(3,5),其颜色值为0,此时其上方(2,5)、下方(4,5)、右方(3,6)邻接点的颜色值都为0,因此这些点属于点(3,5)所在的同色邻接区域,再从上、下、左、右四个方向进行扩展,可得出该同色邻接区域的其他点(见图1-1中的阴影部分)。将上述同色区域的颜色替换为颜色值7所得的新图像如图1-2所示。<br>[算法]<br>输入:矩阵G,点的坐标(i0,j0),新颜色值newcolor。<br>输出:点(i0,j0)所在同色邻接区域的颜色置换为newcolor之后的矩阵G。<br>算法步骤(为规范算法,规定该算法只在第七步后结束):<br>第一步:若点(i0,j0)的颜色值与新颜色值newcolor相同,则(1);<br>第二步:点(i0,j0)的颜色值→oldcolor;创建栈S,并将点坐标(i0,j0)入栈;<br>第三步:若(2),则转第七步;<br>第四步:栈顶元素出栈→(x,y),并(3);<br>第五步:<br>1) 若点(x,y-1)在图像中且G[x,y-1]等于oldcolor,则(x,y-1)入栈S;<br>2) 若点(x,y+1)在图像中且G[x,y+1]等于oldcolor,则(x,y+1)入栈S;<br>3) 若点(x-1,y)在图像中且G[x-1,y]等于oldcolor,则(x-1,y)入栈S;<br>4) 若点(x+1,y)在图像中且G[x+1,y)等于oldcolor,则(x+1,y)入栈S:<br>第六步:转(4);<br>第七步:算法结束。<br>[问题]<br>是否可以将算法中的栈换成队列?回答:(5)。


问答题

阅读以下说明和C语言函数,将应填入(n)处的字句写在答题纸的对应栏内。<br>【说明】<br>假设一个剧场有N*N个座位,顾客买票时可以提出任意有效的座号请求。下面用二维数组a[N][N]模拟剧场中的座位,a[i][j]圆等于0表示<br>第i排第j列(0≤i,j≤N-1)的票尚未售出。<br>函数int Find(int a[][N],int R,int*row,int*col)的功能是:在部分票已售出的情况下,找出剧场中的R*R个空座位,要求这些座位<br>的排列形成一个正方形。若找到满足要求的一个座位排列,则函数返回1,并算出该正方形左上角的行、列号;若未找到,则返回0。<br>例如,一个7X7个座位的剧场如下图(a)所示,已售出部分座位的剧场如下图(b)所示,图中阴影部分表示已售出的座位,从下图(b)中找出<br>的3X3正方形空座位如下图(c)中斜线区所示。<br>【函数】<br>int Find(int a[][N] int R,int*row,iht*col)<br>{int i,j,k,c,t;int FOUND=0;<br>for(i=0;!FOUND&&i<N-R+1;i++) { /*从第0排开始查找*/<br>(1);<br>while (j<N-R+1&&!FOUND) {<br>for (k=0;(2)&&a[i][j+k]==0;k++); /*查找第i排连续的R个空座位*/<br>if (k>=R) { /*找到第i排连续的R个空座位*/<br>for (c=0;c<R;c++) { /*查找其余的R*(R-1)个座位*/<br>for (t=1;t<R;t++)<br>if (a[(3)][j+c]!=0) break;<br>if (t<R) break;<br>}/*for*/<br>if ((4)) FOUND=1;<br>}/*if*/<br>(5;<br>}/*while*/<br>}/*fori*/<br>if (FOUND) {<br>*row=i-1; *col=j-1; /*计算正方形区域的左上角坐标*/<br>return 1;<br>}<br>return 0;<br>}


问答题

阅读以下说明及Visual Basic程序代码,将应填入(n)处的字句写在答题纸的对应栏内。<br>【说明】<br>某个文本文件中存放了若干个非零数值有效数据,每个数据占一行,最后一行以数字“0”作为结束标志。下面的程序用于计算该文件中这<br>些数据之和,其运行窗口如下。<br>用户只要通过驱动器列表框、目录列表框和文件列表框,选择文本文件所在的驱动器、文件夹及相应的文件名,再单击“累计”按钮,就<br>能在“总计”文本框中看到该文本文件中的数据之和。<br>在开发过程中,设驱动器列表框名为Drivel,目录列表框名为Dirl,文件列表框名为Filel,存放数据的文本文件名为D:\test\vb7\datA<br>.txt,“累计”按钮名为sum,“总计”文本框(TextBox)名为textl。<br>【Visual Basic代码】<br>Private Sub Drivel_Change()<br>Dirl.Path=(1) '户选择的驱动器反映到目录列表框中<br>End Sub<br>Private Sub Dirl_Change()<br>Filel.Path=(2) '用户选择的文件夹改变文件列表框内容<br>End Sub<br>Private Sub sum_Click()<br>Dim (3) As New FileSystemOject, (4) As TextStxeam<br>'创建自己的文件系统对象,说明自己的文本流对象<br>If Right (Dirl.Path,1)="\"Then<br>SetmyTextFile=fso.OpenTextFile (Dirl.Path+Filel.FileNamc)<br>Else<br>SetmyTextFile=fso.OpenTextFile(Dirl.Path+”\’+Filel.FileName)<br>End“<br>S=0<br>Do<br>d=Val (myTextFilE.ReadRow)<br>S=S+d<br>Loop While (5)<br>Textl.Text=Str$(S)<br>End Sub


问答题

阅读以下说明和C语言程序,将应填入(n)处的字句写在对应栏内。<br>【说明】<br>魔方阵,又叫幻方,在我国古代称为“纵横图”。由1…N2共N2个自然数构成每行、每列及两对角线上各数之和都相等的N×N方阵,这样的方阵就叫做N阶魔方阵。顾名思义,奇阶魔方阵就是N为奇数的幻方。<br>奇数阶魔方阵的生成方法如下:<br>(1)第一个位置在第一行正中。<br>(2)新位置应当处于最近一个插入位置右上方,但如果右上方位置已超出方阵上边界,则新位置取应选列的最下一个位置;如果超出右边界,则新位置取应选行的最左一个位置。<br>(3)若最近一个插入元素为N的整数倍,则选下面一行同列上的位置为新位置。本题要求输入一个数据n,然后打印由自然数1到n2的自然数构成的魔方阵(n为奇数)。例如,当n=3时,魔方阵为:<br>8 1 6<br>3 5 7<br>4 9 2<br>了解其生成方法后,就可以根据此方法来写出程序了。首先设置int变量i,j,m, n。其中i标记魔方阵的行;j标记魔方阵的列;n表示魔方阵的维数,通过输入得到;通过m递加得到插入的数据。数组a[MAX][MAX]用于存放魔方阵元素。这里预定义了 MAX的大小,没有采用动态分配,在此设置为15,即最大求得15×15阶魔方阵。<br>【程序】<br>include <stdio.h><br>define MAX 15<br>void main()<br>{<br>int n;<br>int m=1;<br>int i,j;<br>int a[MAX][MAX];<br>printf("Please input the rank of matrix:");<br>scanf("%d",&n);<br>i=0;<br>(1)<br>while((2))<br>a[i][j]=m;<br>m++;<br>i--;<br>j++;<br>if((m-1)%n==0 && m>1)<br>{<br>(3)<br>j=j-1;<br>}<br>if(j>(n-1)) //超出上界<br>(4)<br>if(j>(n-1))<br>(5)<br>}<br>for(i=0;i<n;i++) //输出魔方阵<br>for(j=0;j<n;j++)<br>{<br>if(a[i][j]/10==0)<br>printf("%d ",a[i][j]); //对程序无影响,只是使输出的数每一列对齐<br>else<br>printf("%d ",a[i][j]);<br>if(j==(n-1))<br>printf("\n");<br>}<br>}


问答题

阅读下列函数说明和C代码,将应填入(n)处的字句写在对应栏内。<br>【说明】<br>函数void rcr(int a[],int n,int k)的功能是:将数组a中的元素s[0]~9[n-1]循环向右平移k个位置。<br>为了达到总移动次数不超过n的要求,每个元素都必须只经过一次移动到达目标位置。在函数rcr中用如下算法实现:首先备份a[0]的值,然后计算应移动到a[0]的元素的下标 p,并将a[P]的值移至a[0];接着计算应移动到a[p]的元素的下标q,并将a[q]的值移至 a[p];依次类推,直到将a[0]的备份值移到正确位置。<br>若此时移动到位的元素个数已经为n,则结束;否则,再备份a[1]的值,然后计算应移动到a[1]的元素的下标p,并将a[p]的值移至9[1];接着计算应移动到a[p]的元素的下标q,并将a[q]的值移至a[p];依次类推,直到将a[1]的备份值移到正确位置。<br>若此时移动到位的元素个数已经为n,则结束;否则,从a[2]开始,重复上述过程,直至将所有的元素都移动到目标位置时为止。<br>例如,数组a中的6个元素如图1(a)所示,循环向右平移两个位置后元素的排列情况如图1(b)所示。<br>void rcr(int a[] ,int n,int k)<br>{ int i,j,t,temp,count;<br>count =0; /*记录移动元素的次数*/<br>k=k%n;<br>if((1)){ /*若k是n的倍数,则元素无须移动;否则,每个元素都要移动*/<br>i=0<br>while(count<n) {<br>j=i;t=i;<br>temp =a[1]; /*备份a[i]的值*/<br>/*移动相关元素,直到计算出a[i]应移动到的目标位置*/<br>while((j=(2))! =i){<br>a[t]=a[j];<br>t=(3);<br>count++;<br>}<br>(4)= temp;count ++;<br>(5);<br>}<br>}<br>}


火星搜题