●試題一
閱讀以下說(shuō)明和流程圖(如圖1所示),回答問(wèn)題1至問(wèn)題4,將答案寫在答卷的對(duì)應(yīng)欄內(nèi)。
【說(shuō)明】
本流程圖是將中綴表示的算術(shù)表達(dá)式轉(zhuǎn)換成后綴表示。如中綴表達(dá)式
(A-(B*C+D)*E)/(F+G))
的后綴表示為
ABC*D+E*-FG+/
為了方便,假定變量名為單個(gè)英文字母,運(yùn)算符只有+、-、*、/(均為雙目運(yùn)算符,左結(jié)合),并假定所提供的算術(shù)表達(dá)是非空且語(yǔ)法是正確的。另外,中綴表示形式中無(wú)空格符,但整個(gè)算術(shù)表達(dá)式以空格符結(jié)束。流程圖中使用的符號(hào)的意義如下:
數(shù)組IN[]存儲(chǔ)中綴表達(dá)式;
數(shù)組POLISH[]存儲(chǔ)其后綴表達(dá)式;
數(shù)組S[]是一個(gè)后進(jìn)先出棧;
函數(shù)PRIOR(CHAR)返回符號(hào)CHAR的優(yōu)先級(jí),各符號(hào)的優(yōu)先級(jí)見(jiàn)表2:

【問(wèn)題1】
填充流程圖中①的判斷條件。
【問(wèn)題2】
寫出子程序A的功能,并順序?qū)懗鰧?shí)現(xiàn)該功能的操作
【問(wèn)題3】
寫出子程序B的功能,并順序?qū)懗鰧?shí)現(xiàn)該功能的操作。
【問(wèn)題4】
中綴表達(dá)式
(A+B-C*D)*(E-F)/G
經(jīng)該流程圖處理后的輸出是什么?
【流程圖】

圖1
●試題一
[問(wèn)題1]
【答案】PRIOR(IN[i]):PRIOR(S[p])
[問(wèn)題2]
【答案】功能: 將當(dāng)前符號(hào)IN[i]入棧
操作:p+1->p
IN[i]->S[p]
[問(wèn)題3]
【答案】功能:出棧
操作:k+1->k
S[p]->POLISH[k]
p-1->p
[問(wèn)題4]
【答案】AB+CD*-EF-*G/
【解析】本題考查棧的使用和中序表達(dá)式與后綴表達(dá)式的互換。
●試題二
閱讀下列程序和控制流圖,將應(yīng)填入(n)的字句寫在答題紙的對(duì)應(yīng)欄內(nèi)。
【程序】
下面是一段求值的程序,其中datalist是數(shù)據(jù)表,n是datalist的長(zhǎng)度。
int GetMax(int n,int datalist[]){
int k=0;
for(int j=1;jdatalist[k])
k=j;
return k;
}
【控制流圖】

圖2控制流圖
【問(wèn)題1】
該程序的控制流圖中A~E分別是什么?
【問(wèn)題2】
計(jì)算控制流圖的McCabe環(huán)路復(fù)雜性。
【問(wèn)題3】
用基本路徑覆蓋法給出測(cè)試路徑。
【問(wèn)題4】
為各測(cè)試路徑設(shè)計(jì)測(cè)試用例。
●試題二
[問(wèn)題1]
【答案】(1)jdatalist[k]〓(4)k=j;(5)j++;
[問(wèn)題2]
【答案】 McCabe環(huán)路復(fù)雜性為3。
[問(wèn)題3]
【答案】測(cè)試路徑:
Pathl:①→③
Path2:①→②→④→⑥→…
Path3:①→②→⑤→⑥→…
[問(wèn)題4]
【答案】測(cè)試用例:
Path1:取n=1,datalist[0]=1,
預(yù)期結(jié)果:k=0
Path2:取:n=2,datalist[0]=1,datalist[1]=0,
預(yù)期結(jié)果:k=0
Path3:取n=2,datalist[0]=0,datalist[1]=1,
預(yù)期結(jié)果:k=1
【解析】本題考查對(duì)軟件測(cè)試概念和過(guò)程的理解,結(jié)合具體實(shí)例運(yùn)用各種測(cè)試技術(shù),學(xué)會(huì)測(cè)試用例設(shè)計(jì)、軟件測(cè)試與程序調(diào)試的方法。軟件測(cè)試是為了發(fā)現(xiàn)錯(cuò)誤而執(zhí)行程序的過(guò)程,其目的在于以最少的時(shí)間和人力系統(tǒng)地找出軟件中潛在的各種錯(cuò)誤和缺陷。根據(jù)2004新大綱和最近兩次軟件設(shè)計(jì)師考試的真題,不難發(fā)現(xiàn)各類系統(tǒng)分析理論的實(shí)例化考核比例逐漸升溫,只要讀者平時(shí)對(duì)這部分知識(shí)的實(shí)例多分析、多思考,這部分分?jǐn)?shù)其實(shí)不難拿到。
●試題三
請(qǐng)補(bǔ)充函數(shù)fun(),該函數(shù)的功能是:只保留字符串中的大寫字母,刪除其他字符,結(jié)果仍保存在原來(lái)的字符串中,由全局變量m對(duì)刪除后字符串的長(zhǎng)度進(jìn)行保存。
注意:部分源程序給出如下。
請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的橫線上填入所編寫的若干表達(dá)式或語(yǔ)句。
試題程序:
#include
#include
int m;
void fun(char *s)
{
int i=0,j=0;
char *p=s;
while(*(p+i))
{
if(*(p+i)>=′A′&&*(p+i)<=′Z′)
{
(1) ;
}
(2) ;
}
s[j]=′\0′;
(3) ;
}
main()
{
char str[80];
clrscr();
printf("\nEnter a string:");
gets(str);
printf("\n\nThe string is:\%s\n",str);
fun(str);
printf("\n\nThe string of changing
is:\%s\n",str);
printf("\n\nThe length of changed string
is:\%d\n",m);
}
●試題四
閱讀下列程序說(shuō)明和C代碼,將應(yīng)填入(n)處的字句寫在答題紙的對(duì)應(yīng)欄內(nèi)。
【程序4.1說(shuō)明】
"背包問(wèn)題"的基本描述是:有一個(gè)背包,能盛放的物品總重量為S,設(shè)有N件物品,其重量分別為w1,w2,...,wn,希望從N件物品中選擇若干件物品,所選物品的重量之和恰能放入該背包,即所選物品的重量之和等于S。
如下程序均能求得"背包問(wèn)題"的一組解,其中程序4.1是"背包問(wèn)題"的遞歸解法,而程序4.2是"背包問(wèn)題"的非遞歸解法。
【程序4.1】
#include
#define N 7
#define S 15
int w[N+1]={0,1,4,3,4,5,2,7};
int knap(int s,int n)
{ if(s==0)return 1;
if (s<0||(s>0& &n<1))return 0;
if( (1) )){
printf(″%4d″,w[n]);return 1;
}return (2) ;
}
main(){
if( knap(S,N))printf(″OK!\n″);
else printf(″N0!\n″);
}
【程序4.2】
#include
#define N 7
#define S 15
typedef struct {
int s;
int n:
int job;
} KNAPTP;
int w[N+1]={0,1,4,3,4,5,2,7};
int knap (int s,int n);
main( ) {
if (knap (S,N)) printf (″OK!\n″);
else printf (″NO!\n″);}
int knap (int s,int n)
{ KNAPTP stack[100],x;
int top,k,rep;
x.s=s;x.n=n;
x.job=0;
top=l;stack[top]=x;
k=0;
while( (3) ) {
x=stack [ top ];
rep=1;
while ( !k && rep ) {
if (x.s==0)k=1;/*已求得一組解*/
else if (x.s<0 || x.n <=0)rep=0;
else{x.s= (4) ;x.job=1;
(5) =x;
}
}
if(!k){
rep=1;
while(top>=1&&rep){
x=stack[top--];
if(x.job==1){
x.s+=w[x.n+1];
x.job=2;
stack[++top]=x;
(6) ;
}
}
}
}
if(k){/*輸出一組解*/
while(top>=1){
x=stack[top--];
if(x.job==1)
printf(″%d\t″,w[x.n+1]);
}
}
return k;
}
●試題五
閱讀下列程序說(shuō)明和C++代碼,將應(yīng)填入(n)處的字句寫在答卷的對(duì)應(yīng)欄內(nèi)。
【說(shuō)明】
①定義類Table的私有數(shù)據(jù)成員x和y,分別用于表示九九表中的兩個(gè)乘數(shù)(x*y),它們都是int型的數(shù)據(jù)。
②完成類Table的成員函數(shù)print()的定義,該函數(shù)以"x*y=z"的格式打印出九九表中的一個(gè)乘法算式,請(qǐng)使用格式化輸出函數(shù)printf實(shí)現(xiàn)。
③完成類Table9的成員函數(shù)print()的定義,該函數(shù)調(diào)用基類Table的print()函數(shù),將九九表輸出到屏幕。
④補(bǔ)充主函數(shù),在屏幕上輸出九九表,以便測(cè)試所定義的類的正確性。
源程序文件test8_3.cpp清單如下:
#include
#include
class Table
{
(1)
int z;
public:
void print(int x,int y,int z);
};
void Table::print (int x,int y,int z)
{
(2)
}
class Table9:public Table
{
public:
void print();
};
void Table9::print()
{
(3)
int x,y,z;
for (i=1;i<10;i++)
{
for(j=1;j