Professional Documents
Culture Documents
C 2 Puter
C 2 Puter
有下列函數 func1
A[i],A[0]
11 void func1 (void) { 互換
12 int Fvalue, i;
13 for (i=1; i < 6; i++)
14 if (A[i] > A[0]) { 某程序將陣列 A 初始化如下,
15 Fvalue = A[0]; 接著執行 func1 。
16 A[0] = A[i];
17 A[i] = Fvalue; A[0] A[1] A[2] A[3] A[4] A[5]
18 } 4 2 12 7 19 2
19 }
文字檔 wordarray[]
NO PAIN 選取英文字 0 NO
NO GAIN 1 PAIN
2 GAIN
重複
CIT 2005 3
函數的首一行 描述
void extract 從文字檔選取一個英文字,貯存於 inpword 內,
(char inpword[]) 若再沒有英文字可選,貯存空字符串於 inpword 內。
int searchword 在 wordarray 內搜尋 inpword 。
(char inpword[]) 送回一布爾值 (0,1) ,說明這次搜尋是否成功。
void insertentry 把 inpword 的內容
(char inpword[]) 加入為 wordarray 的一個元素。
int printarray (void) 列印陣列。
#include<string.h>
int searchword (char inword[]){ // 搜尋文字
int i;
for (i=0;i<p;i++)
if ( strcmp(inpword,wordarray[i]==0 )
return 1;
return 0;
}
PAIN
void insertEntry(char s[]){
strcpy(wordArray[p++], s);
}
CIT 2005 5
// extract 抽出文字 one word at a time from text file
void extract(char s[]){
char c;
int i=0;
c=fgetc(fp); // 讀入 1 字符
void printArray(){
int i;
for (i=0; i<p; i++)
printf("%02d: %s\n", i, wordArray[i]);
}
CIT 2005 6
3. 潤年 (leap year) 是一年份,可被 4 整除,
但不包括可被 100 整除而不能被 400 整除的年份。
例如, 2000 便是潤年,而 1800 和 1900 並不是閏年。
1 yy % 400 == 0
2 yy % 4 ==0 && yy % 100 !=0
小強須完成一份電腦功課,
計算 1800 後的一段時期內有多少閏年,首尾兩年包括在內。
他編寫了一函數 countLeap ,其變元 fy 和 ly ,
分別為一段時期的開始 (first year) 和結尾 (last year) 。
下列為 countLeap 的三個樣本輸出
函數 輸出
countLeap(2001,2003) 2001–2003 閏年 =0
countLeap(1997,2000) 1997–2000 閏年 =1
countLeap(1900,1910) 1900–1910 閏年 =2
CIT 2005 7
1800 2001,2003
11 void countLeap (int fy, int ly){ // first, last year
13 int i, counter;
14
15 counter = 0;
CIT 2005 8
(a) 行號 16 至 22 的功能是什麼 ? for (i = ly ; i>=1800; i--) …
CIT 2005 9
4. 有兩項堆疊的操作,其描述如下 :
POP 移除堆疊頂部的一個元素。
PUSH Y 在堆疊的頂部加上 Y 。
-20 6
15 15
CIT 2005 10
D 是一數據結構,以兩個堆疊 S1 和 S2 建立,每個堆疊的大小為 4 。 D 有下列操作 :
INSERT N 用 PUSH 把 N 加入 S1 。
EXTRACT 1. 若 S2 是空的 empty ,則
當 S1 仍然不是空的,
POP S1 ,並用 PUSH 把得出來的元素加入 S2
2.POP S2
3 3 3 14
-20 -20 -20 -20
14 7 14 7 14 3
CIT 2005 11
(c) 假設 S1 和 S2 最初是空的。
(i) 執行下列四項 INSERT 操作後,寫出 S1 和 S2 的內容。
INSERT 3 S1 S2 S1 S2
INSERT 4
INSERT 10 17
INSERT 17 10
4
3
EXTRACT S1 S2 S1 S2
EXTRACT 17 3
EXTRACT
10 4
4 10
3 17
CIT 2005 12
(iii) 從 (c)(i) 和 (c)(ii) 的結果可知,數據結構 D 的輸入序列是 3 、 4 、 10 、 17 。
在 D 內將被移除的元素的序列是什麼 ? 3 、 4 、 10 、 17
(d) D 包含兩個堆疊,每個堆疊的大小為 4 。
通過 INSERT 和 EXTRACT 的操作, D 最多可存貯多少個元素呢 ? 7
S1 S2 INSERT 1
8 1 INSERT 2
INSERT 3
7 2 INSERT 4
6 3 EXTRACT (… POP S2 )
5 4 INSERT 5
INSERT 6
INSERT 7
INSERT 8
CIT 2005 13