字型大小:大中小 正文
2008年程式員考試真題(下午題)(2009-04-12 13:10:00)
标簽:it
試題一 (共 15 分)
閱讀以下說明和流程圖,填補流程圖中的空缺(1)~(9),将解答填入答題紙的對應欄内。
[說明]
假設數組 A 中的各元素 A(1),A(2) ,…,A(M)已經按從小到大排序 (M≥1);數組 B 中的各元素B(1),B(2),…,B(N)也已經按從小到大排序 (N≥1)。執行下面的流程圖後,可以将數組A與數組 B中所有的元素全都存入數組 C中,且按從小到大排序(注意:序列中相同的數全部保留并不計排列順序)。例如,設數組A中有元素:2,5,6,7,9;數組B中有元素:2,3,4,7;則數組C中将有元素:2,2,3,4,5,6,7,7,9。
[流程圖]
試題二 (共 15 分)
閱讀以下說明和C程式,将應填入 (n)處的字句寫在答題紙的對應欄内。
[說明]
下面的程式按照以下規則輸出給定名詞的複數形式:
a. 若名詞以 "y"結尾,則删除y并添加 "ies";
b. 若名詞以 "s"、"ch"或"sh"結尾,則添加 "es"
c. 其他所有情況,直接添加 "s"。
[C程式]
#include
#include
char *plural(char *word)
{
int n;
char *pstr;
n = strlen(word);
pstr = (char *)malloc(n+3);
if (!pstr || n < 2)
return NULL;
strcpy(pstr,word);
if ( (1) )
{pstr[n-1] = 'i'; pstr[n] = 'e'; pstr[n+1] = 's'; (2) ;
}
else
if(pstr[n-1]=='s'||pstr[n-1]== 'h' && ( (3) ))
{
pstr[n] = 'e'; pstr[n+1] = 's'; pstr[n+2] = '/0';
}
else{ pstr[n] = 's'; pstr[n+1] = '/0';
}(4) ;
}
main( )
{
int i; char *ps;char wc[9][10] =
{"chair","dairy","boss","circus","fly","dog","church","clue","dish"};
for(i = 0; i < 9; i++)
{
ps = (5) ;printf("%s: %s/n",wc[i],ps);
free(ps);
}
system("pause");
}
試題三(共 15 分)
閱讀以下說明和C程式,将應填入 (n)處的字句寫在答題紙的對應欄内。[說明說明]說明說明下面的程式用 Dole Rob算法生成N階(N為奇數)魔方陣(各行、列、對角線數字2之和相等)。
該算法的過程為:從1開始,按如下方法依次插入各自然數,直到N 為止:
a. 在第一行的正中插入 1;
b. 新位置應當處于最近插入位置的右上方,若該位置已超出方陣的上邊界,則新位置取應選列的最下一個位置;若超出右邊界,則新位置取應選行的最左一個位置;
c. 若最近插入的元素是N的整數倍,則選同列的下一行位置為新位置。
例如,3階魔方陣如下所示:
8 1 6
3 5 7
4 9 2
[C程式程式]
#include
#include
#define SIZE 50
main( )
{ int row, col, n, value;
int a[SIZE+1][SIZE+1];
printf("請輸入要輸出魔方陣的階數 n(奇數, <%d):n=", SIZE);
scanf("%d",&n);
if (!(n % 2)||n < 1 || (1) ) {
printf("輸入資料有誤!/n"); exit(0);
}
row = 1; col = (n+1)/2; value = 1;
while(value <= (2) ) {
a[row][col] = value;
if(value%n != 0){
row--; (3) ;
if(row < 1) row = n;
if(col > n) (4) ;
}
else row++;
value = (5) ;
}
printf("/n%d 階魔方陣如下所示:/n/n",n);
for(row = 1; row <= n; row++){
for(col = 1; col <= n; col++)
printf("]",a[row][col]);
printf("/n");
}
}
試題四(共 15 分)
閱讀以下說明和C函數,将應填入(n) 處的字句寫在答題紙的對應欄内。
[說明說明]
計算機在處理算術表達式時,首先将其轉換 為字尾表達式。例如,表達式"46+5*(120-37)"的字尾表達式形式為 "46 5 120 37 - * +"。
計算字尾表達式時,從左至右掃描字尾表達式:若遇到運算對象,則壓入棧中;遇到運算符,則從棧中彈出相關運算對象進行計算,并将運算結果壓入棧中,重複以上過程,直到字尾表達式掃描結束。例如,字尾表達式 "46 5 120 37 - * +"的計算過程為:
a. 依次将46、5、120、37 壓入棧中;
b. 遇到 "-",取出37、120,計算 120-37,得 83,将其壓入棧中;
c. 遇到 "*",取出83、5,計算5*83,得 415,将其壓入棧中;
d. 遇到 "+",取出415、46,計算46+415,得 461,将其壓入棧中;
e. 表達式結束,則計算過程完成。
函數computing(char expr[],int *result)的功能是基于棧計算字尾形式的表達式(以串形式存入字元數組 expr)的值,并通過參數result 傳回該值。函數的傳回值為-1/0分别表示表達式有/無錯誤。假設表達式中僅包含數字、空格和算術運算符号,其中所有項均以空格分隔,且運算符僅包含加("+")、減 ("-")、乘 ("*")、除("/")。
函數computing中所用棧的基本操作的函數原型說明如下:
void InitStack (STACK *s):初始化棧。
void Push(STACK *s, int e): 将一個整數壓棧,棧中元素數目增 1。
void Pop(STACK *s):棧頂元素出棧,棧中元素數目減 1。
int Top(STACK s):傳回非空棧的棧頂元素值,棧中元素數目不變。
int IsEmpty(STACK s):若s是空棧,則傳回 1否則傳回 0。
[C函數函數]
int computing(char expr[], int *result)
{
STACK s; int tnum, a,b; char *ptr;
InitStack (&s);
ptr = expr;
while (*ptr!='/0') {
if (*ptr==' ') {
(1) ;
continue;
}
else if (isdigit(*ptr)) {
tnum = (2) ;
while (*ptr>='0' && *ptr <='9') {
tnum = tnum * 10 + (3) ;
ptr++;
}
Push( (4) );
}
else
if (*ptr=='+'||*ptr=='-'||*ptr =='*'||*ptr =='/'){
if (!IsEmpty(s)) {
a = Top(s); Pop(&s);
if (!IsEmpty(s)) {
b = Top(s); Pop(&s);
}
else return -1;
}
else return -1;
switch (*ptr) {
case '+': Push(&s,b+a); break ;
case '-': Push(&s,b-a); break ;
case '*': Push(&s,b*a); break ;
case '/': Push(&s,b/a); break ;
}
}
else
return -1;
ptr++;
}
if (IsEmpty(s)) return -1;
else {
(5) = Top(s); Pop(&s);
if (!IsEmpty(s)) return -1;
return 0;
}
}
從下列3道試題(試題五至試題七)中任選 1道解答。如果解答的試題數超過 1道,則題号小的 1道解答有效。
試題五試題五(共 15 分)
閱讀下列說明、圖和C++代碼,将應填入 (n) 處的字句寫在答題紙的對應欄内。
[說明]
已知對某載客車輛 (Car)進行類模組化,如圖5-1所示,其中類 Engine表示發動機引擎,類 Wheel表示車輪,類 Body表示車身,類 Driver表示司機,類 Passenger表示客。
圖5-1 類圖
[C++代碼[C++代碼] ]
[C++[C++代碼代碼]]
const int (1) = 7; //定義最多載客數
const int MAX_WHEELS = 5; //定義最多輪胎數
class Body{ //此處代碼省略 }; //車身類
class Passenger{ //此處代碼省略 }; //乘客類
class Wheel{ //此處代碼省略 }; //車輪類
class Driver{ //司機類
public:
string name; //表示第幾路公共汽車司機
Driver(string driverName):name( (2) ){}; //構造函數
};
class Engine{ //引擎類
public:
string engineNo; //引擎編号
Engine(string engineNo){ (3) ->engineNo = engineNo; } //構造函數
};
class Car{ //汽車類
protected:
Engine * engine; Driver * driver; Body body;
Wheel * wheels[MAX_WHEELS]; Passenger * passengers[MAX_PASSENGERS];
public:
Car(Driver *driver){ //構造函數
this->driver = driver;
engine = new Engine("TX6536 型号引擎");
for (int index = 0; index < MAX_WHEELS; index++){
wheels[index] = new Wheel();
}
for (int index = 0; index < MAX_PASSENGERS; index++){
passengers[index] = NULL;
}
}
virtual ~Car(){ //析構函數
for (int index=0; index < MAX_WHEELS; index++)
delete wheels[index];
delete (4) ;
}
int getPassengerNumber(){ //擷取車上乘客數量
//此處代碼省略
}
void getOnPassenger(Passenger * aPassenger ){ //乘客上車
//此處代碼省略
}
void run(){ //開車
if(driver == NULL){ cout << "司機尚未上車 !"; return; }
//此處代碼省略
}
};
void main(){
Driver driver("第五路公共汽車司機");
Car car( (5) );
Passenger passengers[MAX_PASSENGERS];
for (int index = 0 ; index < MAX_PASSENGERS; index ++) //乘客上車處理
car.getOnPassenger(&passengers[index]);
car.run();
}
試題六(共 15 分)
閱讀以下應用說明以及 Visual Basic程式代碼,将應填入 (n) 處的字句寫在答題紙的對應欄内。
[應用說明]
某應用程式可選擇打開使用者指定的文本檔案,将其内容顯示在指定的文本框内供使用者編輯,并将編輯後的結果儲存在使用者指定的檔案中。運作時的視窗如圖6-1 所示,其中有六個标簽、一個驅動器清單框、一個目錄清單框、一個檔案清單框、一個檔案類型組合框、一個檔案編輯文本框、一個檔案名文本框以及兩個指令按鈕。
圖6-1
該程式的開發要求如下:
(1)通過驅動器清單框 (Drive1)、目錄清單框 (Dir1)和檔案清單框 (File1), 選擇檔案。
(2)檔案類型組合框 (Cmb_type)設定為下拉式清單框,其中有三個供選項,分别為 "所有檔案 (*.*)"、"文本檔案 (*.txt)"和 "可執行檔案 (*.exe)"。在檔案清單框中列出的檔案類型會 自動與檔案類型組合框中選擇的檔案類型相比對。
(3)在檔案清單框 中單擊一個檔案名時,該檔案名會顯示在檔案名文本框 (Txt_filename)中。
(4)在檔案清單框中輕按兩下一個檔案名時,若是文本檔案,則在檔案編輯文本框(Txt_file)中顯示該檔案的内容并可進行編輯;若不是文本檔案,則彈出一個對話框,提示 "請選擇文本檔案 !"
(5)對于編輯後的文本檔案,可在檔案名文本框(Txt_filename)中輸入新的檔案名,并單擊指令按鈕(Cmd_save)進行儲存。
[Visual Basic 程式代碼程式代碼] 程式代碼程式代碼
Private Sub Form_Load()
Cmb_type.AddItem "所有檔案 (*.*)"
Cmb_type.AddItem "文本檔案 (*.txt)"
Cmb_type.AddItem "可執行檔案 (*.exe)"
Cmb_type.ListIndex = 0
File1.Pattern = "*.*": Txt_filename.Text = ""
Txt_file.Text = ""
End Sub
Private Sub Dir1_Change()
File1.Path = (1)
End Sub
Private Sub Drive1_Change()
Dir1.Path = Drive1.Drive
End Sub
Private Sub Cmb_type_click ()
Select Case Cmb_type. (2)
Case 0
File1.Pattern = "*.*"
Case 1
File1.Pattern = "*.txt"
Case 2
File1.Pattern = "*.exe"
End Select
End Sub
Private Sub Cmd_save_Click ()
usrFile = GetFileName() '函數GetFileName獲得要儲存的檔案名
Open usrFile For Output As #1 '定義 usrFile為1号輸出檔案
Print #1, Txt_file.Text '輸出到 1号檔案
Close #1
End Sub
Private Sub File1_DblClick ()
If right(File1.FileName, 3) <> (3) Then
MsgBox "請選擇文本檔案 !"
Exit Sub
End If
usrFile = GetFileName() '函數GetFileName獲得要打開的檔案名
Open usrFile For Input As #1 '定義 usrFile為1号輸入檔案
Txt_file.Text = ""
Do While (4) EOF (1)
Line Input #1, fContext '從1号檔案讀入一行
Txt_file.Text = Txt_file.Text + (5) + vbCrLf
Loop
Close #1
End Sub
'其他代碼略
試題七(共 15 分)
閱讀下列說明、圖和Java代碼,将應填入 (n) 處的字句寫在答題紙的對應欄内。
[說明]
已知對某載客車輛 (Car)進行類模組化,如圖7-1所示,其中類 Engine表示發動機引擎,類 Wheel表示車輪,類 Body表示車身,類 Driver表示司機,類 Passenger表示乘客。
圖7-1 類圖
[Java 代碼Java 代碼]
Java Java 代碼代碼
class Body{ //此處代碼省略 }; //車身類
class Passenger{ //此處代碼省略 }; //乘客類
class Wheel{ //此處代碼省略 }; //車輪類
class Driver{ //司機類
public String name; //表示第幾路公共汽車司機
public Driver(String driverName){name = driverName;} //構造函數
};
class Engine{ //引擎類
public String engineNo; //引擎編号
public Engine(String engineNo){ this.engineNo = engineNo; } //構造函數
};
public class Car{ //汽車類
static final int (1) = 7; //定義最多載客數
static final int MAX_WHEELS = 5; //定義最多輪胎數
protected Engine engine;
protected Driver driver;
protected Body body = new Body();
protected Wheel[] wheels;
protected Passenger[] passengers;
public Car(Driver driver){ //構造函數
(2) .driver = driver;
engine = new Engine("TX6536 型号引擎");
wheels = new Wheel[MAX_WHEELS];
passengers = new Passenger[MAX_PASSENGERS];
for (int index = 0; index < MAX_WHEELS; index++){
wheels[index] = new Wheel();
}
for (int index = 0; index < MAX_PASSENGERS; index++){
passengers[index] = null;
}
}
int getPassengerNumber(){ //擷取車上乘客數量
//此處代碼省略
}
void getOnPassenger(Passenger aPassenger ){ //乘客上車
//此處代碼省略
}
void run(){ //開車
if( (3) ){ System.out.println("司機尚未上車 !"); return;}
//此處代碼省略
}
public static void main(String args[]){
Driver driver = new Driver("第五路公共汽車司機");
Car car = new Car( (4) );
for (int index = 0 ; index < MAX_PASSENGERS; index ++)
car.getOnPassenger( (5) Passenger());
car.run();
}
}