2010/11/22 __________________ 學號: 姓名: 思考和讀書都很重要! ___________ ______________ 阿就是不要只是死讀書啦! 我們常常推薦使用的 fgets(char* s, int n, FILE* fp) 函數也很值得研究!思考! 這函數(function;函式)其實很單純, 它利用到 int fgetc(FILE*) 這函數;很簡單, 它只是用 fgetc(FILE* fp) 從輸入串流(input stream) fp 一直讀 char放入 s, 直到讀到 '\n' 或是已經讀進了 n-1 個 char 就不再讀, 遇到EOF當然也要停! 這時不論是因已經讀入 '\n' 或是已經讀了 n-1 個 char 都要補上 '\0' 做為 字串 s 的結束! 還有, 依照 fgets( ) 的手冊, 若啥都沒讀到(遇到 EOF)則回傳 0, 否則須回傳 s 的起始位址。 ( 注意: 在 中有 #define EOF (-1) ) 參看 K&R 課本 7.7 節的詳細說明與 fgets( ) 程式碼。 15%(I) 請使用 int fgetc(FILE*) 這函數 (其他 Library 都不可用也不必用) 寫出完整的 char * fgets(char* s, int n, FILE* fp); (大約 12 lines ~ 15 lines; 可以使用 pointer, 也可以不使用 pointer ) Ans: 請寫在以下的空白處完成此程式, 程式中不要對 pOLD 做任何事! char * fgets(char* s, int n, FILE* fp) { char* pOLD = s; // 這樣程式中若要用指標的方法, 可對 s 做運算 return pOLD; // 回傳原先 s 的起點, 這樣程式中可對 s 做運算 } // fgets( 15%(II)關於 Fibonacci 的 Rabbit problem. 10%(a) 假設原來問題改為: 第 0 個月有 1 對小兔子, 小兔子過一個月會長大為成兔,    每對成兔則要到下下個月才會生出一對。 即懷孕期從一個月改為兩個月, 但長大仍跟原來一樣需一個月;   請推導出算第 n 月會有幾對兔子的 recursive 公式 (要推導, 直接寫出則沒分數!) 注意推導完後要寫出完整的Recursive公式, 且要考慮所有 n 的情況。 Ans:  5%(b) 寫出 recursive 函數 long fibNew(int n); 可以依據(a)傳回第 n 個月的    兔子有幾對的答案。 Ans: