期中考沒考好怎麼辦呢?
這個問題每年都有人問! 現在開始奮發圖強還來得及! 
就算期中考只有個位數, 仍有機會這學期拿到 80 分以上!
因為雖然期中考佔30%~35%, 但我們會有進步加分, 進步越多加越多!
其實, 現在你再看看期中考考題..
你該發現只要上課和演習課都有來都有聽進去, 要考100分並不難!
因為, 滿分是 125, 且全部是上課或習題演習課講過的, 
考試時間有110分鐘, 很多題目是 1 分鐘內就可得到 3分!
例如, (V)-(b) 有 3 分, 要生出 [5, 31] 放到 ans, 就
   ans = 5 + rand%(31-5+1);  // 當然也可把 31-5+1 算好
這樣不用一分鐘吧? 
再來看看 (II) 這題有 13分, 這送分題不到 5 分鐘就可寫完ㄟ .. 
 4%(a)Consider the following C program:
         int x;
         static int y;
         int main( ) {
             int a=38;
             static int b;
             b = x + y + a;  return b;
         }
 請指出哪些變數是 Global 變數? 答: x, y 
 哪些是 Local 變數? 答: a, b 
 哪些是Auto變數?  答: a 
 哪些是 static Local變數?  答: b 
 3%(b)Auto variables 會被安排在記憶體的何處?  ==> 在堆疊區
   何以 Auto variable 若是 array 則它的 size 不可以太大?
   答: 因為一般安排給堆疊區的記憶體很小, 幾 k 到幾十 k,
         所以 auto 變數 array 若太大會爆掉!

 3%(c)What is the purpose of static Global variable? Explain it with example.
   答: static Global 變數只有在同檔案 (file)內的 functions 才可以使用它!
      具有類似C++ information hiding (資訊隱藏) 的概念!

 3%(d)已知 x, y, k 都是 short 變數, 令 y = -x; 結果 y 與 x 相等,
   已知 x 不是 0, 請問 x 是多少? 
   答:  x 是 -32768  (上課講過) 
    若令 k = x+x; 則 k 是多少? 
   答: k 是 0  
      因為 -32768 是二進位的 10000....000 (只有 sign bit 是 1)
    就是 -32768 + (-32768) = (100...000)bin + (100...000)bin = 0
 ==>說明:  最左邊的 1 相加後 變 0, 進位到 暫存器的 Carry;
    所以結果是 0  (雖然這上課沒講, 但等同小學生把兩數相加ㄟ)
     因為上課有講到: short 最大就是 0111...111 == 32767
     此時加上 1 後變成 1000...000 == -32768 (最左 1 其他 0)
     兩個 1000...000 相加只留下 16 bit 當然是 0000...000

    (*考慮電腦使用二的補數表示法 2's complement)
再看 (VII) 也是上課講過 N 次的,
  例如  (VII)-(a) 一看就知道答案,
   主要是注意 x 是 double, y 是 float, 
   而 float 的 1234567.2 和 1234567.3 都會存 1234567.25
   且 1234567.25 + 0.0001 仍是 1234567.25 
   因為 float 實數的 significand 只有 23 bits,
   加上 1 bit 的 hidden bit 只有24bit,
   所以二進位 24 位的有效位等同十進位 7.2位 (24*0.3010=7.2)
   所有化成二進位後無窮盡的存入電腦就會有不準確的現象!


   過去的已經過去(逝者已矣), 子曰人必自棄而後人棄之!
所以, 現在開始用功還來得及, 
那就從這週的演習課開始努力吧!
當然, 週四的上課也要起得來不要遲到姍姍來遲! 
  還有, 請注意以後的考試都不可以再帶任何參考資料喔!
因為到現在很多東西都應該已經不小心記起來(不用背!)
至於那些這次運氣好剛好把考古題答案寫在 A4 memo 上且有賺到的同學,
在慶幸自己狗屎運之外, 當然也該更用功上課和做習題!


前一信中我們說過研究一些小函數如何寫可以使功力增強!
現在再來看看 isupper(int) 與 islower(int) 程式如何寫?
注意程式庫中的這些 yes/no 函數不一定用 1 當作 yes
不過那並不重要, 通常程式庫這樣分類: 
   字母 1, 大寫 1, 小寫 2, 數字 4, 廣義空白 8, ...
但這些對我們並沒有意義, 我們要的是 yes or no
不是 0 就代表 yes; 只有 0 代表 no
現在就看看這已經幫你跑出答案的小程式吧!
01 //uplow.c --- @CopyLeft by tsaiwn@csie.nctu.edu.tw 02 //程式庫中的 isupper(int) 遇到大寫字母不一定回傳 1 03 //因為它可能把它分類, 回傳的是類別代號; 反正不是 0 就代表 true 04 // 此例用 Dev-Cpp (MinW32 gcc/g++), isupper 是回傳 1 05 // 但請注意此例中, 程式庫的 islower 是回傳 0 或 2; 不會是 1 06 //// 我們自己寫的 myLower 則是回傳 0 或 1; 這是 OK 的! 07 #include 08 #include 09 int myUp(int x) { 10 return x >= 'A' && x <= 'Z'; // 'A'..'Z' 才回答 yes 11 } 12 int myLower(int x) { 13 return x >= 'a' && x <= 'z'; // 'a'..'z' 才回答 yes 14 } 15 int main( ) { 16 printf("isupper(65)==%d, isupper(97)==%d\n", 17 isupper(65), isupper(97) ); //65=='A', 97=='a' 18 if(myUp('a'))printf(" YES a is UPPER; "); 19 else printf(" no. a is NOT UPPER case\n"); 20 printf(" myUp('a')=%d\n", myUp('a') ); 21 /// 22 if(myUp('A'))printf(" YES A is UPPER; "); 23 else printf(" no. A is NOT UPPER case\n"); 24 printf(" myUp('A')=%d\n", myUp('A') ); 25 /// /// 26 printf("islower('A')==%d, islower('a')==%d\n", 27 islower('A'), islower('a') ); //65=='A', 97=='a' 28 if(myLower('a'))printf(" YES a is lower; "); 29 else printf(" no. a is NOT in lower case\n"); 30 printf(" myLower('a')=%d\n", myLower('a') ); 31 /// 32 if(myLower('A'))printf(" Yes. A is lower; "); 33 else printf(" no. A is NOT in lower case\n"); 34 printf(" myUp('A')=%d\n", myUp('A') ); 35 /// 36 printf(" ... Hit ENTER key ..."); 37 getchar( ); return 0; 38 } 39 /****** 40 D:\testc> path c:\Dev-Cpp\bin;%path% 41 D:\testc> gcc uplow.c 42 D:\testc> a 43 isupper(65)==1, isupper(97)==0 44 no. a is NOT UPPER case 45 myUp('a')=0 46 YES A is UPPER; myUp('A')=1 47 islower('A')==0, islower('a')==2 48 YES a is lower; myLower('a')=1 49 no. A is NOT in lower case 50 myUp('A')=1 51 ... Hit ENTER key ... 52 =======================************/

 期中考沒考好怎麼辦呢?
這個問題每年都有人問! 現在開始奮發圖強還來得及! 
就算期中考只有個位數, 仍有機會這學期拿到 80 分以上!
因為雖然期中考佔30%~35%, 但我們會有進步加分, 進步越多加越多!
其實, 現在你再看看期中考考題..
你該發現只要上課和演習課都有來都有聽進去, 要考100分並不難!
因為, 滿分是 125, 且全部是上課或習題演習課講過的, 
考試時間有110分鐘, 很多題目是 1 分鐘內就可得到 3分!
例如, (V)-(b) 有 3 分, 要生出 [5, 31] 放到 ans, 就
   ans = 5 + rand%(31-5+1);  // 當然也可把 31-5+1 算好
這樣不用一分鐘吧? 
再來看看 (II) 這題有 13分, 這送分題不到 5 分鐘就可寫完ㄟ .. 
 4%(a)Consider the following C program:
         int x;
         static int y;
         int main( ) {
             int a=38;
             static int b;
             b = x + y + a;  return b;
         }
 請指出哪些變數是 Global 變數? 答: x, y 
 哪些是 Local 變數? 答: a, b 
 哪些是Auto變數?  答: a 
 哪些是 static Local變數?  答: b 
 3%(b)Auto variables 會被安排在記憶體的何處?  ==> 在堆疊區
   何以 Auto variable 若是 array 則它的 size 不可以太大?
   答: 因為一般安排給堆疊區的記憶體很小, 幾 k 到幾十 k,
         所以 auto 變數 array 若太大會爆掉!

 3%(c)What is the purpose of static Global variable?
      Explain it with example.
   答: static Global 變數只有在同檔案 (file)內的 functions 才可以使用它!
      具有類似C++ information hiding (資訊隱藏) 的概念!
      例子就上課講過的隨便拿一個來寫就可:-)
       例如 rand( ) 和 srand( ) 共用的 seed 就是 static Global;
       還有, getch( ) 與 ungetch( ) 共用的 buffer 也是 ! (K&R 和我們投影片)
 3%(d)已知 x, y, k 都是 short 變數, 令 y = -x; 結果 y 與 x 相等,
   已知 x 不是 0, 請問 x 是多少? 
   答:  x 是 -32768  (上課講過) 
    若令 k = x+x; 則 k 是多少? 
   答: k 是 0  
      因為 -32768 是二進位的 10000....000 (只有 sign bit 是 1)
    就是 -32768 + (-32768) = (100...000)bin + (100...000)bin = 0
 ==>說明:  最左邊的 1 相加後 變 0, 進位到 暫存器的 Carry;
    所以結果是 0  (雖然這上課沒講, 但等同小學生把兩數相加ㄟ)
     因為上課有講到: short 最大就是 0111...111 == 32767
     此時加上 1 後變成 1000...000 == -32768 (最左 1 其他 0)
     兩個 1000...000 相加只留下 16 bit 當然是 0000...000

    (*考慮電腦使用二的補數表示法 2's complement)
再看 (VII) 也是上課講過 N 次的,
  例如  (VII)-(a) 一看就知道答案,
   主要是注意 x 是 double, y 是 float, 
   而 float 的 1234567.2 和 1234567.3 都會存 1234567.25
   且 1234567.25 + 0.0001 仍是 1234567.25 
   因為 float 實數的 significand 只有 23 bits,
   加上 1 bit 的 hidden bit 只有24bit,
   所以二進位 24 位的有效位等同十進位 7.2位 (24*0.3010=7.2)
   所有化成二進位後無窮盡的存入電腦就會有不準確的現象!

   過去的已經過去(逝者已矣), 子曰人必自棄而後人棄之!
所以, 現在開始用功還來得及, 
那就從這週的演習課開始努力吧!
當然, 週四的上課也要起得來不要遲到姍姍來遲! 
  還有, 請注意以後的考試都不可以再帶任何參考資料喔!
因為到現在很多東西都應該已經不小心記起來(不用背!)
至於那些這次運氣好剛好把考古題答案寫在 A4 memo 上且有賺到的同學,
在慶幸自己狗屎運之外, 當然也該更用功上課和做習題!


前一信中我們說過研究一些小函數如何寫可以使功力增強!
現在再來看看 isupper(int) 與 islower(int) 程式如何寫?
注意程式庫中的這些 yes/no 函數不一定用 1 當作 yes
不過那並不重要, 通常程式庫這樣分類: 
   字母 1, 大寫 1, 小寫 2, 數字 4, 廣義空白 8, ...
但這些對我們並沒有意義, 我們要的是 yes or no
不是 0 就代表 yes; 只有 0 代表 no
現在就看看這已經幫你跑出答案的小程式吧!
 
==============OK

 計概程設期中考沒考好怎麼辦呢?
這個問題每年都有人問! 現在開始奮發圖強還來得及! 
就算期中考只有個位數, 仍有機會這學期拿到 80 分以上!
因為雖然期中考佔30%~35%, 但我們會有進步加分, 進步越多加越多!
其實, 現在你再看看期中考考題..
你該發現只要上課和演習課都有來都有聽進去, 要考100分並不難!
因為, 滿分是 125, 且全部是上課或習題演習課講過的, 
考試時間有110分鐘, 很多題目是 1 分鐘內就可得到 3分!
例如, (V)-(b) 有 3 分, 要生出 [5, 31] 放到 ans, 就
   ans = 5 + rand%(31-5+1);  // 當然也可把 31-5+1 算好
這樣不用一分鐘吧? (這上課有講過喔! 習題範例內也有) 
再來看看 (II) 這題有 13分, 這"送分題"不到 5 分鐘就可寫完ㄟ .. 
 4%(a)Consider the following C program:
         int x;
         static int y;
         int main( ) {
             int a=38;
             static int b;
             b = x + y + a;  return b;
         }
 請指出哪些變數是 Global 變數? 答: x, y 
 哪些是 Local 變數? 答: a, b 
 哪些是Auto變數?  答: a 
 哪些是 static Local變數?  答: b 
 3%(b)Auto variables 會被安排在記憶體的何處?  ==> 在堆疊區
   何以 Auto variable 若是 array 則它的 size 不可以太大?
   答: 因為一般安排給堆疊區的記憶體很小, 幾 k 到幾十 k,
         所以 auto 變數 array 若太大會爆掉!

 3%(c)What is the purpose of static Global variable?
      Explain it with example.
   答: static Global 變數只有在同檔案 (file)內的 functions 才可以使用它!
      具有類似C++ information hiding (資訊隱藏) 的概念!
      例子就上課講過的隨便拿一個來寫就可:-)
       例如 rand( ) 和 srand( ) 共用的 seed 就是 static Global;
       還有, getch( ) 與 ungetch( ) 共用的 buffer 也是 ! (K&R 和我們投影片)
 3%(d)已知 x, y, k 都是 short 變數, 令 y = -x; 結果 y 與 x 相等,
   已知 x 不是 0, 請問 x 是多少? 
   答:  x 是 -32768  (上課講過) 
    若令 k = x+x; 則 k 是多少? 
   答: k 是 0  
      因為 -32768 是二進位的 10000....000 (只有 sign bit 是 1)
    就是 -32768 + (-32768) = (100...000)bin + (100...000)bin = 0
 ==>說明:  最左邊的 1 相加後 變 0, 進位到 暫存器的 Carry;
    所以結果是 0  (雖然這上課沒講, 但等同小學生把兩數相加ㄟ)
     因為上課有講到: short 最大就是 0111...111 == 32767
     此時加上 1 後變成 1000...000 == -32768 (最左 1 其他 0)
     兩個 1000...000 相加只留下 16 bit 當然是 0000...000

    (*考慮電腦使用二的補數表示法 2's complement)
再看 (VII) 也是上課講過 N 次的,
  例如  (VII)-(a) 一看就知道答案,
   主要是注意 x 是 double, y 是 float, 
   而 float 的 1234567.2 和 1234567.3 都會存 1234567.25
   且 1234567.25 + 0.0001 仍是 1234567.25 
   因為 float 實數的 significand 只有 23 bits,
   加上 1 bit 的 hidden bit 只有24bit,
   所以二進位 24 位的有效位等同十進位 7.2位 (24*0.3010=7.2)
   所有化成二進位後無窮盡的存入電腦就會有不準確的現象!

   過去的已經過去(逝者已矣), 子曰人必自棄而後人棄之!
所以, 現在開始用功還來得及, 
那就從這週的演習課開始努力吧!
當然, 週四的上課也要起得來不要遲到姍姍來遲! 
  還有, 請注意以後的考試都不可以再帶任何參考資料喔!
因為到現在很多東西都應該已經不小心記起來(不用背!)
至於那些這次運氣好剛好把考古題答案寫在 A4 memo 上且有賺到的同學,
在慶幸自己狗屎運之外, 當然也該更用功上課和做習題!
***
前一信中我們說過研究一些小函數如何寫可以使功力增強!
現在再來看看 isupper(int) 與 islower(int) 程式如何寫?
注意程式庫中的這些 yes/no 函數不一定用 1 當作 yes
不過那並不重要, 通常程式庫這樣分類: 
   字母 1, 大寫 1, 小寫 2, 數字 4, 廣義空白 8, ...
但這些對我們並沒有意義, 我們要的是 yes or no
不是 0 就代表 yes; 只有 0 代表 no
現在就看看這已經幫你跑出答案的小程式吧!