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語言預先定義好的識別字,它有固定用途。
除此之外,在決定變數名稱時,盡量避免過長的變數名稱,因為部分的編譯器可能會限制變數名稱的長度。
變數名稱的字元可以是英文字母、數字或底線,但名稱中不能有空白字元,而且第一個字元不能是數字。

變數設值
在宣告變數之後,如果想要為變數設值,可以用等號運算子(=)來設定。
設值方式有兩種;

為什麼要宣告變數?
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語言的規定。當編譯程式發現程式語法有錯誤時,會標示出錯誤的位置,並指出錯誤的原因,如此只要根據編譯程式所給予的訊息便可更正錯誤。

當程式本身的語法沒有錯誤,但是執行結果卻不符合我們的要求,此時可能犯了語意上的錯誤,也就是程式邏輯上的錯誤。而編譯程式是無法找出語意錯誤的。

提高程式的可讀性

  1. 在程式中加上註解
  2. 為變數取個有意義的名稱
  3. 保持每一行只有一個敘述
  4. 適當的空行
  5. 程式碼使用固定字距;採用固定字距(fixed spaced)的字體來表示,而且不要用斜體字。
  6. 將程式碼縮排;在程式中利用空白鍵或是Tab鍵,將程式敘述縮排(indent)。同一個層級的程式碼使用空白鍵或Tab鍵將敘述向內排齊。而程式裡使用到的空白鍵或Tab鍵皆不會影響到編譯器的編譯動作。而C語言是依據分號大括號來判定敘述到何處結束。