試題一 [說明]
本流程圖是對某種簡單密碼文(密文)解密.密文由字符序列組成,解密后產
生的字母序列稱為原文.解密算法如下:
把密文s1s2...sn按順時針方向看成一個環,如下所示:
s1
sn
s3
sn-1
si
解密時按讀入的整數值KEY(KEY>1),從S1起順時針計數,當計數到第KEY個字
符時,取出該字符作為原文的第一個字符,并把它從環中刪去.接著從下一個字符
起繼續計數,取出第KEY個字符作為原文的第二個字符,并從環中刪去.依次類推,
直至N個字符全部取完.由上述算法依次取出的字符序列即為原文.
例如,當KEY=3時,密文NUITP的原文為INPUT.
開始解密時,密文存放在字符數組S中, 長度為N(N>1),所得到的原文也存
放在數組S中.為了從S(1)起依次存放原文字符,在必要時部分未解密的字符作適
當的移動.
試題三(15分)
[程序說明] 本題給出的是計算兩個多項式之積的子程序.
設兩個多項式分別為
n n-1
F(X)=FnX +Fn-1X +...+F1X+F0
m m-1
G(X)=GmX +Gm-1X +...+G1X+G0
則它們的積多項式為
k k-1
P(x)=F(X)G(X)=PkX +Pk-1X +...P1X+P0
其中, k=n+m; Pi=∑Fi-j*Gj (i=0,...,k);
j
記號∑Fi-j*Gj;表示對給定的i(0≤i≤n+m),和所有滿足
0≤i-j≤n,≤j≤m
的j,對Fi-j*Gj求和.
程序用數組存貯多項式的序數,即數組的第i(≥0)個元素存貯多項式i次冪
的系數.例如:
5 3 2
F(X)=5.7X -10.8X +0.49X +2.7用數組表示為
0 1 2 3 4 5
2.7 0 0.49 -10.8 0 5.7
設程序已定義了如下的數據類型:
const maxp=100; {允許的多項式最高次冪}
type poly=record
power: 0..maxp; {多項式的最高次冪}
coef: array[0..maxp] of real
{coef 存貯多項式的i次冪項的系數}
end;
[程序]
procedure prod(f,g: poly; var p:poly);* var i,j,low,high:integer;
temp: real;
begin
for i:=0 to f.power + g.power do
begin
if __________________
then low:= ____________________
else low:=0;
if __________________
then high:= ____________________
else high:=i;
temp:=0.0;
for j:=low to high do
temp:= _____________________
p.coef:=temp
end;
_______________________
end;
試題七
[程序說明] 本程序用于判別輸入的字符串是否為如下形式的字符串:
W&M$
其中子字符串M是子字符串W的字符反向排列.在此假定W不含有字符&和字符$,
字符&用作W與M的分隔符,字符$用字符串的輸入結束符.
例如,對輸入的以下字符串:
ab&ba$, 11&12$
ab&dd$, &$
程序將分別輸出
OK.(是), NO.(不是),
NO.(不是), OK.(是).
[程序]
program accept (input,output);
const
midch='&';
endch='$';
var
an:bollean; ch :char;
procedure match (var answer: boolean);
var
ch1,ch2:char;
f:boolean;
begin
read(ch1);
if ch1<>endch then
if ________________ then
begin
match (f);
if f then
begin
read (ch2); answer:=____________________
end
else answer:=false
end
else ___________________
else ___________________
end;
begin
writeln('Enter string:');
match (an);
if an
then begin
_______________________
if __________________________ then writeln ('OK.')
else writeln ('NO.')
end
else writeln ('NO.')
end.
試題十一
[程序說明] 本題給出的是將數組a的元素a1,a2,...,an從大到小排列的子程序.
子程序采用改進的選擇方法,該方法基于以下思想:
在選擇第一大元過程中,al與aj(j=n,n-1,...2)逐個比較,若發現aj1〉
al,則aj1與a1交換,交換后新的aj1有性質aj1≥at(j1<t≤n).若再有aj2
〉a1(j2<j1),aj2與a1交換,則交換后的aj2也有性質aj2≥at(j2<t≤n).
如在挑選第一大元過程中,與a1交換的元素有k(k≥0)個,依次為aj1,aj2,...
ajk則它們都滿足這一性質.它們的下標滿足n≥j1>j2>...>jk>1.有了這些下標,
在確定第二大元時,可只考慮a2與aj(j=jk,jk-1,...,3)逐個比較.倘若jk=2,
則可不經比較就知道a2就是第二大元.在選擇第二大元過程中,將與a2交換過
的元素下標也記錄下來,可供選擇其他大元使用.但在選則第二大元時,應保證與
a2交換的那些位置上的新值也都滿足上的述性質.依次類推,順序選擇第一,第
二,...第n01大元,實現對a的排序.
設程序包含有常量和類型定義:
const maxn=1000;
type vector=array [1..maxn] of integer;
index=1..maxn;
[程序]
procedure sort (var a:vector;n:index);
var
p:vector;
i,j,k,m,t:integer;
begin
k:=0;i:=1;m:=n;
while i<n do
begin
for j:=m downto i+1 do
if a<a[j] then
t:=a;a:=a[j];a[j]:=t;
k:=k+1;______________
end;
repeat
______________;
if _____________ then _____________
else
begin m:=p[k];k:=k-1 end
until (i<m) or (i=n);
if _____________ then
begin
t:=a;__________;___________
end
end
end;
延伸閱讀
文章來源于領測軟件測試網 http://www.kjueaiud.com/