C 語言簡介 - 1
認識 C 語言 C 的由來 1972年貝爾實驗室以 B 語言為基礎,並持續改善。加入了資料型態的觀念及其它功能,並且將它發表為「C語言」。
認識 C 語言 C的特色 C 語言具有高階特性,另外,C 語言的程式碼中允許開發者加入低階的組合語言程式,因而被稱之為中階語言。 可以直接處理低階的記憶體。 是一種編譯式語言。
C 程式結構 標頭檔 全域變數宣告 函數的原型(prototype)宣告 int main(參數列) { 程式敘述; } 傳回型態 函數名稱1(參數列) { ………
C 程式結構範例
C 程式結構範例
C 程式寫作風格 程式敘述 (statement) 程式區塊 (block) 程式註解 (comment) 太長的程式碼 程式碼縮排
程式敘述 C程式是由程式敘述(Statements)組成,一列程式敘述如同英文的一個句子,內含多個運算式、運算子或關鍵字,如下所示: int balance = 1000; interest = balance * rate; printf("第一個C應用程式\n"); ; 上述第1列程式碼是變數宣告,第2列是指定敘述的運算式,第3列是呼叫標準函式庫的printf()函數,最後是空程式敘述(Null Statement)。
程式敘述-結束符號 「;」程式敘述結束符號 C語言的「;」符號代表程式敘述的結束,告訴編譯程式已經到達程式敘述的最後,換句話說,使用「;」符號可以在同一列程式碼撰寫多個程式敘述,如下所示: balance = 10000; rate = 0.04; interest = balance * rate;
Question 編譯程式?
程式區塊 程式區塊(Blocks)是由多個程式敘述組成,使用「{」和「}」符號包圍,如下所示: int main(void) { printf("第一個C程式\n"); getchar(); return 0; } 上述main()主程式的程式碼部分是程式區塊,在C語言的流程控制敘述和函數都擁有程式區塊。
程式註解 - ANSI-C 程式註解是程式中十分重要的部分,因為良好註解文字不但能夠了解程式目的,並且在程式維護上,也可以提供更多的資訊。 /* 程式範例: Example.c */ 上述註解文字是位在「/*」和「*/」符號中的文字內容。C語言的註解可以跨很多列,如下所示: /* --------------------------- 程式範例: Example.c ------------------------------ */
程式註解 C99 可以使用C++語言的註解方式,即在程式中以「//」符號開始的列,或是程式列位在「//」符號後的文字內容都是註解文字,如下所示: // 顯示訊息 printf("第一個C應用程式\n"); // 顯示訊息
太長的程式碼 C語言的程式碼列太長並不容易閱讀,我們可以將它分成兩列來編排,如果程式碼需要分成兩列,直接分割即可,如下所示: result = compare((void *)ptr, (void *)ptr1, (int (*) (void *, void *))numcmp); 如果程式碼需要連續列,可以在程式碼列的最後加上「\」符號(Line Splicing),將程式碼分成數列,如下所示: sum = scores[0] + scores[1] + \ scores[2] + scores[3] + \ scores[4];
程式碼縮排 在撰寫程式時記得使用縮排編排程式碼,適當的縮排程式碼,可以讓程式更加容易閱讀,因為可以反應出程式碼的邏輯和迴圈架構,例如:迴圈區塊的程式碼縮幾格編排,如下所示: for ( i = 0; i <= 10; i++ ) { printf(“%d\n”, i); total = total + i; }
變數、常數與資料型態 C 語言的識別字 變數的宣告與初值 指定敘述 C 語言的資料型態 定義符號常數
C 語言的識別字-說明 識別字名稱(Identifier Names)是指 C語言的變數、函數、標籤和各種使用者自訂資料型態的名稱。 程式設計者在撰寫程式時,需要替這些識別字命名。
C 語言的識別字-命名語法 「識別字」(Identifiers),使用英文字母開頭,不限長度,包含字母、數字和底線「_」字元組成的名稱。 C語言的識別字至少前31個字元是有效字元。名稱區分英文字母的大小寫,例如:count、Count和COUNT屬於不同的識別字。 名稱不能使用 C 語法的「關鍵字」(Keywords)或稱為「保留字」(Reserved Words)。 名稱擁有其有效「範圍」(Scope),在有效範圍的程式碼中名稱必需是唯一的。
Question scope?
C 語言識別字-命名範例與關鍵字 C語言的關鍵字
C 語言的識別字-慣用的命名原則 C 語言名稱的命名可以使用一些慣用的命名原則。例如:CamelCasing命名法是第一個英文字小寫之後為大寫,變數、函數的命名也可以使用不同英文字母大小寫的組合,如下
變數的宣告 在C語言提供四種基本資料型態:char、int、float和double,可以指定變數儲存的資料是字元、整數、單精度浮點數 & 雙精度浮點數值,如下: int balance; 上述程式碼宣告整數變數,資料型態為整數 int(型態屬性),名稱為 balance(名稱屬性),儲存的變數值是整數沒有小數點。 C語言可以在一列程式碼同時宣告多個相同資料型態的變數,此時各變數名稱請使用「,」逗號分隔,如下所示: int i, j, balance;
Question 字元、整數、單精度浮點數 & 雙精度浮點數值,有 fu 嗎?
變數的初始值 C 語言變數初始值範例,如下所示: int balance = 1000; int i = 20; double a, b = 123.23; 上述程式碼宣告變數 a 和 b,但是只指定變數 b 的初值。
C 語言的指定敘述 C語言指定敘述的範例,如下所示: int size, size1, size2; size = 35; 上述程式碼宣告 3 個整數型態的變數後,使用指定敘述指定變數值。
C 語言的指定敘述 在指定敘述「=」等號左邊的變數稱為「左值」(Lvalue),表示變數的位址(Address)屬性,如果變數在等號的右邊稱為「右值」(Rvalue),這是變數值(Value)屬性。
Question 位址?
C 語言的指定敘述 size2 = size1; 如果指定敘述的右邊是變數,如下所示: 右邊變數 size1 是右值,取出的是變數值,所以指定敘述是將變數size1的「值」存入變數size2的記憶體「位址」,即1008。
C 語言的指定敘述 變數 size2 的值更改成為變數size1的值,即57,如下圖示:
C語言的多重指定敘述 可以在同一個指定敘述同時指定多個變數的值,如下所示: size = size1 = size2 = 50; 上述指定敘述可以同時將3個變數值指定為50。
C 語言的資料型態 C 語言的資料型態分為「基本」(Basic Types)和「延伸」(Derived Types)兩種資料型態,如下所示: 基本資料型態:C 語言的變數一共有char、int、float、double和void基本資料型態。 延伸資料型態:Later。
C語言的基本資料型態-範圍
字元資料型態-Escape逸出字元
void 資料型態 void資料型態在 C 語言是一種特殊資料型態,代表一個並不存在的值
定義符號常數-#define指令 #define指令 C程式可以使用 #define 指令定義符號常數,如下所示: #define PI 3.1415926 上述程式碼並不是指定敘述,所以沒有等號,在最後也不用分號。 簡單的說,當在 C 程式中出現 PI 名稱時,就將它使用3.1415926取代,PI則是一個識別字。
定義符號常數-const常數修飾子 在C程式也可以使用 const 常數修飾子來建立常數,我們只需在宣告變數前使用const 常數修飾子,就可以建立常數,如下: const double e = 2.71828182845; 上述程式碼表示變數 e 的值不能更改。
C語言的控制台輸入與輸出-基礎 電腦執行的應用程式通常都會與使用者進行互動,程式從使用者取得電腦周邊裝置輸入的資料,然後將執行結果在電腦輸出裝置上顯示。 在 C 語言的控制台應用程式(Console Application)最常使用的標準輸入裝置是鍵盤,標準輸出裝置是電腦螢幕,即所謂的控制台輸入與輸出(Console Input and Output,簡稱Console I/O),如下圖所示:
C 語言的標準輸入與輸出 C語言的輸入與輸出功能並非C語言本身的功能,這些函數都是 C 語言標準函式庫提供的函數,定義在<stdio.h>或<conio.h>標頭檔的函數,屬於ANSI標準的 C 語言函式庫。 ???
取得單一字元 getchar() 在 C 程式可以使用 getchar() 函數從標準輸入裝置,通常是指鍵盤讀取使用者輸入的字元,如下所示: 上述程式碼傳回值是整數 int,如果有錯誤傳回EOF。 在讀入字元後,我們可以使用 putchar() 函數將字元輸出到標準輸出裝置,通常是輸出到螢幕顯示,如下所示: putchar(c);
使用 scanf() 函數讀取數值資料 在 scanf() 函數的格式字串是使用格式字元判斷輸入哪一種資料型態,函數的傳回值是整數 int,如果資料讀取成功,傳回輸入的資料數,如果失敗傳回 0。例如:使用格式字元 %d 和 %f 讀取整數和浮點數值,如下所示: scanf("%d", &age); scanf("%f", &score); 第1列程式碼的格式字串內含 %d 表示輸入整數,第2個參數使用「&」取址運算子取得變數的記憶體位址,第2列的程式碼是使用 %f 格式字元讀取浮點數。
格式字元 在 scanf() 函數的格式字串一定需要格式字元,一個格式字元可以對應一種資料型態,scanf()函數的格式字元,如下表所示:
讀取多種不同型態的資料 在同一個 scanf() 函數可以讀取多筆不同資料型態的資料,如下所示: scanf("%f,%d,%f", &x, &y, &z); 上述程式碼的格式字串擁有%f、%d和%f一共3個格式字元,之後也擁有對應的3個變數&x、&y和&z讀取3筆資料,分別是浮點數、整數和浮點數資料,如下圖所示:
printf() 輸出函數的格式字元 printf()函數也是使用格式字串輸出指定資料型態的變數資料,內含「%」符號開始的格式字元,如下所示: printf("a(d) = %d\n", a); printf("b(d) = %d c(d) = %d\n", b, c); 上述程式碼使用格式字元%d輸出整數變數a、b和c,如下圖所示:
printf()函數的格式字元-種類
printf()函數的最小欄寬-範例
printf()函數的精確度-範例
Dev C++安裝與使用 http://www.bloodshed.net/dev/devcpp.html
Dev C++安裝與使用 第一個C練習程式碼 : helloWorld.c #include <stdio.h> int main(void) { printf(“Hello World"); }
Dev C++安裝與使用 第二個 C 練習程式碼 #include <stdio.h> #include <stdlib.h> int main(void) { int no; no=3; printf("There are %d pandas in Taipei.\n",no); /*輸出臺北有三隻熊貓*/ system("PAUSE"); return 0; }
Homework 下一次上課時抽驗 3~5 位同學,並於上課現場寫一個簡單之 C 程式,包括:表頭、變數宣告、由鍵盤讀入數個值後做簡單的加與減運算 (或找出最大/小值),然後由螢幕輸出結果 同學必須能說明每個程式敘述的意義 所有同學都正確,全班加學期分數 1 分 任一同學未能完成,扣該同學學期分數 2 分