正文12pt、數字小標題14pt加粗、數字大標題16pt加粗、中文小標題18pt加粗、中文大標題20pt加粗、章標題24pt加粗;
C語言基礎
一、為什麼要使用 C語言?
C 語言最初是用於系統開發工作,特別是組成作業系統的程式。由於 C 語言所產生的程式碼執行速度與組合語言編寫的程式碼執行速度幾乎一樣,所以採用 C 語言作為系統開發語言。下面列舉幾個使用 C 的例項:
l 作業系統
l 語言編譯器
l 彙編器
l 文字編輯器
l 印表機
l 網路驅動器
l 現代程式
l 資料庫
l 語言直譯器
l 實體工具
二、基礎知識
例項
#include <stdio.h>
int main(){
/* 我的第一個 C 程式 */
printf("Hello, World! \n");
return 0;}
1.定義檔案頭#include <stdio.h>。
所有的 C 語言程式都需要包含 main() 函式。 程式碼從 main() 函式開始執行。
2.int main()和void main()
int main()返回整形變數,void main()什麼都不用返回,main是C的主程式。
3.大括號“{}”
它是程式塊的分界符,也就是一段程式的開始和結束。比如:每個函式的開始,類的定義,結構的定義,列舉的定義,if,for,do,while,switch case等。
4.printf("輸出格式型別",變數)
l printf()函式是格式化輸出函式, 一般用於向標準輸出裝置按規定格式輸出資訊。
l printf()函式的呼叫格式為: printf("<格式化字串>", <參量表>)。
l 格式輸出,它是c語言中產生格式化輸出的函式(在 stdio.h 中定義)。用於向終端(顯示器、控制檯等)輸出字元。格式控制由要輸出的文字和資料格式說明組成。要輸出的的文字除了可以使用字母、數字、空格和一些數字符號以外,還可以使用一些轉義字元表示特殊的含義。
l 作用:在c語言中產生格式化輸出的函式(定義在 stdio.h 中),其向終端(顯示器、控制檯等)輸出字元。
5. return 0; 語句用於表示退出程式。
6./* ... */ 用於註釋說明。
三、程式結構
C 程式主要包括以下部分:
l 前處理器指令
l 函式
l 變數
l 語句 & 表示式
l 註釋
四、基本語法
C 的令牌(Tokens)
C 程式由各種令牌組成,令牌可以是關鍵字、識別符號、常量、字串值,或者是一個符號。例如,下面的 C 語句包括五個令牌:
1.分號
在 C 程式中,分號是語句結束符。也就是說,每個語句必須以分號結束。它表明一個邏輯實體的結束。
例如,下面是兩個不同的語句:
2. 註釋
註釋就像是 C 程式中的幫助文字,它們會被編譯器忽略。它們以 /* 開始,以字元 */ 終止,如下所示:
3. 識別符號
C語言識別符號是用來標識變數、函式,或任何其他使用者自定義專案的名稱。一個識別符號以字母 A-Z 或 a-z 或下劃線 _ 開始,後跟零個或多個字母、下劃線和數字(0-9)。
C語言識別符號內不允許出現標點字元,比如 @、$ 和 %。C 是區分大小寫的程式語言。因此,在 C 中,Manpower 和 manpower 是兩個不同的識別符號。下面列出幾個有效的識別符號:
mohd zara abc move_name a_123
myname50 _temp j a23b9 retVal
4.關鍵字
auto | else | long | switch |
break | enum | register | typedef |
case | extern | return | union |
char | float | short | unsigned |
const | for | signed | void |
continue | goto | sizeof | volatile |
default | if | static | while |
do | int | struct | _Packed |
double |
|
|
|
5. 空格
只包含空格的行,被稱為空白行,可能帶有註釋,C語言編譯器會完全忽略它。
在C語言中,空格用於描述空白符、製表符、換行符和註釋。空格分隔語句的各個部分,讓編譯器能識別語句中的某個元素(比如 int)在哪裡結束,下一個元素在哪裡開始。因此,在下面的語句中:
int age;
在這裡,int 和 age 之間必須至少有一個空格字元(通常是一個空白符),這樣編譯器才能夠區分它們。另一方面,在下面的語句中:
fruit = apples + oranges; // 獲取水果的總數
fruit 和 =,或者 = 和 apples 之間的空格字元不是必需的,但是為了增強可讀性,您可以根據需要適當增加一些空格。
五、資料型別
在 C 語言中,資料型別指的是用於宣告不同型別的變數或函式的一個廣泛的系統。變數的型別決定了變數儲存佔用的空間,以及如何解釋儲存的位模式。
1.資料型別
序號 | 型別與描述 |
1 | 基本型別:它們是算術型別,包括兩種型別:整數型別和浮點型別。 |
2 | 列舉型別:它們也是算術型別,被用來定義在程式中只能賦予其一定的離散整數值的變數。 |
3 | void 型別:型別說明符 void 表明沒有可用的值。 |
4 | 派生型別:它們包括:指標型別、陣列型別、結構型別、共用體型別和函式型別。 |
2.整數型別
型別 | 儲存大小 | 值範圍 |
char | 1 位元組 | -128 到 127 或 0 到 255 |
unsigned char | 1 位元組 | 0 到 255 |
signed char | 1 位元組 | -128 到 127 |
int | 2 或 4 位元組 | -32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647 |
unsigned int | 2 或 4 位元組 | 0 到 65,535 或 0 到 4,294,967,295 |
short | 2 位元組 | -32,768 到 32,767 |
unsigned short | 2 位元組 | 0 到 65,535 |
long | 4 位元組 | -2,147,483,648 到 2,147,483,647 |
unsigned long | 4 位元組 | 0 到 4,294,967,295 |
例項
#include <stdio.h>
#include <limits.h>
int main()
{
printf("int 儲存大小 : %lu \n", sizeof(int));
return 0;
}
3. 浮點型別
型別 | 儲存大小 | 值範圍 | 精度 |
float | 4 位元組 | 1.2E-38 到 3.4E+38 | 6 位小數 |
double | 8 位元組 | 2.3E-308 到 1.7E+308 | 15 位小數 |
long double | 16 位元組 | 3.4E-4932 到 1.1E+4932 | 19 位小數 |
例項
#include <stdio.h>
#include <float.h>
int main()
{
printf("float 儲存最大位元組數 : %lu \n", sizeof(float));
printf("float 最小值: %E\n", FLT_MIN );
printf("float 最大值: %E\n", FLT_MAX );
printf("精度值: %d\n", FLT_DIG );
return 0;
}
4. void 型別
序號 | 型別與描述 |
1 | 函式返回為空 例如 void exit (int status); |
2 | 函式引數為空 例如 int rand(void); |
3 | 指標指向 void 例如,記憶體分配函式 void *malloc( size_t size ); 返回指向 void 的指標,可以轉換為任何資料型別。 |
六、變數
變數其實只不過是程式可操作的儲存區的名稱。C語言中每個變數都有特定的型別,型別決定了變數儲存的大小和佈局,該範圍內的值都可以儲存在記憶體中,運算子可應用於變數上。
變數的名稱可以由字母、數字和下劃線字元組成。它必須以字母或下劃線開頭。大寫字母和小寫字母是不同的,因為 C語言 是大小寫敏感的。
型別 | 描述 |
char | 通常是一個八位位元組(一個位元組)。這是一個整數型別。 |
int | 對機器而言,整數的最自然的大小。 |
float | 單精度浮點值。 |
double | 雙精度浮點值。 |
void | 表示型別的缺失。 |
1.變數定義
變數定義就是告訴編譯器在何處建立變數的儲存,以及如何建立變數的儲存。變數定義指定一個資料型別,幷包含了該型別的一個或多個變數的列表。
例項
extern int d = 3, f = 5; // d 和 f 的宣告, 這就是單純的宣告
int d = 3, f = 5; // 定義並初始化 d 和 f
byte z = 22; // 定義並初始化 z
char x = 'x'; // 變數 x 的值為 'x'
2. 變數宣告
變數宣告向編譯器保證變數以指定的型別和名稱存在,這樣編譯器在不需要知道變數完整細節的情況下也能繼續進一步的編譯。變數宣告只在編譯時有它的意義,在程式連線時編譯器需要實際的變數宣告。
變數的宣告有兩種情況:
l 一種是需要建立儲存空間的。
例如:int a 在宣告的時候就已經建立了儲存空間。
l 另一種是不需要建立儲存空間的,通過使用extern關鍵字宣告變數名而不定義它。
例如:extern int a 其中變數 a 可以在別的檔案中定義的。
l 除非有extern關鍵字,否則都是變數的定義。
例項
#include <stdio.h> // 變數宣告
extern int a, b;
extern int c;
extern float f;
int main ()
{ /* 變數定義 */
int a, b;
int c;
float f;
/* 初始化 */
a = 10;
b = 20;
c = a + b;
printf("value of c : %d \n", c);
f = 70.0/3.0;
printf("value of f : %f \n", f);
return 0;
}
結果
value of c : 30
value of f : 23.333334
3. 左值(Lvalues)和右值(Rvalues)
C語言中有兩種型別的表示式:
左值(lvalue):指向記憶體位置的表示式被稱為左值(lvalue)表示式。左值可以出現在賦值號的左邊或右邊。
右值(rvalue):術語右值(rvalue)指的是儲存在記憶體中某些地址的數值。右值是不能對其進行賦值的表示式,也就是說,右值可以出現在賦值號的右邊,但不能出現在賦值號的左邊。
變數是左值,因此可以出現在賦值號的左邊。數值型的字面值是右值,因此不能被賦值,不能出現在賦值號的左邊。下面是一個有效的語句:
int g = 20;
但是下面這個就不是一個有效的語句,會生成編譯時錯誤:
10 = 20;
七、常量
所謂常量,即在程式執行時,不會被修改的量。一般分為兩種,一種是字面常量;另外一種是符號常量,即用一個識別符號來表示常量,一般使用const來指明;
常量是固定值,在程式執行期間不會改變。這些固定的值,又叫做字面量。
常量可以是任何的基本資料型別,比如整數常量、浮點常量、字元常量,或字串字面值,也有列舉常量。
常量就像是常規的變數,只不過常量的值在定義後不能進行修改。
1. 整數常量
整數常量可以是十進位制、八進位制或十六進位制的常量。字首指定基數:0x 或 0X 表示十六進位制,0 表示八進位制,不帶字首則預設表示十進位制。
整數常量也可以帶一個字尾,字尾是 U 和 L 的組合,U 表示無符號整數(unsigned),L 表示長整數(long)。字尾可以是大寫,也可以是小寫,U 和 L 的順序任意。
212 /* 合法的 */
215u /* 合法的 */
0xFeeL /* 合法的 */
078 /* 非法的:8 不是八進位制的數字 */
032UU /* 非法的:不能重複字尾 */
85 /* 十進位制 */
0213 /* 八進位制 */
0x4b /* 十六進位制 */
30 /* 整數 */
30u /* 無符號整數 */
30l /* 長整數 */
30ul /* 無符號長整數 */
2. 浮點常量
浮點常量由整數部分、小數點、小數部分和指數部分組成。您可以使用小數形式或者指數形式來表示浮點常量。
當使用小數形式表示時,必須包含整數部分、小數部分,或同時包含兩者。當使用指數形式表示時, 必須包含小數點、指數,或同時包含兩者。帶符號的指數是用 e 或 E 引入的。
3.14159 /* 合法的 */
314159E-5L /* 合法的 */
510E /* 非法的:不完整的指數 */
210f /* 非法的:沒有小數或指數 */
.e55 /* 非法的:缺少整數或分數 */
3. 字元常量
字元常量是括在單引號中,例如,'x' 可以儲存在 char 型別的簡單變數中。
字元常量可以是一個普通的字元(例如 'x')、一個轉義序列(例如 '\t'),或一個通用的字元(例如 '\u02C0')。
在 C語言 中,有一些特定的字元,當它們前面有反斜槓時,它們就具有特殊的含義,被用來表示如換行符(\n)或製表符(\t)等。
轉義序列 | 含義 |
\\ | \ 字元 |
\' | ' 字元 |
\" | " 字元 |
\? | ? 字元 |
\a | 警報鈴聲 |
\b | 退格鍵 |
\f | 換頁符 |
\n | 換行符 |
\r | 回車 |
\t | 水平製表符 |
\v | 垂直製表符 |
\ooo | 一到三位的八進位制數 |
\xhh . . . | 一個或多個數字的十六進位制數 |
例項
#include <stdio.h>
int main()
{
printf("Hello\tWorld\n\n");
return 0;
}
4. 字串常量
字串字面值或常量是括在雙引號 "" 中的。一個字串包含類似於字元常量的字元:普通的字元、轉義序列和通用的字元。您可以使用空格做分隔符,把一個很長的字串常量進行分行。
例項
"hello, dear"
"hello, \
dear"
"hello, " "d" "ear"
5. 定義常量
在 C語言 中,有兩種簡單的定義常量的方式:
l 使用 #define 前處理器。
l 使用 const 關鍵字。
6. #define 前處理器
#define identifier value
例項
#include <stdio.h>
#define LENGTH 10
#define WIDTH 5
#define NEWLINE '\n'
int main()
{
int area;
area = LENGTH * WIDTH;
printf("value of area : %d", area);
printf("%c", NEWLINE);
return 0;
}
結果:value of area : 50
7.const 關鍵字
const type variable = value;
例項
#include <stdio.h>
int main()
{
const int LENGTH = 10;
const int WIDTH = 5;
const char NEWLINE = '\n';
int area;
area = LENGTH * WIDTH;
printf("value of area : %d", area);
printf("%c", NEWLINE);
return 0;
}
結果:value of area : 50