历年计算机软考程序员部分笔试真题

2016-07-25 15:54 来源:网络综合
软考网权威发布历年计算机软考程序员部分笔试真题,更多历年计算机软考程序员部分笔试真题相关信息请访问计算机软件水平考试网。

试 题 一(15分)

阅读下列对线性表操作的3个子列程的流程图 ,选答案填入A-E

[ 说明 ]在主存储器中有一个右图所示的表格结构,表格的每个元素由值(V)和

指针(P)两部分组成,在表格中以链接方式存放着一个线性表(LINEAR LIST) L,

它的第一个元素的位置放在LP中.表格中全部空闲元素也链接成一个线性表E,它

的第一个元素位置存放在cp中两个线性表最後壹个元素指针全是0

(1)子例程ENTER(U,M) (2)子例程 FIND

在线性表L 中位于M 从线性表L中找出第一 从至少有两个元素的线

(M<>0)处的元素之后插 个其值为U的元素,把位置 性表L中删除紧接在位置M

入一个以U为值的结点. 放入M. 没有以U为值的元 之后的一个元素. 把删除

素时,把M置为O. 的元素放进线性表E中.

供选答案 A,B,C,D,E:

(1)M->P(M) (2)P(M)->M (3)P(M)->P(I) (4)P(I)->P(M) (5)CP->P(I)

(6)P(I)->CP (7)I->CP (8)CP->I (9)I->P(M) (10)P(M)->I

试题二 (15分)

[程序的说明]本程序输入字符序列,直到26个大写字母均出现为止.程序输出已

输入的字符的总个数和各大写字母首次输入时的序号,对于最现出现的五个不同

大写字母还要输出它们在已输入序列中出现的次数.

PROGRAM ALPHABET (INPUT,OUTPUT);

VAR C:CHAR; N,M:INTEGER;

S,SL:____________ ;

p,g:array ['A'..'Z'] of integer;

begin

s:=______________ ; sl:=[]; n:=0 ; _____________;

for c:= 'A' to 'Z' do

begin g[c]:=0; p[c]:=0 end;

reprat read (c);____________;

if ________ then

begin s:=s-[c]; p[c]:=n;

IF m<=5 then

begin sl:=_____________; m:=m+1; end

end

if ______________ then g[c]:=g[c]+1

until_____________;

writeln;

writeln (n,'CHARACTER COUNTED');

FOR C:='A' TO 'Z' do

begin write (c,p[c]:8);

if g[c]<>0 then write(g[c]:8);

end

end.

试题三 (20 分)

[程序说明] 本程序按照学生学号的顺序输入学生的成绩,按照分数从高到低的顺

序输出学生的名次,该名次的分数,同一名次的人数和学号(每行最多输出10个学号).

程序中用MARK和NO分别表示学生分数和学号.

PROGRAM exam(input,output);

const m=1000;

type st=record

mark:0..100;

no:integer

end;

sttype=array [1..m] of st;

var a:sttype; q,i,j,k,p,w,n:integer; b:boolean;

procedure sorter (var a:sttype; n:integer);

var i,j:integer; w:st; b:boolean;

begin b:=true; i:=1 ;

while (i

begin b:=false;

for j:=n downto ___ do

if __________ then

begin w:=a[j-1] ; a[j-1]:=a[j];

a[j]:=w; ________

end;

i:=i+1;

end

end;

begin read(n);

if n<=m then

begin

for i:=1 to n do

begin read (a[i],mark); a[i].no:=i end;

_______________; i:=1; j:=0;

writeln ('ORDER','MARK',' COUNT ', 'NUMBRE');

while i<=n do

begin J:=J+1 ;w:=a[i].mark; p:=i+1; b:=true;

while b and (p<=n) do

if __________________then p:=p+1 else b:=false;

write ( j:6,' ',w:4, ' ',(p-i):5, ' ':3);

k:=0;

for q:=i to p-1 do

begin if k=10 then

begin writeln ; write (' ':20 ); k:=0 end;

write(a[q].no:5); k:=k+1

end;

writeln; _____________________

end

end else writeln ('ERROR')

end.

试题四 (25分)

[程序说明] 过程MULITICOM用于比较两个由链表(LINKED LIST)表示整数的大小,

其中过程C的功能是比较两个数的绝对值大小,程序中用PLUS 和MINUS分别表示正

和负,用IT,EQ和GT分别表示小于,等于和大于.用SING,SIZE 分别表示数的符号和

位数,整数高位无意义的零在链表中没有表示

type signtype=(plus,minus);

relation=(lt,eq,gt);

listptr=^node;

node=record

item:0..9;

next:listptr

end;

multi=record

sign:signtype;

size:1..maxint;

value:listptr

end;

procedure multicom (var r:relation; m1,m2:multi);

procedure c(p1,p2:listptr);

begin

if p1=nil then r:=sq* else begin

c(pl^.next,p2^.next);

if r=eq then

if_____________________________then r:=lt

else if _______________________then r:=gt

end

end;

begin

if m1.sign<>m2.sign

then if_____________________

then r:=gt else r:=lt

else if m1.size<>m2.size

then if ______________________________________

then r:=gt else r:=lt

else if m1.sign=plus

then _______________________________

else _______________________________

end;