[程序]
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 道解答。如果解答的试题数超过 1 道,则解答的前 1 道有效。 |
试题五
阅读以下程序说明和 C 程序,将应填入程序中__?__处的字句,写在答卷的对应栏内。
【程序说明】
本程序是一个简单的计算器模拟程序。对任意给定的正确四则运算表达式,程序计算其结果值并输出。表达式中运算分量为无正负号整数,运算符为 +、_、*、/,圆括号按常规配对,表达式以字符 "=" 结束。
函数 getach() 为获取表达式的一个合法字符,并将字符存入变量 curch;函数指针数组 func[] 是为了统一加减乘除计算而设置的。
【程序】
#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 程序,将应填入程序中__?__处的字句,写在答卷纸的对应栏内。
【程序说明】
子程序 SUM 计算数列
1,1/2,1/3,…,1/n,…
的前 n 项和,并以 M 位小数形式输出(M≤60)。
为提高计算结果的精度,用分数形式计算并存放数列的部分和,求和结果记为
A+U/V
其中 U/V 是不可约真分数,A 为整数。
例如:n = 5,M = 10 时,子程序输出为
1+1/2+1/3+1/4+1/5 = 2+17/60
2.283333333
整型函数 GCD 用辗转相除法计算 U 和 V 的最大公约数。
【程序】
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
转帖于:软件水平考试_考试吧
- 推荐给朋友
- 收藏此页
·2008年下半年软考信息系统项目管理师试题(下午II) (2008-12-21 22:39:30)
·2008年下半年计算机软考网络工程师试题(下午) (2008-12-21 22:26:13)
·2008下半年软考系统分析师考试试题(下午)II (2008-12-21 22:20:49)
·2008年下半年计算机软考程序员试题(下午) (2008-12-21 22:18:18)
·2008年下半年计算机软考程序员试题(上午) (2008-12-21 22:11:38)