2008/07/09

C 語言面試考題

  寫一個 function 可傳入正整數參數 N,回傳 1 + 2 + 3 +...+N 的和。
附帶條件:可以用任何 loop 如 : for , while 之類.且限用十行之內的程式碼.   
其實它只是要考 recursive  的觀念.去掉 function 宣告,好像4行就可以搞定。

 long sum(long N) 
{   if (N > 1)     
            return (N + sum(N - 1));   
        else     
            return 1; 
 配合 C 語言特有 ? : 語法應該一行就可以完成: 
 long sumN(long N) {   return ( (N > 1) ? (N + sumN(N - 1)) : 1);

 其實此問題無法考出程度 ,倒是可以考個 pointer, function pointer, 或是 linked list 之類。

 另一個問題是 求質數 (Prime) ,說實在的這個問題可深可淺。有時要看臨場的考試時間及職缺內容來衡量如何回答。 

 Windows SDK 題目:請用 psuedo code (虛擬碼)寫出 Windows SDK AP 主流程, 也就是要你寫出 WinMain function 中的邏輯。
當初從 Windows 3.0 SDK API 一路 K 過來的人當然沒問題,但現在很多人都直接 VB ,GUI 拖拉元件寫程式,可能會吐血。 

  試描述以下兩支程式執行結果有何不同 ? 並解釋為何什麼 ? 
// code1.c 
 char str1[] = "This is a string"; 
 char *p = str1; char **pp; 

int main(int argc, char** argv) 
 *pp = p; 
 printf("p = %s\n" , p); 
 printf("*pp = %s\n", *pp); 

 return (EXIT_SUCCESS); 
// ------------------------------------------------- 
 // code2.c 
char str1[] = "This is a string"; 

int main(int argc, char** argv) 
 char *p = str1; 
 char **pp; 
 *pp = p; 
 printf("p = %s\n" , p); 
 printf("*pp = %s\n", *pp); 
 return (EXIT_SUCCESS); 

C語言不只是C語言而已,它是用來設計作業系統(OS: Operation System) 的程式語言。你要知道它的定位,才知道要學到什麼程度? 還有其它什麼相關的domain know how 要一起學,而不會只是學皮毛而已。

以上程式有問題的地方如何修正 ? C 語言 union 問題 : http://blogkrogh.blogspot.com/2008/06/cunion.html C語言面試問題二: http://blogkrogh.blogspot.com/2011/01/c.html