热门关键字:  项目经理  分析师  CEO  中间件  报名费
当前位置 :| 主页>软考>试题大全>程序员>





1990年程序员考试试题及答案

来源: 作者: 时间:2008-03-05 点击:

1990年度程序员级下午试卷

试题 2

在 COMET 型计算机上可以使用试卷上所附的 CASL 汇编语言。阅读下列程序说明和 CASL 程序,把应填入程序中__(n)__ 处的字句,写在答卷的对应栏内。
[程序说明]

这是一个在某项比赛中计算每一位选手最终得分的子程序。计分办法如下:

(1)十名评委,在 0~100 的整数范围内给选手评分。

(2)十个得分中,除去一个最高分(如有同样两个以上最高分也只除去一个),除去一个最低分( 如有同样两个以上最低分也只除去一个 ),剩下的八个得分取平均值为该选手的最终得分。(平均值按四舍五入原则取成整数)

进入此子程序时,GR1 内存放十个评委评分的起始地址。返回主程序时,该选手的得分存放在 GR0 内,GR1~GR3中的值均保持不变。
[问题]

在程序中的 ①~⑧ 处各填入一条正确的指令,以完成此程序。除非必要,标号栏不要填写。
[程序]

  标号 操作码 操作数
  FINAL START  
    PUSH 0,GR1
    PUSH 0,GR2
    PUSH 0,GR3
    LD GR0,0,GR1
    ST GR0,MAX
    ST GR0,MIN
    __①__  
  NEXT LEA GR2,-1,GR2
    JZE MEAN
    __②__  
    LD GR3,0,GR1
    __③__  
    CPA GR3,MAX
    JMI GOONl
    ST GR3,MAX
  GOONl CPA GR3,MIN
    JPZ GOON2
    ST GR3,MIN
    GOON2 __④__
  MEAN SUB GR0,MAX
    SUB GRO,MIN
    __⑤__  
    SRA GR0,3
    __⑥__  
    __⑦__  
    __⑧__  
    RET  
  MAX DS 1
  MIN DS 1
  FOUR DC 4
    END  

 

试题 3

阅读下列程序说明和 C 程序,将应填入程序中__?__处的字句写在答卷纸的对应栏内。
[程序说明]

函数 vr6174 是对卡布列克运算的验证程序。

所谓卡布列克运算,是指任意一个四位数,只要它们各个位上的数字不全相同,就有这样的规律:

(1)把组成这个四位数的四个数字由大到小排列,形成由这四个数字构成的最大的四位数; 

(2)把组成这个四位数的四个数字由小到大排列,形成由这四个数字构成的最小的四位数( 如果四个数字中含有 0,则此数不足四位 );

(3)求出以上两数之差,得到一个新的四位数。

重复以上过程,总能得到最后的结果是 6174。

如果当 n=5346 时调用 vr6174(n),便会输出以下结果:

6543-3456=3087 8730-378=8352 8532-2358=6174

函数 vr6174 采用了递归算法,并调用 parse_sort 和 max_min 函数。其中 parse_sort 函数把所给的四位数分解为四个一位数字,并将其从小到大排序,放入数组 each;max_min 函数根据 each 的值形成所要求的最大四位数和最小四位数。
[程序]

vr6147( num )

int num;

{ inteach[4],max,min;

if ( num!=6174&&num )

{ parse_sort( num,each );

max_min( __①__);

num = max_min;

printf( "%d-%d=%d",max,min,num ),

vr6174( nurn );

}

else printf( ".\n" );

return;

}

parse_sort( num,each )

int num,*each;

{ int i,*j,*k,temp;

for ( i;0;i<4;i++ )

{ j=each+3-i;

__②__;

hum=num/10;

}

for ( i=0;i<3;i++ )

for ( j-each,k=each+1;;j<each+3-i;__③__ )

{ if ( *j>*k )   { temp=*j; *j=*k; *k=temp;

}

}

retrun;

}

max_min( each,max,min )

int *each,*max,*min;

{ int *j;

min=0

for ( i;each;i<each+4;i++ )

*min=__④__;

*max=0;

for ( i;each+3;i>=each;i-- )

*max=__⑤__;

return;

}

 

试题 7

在 COMET 型计算机上可以使用试卷上所附的 CASL 汇编语言,阅读下列程序说明和 CASL 程序,把应填入程序中__(n)__处的字句,写在答卷的对应栏内。
[程序说明]

从语言音素粗分类的角度出发,可以对任一个英文单词产生一个四字符的声音相似码。

其处理方式如下:

(1)保留单词中的首字母作为声音相似码的首字符。若首字母为小写字母,则需先改为大写字母才能被保留。

(2)对首字母以后的字母按下表中出现的对应关系变换为‘0’~‘6’的数字。

字母

A

a

B

b

C

c

D

d

E

e

F

f

G

g

H

h

I

i

J

j

K

k

L

1

M

m

N

n

O

o

P

p

Q

q

R

r

S

s

T

t

U

u

V

v

W

w

X

x

Y

y

Z

z

对应
数字

0

1

2

3

0

1

2

0

0

2

2

4

5

5

0

1

2 6

2

3

0

1

0

2

0

2

 (3)若字母变换而得的数字为'0',则不出现在声音相似码中;若相邻的字母产生相同的数字,则在声音相似码中只保留一个数字。

(4)遇到下列情况之一程序执行终止:

① 输入的第一个字符不是英文字母,程序返回,输出 '0000'。

② 已产生四个字符的声音相似码( 包括第一个字母 )时,程序不再处理其余字符。

③ 单词已处理完( 以非字母符为结束标志 ),若声音相似码不足四字符,则程序以字符'0'补足四个字符。

例:

输入字符串 输出
computer# 'C513'
an# 'A500'
5sohware# '0000'

 英文字母,'A'~'Z','a'~'z'的 ASCII 码的十进制值为 65~90,97~122;字符 '0'的十进制值为 48。
 [问题]

在程序中的 ①~⑥ 处各填入一条正确的指令,以完成此程序。除非必要,标号栏不要填写。
[程序]

  标号 指令码 操作数
    START  
    IN STR,LENG
    __(1)__  
    LEA GR0,48
    ST GR0,0,GR1
    ST GR0,1,GR1
    ST GR0,2,GR1
    ST GR0,3,GR1
    LEA GR2,STR
    CALL GETCH
    JMP L4
    LEA GR1,0
  L1 ST GR3,SOUT,GR1
    LEA GR1,1,GR1
    __(2)__  
    JZE L4
  L2 ST GR3,RESV
  L3 __(3)__  
    CALL GETCH
    JMP L4
    __(4)__  
       
    LD GR3,TABLE,GR3
    __(5)__  
    JZE L2
    CPL GR3,RESV
    JZE L3
    JMP L1
  L4 EXIT  
  GETCH LD GR3,0,GR2
    LEA GR0,-97,GR3
    JMI G1
    LEA GR3,-32,GR3
  G1 LEA GR0,-65,GR3
    JMI G2
    LEA GR0,-91,GR3
    JPZ G2
    LD GR0,0,GR4
    __(6)__  
    ST GRO,0,GR4
  G2 RET  
  RESV DS 1
  SOUT DS 4
  STR DS 80
  LENG DS 1
  TABLE DC '0123012002245'
    DC '5012623010202'
  TWO DC 2
    END  


试题 8

阅读下列程序说明和 C 程序,将应填入程序中__(n)__ 处的字句,写在答卷纸的对应栏内。
[程序说明]

本程序实现变元为 x,y,z 的两个整系数多项式的相加。用一个循环链表表示多项式,表中每个节点表示该多项式中的一项,格式如图1所示。它表示项 coef *xiyjzk,其中 coef 表示项系数;项指数 index=i*100+j*lO+k( i,j,k皆为整数,且0≤i,j,k≤9 );next 为指向下一个节点的指针。链表中设置一个表头节点,其值如图2所示。它指向多项式的首项。表中其余节点按 index 值的降序排列。例如,多项式 3x6-5x5y2+6y6z 可表示为图3。

本程序定义两个多项式 (p) 和 (q),通过调用 blist 构成两个循环链表 p* 和 q·* 将 (p) 加到 (q) 上,其结果,表 p ·不变,表 q 为两多项式 (p) 和 (q) 之和。两多项式相加通过调用 polyadd 来实现。

算法:比较 (p) 和 (q) 的项指数,如相等,则项系数累加进 (q) 的对应项系数;如 (p) 的项指数小于 (q) 的项指数,则比较 (q) 的下一项;如 (p) 的项指数大于 (q) 的项指数,则将 (p) 的该项插入 (q) 中。如项系数相加后值为 0,则从 (q) 中删除该项。

[程序]

#include "stdio.h"

#include "malloc.h"

typedef struct poly {

int coef;

int index;

struct poly *next;

} POLYNOME;

main( )

{

POLYNOME *p,*q,*blist();

p=blist(p);

q=blist(q);

poly add(p,q);

}

POLYNOME *blist(ptr)

POLYNOME *ptr;

{

int i,j,k,hnished;

POLYNOME *ptr1,*r;

finished=0;

ptr=(POLYNOME*)calloc( 1,sizeof(ptr) );

ptr→coef=0;

ptr→index=-1;

ptr→next=ptr;

r=ptr;

while ( finished == 0 ){

ptr1=( POLYNOME* )calloc( 1,sizeof(ptrl) );

scanf( "%d%d%d%d",&ptr1→coef,&i,&j,&k);

ptr1→index=i*l00+j*10+k;

__①__;

r=ptr1;

printf( "finished;?\n" );

scanf( "%d",&finished );

}

__②__;

return(ptr);

}

polyadd(p,q)

POLYNOME *p,*q;

{

POLYNOME *q1,*q2;

p=p→next3

q1=q;

q=q→next;

while ( p→index>=0 ){

while ( p→index<q→index ) {

__③__;

__④__;

}

if (p→index==q→index) {

q→coef += p→coef;

if ( q→cocf==0){

q2=q;

__⑤__;

q=q→next;

free((char*)q2);

p=p→next:

}

else{ 

q1=q;

p=p→next;

q=q→next;

}

}

else{

q2=( POlYNOME 9)calloc(1,sizeof(q2));

q2→coef=p→coef;

q2→index=p→index,

__⑥__;

__⑦__;

q1=q2;

p=p→next;

}

}

} 

 

试题 12

在 COMET 型计算机上可以使用试卷上所附的 CASL 汇编语言。阅读下列程序说明和 CASL 程序,把应填入程序中__?__ 处的字句,写在答卷的对应栏内。
[程序说明]

给定一个数组 X=( X0,X1,…,XN-1 ) N≤100 其中的元素是满足下列条件的正整数:Xi<Xi+1 ( i=0,1,…·,N一2 )

本程序用来求得满足 Xi + Xj = 100 的所有元素对 Xi 和 Xj

程序中的输入子程序 INPUT 把 Xi 输入到标号为 X 开始的存贮字中,输入数据的个数存放在标号为 N 的存贮字中;输出子程序 OUTPUT 输出满足条件的元素对,这两个子程序均不改变 GR0~GR3的内容。
[问题1]

在程序中的 ①~⑤ 处各填入一条正确的指令或操作数,以完成此程序。除非必要,标号栏不要填写。
[问题2]

若给定的数组 X 中允许两个相邻的元素( 不允许三个相邻元素 )具有相同的值,则程序求得的元素对可能会遗漏,现将标号为L41,L42 的两条指令换成下列指令组后,可避免遗漏情况,请在指令组中的 ⑥~⑨ 处,各填上一条正确指令,完成此指令组。
[指令组]

  标号 操作码 操作数
  L41 LD CR0,X,GR3
    LEA GR3,1,GR3
    __⑥__  
    __⑦__  
    JZE L35
    CPA GR0,X,GR3
    JNZ L70
    CAll OUTPUT
  L42 LD GR0,X,GR2
    __⑧__  
    __⑨__  
    JNZ L30
    LEA GR3,-1,GR3
    CALL OUTPUT

[程序]

  标号 指令码 操作数
  START L10  
  L10 CALL INPUT
    LD GR2,N
    LEA GR3,0
    __①__  
  L20 LD GR0,X,GR3
    ADD GR0,X,GR2
    CPA GR0,C
    __②__  
    JMI __③__
  L28 LEA GR2,-l,GR2
  L30 ST GR2,J
    CPA GR3,J
    JMI L20
  L35 EXIT  
  L40 CALL OUTPUT
  L41 __④__  
  L42 JMP L28
  L50 __⑤__  
    JMP L30
  X DS 100
  N DS 1
  J DS 1
  C DC 100
    INPUT (略)
    OUTPUT (略)
    END  

 

试题13

阅读下列程序说明和 C 程序,将应填入程序中__(?)__处的字句,写在答卷纸的对应栏内。
[程序说明]

某服务公司征询顾客意见,从 n(≤40) 位优秀服务员中,评选十位服务明星:

(1)服务员按 1,2,… 顺序连续编号,每个编号用2个字符表示,即0l,02,…。

(2)所收到的选票按以下格式存于文件 source 中,一行字符串对应一张选票,其中姓名十个字符,地址 30 个字符,十个服务员编号 20 个字符。

(3)对应名次的服务员编号可以有空缺,但必须用 00 表示。

(4)若编号超出规定范围,或编号重复出现,作废票处理。

(5)按选票中所列最佳服务员明星顺序给所列服务员按以下标准评分:

15 12 9 7 6 5 4 3 2 1

(6)按各位服务员得分数由高到低顺序排队,列出前十名最佳服务明星排行表:

名次 服务员编号 合计得分 合计得票数

若得分相同,则得票数多的在前;若得分和得票数都相同,则编号小的在前。

本程序中所用到的函数 fopen,fclose,fgets 都是 I/O 程序库中的函数。
[程序]

#include <stdio.h>

#define n 40

long int tn[n],td[n],score[n+1][10],order[n];

char s[80];

int mark[]={15,12,9,7,6,5,4,3,2,1};

FILE *fp,*fopen();

main()

{ int c,g,k,i,j,b[10];

long int e,d,t,n,dd;

char * p;

for ( i=0;i<=n;i++ )

for ( j=0;j<10;j++ )

score[i][j]=0;

fp=fopen( "source","r" );/* 以读方式打开文件source */

p=fgets( s,80,fp );/* 读fp所指文件的下一行字符串于s */

while (*p){

g=l;k=0;p+=40;

while ( k<10 ) {

c=( (*p++)-'0')*10 + ((*p++)-'0' );

b[k++]=c;

if (c<=n){

if (c)

{ i=0;

while ( __①__ );

if ( __②__ ) { g=0;break;}

}

else { g=0;break ;}

}

if (g)

for (i=0;i<k;i++)

if (b[i])

__③__;

p=fgets( s, 80,fp );

}

fclose(fp);/* 关闭 fp 所指文件 */

for ( i=1;i<n;i++ ){

for ( t=0,d=0,j=0;j<10;j++ ){

t += ( e=score[i][j] );

d += e * mark[j];

}

tn[i-1]=t;td[i-1]=d;order[i—1]=i;

}

for ( i=0;i<n-1;i++){

k=i;

for ( j=i+1;j<n;j++ )

if ( (t=td[order[j]-1]) > (d=td[order[k]-1]) )

k=j;

else

if (t==d){

n= __④__;dd= __⑤__ ;

for ( c=0;c<lO;c++ )

if ( ( e=__⑥__)>0 ){

k=j;break;}

else

if (e<0) break;

}

if ( k != i ) {

t=order[k];order[k]=order[i];order[i]=t;

}

}

for ( i=0;i<lO;i++ )

printf( "%2d%2d%d%d\n",

i+1,order[i],td[order[i]-1],tn[order[i]-1) );

}

}





最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
企业电子商务

赞助商