C 複習筆記-001
前言
C 的基本語法。
學習資料:C 語言教學手冊
程式碼解析
printf()函數的功用是印出括號內所包含的文字。
C的註解,是以「∕*」與「*∕」記號來包圍註解文字。註解僅供程式設計師閱讀,編譯器並不會對它做編譯,所以不會有任何動作。
#include是告訴電腦要把stdio.h這個檔案,”含括“進來。
stdio是「standard input/output」的縮寫,即標準輸入與輸出,凡是C語言裡有關輸入與輸出函數的格式,均是定義在這個檔案裡。
stlib是「standard library」的縮寫,即標準函數庫,system()函數的格式即定義在stlib.h中。
主函數main(),其定義的範圍從左大括號({)開始,到右大括號(})為止。因為它是程式開始執行的起點,所以每一個獨立的C程式一定要有main()函數才能執行。
main()函數前的int是表示main()函數有一個回傳值,而回傳的型態為整數(int為integer的縮寫)。
main()函數括號內的void則是表示main()函數不需要傳入任何的引數。
C語言在使用變數之前必須先宣告其型態。
「\n」是換行的控制字元,它告訴printf()函數必須在印出字串之後換行,也就是把游標移到下一行的開端。
使用system()函數來呼叫系統指令pause,使得程式執行到某個階段便先暫停。pause指令會在視窗上印出”請按任意鍵繼續…“字串,只要使用者在鍵盤上按下任意鍵,程式便會繼續執行下去。
可由main()函數回傳整數0,此數值由系統接收。習慣上是以回傳”0”代表程式順利執行完成,沒有出任何差錯;若回傳其他整數,則代表程式出了某種狀況。
因回傳值0為整數型態,所以main()函數必須指明回傳值的型態為int。
標頭檔
會被稱為標頭檔(Header file),是因為這些檔案它們被含括在程式碼的起頭處。
其含括敘述如下:
#include <header file>
當C在編譯時,即會把這行敘述以整個標頭檔的內容來取代。
在C語言裡,性質相近的函數,其格式的宣告會蒐錄在同一個標頭檔裡。而且標頭檔也已經把標準函數庫裡,各函數的宣告格式都撰寫好。
若含括了不必要的標頭檔是否會增加編譯後的程式大小呢?答案是”否”。因為編譯器只會依據撰寫的程式內容,到所含括進來的標頭檔裡去擷取需要的資訊,沒有用到的資訊則不屬於該程式的範圍,就不會增加程式碼的大小。
#include是C語言前置處理器(pre-processor directive)裡的一個指令,而它會在程式編譯之前執行。
C程式是由許多函數(function)組合而成。
main()函數與printf()函數均是C語言所提供的標準函數。
每一個C程式必須有一個main()函數,而且只能有一個。
以main()函數而言,從左大括號({)開始,到右大括號(})結束,此區間的程式碼稱為main()函數的本體(body)。
在C語言裡,一個用來完成特定工作的程式片段稱為區塊(block)。
變數
變數在程式語言中扮演了最基本的角色,它可用來存放資料。使用變數之前必須先宣告它所欲儲存的資料型態,如此才能讓編譯器配置適合的記憶空間給它。
變數宣告,敘述如下:
int num; /* 宣告num為整數變數 */
其中int為C語言的關鍵字(keyword)。
若是想要同時宣告數個整數變數時,可以分別宣告;或者是把它們都寫在同一個敘述中,但每個變數之間必須以逗號(,)分開,如下:
int num, num1, num2; /* 同時宣告num, num1, num2為整數變數 */
變數的資料型態,有字元(char)、整數(int)、長整數(long)、短整數(short)、浮點數(float)、倍精度浮點數(double)、等型態。
除了型態外,還可以決定變數為「有號(sign)」或是「無號(unsigned)」;有號的變數可以存放正值或負值,但無號變數只能存放正值。
一般來說,當宣告變數後,若是沒有特別指定變數為「無號」時,C的編譯程式都視這些變數為「有號」。
變數的名稱,通常會以變數所代表的意義來取名。但不能使用到C語言的關鍵字。因為關鍵字是C語言預先定義好的識別字,它有固定用途。
除此之外,在決定變數名稱時,盡量避免過長的變數名稱,因為部分的編譯器可能會限制變數名稱的長度。
變數名稱的字元可以是英文字母、數字或底線,但名稱中不能有空白字元,而且第一個字元不能是數字。
變數設值
在宣告變數之後,如果想要為變數設值,可以用等號運算子(=)來設定。
設值方式有兩種;
- 方式 1:在宣告的時候設值
- 方式 2:宣告後再設值
為什麼要宣告變數?
C語言必須在main()函數開始時就宣告變數,因為這樣子才方便管理那些被宣告的變數。
格式化輸出函數 printf()
printf()函數係以格式化的輸出方式,將函數中的引數列印到螢幕上,其中引數與引數之間必須以逗號(,)做為區隔。
printf()函數中若有「%d」符號是用來告訴編譯器,把整數變數的值以十進位的格式輸出到這個位置。
識別字及關鍵字
為C語言裡最基本的元件。
識別字(identifier)
在C語言中,變數與函數的名稱均是識別字。
關鍵字(keyword)
識別字是開發者用來命名變數或函數的文字(由英文大小寫字母、數字或底線所組合而成),而關鍵字則是編譯程式本身所使用的識別字。
自行定義的變數或函數的名稱都不能與C語言的關鍵字相同。
C語言常用關鍵字
| auto | break | case | char | const |
|---|---|---|---|---|
| continue | default | defined | do | double |
| else | enum | extern | float | for |
| goto | if | int | long | register |
| return | short | signed | sizeof | static |
| struct | switch | typedef | union | unsigned |
| void | while | volatile |
除錯
發現程式的錯誤並加以改正的過程稱為除錯(debug)。
通常錯誤可分為;語法錯誤(syntax error)與語意錯誤(semantic error)兩種。
語法錯誤就是程式碼的語法不符合C語言的規定。當編譯程式發現程式語法有錯誤時,會標示出錯誤的位置,並指出錯誤的原因,如此只要根據編譯程式所給予的訊息便可更正錯誤。
當程式本身的語法沒有錯誤,但是執行結果卻不符合我們的要求,此時可能犯了語意上的錯誤,也就是程式邏輯上的錯誤。而編譯程式是無法找出語意錯誤的。
提高程式的可讀性
- 在程式中加上註解
- 為變數取個有意義的名稱
- 保持每一行只有一個敘述
- 適當的空行
- 程式碼使用固定字距;採用固定字距(fixed spaced)的字體來表示,而且不要用斜體字。
- 將程式碼縮排;在程式中利用空白鍵或是Tab鍵,將程式敘述縮排(indent)。同一個層級的程式碼使用空白鍵或Tab鍵將敘述向內排齊。而程式裡使用到的空白鍵或Tab鍵皆不會影響到編譯器的編譯動作。而C語言是依據分號與大括號來判定敘述到何處結束。