歷年計算機(jī)軟考程序員部分筆試真題

字號:

試 題 一(15分)
    閱讀下列對線性表操作的3個子列程的流程圖 ,選答案填入A-E
    [ 說明 ]在主存儲器中有一個右圖所示的表格結(jié)構(gòu),表格的每個元素由值(V)和
    指針(P)兩部分組成,在表格中以鏈接方式存放著一個線性表(LINEAR LIST) L,
    它的第一個元素的位置放在LP中.表格中全部空閑元素也鏈接成一個線性表E,它
    的第一個元素位置存放在cp中兩個線性表最後壹個元素指針全是0
    (1)子例程ENTER(U,M) (2)子例程 FIND    在線性表L 中位于M 從線性表L中找出第一 從至少有兩個元素的線
    (M<>0)處的元素之后插 個其值為U的元素,把位置 性表L中刪除緊接在位置M
    入一個以U為值的結(jié)點(diǎn). 放入M. 沒有以U為值的元 之后的一個元素. 把刪除
    素時,把M置為O. 的元素放進(jìn)線性表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個大寫字母均出現(xiàn)為止.程序輸出已
    輸入的字符的總個數(shù)和各大寫字母首次輸入時的序號,對于最現(xiàn)出現(xiàn)的五個不同
    大寫字母還要輸出它們在已輸入序列中出現(xiàn)的次數(shù).
    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 分)
    [程序說明] 本程序按照學(xué)生學(xué)號的順序輸入學(xué)生的成績,按照分?jǐn)?shù)從高到低的順
    序輸出學(xué)生的名次,該名次的分?jǐn)?shù),同一名次的人數(shù)和學(xué)號(每行最多輸出10個學(xué)號).
    程序中用MARK和NO分別表示學(xué)生分?jǐn)?shù)和學(xué)號.
    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)表示整數(shù)的大小,
    其中過程C的功能是比較兩個數(shù)的絕對值大小,程序中用PLUS 和MINUS分別表示正
    和負(fù),用IT,EQ和GT分別表示小于,等于和大于.用SING,SIZE 分別表示數(shù)的符號和
    位數(shù),整數(shù)高位無意義的零在鏈表中沒有表示
    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;