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





1992年度程序员级试题(附答案)

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

1992年度程序员级下午试卷

试题 2

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

(1)本子程序是对 15 位二进制串,求其偶校验位,形成 16 位二进制串,使其中 1 的个数为偶数。

(2)进入此子程序时,15 位二进制串放在 GR1 的第 1 位至第 15 位(假设 GR1 的第 0 位是 0 ),求出的偶校验位放在 GR1 的第 0 位。
[程序]

  标号 操作码 操作数
    START  
  BEG __①__  
    __②__  
    LEA GR3,0
    LEA GR2,0,GR1
  L1 __③__  
    __④__  
    LEA GR3,1,GR3
  L2 __⑤__  
    JMP L1
  L3 __⑥__  
    ST GR3,WORK
    ADD GR1,WORK
    POP GR3
    POP GR2
    RET  
  WORK DS 1
    END  

 

试题 3

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

本程序采用筛选法求质数。程序用一个无符号整数数组代表筛,它的每一位对应一个整数。因除 2 以外,其余所有的质数都是奇数,约定数组按位的顺序,依次对应整数 3,5,7,9,11。程序首先将数组所能容纳的上述奇数放入筛中,即将数组的全部位置成 1。从筛中找出最小的数,该数即为质数,然后将该质数的倍数从筛中去掉,即将在数组中与它们对应的位置成 0。因偶数不在筛中,去掉的数是找到的质数的 1 倍,3 倍,5 倍……等整数。反复上述过程,直至筛为空。程序就能找到指定范围内的全部质数。

【程序】

#include <stdio.h>

#define N 50

#define LN 16

 

main()

{

unsigned int sieve[N],primes[N];

unsigned int j,w,p,c;

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

{ sieve[j] = 0xFFFFFFFF;

primes[j] = 0x00;

}

w=0; j=0;

do { while ((( 0x01<< ( j++ )) & sieve[w] == 0x00 );

p=__(1)__;

c=__(2)__;

primes[w] |= ( __(3)__ );

do

{ sieve[p/LN] &=(~( __(4)__ ));

p += c;

} while (p < N*LN-LN);

while (( sieve[w] == 0x00 ) && ( w < N-1 ))

{ w++;

j=0;

}

} while ( sieve[w] ) ;

printf("%5d",2);

for ( w=0;w<N;w++ )

{ for ( j=0;j<LN;j++ )

if(( 0x01 << j ) & primes[w] )

printf( "%5d",__(5)__ );

}

printf( "\n" );

}

 

试题 7

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

本程序用来将通算形式的日期转换为标准的年月日形式的日期。

所谓通算形式的日期,是指以当年的元月一日作为第一天,元月二日作为第二天,这样顺序计数的流水日期。例如,1992 年的第 32 天,转换为标准形式是 1992 年 2 月 1 日;1992 年 10 月18 日用通算形式来表示,就是 1992 年的第 292 天。

进入此子程序时,GR1 中存放年份,GR2 中存放要转换的通算日期。通过该子程序处理后,GRl,GR2,GR3 的内容分别为年、日、月。

子程序中考虑了闰年的情况。所谓闰年是指年份是 400 的倍数,或者是 4 的倍数但不是 100 的倍数的那些年份。闰年的二月是 29 天。

若年份不为正整数,或者通算日期超出了当年的天数,则子程序报告数据错误信息。
[程序] 

  标号 操作码 操作数
    START  
  MTHDAY PUSH 0,GR1
    LEA GR3,0,GR1
    JMI ERROUT
    LEA GR1,0
  SBLOOP SUB GR3,N100
    JMI NOTX00
    LEA GR1,1,GR1
    __(1)__  
    JNZ SBLOOP
    JMP IFLEAP
  NOTX00 __(2)__  
  IFLEAP __(3)__  
    JZE TRYMTH
    LEA GR1,1
  TRYMTH LEA GR3,0
  NXTMTH LD GR0,MNDAY,GR3
    LEA GRl,0,GR1
    JNZ A
    __(4)__  
  A AND GR0,C00FF
    ST GR0,-1,GR4
    CPA GR2,-1,GR4
    JMI FOUND
    JZE FOUND
    __(5)__  
    LEA GR3,1,GR3
    LEA GR0,-12,GR3
    JNZ NXTMTH
  ERROUT OUT ERRTXT,ERRLEN
    JMP RETURN
  FOUND __(6)__  
  RETURN POP GR1
    RET  
  MNDAY DC #lFlF
  MNDAY2 DC #1D1C
    DC #1F1F
    DC #1E1E
    DC #1F1F
    DC #1E1E
    DC #1F1F
    DC #1F1F
    DC #1E1E
    DC #1F1F
    DC #1E1E
    DC #1F1F
  N100 DC 100
  LEAPNM DC 3
  C00FF DC #00FF
  ERRTXT DC "INVALID DATA"
  ERRLEN DC 13
    END  



试题 8

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

设有两整数向量 A, B 的比较矩阵 M 可定义为:

  1 a(j) > b(i);
m(i)(j) = -1 a(j) < b(i); (i,j=0,1,┄,n-1)
  0 a(J) = b(I)

如图所示。

B\A 8 9 4 6 2 4
3 1 1 1 1 -1 1
7 1 1 -1 -1 -1 -1
7 1 1 -1 -1 -1 -1
5 1 1 -1 1 -1 -1
3 1 1 1 1 -1 1
8 0 1 -1 -1 -1 -1

(1) 本程序对给定的比较矩阵 M,确定满足 a(k)=x 条件的 A, B的一个整数解。

(2) 本程序的解法是: 读入 M,k,x后

1、填充A,B, 令b(i)=x-m(i)(k), a(i)=x (i=0,1,┄,n-1)

2、检查 a(j) 与b(i)是否满足 m(i)(j)

若满足检查下一个

●否则向上调整相应元素,并按以下约定回朔检查: 当B的第i个元素调整时,则回朔到A的第一个元素;当A的第j个元素调整时,则回朔到A的当前元素和B的第一个元素。

本程序对比较矩阵M的合理性未作检查,并假定在指定的条件下一定能找到一个解。

[程序]

#include <stdio.h>

#define MN 20

typedef int Vector[MN];

Vector Matrix[MN];

int N;

 

main( argc,argv )

int argc; char **argv;

{ Vector a,b;

int i,j,x,k;

void PrintVector();

void FillVector();

FILE *fp,*fopen();

if (( fp=fopen( argv[argc-1],"r" )) == NULL )

{ printf( "Cannot open file %s\n",argv[argc-1] );

exit(1);

}

fscanf( fp,"%d",&N );

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

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

fscanf( fp,"%d",&Matrix[i][j] );

fscanf( fp,"%d%d",&k,&x );

fclose( fp );

FillVector( a,b,k,x );

printf( "The Vector A is:\n" );

PrintVector( a );

printf( "The vector B is:\n" );

PrintVector( b );

}

void PrintVector(v)

Vector v;

{ int i;

printf( "[" );

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

printf( "%5d",v[i] );

printf( "]\n" );

}

void FillVector( a,b,k,x )

Vector a,b;

int k,x;

{ int i,j,temp; 

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

{ b[i]=x-Matrix[i][k];

a[i]=x;

}

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

{ for ( j=0;j<N;j++ )

{ Temp=b[i]+Matrix[i][j];

if ( Matrix[i][j]==1 && Temp > a[j] )

{ __(1)__; i=0;}

else if( Matrix[i][j]==-1 && Temp < a[j] )

{ b[i]=a[j]+1; __(2)__ ; }

else if ( a[j]>b[i] )

{ b[i]=a[j] ; __(3)__ ; }

else if( a[j] < b[i] )

{ __(4)__ ; __(5)__ ; }

}

}

}

 

试题 12

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

本题给出的程序是在输入装置上读入一个字符串,判断它是否为合法的某程序设计语言的变量名,并区分该变量名的类型(实型或整型)。判断和区分的规则如下:

(1)变量名的第一个字符必须是英文大写字母,从第二个字符起可以是英文大写字母或数字。

(2)变量名只能用6个以内的合法字符表示(包含6个合法字符)。

(3)变量名的第一个字符为英文大写字母I,J,K,L,M,N时,该变量名的类型为整型,其它英文大写字母开始的变量名的类型为实型。

(4)输入不符合上述规则的字符串,程序输出*ERR。

输入字符串和输出结果的关系举例如下:

输入字符串 输出字符
OR REAL
INTEN INTE
4BAS *ERR
FORTRAN *ERR

[程序]

  标号 操作码 操作数
    START BEG
  BEG IN INBUF,INNUM
    OUT INBUF,INNUM
    LEA GR1,6
    CPA GRl,INNUM
    JMI ERR
    LEA GR1,0
    CPA GRl,INNUM
    JPZ ENDD
  AGN LD GR3,INBUF,GRl
    CALL AZ09IN
    DC 0
    JMP NEXT
    LEA GRl,0,GRl
    JZE ERR
    CALL AZ09IN
    DC 2
    JMP NEXT
  ERR OUT EMSG,N4
    JMP BEG
  NEXT LEA GRl,1,GRl
    CPA GRl,INNUM
    JMI AGN
    __①__  
    __②__  
    __③__  
    __④__  
    OUT RMSG,N4
    JMP BEG
  INT OUT IMSG,N4
    JMP BEG
  ENDD EXIT  
  AZ09IN LD GR2,0,GR4
    LD GR2,0,GR2
    CPA GR3,CHAR,GR2
    JMI NO
    LEA GR2,1,GR2
    CPA GR3,CHAR,GR2
    JMI YES
    JNZ NO
  YES __⑤__  
    __⑥__  
    ST GR2,0,GR4
    RET  
  NO __⑦__  
    __⑧__  
    ST GR2,0,GR4
    RET  
  N4 DC 4
  EMSG DC '*ERR'
  RMSG DC 'REAL'
  IMSG DC 'INTE'
  INNUM DS 1
  INBUF DS  80
  CHAR DC 'AZ09IN'
    END  

 

试题13

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

本子程序利用递归法判别用链表表示的两个非递归链表是否相等。

程序中的非递归列表定义为:

(1) 无元素的空列表;

(2) 由元素序列组成的一个列表,其中的元素可以是一个字符,或者是满足本定义的一个列表.

这种列表的一个例子是:

S

           
 
—→
0  
—→
1  
   
     
     

┌─

─────┘    

└→

0 b  
—→
0 c

列表 S 由两个元素组成,第一个元素是字符 a ( 标志为 0 ),第二个元素是另一个列表(标志为1),该元素又有两个元素组成( 标志为 0 ),分别为字符 b 和字符 c。

在两个列表中,若它们的元素个数相等,且表中元素依次相同,则两个列表相等( 子程序回答 1 ),否则不相等(子程序回答 0 )。

 

【程序】

typedef struct lnode

{ int tag;

union

{ char data;

struct lnode *dlink;

} un;

struct lnode *link;

} listnode;

int equal(s,t)

listnode *s,*t;

{ int x,res;

if(s==t)

__(1)__ ;

else if( __(2)__ )

if( __(3)__ )

{ if ( !s->tag )

x = __(5)__ ;

else

x = __(6)__ ;

if (x) return (__(7)__);

}

return(0);

}





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

赞助商