精華區beta b97902HW 關於我們 聯絡資訊
C Begins(計程:開戰時刻)   這不是蝙蝠俠電影的系列作,也無關任何開計程車拯救國家的故事。它原則上是一 份 FAQ,讓你在無書可讀或是書的內容動不動就上百頁的情況下,能夠快速了解究竟如 何完成一份 C 語言程式。 DevC++ 下載網址:http://0rz.tw/c50f3 (安裝後至「工具\編輯器選項」把「智慧型 Tab」取消掉。其他設定就隨便試試。) 這:程式的基本架構?   #include <stdio.h>   int main(){     return 0;   }   我們需要讓電腦做事情,因此得引入 stdio.h 這個檔案。說文解字一下,std 是 英文 standard,io 是 input/output,所以顯然 stdio.h 處理有關輸入輸出的需求。 再舉個例子好了,如果要做數學計算,可能會用到三角函數,那我們可以 #include <math.h> 引入有關數學的一些函數。接下來,故事從 main() 這個地方開始。 是:「main()」?   記得高中在幫學弟妹上課時曾有天兵誤寫成 man() 且找了好久仍找不到錯誤。總 之程式會從這裡開始,原則上由上往下一行一行跑。 一:「{ }」?   這樣講好了,「{」代表某種包含關係由此開始,「}」則代表結束。例如:   #include <stdio.h>   int main(){     printf("Hello CSIE!");     return 0;   }   其中的 printf(""); 與 return 0; 那行,都是屬於 main() 這個函數,因此被括在 main() 的大括號當中。再看個例子:   #include <stdio.h>   int main(){     int a,b;     a=50;     b=38;     if(a>=b){       printf("a >= b\n");       printf("a >= b!!!\n");     }     else{       printf("a < b\n");       printf("a < b...\n");     }   }   有流星,您看見了嗎?呃,是這樣的,printf(); 分別屬於 if 和 else,因此被 他們的大括號分別包起來。像大麥克一樣夾起來。   最後,如果 {} 括起來的內容只有一行(一個)指令,那麼除了函數以外的大括號 都是可以省略的,像:   if(a>=b)     printf("Hi all."); 首:「;」?   這東西實在非常奧義難解,為什麼有些行後面不加,有些行要加?記得初學時晚上 作夢,有位穿著白色道袍,背上一頭亮麗白髮的正妹來告訴我,如果你叫電腦做事,那 後面就加分號,不然不加。夢醒後我想了想的確有幾分道理在,像是我叫電腦印出東西 使用 printf(""); 那麼後面就得加分號,而 if(...) 又沒有讓電腦幹嘛,所以就沒有 加。再例如叫電腦把兩數相加 sum = integer1 - integer2; 後面加分號,正因為電腦 做了相加這件事。再看看萬物的起源 main() 的後面沒有分號,因為它就只是開頭,電 腦並沒有做什麼。   當然這是白髮正妹的說法,沒有實際根據,也沒有考證,就當作參考吧。 簡:縮排?   講縮排前先說一件事,C 語言的空白基本上是可以隨心所欲亂加的,只要你能愉快 。像以下的 code 是很 OK 的:   #include <stdio.h>   int                     main(){           printf("Hello CSIE!");     return 0;   }   (當然不能把不該分開的東西分開,p ri n tf ("hey hey"); 這就絕對不行。)   縮排是用空白來讓程式易讀,上面的 code 如果變成這樣想必讓人一頭霧水:   #include <stdio.h>   int main(){   int a,b;   a=50;   b=38;   if(a>=b){   printf("a >= b\n");   printf("a >= b!!!\n");   }   else{   printf("a < b\n");   printf("a < b...\n");   }   }   但很抱歉,縮排是關於個人藝術天份與美感的問題,並沒有公式存在,我只能就我 的習慣做個介紹。直接拿這 code 來改造,原則上就是:被包含的東西縮進去一格。所 以先把被 main(){} 包起來內容向內縮一個單位(可以按 Tab 鍵):   #include <stdio.h>   int main(){     int a,b;     a=50;     b=38;     if(a>=b){     printf("a >= b\n");     printf("a >= b!!!\n");     }     else{     printf("a < b\n");     printf("a < b...\n");     }   }   這樣一來就可以很明顯看出哪些東西屬於 main() 了。再來整理 if 和 else 包起 來的東西,最後就會變得像下面一樣好看易懂:   #include <stdio.h>   int main(){     int a,b;     a=50;     b=38;     if(a>=b){       printf("a >= b\n");       printf("a >= b!!!\n");     }     else{       printf("a < b\n");       printf("a < b...\n");     }   }   這裡給出一份臨時找到的 code 請試著縮排練習吧(不必管內容,練縮排就好):   #include <cstdio>   long long dp[100][2];   main(){   int T,n,i;   dp[0][0]=1;   dp[0][1]=0;   for(scanf("%d",&T);T>0;T--){   scanf("%d",&n);   for(i=1;i<=n;i++){   dp[i][0]=dp[i-1][1]*3;   dp[i][1]=dp[i-1][0]+dp[i-1][1]*2;   }   printf("%I64d\n",dp[n][0]);   }   }   結果會是這樣:   #include <cstdio>   long long dp[100][2];   main(){     int T,n,i;     dp[0][0]=1;     dp[0][1]=0;     for(scanf("%d",&T);T>0;T--){       scanf("%d",&n);       for(i=1;i<=n;i++){         dp[i][0]=dp[i-1][1]*3;         dp[i][1]=dp[i-1][0]+dp[i-1][1]*2;       }       printf("%I64d\n",dp[n][0]);     }   } - 我講完了耶。祝大家殺使徒殺得快樂。要揪團殺使徒記得找我。 接下來應該會有系列作:單的小情歌之類。敬請期待 godgunman 的妙筆。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.242.109
iForests:對了,按一下 F9 會自動存檔 + 編 + 跑 09/17 21:32
iForests:如果一直有錯誤訊息,就把 code 寄站內信給我吧 09/17 21:32
jimmyken793:推教學文 另外啟用tab字元會比較好縮排 09/17 21:33
drazi:啟用TAB字元把code丟到vim會炸Q__Q 09/17 21:34
drazi:還是我技術比較不好? 09/17 21:34
godgunman:你好快..要等我阿Orz 09/17 21:34
ming1053:dev c++的"智慧型Tab"老實說有點腦殘... 09/17 21:35
ming1053:還有版主快m啊XD 09/17 21:35
jimmyken793:會炸大概是因為tab一個就佔八格的關係吧 也不知在哪調 09/17 21:36
anfranion:_vimrc? 09/17 21:41
sa072686:這篇太強了,大推! 09/17 21:47
drazi:請愛用美麗C世界XD 09/17 21:48
sa072686:自己寫一份才是「真.強者」的浪漫(誤) 09/17 21:49
drazi:re-inventing wheel XD 是這樣拼嘛? 大數快co拉樓上@@ 09/17 21:54
iForests:就算重新發明輪胎也是男人的浪漫 09/17 21:54
ianchou821:給9f dve的話 工具->編輯器選項->右下角 Tab Size 09/17 22:23
ianchou821:但要把智慧型tab點掉 09/17 22:23
drazi:這招好XD 去試試XD 09/17 22:32
LoganChien:VIM 的話可以用 set ts=4 之類的 09/18 00:01
LoganChien::set ts=4 09/18 00:02
LoganChien:我個人是習慣寫到 _vimrc 去 09/18 00:02
drazi:受教(拜 09/18 00:03
LoganChien:_vimrc 一般會在 ?:\Program Files\Vim 之中。 09/18 00:05
LoganChien:整理 code 可以用 大V,然後按下 = 09/18 00:06
LoganChien:不過,我個人覺得 Vim 沒有辦法整理的很好 09/18 00:07
LoganChien:聽說還有一個軟體叫 AStyler(?) 也可以幫忙整理 09/18 00:08
LoganChien:Code::Blocks 有他的 GUI 09/18 00:08
LoganChien:不過強烈建議一開始就養成縮排的習慣,程式寫錯的機率 09/18 00:09
LoganChien:就會降低,也比較能專心於演算法邏輯上。 09/18 00:10
ming1053:要用vim不如就直接用linux...何苦裝在windows裡面 09/18 00:22
LoganChien:~/_vimrc 嗎?我不確定!逃... (我其實是太懶了) 09/18 01:00
LoganChien:噓我自己,在 Unix 下是 ~/.vimrc 09/18 02:18
LoganChien:不小心噓到這一篇文章(C Begins),推回來。(我不熟BBS) 09/18 02:25
lmr3796:總覺得不把他推到爆對不起良心偏偏卻做不到 09/18 19:47
iForests:樓上抱歉你丟我水球時我在打球 Orz 09/18 22:06