问题 问答题

使用VC6打开考生文件夹下的工程test26_3。此工程包含一个test26_3.cpp,其中定义了类queue,但该类的定义并不完整。请按要求完成下列操作,将程序补充完整。 (1)完成类queue的无参数的构造函数的定义,要求把数据成员bl和el都初始化为0,同时输出queue initialized。请在注释“//**1**”之后添加适当的语句。 (2)完成类queue的成员函数qput(int j)的定义,它的功能是把新的元素加入队列,过程是先依据bl的值判断数组是否已经满了,如果是就输出queue is full,否则bl自加一,并且把参数j的值存入bl指向的数组元素中,请在注释“//**2**”之后添加适当的语句。 (3)完成类queue的成员函数qget()的定义,它的功能是把队列开头的元素提取出队列,并返回该值,过程是先比较el和bl的值判断队列是否已空,如果是就输出queue is empty,否则el自加一,并且把el指向的数组元素返回,请在注释“// **3**”之后添加适当的语句。 程序输出结果如下: queue initialized queue initialized 33 11 44 22 注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。 源程序文件test26_3.cpp清单如下: #include<iostream.h> class queue {int q[100];int bl,el; public:queue( );void qput(int j);int qget( ); }; queue::queue( ) {// **1** } void queue::qput(int j) {// **2** { cout<<"queue is full\n"; return; } bl++; q[bl]=j; } int queue::qget( ) {// **3** { cout<<"queue is empty\n"; return 0; } el++; return q[el]; } void main( ) {queue aa,bb;aa.qput(11);bb.qput(22);aa.qput(33);bb.qput(44);cout<<aa.qget()<<" "<<aa.qget()<<"\n";cout<<bb.qget()<<" "<<bb.qget()<<"\n"; }

答案

参考答案:

解析:(1) bl=el=O; cout<<"queue initialized\n"; (2) if(bl==100) (3) if(el==bl)主要考查考生对于具体的一个队列类的掌握,对列是一种特殊的存储结构,使用先进先出原则,题目中bl和el分别指向队列的开头和结尾,其中(2)是队列的标准插入操作, (3)是队列的标准的删除操作,注意它们的操作方式和先判断后操作的原则。

单项选择题
问答题

请编制程序,其功能是:求I×J矩阵的转置矩阵(矩阵中元素为字节型),并计算转置矩阵的每一行元素之和,然后存放在每一行最后一个字单元中。
例如:
内存中有:04H,05H,06H,(第一行)01H,02H,03H(第二行)
结果为: 04H,01H,05H,00H,05H,02H,07H,00H,06H,03H,09H,00H
部分程序已给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从 RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
请填空BEGIN和END之间已经给出的一段源程序使其完整,需填空处已经用横线标出,每个空白一般只需要填一条指令或指令的一部分(指令助记符或操作数),也可以填入功能相当的多条指令,或删去BEGIN和END之间原有的代码并自行编程来完成所要求的功能。
对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。
[试题程序]
EXTRN LOAD:FAR,SAVE:FAR
N EQU 30
I EQU 3
J EQU 10
DSEG SEGMENT
SOURCEDBN DUP()
SRC DWSOURCE
RESULTDB(N+2*J)DUP(0)
NAME0DB’INPUT1.DAT’,0
NAME1DB’OUTPUT1.DAT’,0
DSEG ENDS
SSEG SEGMENT STACK
DB256 DUP()
SSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,SS:SSEG,DS:DSEG
STARTPROC FAR
PUSH DS
XORAX,AX
PUSH AX
MOVAX,DSEG
MOVDS,AX
MOVES,AX
LEADX,SOURCE
LEASI,NAME0
MOVCX,N
CALL LOAD
******** BEGIN ********
LEASI,SOURCE
LEADI,RESULT
MOVBX,1; 第一列
LPJ: MOVCX,0; 累加和
MOVDX,1; 第一行
LPI: MOVAL,[SI]
ADDCL,AL
(1)
STOSB
ADDSI,10
INCDX
(2)
JBELPI
MOV[DI],CX
(3)
INCSRC ; 下一列
MOVSI,SRC
(4)
CMPBX,J
JBE (5)
******** END ********
LEADX,RESULT
LEASI,NAME1
MOVCX,(N+2*J)
CALL SAVE
RET
STARTENDP
CSEGENDS
ENDSTART