查看全部128种考试
软件水平考试
 考试动态 报考指南 历年真题 模拟试题 复习资料 心得技巧 专业英语 技术文章 软考论坛 考试用书
 程序员 软件设计师 网络管理员 网络工程师 系统分析师 数据库系统工程师
1
2
3
4
5
6
7
8
9
10
admin  
【字体: 1996年高级程序员下午试题及答案
1996年高级程序员下午试题及答案
spks.exam8.com 来源:考试吧(www.exam8.com) 更新:2005-4-13 0:37:00 软件水平考试 考试论坛

[程序]

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

 

上一页  [1] [2] [3] 下一页

转帖于:软件水平考试_考试吧
文章搜索  
看了本文的网友还看了:
软件水平考试权威辅导教材: 订书电话:010-62168566  更多>>>
网友评论
昵 称: *  评 分: 1分 2分 3分 4分 5分
标题:   匿名发表    (共有条评论)查看全部评论>>
版权声明 -------------------------------------------------------------------------------------
  如果软件水平考试网所转载内容不慎侵犯了您的权益,请与我们联系,我们将会及时处理。如转载本软件水平考试网内容,请注明出处。
关于本站  网站声明  广告服务  联系方式  付款方式  站内导航  客服中心  友情链接  考试论坛  网站地图
Copyright © 2004-2008 考试吧软件水平考试网 All Rights Reserved    
中国科学院研究生院权威支持(北京) 电 话:010-62168566 传 真:010-62192699
百度大联盟黄金认证  十佳网络教育机构  经营许可证号:京ICP060677