作者iForests (森林)
看板b97902HW
標題[計程] C Begins(計程:開戰時刻)
時間Wed Sep 17 21:29:57 2008
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