進入第十二週了! 
///  五都選舉已結束, 幾家歡樂幾家愁;
///  太陽依舊高高照, 但願大家更成熟!
/// ///
// 選舉結果放兩邊,
// 作業練習擺中間;
// 若真想要不被當,
// 習題必須多多練!
//////
LAB-12 本練習題為Lab-11的延續,不可用struct,從檔案讀入資料,
       並依規定排序後印出部份資料。 
       除了依照規定把程式寫出來外, 另外, 請注意這次多給三個執行檔:
      請測試所給該三個執行檔案: 
        sortqqq.exe, sortdebug.exe, sortstu.exe
      測試時, 除了genscore.c產生資料, 也測試用 gen222.c 產生的資料!
      請把測試研究的心得寫到這次的習題心得中。
  預告: 下週請改寫為一定要用 struct, 但仍是用自己寫的 sorting 演算法!
      (More Hint: 參考五天後會給大家的範例 readstu2.c; 
         前述 sortqqq.exe, sortdebug.exe, sortstu.exe 都是它產生的)

Due:  一週內 (連同上週共兩週)!

Purpose: 
     (1)了解struct的重要: 因為不准使用struct, 你將發現很不方便。
     (2)了解演算法好壞的重要性: 因為資料多達八萬多筆, 
        不同的排序演算法差異會在所需時間上顯現出來。
     (3)了解不同的資料可能對排序程式執行效率有影響。
       (請用相同執行檔去測試genscore.c 和 gen222.c 產生的資料)

說明:
 寫一個程式, 不可使用到 struct,  完成以下工作:
   從檔案 studat.txt 讀入一堆學生資料, 然後依照規定排序並輸出!
   在 studat.txt 裡面每列為一位學生資料,
   有學號、姓名、作業成績 h、期中考成績 m、小考成績 q、期末考成績 f,
  你要: 
  (1)讀入資料並先算出每人的學期總成績 :
       學期總成績 = (h*0.2 + m*0.3 + q*0.1+f*0.4); (此項印到小數點後兩位)
     然後印出 學號, 姓名, 接著各次成績, 以及學期總成績  (以學號為序)
       印完學生資料後,  (因資料很多, 只印出前面6個, 以及最後面6個)
     必須再印出全部同學的 學期總成績之平均, 以及總成績的標準差;
  (2)把資料排序, 怎麼做自己決定, 但必須量測sorting時間, 且還要印出:
     照學期總成績由高排到低的前面6個, 以及最後面6個(學期總成績最低的)的資料!
  (3)再來, 印出照學號由小到大排序的前面6個, 以及最後面6個的資料!
     (extra credit: 每列最右邊多印名次)  
  (4)針對 genscore.c 產生的 studat.txt, 測試所給的三個執行檔
  (5)改用 gen222.c 產生的 studat.txt, 再重新測試所給的三個執行檔
     (sortqqq.exe, sortdebug.ext, sortstu.exe)   
   註: 
     這三個執行檔都是讀取 studat.txt, 然後照學號遞增(Ascending) 排序!
        執行時, 可以輸入不同整數以便指示程式去用不同的 sorting function!
      sortqqq.exe --- quick sort 是 simple version,
           對於已經接近 sorted 的data 是 Worst Case!
      sortdebug.exe --- 同sortqqq.exe, 但是
           做 quick sort 時是 Debugging mode, 可看到執行過程!
      sortstu.exe --- quick sort 是修正版, 不受 data 影響!
      
     * 注意要確定執行檔與資料檔 studat.txt 在同一目錄!
          
Hint: 
  (1)資料請用作業區所給的 genscore.c 產生,  (也研究該程式 :-)
  (2)讀取資料請參考 readtest.c  (當然也要研究該程式 :-)
     標準差 = sqrt(變異數);
     變異數 = (平方和 - 和 * 和 / n ) / n;
     所以你讀取資料算出每位學生的學期總成績之後, 要順便一直記住到目前為止
     共有幾人 n, 總成績的和, 以及總成績的平方和; 這樣讀完就可算出所需統計資料。
  (3)關於 sorting 請參看所給的其他四個 sorting 範例:
     bbsort.c, selsort.c, inssort.c, 和 myqsort.cpp (這是C++)
  (4)習題程式請用所給的 hwk1213.c 雛形版改寫 (可用C或C++);
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  (5)要使用何種 sorting 技巧隨你高興, 但都須量測出你 sorting 所花的時間。
     ** 關於 Sorting 方法, 除看範例外, 也可用 wikipedia 找各種 sorting,
     例如 bubble sort, Insertion sort, Selection sort 等!
      http://en.wikipedia.org/wiki/Bubble_sort
      http://en.wikipedia.org/wiki/Insertion_sort
      http://en.wikipedia.org/wiki/Selection_sort
  (6)認真的同學可以上網查"C++ STL" 和  "STL sorting algorithm"
 
   再次提醒:  除了產生資料的 genscore.c 和 讀取資料範例 readtest.c,
     以及這習題雛形 hwk1213.c 外,也請參考所給的各個範例,包括
     範例 bbsort.c, selsort.c, inssort.c, 以及 myqsort.cpp (C++程式)

***以上所有程式,以及本檔案,也可以在備用網站找到: 
   http://www.cs.nctu.edu.tw/~tsaiwn/introcs/03_Labs/Lab12/