[問題]
在程序中的 ①~⑦ 處各填入一條正確指令,以完成此程序。除非必要,標(biāo)號(hào)欄不要填寫。
[程序]
標(biāo)號(hào) 指令碼 操作數(shù)
START
BEGIN ST GR4,SPW
RETRY IN INBUF,LENG1
LEA GR1,0
CPA GR1,LENG1
JZE HALT
LEA GR2,9
CPA GR2,LENG1
JNZ ERROR
LEA GR3,4
__①__
CPL GR0,SING
JZE PASS1
ERROR OUT INERR,LENG2
JMP RETRY
PASS1 LD GR1,SM
ST GR1,INBUF,GR3
LEA GR1,0
LOOPl LD GR3,INBUF,GR1
LEA GR1,1,GR1
CPL GR3,SM
JMI ERROR
CPA GR3,LM
JPZ ERROR
AND GR3,BCD
PUSH 0,GR3
__②__
JNZ LOOP1
ST GR2,CY
LEA GRl,4
__③__
ADD GR3, __④__
ADD GR3,CY
CPA GR3,TEN
JMI LABl
ADD GR3,SIX
AND GR3,BCD
__⑤__
JMP LAB2
LAB1 LEA GR0,0
LAB2 ST GR0,CY
OR GR3,SM
ST GR3,OUTBUF,GRl
__⑥__
JNZ LOOP2
OR GR0,SM
__⑦_(dá)_
OUT OUTBUF,LENG3
JMP RETRY
HALT LD GR4,SPW
EXIT
SPW DS 1
INBUF DS 80
LENG1 DS 1
INERR DC 'INPUT ERROR'
LENG2 DC 11
SING DC '+'
SM DC '0'
LM DC ':'
BCD DC #000F
CY DS 1
TEN DC 10
SIX DC 6
OUTBUF DS 5
LENG3 DC 5
END
從下列的4道試題(試題7至試題10)中任選l道解答。 如果解答的試題數(shù)超過1道,則解答的前1道有效。
試題7
閱讀下列程序說明和 C 程序,把應(yīng)填入其中__n__ 處的字句,寫在答卷的對(duì)應(yīng)欄內(nèi)。
[程序說明]
設(shè)對(duì)于一個(gè) n×n 的上三角矩陣 a,為節(jié)約存貯,只將它的上三角元素按行主序連續(xù)存放在數(shù)組 b 中。下面的函數(shù) trans 在不引入工作數(shù)組的情況下,實(shí)現(xiàn)將 a 改為按列主序連續(xù)存放在數(shù)組 b 中。
設(shè) n=5,
b=(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15)
經(jīng)調(diào)用 trans 函數(shù)后,b 變?yōu)?/P>
b=(1,2,6,3,7,10,4,8,11,13,5,9,12,14,15)
函數(shù) tans 對(duì)數(shù)組元素的存貯位置作調(diào)整。調(diào)整過程中存在若干個(gè)循環(huán)傳送鏈:
b(i1)→b(i2)→…→b(ij)→b(i1) 1≤j
例如,考察調(diào)整后的數(shù)組元素 b(2)( 值為 6 ),與該元素相關(guān)的位置調(diào)整將形成下面的循環(huán)傳送鏈:
b(2)→b(3)→b(6)→…→b(12)→b(9)→b(5)→b(2)
關(guān)鍵是確定循環(huán)傳送鏈的下標(biāo) i1,i2,…,ij ,以及在考察調(diào)整后的元素 b(k)( k;3,4,… ) 時(shí)能判定 b(k) 是已被傳送過的某傳送鏈上的元素。
函數(shù) ctr(k,n) 計(jì)算調(diào)整后的數(shù)組 b 的第 k 個(gè)元素 b(k) 在原數(shù)組 b 中的位置,該位置作為函數(shù) ctr(k,n) 的返回值。函數(shù) ctr 根據(jù) k 確定它在矩陣中的行號(hào) i 和列號(hào) j ( 注意行號(hào)和列號(hào)均從 0 算起 ),然后按矩陣存放原則計(jì)算出它在 b 中的位置。
[程序]
trans( b,n )
int n,b[]
{ int m,k,r,cc,rr;int w;
m=(n+1)*n/2-4;
k=2
while (m>0)
{ r=ctr(k,n);
if ( r == k )
m--;
else
{ cc=k;rr=r;
while(__①__)
{ CC=rr,rr=ctr(cc,n);
}
if (__②__
{ cc=k;rr=r;w=b[k];
while(__③__)
{ b[cc]=b[rr];m--;
cc=rr,rr=ctr(cc,n);
}
b[cc]-w;__④__;
}
}
k++;
}
}
ctr( k,n )
int k,n;
{ int i,j;
i=k;j=0 ;
while (__⑤__)
i -= ++j ;
return( i*n+j-i*(i+1)/2 );
}
試題8~10 略(COBOL、FORTRAN、PASCAL)
相關(guān)推薦:計(jì)算機(jī)軟考程序員備考:程序設(shè)計(jì)知識(shí)點(diǎn)匯總北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |