2
3
4
5
6
7
8
9
10
[程序]
START | |||
OFFSET | PUSH | 0,GR2 | |
PUSH | 0,GR3 | ||
LD | GR0,0,GR1 | ||
LEA | GR2,0 | ||
ST | GR2,LOW | ||
___(1)___ | |||
___(2)___ | |||
ST | GR2,UP | ||
LOOP | ADD | GR2,LOW | |
SRL | GR2,1 | ||
LEA | GR3,0,GR2 | ||
___(3)___ | |||
___(4)___ | |||
JZE | FOUND | ||
JPZ | INCLOW | ||
LEA | GR2,-1,GR2 | ;M<NTABLE(K) | |
ST | GR2,UP | ||
JMP | CMPLU | ||
INCLOW | LEA | GR2,1,GR2 | ;M> NTABLE(K) |
ST | GR2,LOW | ;K+1→LOW | |
___(5)___ | |||
CMPLU | CPL | GR2,LOW | |
___(6)___ | |||
___(7)___ | |||
FOUND | LEA | GR0,1,GR2 | |
POP | GR3 | ||
POP | GR2 | ||
RET | |||
LOW | DS | 1 | |
UP | DS | 1 | |
END |
從下列的 2 道試題(試題五至試題六)中任選 1 道解答。如果解答的試題數(shù)超過 1 道,則解答的前 1 道有效。 |
試題五
閱讀以下程序說明和 C 程序,將應(yīng)填入程序中__?__處的字句,寫在答卷的對應(yīng)欄內(nèi)。
【程序說明】
本程序是一個簡單的計算器模擬程序。對任意給定的正確四則運算表達式,程序計算其結(jié)果值并輸出。表達式中運算分量為無正負(fù)號整數(shù),運算符為 +、_、*、/,圓括號按常規(guī)配對,表達式以字符 "=" 結(jié)束。
函數(shù) getach() 為獲取表達式的一個合法字符,并將字符存入變量 curch;函數(shù)指針數(shù)組 func[] 是為了統(tǒng)一加減乘除計算而設(shè)置的。
【程序】
#include <stdio.h>
int add(int x,int y){return x+y;}
int sub(int x,int y){return x-y;}
int mul(int x,int y){return x*y;}
int div(int x,int y){return x/y;}
int (*func[])()={add,sub,mul,div};
int num,curch;
char chtbl[]="+-*/()=";
char corch[]="+-*/()=0123456789";
int getach()
{ int i;
while(1)
{ curch = getchar();
if(curch == EOF) return -1;
for (i = 0;corch[i] && curch != corch[i];i++);
if (i<strlen(corch)) break;
}
return curch;
}
int getid()
{ int i;
if(curch >= '0' && curch <= '9')
{ for(num = 0;curch >= '0' && curch <= '9';getach())
num = __①__;
return -1;
}
else { for( i = 0;chtbl[i];i++)
if (chtbl[i] == curch) break;
if ( i <= 5) getach();
return i;
}
}
int cal()
{ int x1,x2,x3,op1,op2,i;
i = getid();
if ( i == 4) x1 = cal(); else x1 = um;
op1 = getid();
if ( op1 >= 5) return x1;
i = getid();
if ( i == 4) x2 = cal(); else x2 = num;
op2 = getid();
while (__②__)
{ i = getid();
if ( i == 4) x3 = cal(); else x3 = num;
if (( op1/2 == 0) && (op2/2 == 1))
x2 = ( *func[op2](x2,x3));
else { x1 = __③__;
x2 = x3;
__④__;
}
op2=getid();
}
return __⑤__(x1,x2);
}
void main()
{ int value;
printf("Please input an expression:\n");
getach();
while (curch != '=')
{ value = cal();
printf("The result is : %d\n",value);
printf("Please input an expression:\n");
getach();
}
}
試題六
閱讀下列程序說明和 FORTRAN 程序,將應(yīng)填入程序中__?__處的字句,寫在答卷紙的對應(yīng)欄內(nèi)。
【程序說明】
子程序 SUM 計算數(shù)列
1,1/2,1/3,…,1/n,…
的前 n 項和,并以 M 位小數(shù)形式輸出(M≤60)。
為提高計算結(jié)果的精度,用分?jǐn)?shù)形式計算并存放數(shù)列的部分和,求和結(jié)果記為
A+U/V
其中 U/V 是不可約真分?jǐn)?shù),A 為整數(shù)。
例如:n = 5,M = 10 時,子程序輸出為
1+1/2+1/3+1/4+1/5 = 2+17/60
2.283333333
整型函數(shù) GCD 用輾轉(zhuǎn)相除法計算 U 和 V 的最大公約數(shù)。
【程序】
SUBROUTINE SUM(N,M)
INTEGER A,U,V,G,D(60),GCD
A=1
U=0
V=1
DO 20 K=2,N
U=__①__
V=__②__
A=__③__
U=MOD(U,V)
__④__
U=U/G
V=V/G
20 CONTINUE
WRITE(*,100)N,A,U,V
100 FORMAT(1X,'1+1/2+1/3+…+1/',I2,'=',I2,'+'I10,'/',I10)
DO 40 I=1,M
D(I)=__⑤__
__⑥__
40 CONTINUE
WRITE(*,200)A,(D(I),I=1,M)
200 FORMAT(1X,I2,'.',60I1)
END
INTEGER FUNCTION GCD(U,V)
INTEGER U,V
K=V
L=U
10 IF(MOD(K,L).GT.0) THEN
J=MOD(K,L)
K=L
L=J
GOTO 10
ENDIF
__⑦__
END
轉(zhuǎn)帖于:軟件水平考試_考試吧
- 推薦給朋友
- 收藏此頁
·2008年下半年軟考信息系統(tǒng)項目管理師試題(下午II) (2008-12-21 22:39:30)
·2008年下半年計算機軟考網(wǎng)絡(luò)工程師試題(下午) (2008-12-21 22:26:13)
·2008下半年軟考系統(tǒng)分析師考試試題(下午)II (2008-12-21 22:20:49)
·2008年下半年計算機軟考程序員試題(下午) (2008-12-21 22:18:18)
·2008年下半年計算機軟考程序員試題(上午) (2008-12-21 22:11:38)
如果軟件水平考試網(wǎng)所轉(zhuǎn)載內(nèi)容不慎侵犯了您的權(quán)益,請與我們聯(lián)系,我們將會及時處理。如轉(zhuǎn)載本軟件水平考試網(wǎng)內(nèi)容,請注明出處。