/*** *** LAB-01: 熟悉環境 登入 http://bb.nctu.edu.tw 無法登入者: 請參看 http://www.csie.nctu.edu.tw/~tsaiwn/introcs/ 若有任何問題, 請隨時舉手抓助教來問 :-) * How to edit/compile/run program ? ** What is a running script ? *** 請測試以下小程式, 確定知道 #include 做啥? 確定你知道 Library function 是啥? 確定有弄懂以下的每個 " (注意 ? ) " !!! 確定你會使用 BB (bb.nctu.edu.tw) 的各項功能? 確定你 edit / compile / run program 並做出 Running script 確定你會把 Running script 潑 (post) 到 BB (Running script 可以含有畫面用 ALT_PrtSc copy/paste 的) ** 本目錄中有一個 BATNUM 抓石頭遊戲 batnum.c 因為用到了 Turbo C++ 特有的咚咚, 只能用 TC++ 編譯連結出執行檔 另外的 bat2.c 和 bat3.c 則可以用別的 compiler 如 gcc ******/ LAB-01 @ first week 計概程式設計演習 Please Log into http://bb.nctu.edu.tw (登入的頁面有提示帳號密碼, 若仍無法登入請詢問學校計中櫃台) _____________________________________________ * 備用網址: http://www.csie.nctu.edu.tw/~tsaiwn/introcs/ (in case that bb.nctu.edu.tw is NOT available :-) * 計概小組網站: http://intro.cs.nctu.edu.tw/ Purpose: Sharp tools make good work(工欲善其事, 必先利其器!) 先熟悉bb系統, edit a program, compile/run the program, 以及製造出 running script /心得, then post(貼到) bb 的討論區 (1) To be familiar with the Black Board learning system (BB) (2) To learn how to edit / compile / run a program (3) To learn how to post an article on a discussion board on BB (4) To learn how to make a running script and post it onto the BB __________________________________________________________________ Lab work: (Here is what you have to do during today and this week.) (1) 在 BB 的 test測試練習區練習如何 post/edit 文章 * 登入 bb.nctu.edu.tw, 找到本課程並點選, (可點按 "課程" 會看得比較清楚) 在本課程找到 Discussion board 的測試練習區, * 弄懂如何 post 文章, 修改文章, 刪除文章, 回答(reply)文章 (注意是回答!) * ==> 請確定你會了才到其他 discussion board 潑文 (post articles) 不會請隨時舉手叫小助教幫你:-) (2) 每位須在自我介紹區 post 一篇 500字 ~ 1200字的自我介紹 請注意, 是自我介紹, 不是自傳! 至少 500 字, 請不要超過 1200字:-) 可以變換字型和顏色, 可以插入圖片(每張只算 5 字:-(), 也可以插入背景音樂(不算字數:( !) 若會做網頁還可以按 "<>" 切換到 HTML 語法模式自行修改或編寫 HTML 語法:-) Note: Failure to do so may result in a deduction in your final grade. __________________________________________ (3) 練習使用 Notepad, DEV-CPP 和 Turbo C++ 3.0 然後把練習結果依照以下規定 post 到 BB 的 "第一個程式練習區" 先寫心得(至少 100字, 至多500字), 接著 running script, 再接著是帶有 line number 的 program(s) * 注意 Subject: 要包括學號姓名與第幾版(可以 post 很多次(註明版本編號:-)) * Running script 就是你的執行過程與答案, 別人看了就可以照著做出一樣效果! * 程式可以自己寫或網路抓, 或用以下範例(看不懂沒關係:) * 先練習開個 DOS 窗然後設定 PATH 之後用 gcc/g++/tcc 等命令 * 之後再練習使用 DEV-CPP 和 TC++3.0 的 IDE 整合發展環境 * 本週至少要練會 DEV-CPP 或 TC++3.0 的 command mode 用法 * 開 DOS 窗後若打 gcc 與 g++ 不認識, 試著先打: path c:\dev-cpp\bin;c:\TC\bin;%path% * 若機器沒有裝 DEV-CPP 或 TC++3.0, 可以自己到計概小組網站 http://intro.cs.nctu.edu.tw 的工具區抓來安裝! * DEV-CPP 安裝大約要數分鐘 * Turbo C++ 3.0 是抓壓縮檔來解壓縮, 大約數十秒就可搞定! 不過要注意設定, Command mode 要注意 BIN\TURBO.CFG 內容是否正確 IDE mode 則要點按 Directory 入內改正確(看助教demo) ** 註: 老師或助教會 DEMO 很多次, 聽懂得就自己開始練不要管講台上重複講! 練習時只要有問題請立刻舉手, 助教會過去幫忙解說或示範!! **如果覺得 Notepad 太陽春, 可以用gogle.com 找 ultra editor 來用, 也可以用 gogle.com 找 notepad++ 抓來安裝, 很好用! 或到這抓: http://notepad-plus.sourceforge.net/tw/download.php? * notepad++ 是一位民國84年畢業於淡江大學法文系的侯今吾到法國改讀電腦碩士後寫的 [Lab01] 練習一 小明的數學魔法書 Problem: 請幫小明寫一個可幫他完成數學作業的小程式 Purpose: 熟悉工具與C語言, 並練習思考程式設計與解題方法 Description(說明): 小明有很多數學題要做,不過題型都一樣, 就是要算出某數的平方, 立方, 以及其平方根(square root); 答案一律算到小數點後兩位; 請注意有很多題喔! 考慮如何寫可以幫小明更順利完成作業!! 一時還不知道如何寫? 沒關係, 這算正常的! 那就先看看範例並測試看看! ** 以下共有兩個範例: linenum.c 和 asqrt.c 請確定安裝 compiler 且命令路徑 (path)有設定正確, 然後可如下測試: path c:\dev-cpp\bin;c:\tc\bin;%path% gcc asqrt.c -o asqrt asqrt gcc linenum.c -o linenum linenum < asqrt.c linenum < asqrt.c > haha.txt type haha.txt 注意用 NOTEPAD 等 editor 輸入 linenum.c 時要去掉 line numbers !!! 注意用 NOTEPAD 等 editor 輸入 linenum.c 時要去掉 line numbers !!! 1 //linenum.c --- by tsaiwn@csie.nctu.edu.tw 2 // tcc linenum.c 或是 gcc linenum.c -o linenum 3 // linenum < inputfile.name 4 // linenum < inputFile.name > outputFile.name 5 #include 6 int main( ) { 7 static char buf[999]; // 用 static 就不會佔用 Stack 的空間 8 int n = 0; // 一開始放 0 這樣加上 1 就是 Line 1 9 fgets(buf, sizeof(buf), stdin); // 先讀入一列然後進入 Loop 10 while(! feof(stdin) ) { // while檔案stdin (鍵盤) 尚未結束 11 ++n; 12 printf("%5.2d %s", n, buf); 13 buf[0] = 0; // clear the buffer -- 先把上次讀到的清除 ! 14 fgets(buf, sizeof(buf), stdin); // 在 Loop 內最後再讀入一列 15 } // while // 注意下列很重要喔, 因輸入檔最後一列可能沒 new Line 16 if(buf[0] != 0) printf("%5.4d %s", ++n, buf); // 注意 ++n 17 printf("\n"); 18 if(*buf != 0)fprintf(stderr, "Waring: no newline at end of file\n"); 19 return 0; 20 } // main 注意要把 Line numbers 去掉 /*** asqrt.c --- sample program by tsaiwn@cs.nctu.edu.tw * 練習: 簡易輸入 + 簡易輸出 + 使用 Library 程式庫 + 簡易 while Loop * Description: 寫個程式, 讀入 x, 印出根號 x (可以用 Library function) * Note: 要一直做到 輸入負數(例如輸入 -1 ) 才停止! 記得要印出 Bye bye! *** *** **************************/ #include #include double x; // (注意 1) 變數 variable; // C++ 式的註解 comment double getDBL(void); // 寫成 function 比較有彈性:-) int main( ) { // 大多數 main program 都這樣開頭 while(38==38) { // (注意 3) 可以改用別的方法 printf("Give me x: "); x = getDBL( ); // 寫成函數 (function; 函式) 是個很好的習慣 if( x < 0 ) break; // (注意 3) 可以改用別的方法 printf(" sqrt 根號 %f =%f\n ", x, sqrt(x) ); // (注意 4) 可以問 user 要不要繼續? } // while printf("Bye bye!\n"); return 0; // 告知作業系統(OS)表示我們這主程式正常結束 } double getDBL( ) { // 以後要改輸入的方法只要改這 function 就可 :-) double ans; scanf("%lf", &ans); // (注意 5) 可以不要用 scanf 改用 fgets 和 atof return ans; } /*** 每個 (注意 ? ) 都是一個小小練習題: (注意 1) 執行時故意輸入亂打如 abcd 會如何? (注意 2) 改用 float 看看要如何配合修改? (注意 3) 要如何改為不須用到 if ... break 的 while Loop ? (注意 4) 每次問 user 要不要繼續, y或 Y 表示要, 其他表示不要? 如何讀入答案? 讀入到文字變數? ("%c" ? "%c ") <== 注意後者有空格 多測試看會遇到哪些奇怪的問題? scanf 時用 "%f" 與 "%f ", 以及用 "%lf" 與 "%lf " 的差別? (注意 5) 可以不要用 scanf, 改用 fgets 和 atof (比較不會出問題) 如何使用 fgets 和 atof? 可以上網查 :-) 當然有書查也可以啦 :-) *** 每個人可以 post 很多次( 註明版本編號:-) *** 注意 Subject: 要包括學號姓名與第幾版 ********** /// /// /// TCC 是命令模式(在CMD下); TC 是IDE 整合模式 /*** 使用 gcc 或 TC++3.0前 常用命令: path c:\dev-cpp\bin;c:\tc\bin;%path% 備用網址: http://www.csie.nctu.edu.tw/~tsaiwn/introcs/ **/// 在 TC++ 的 IDE 整合環境內(TC), 經常需要按 ALT_F5 (兩鍵同時按 ) 以便看執行結果 /// 在 TC++ 的 IDE 整合環境內(TC), 隨時可以按 Control_F1 (兩鍵同時按 ) 以便看說明書