| 08  前置處理器與標準函數

33
C 語語語語語語 08 語語語語語語語語語語

description

| 08  前置處理器與標準函數. 8.1 前置處理器. | 前置處理器與相關指令. 8.1.1 關於前置處理器. 前置處理器是程式開始之前的一段區塊,指令 #include 指定含括的標頭檔被引用進來成為程式的一部份。 前置處理器指令除了 #inclde ,還有 #define 指令與條件式編譯 #ifdef 指令。 前置處理器可以讓我們避免重複開發,簡化程式的開發與提升程式碼的使用效率,降低程式維護的難度。. | . #define 指令 >>. 8.1 前置處理器. | #define 指令. 8.1.2 #define. - PowerPoint PPT Presentation

Transcript of | 08  前置處理器與標準函數

Page 1: | 08  前置處理器與標準函數

C 語言入門經典

| 08  前置處理器與標準函數

Page 2: | 08  前置處理器與標準函數

C 語言入門經典   #define 指令 >> | 

|前置處理器與相關指令8.1 前置處理器

8.1.1 關於前置處理器

• 前置處理器是程式開始之前的一段區塊,指令 #include 指定含括的標頭檔被引用進來成為程式的一部份。

• 前置處理器指令除了 #inclde ,還有 #define 指令與條件式編譯 #ifdef 指令。

• 前置處理器可以讓我們避免重複開發,簡化程式的開發與提升程式碼的使用效率,降低程式維護的難度。

Page 3: | 08  前置處理器與標準函數

C 語言入門經典

2

1

 範例:定義 PI >> << 前置處理器與相關指令  

| #define 指令8.1 前置處理器

8.1.2 #define

#define dname 程式元素

• #define 是一種巨集指令,提供替代指令的功能,在標頭檔預先定義各種程式元素,並以特定識別名稱命名。

• 當程式中要使用到包含常數、字串,甚至一段程式碼的特定內容,可以直接透過定義的名稱進行引用替代原有的內容,簡化程式碼的撰寫工作。

dname 是用來取代程式元素的識別名稱。 例子:以 PI 的名稱定義以取代難讀的數值 3.14 。

Page 4: | 08  前置處理器與標準函數

C 語言入門經典

2

1

 範例:定義函數內容 >> << #define 指令  

|範例:定義 PI

半徑 10 的圓形面積等於 314.00

10 *10*3.14

3.14

8.1 前置處理器

8.1.2 #define

Page 5: | 08  前置處理器與標準函數

C 語言入門經典

3

2

1

 範例:定義內建符號 >> << 範例:定義 PI   

|範例:定義函數內容

Hello, Tim歡迎學習 C 語言

Tim

8.1 前置處理器

8.1.2 #define

Page 6: | 08  前置處理器與標準函數

C 語言入門經典  範例: #define 指令的定義衝突 >> << 範例:定義函數內容  

|範例:定義內建符號8.1 前置處理器

8.1.2 #define

2

1

Page 7: | 08  前置處理器與標準函數

C 語言入門經典  範例: #define 指令的錯誤 >> << 範例:定義內建符號  

|範例:# define 指令的定義衝突8.1 前置處理器

8.1.3 #define 的問題

Page 8: | 08  前置處理器與標準函數

C 語言入門經典

5

4

3

2

1

 標頭檔編譯行為 >> << 範例: #define 指令的定義衝突  

|範例:# define 指令的錯誤

doma(a,b):5domb(a,b):8

1+1 2+2

* =>1+2+2=>5

(1+1)(2+2)

* =>2*4=>8

8.1 前置處理器

8.1.3 #define 的問題

Page 9: | 08  前置處理器與標準函數

C 語言入門經典   stdio.h >> << 範例: #define 指令的錯誤  

8.1 前置處理器

8.1.4 #include

|標頭檔編譯行為

Page 10: | 08  前置處理器與標準函數

C 語言入門經典  範例:自訂標頭檔 >> << 標頭檔編譯行為  

| stdio.h8.1 前置處理器

8.1.4 #include

C:\Dev-Cpp\include

Page 11: | 08  前置處理器與標準函數

C 語言入門經典  範例:含括自訂標頭檔 >> << stdio.h   

|範例:自訂標頭檔8.1 前置處理器

8.1.4 #include

Page 12: | 08  前置處理器與標準函數

C 語言入門經典   #include 指令特性 >> << 範例:自訂標頭檔  

|範例:含括自訂標頭檔

 

10*10*3.14

8.1 前置處理器

8.1.4 #include

4

3

2

1

Page 13: | 08  前置處理器與標準函數

C 語言入門經典  範例:使用 math.h >> << 範例:含括自訂標頭檔  

|# include 指令特性8.1 使用標準函數庫-數學函數

8.2.1 數學函數與 math.h

#include "headerh.h"

#include <stdio.h>

#include "C:\headerh.h"

• 將 headerh.h 配置於 C 根目錄底

• 直接至系統資料夾裏面尋找

• 適合自訂標頭檔

Page 14: | 08  前置處理器與標準函數

C 語言入門經典

4

3

2

1

 指數與對數函數 >> << #include 指令特性  

|範例:使用 math.h3.1 使用標準函數庫-數學函數

8.2.1 數學函數與 math.h

請輸入要計算的角度:20(3.14…/180)*20

sin 30:0.50cos 30:0.87tan 30:0.58

呼叫 math.h 的函數

5

Page 15: | 08  前置處理器與標準函數

C 語言入門經典  範例:指數對數 >> << 範例:使用 math.h   

|指數與對數函數8.2 使用標準函數庫-數學函數

8.2.2 指數與對數函數

double exp(double x)double log(double x)double log10(double x)

• exp() 計算指數值,將所要計算的值 x 傳入,取得 ex 的計算結果。

• log() 計算自然對數,將所要計算的值 x 傳入,取得 log(x) 的計算結果。

• log10() 計算以 10 為底的對數值,將所要計算的值 x 傳入,取得 log10(x) 的計算結果。

Page 16: | 08  前置處理器與標準函數

C 語言入門經典

5

4

3

2

1

 次方運算函數 >> << 指數與對數函數  

|範例:指數對數8.2 使用標準函數庫-數學函數

8.2.2 指數與對數函數

指定計算指數對數的值:

exp(10.00):22026.47

log(10.00):2.30

log10(10.00):1.00

10

8

7

6

Page 17: | 08  前置處理器與標準函數

C 語言入門經典  範例:次方運算 >> << 範例:指數對數  

|次方運算函數

double pow(double x,double y)

8.2 使用標準函數庫-數學函數

8.2.3 次方與開根號

• 計算 x 的 y 次方值

• 計算 x 的平方根double sqrt(double x)

Page 18: | 08  前置處理器與標準函數

C 語言入門經典

4

3

2

 範例:平方根運算 >> << 次方運算函數  

|範例:次方運算

輸入次方運算的值( x,y ):4 的 3 次方: 64  

4,3

4 的 3 次方運算

1

8.2 使用標準函數庫-數學函數

8.2.3 次方與開根號

Page 19: | 08  前置處理器與標準函數

C 語言入門經典  近似值函數 >> << 次方運算  

|範例:平方根運算

輸入平方根運算的值:100100.00 的平方根: 10.00  

4

3

2

1

8.2 使用標準函數庫-數學函數

8.2.3 次方與開根號

Page 20: | 08  前置處理器與標準函數

C 語言入門經典  取近似值 >> << 範例:半方根運算  

|近似值函數

double floor(double x)double ceil(double x)

• floor() 或是 ceil() 取得參數近似值然後回傳。

• floor() 回傳小於或等於 x 的最大整數。

• ceil() 回傳大於或等於 x 的最小整數。

8.2 使用標準函數庫-數學函數

8.2.4 取得近似整數

Page 21: | 08  前置處理器與標準函數

C 語言入門經典

5

4

3

2

1

 亂數函數 >> << 近似值函數  

|範例:取近似值

輸入欲取近似值的數值:floor(100.23) : 100.00  ceil(100.23) : 101.00

100.234

6

8.2 使用標準函數庫-數學函數

8.2.4 取得近似整數

Page 22: | 08  前置處理器與標準函數

C 語言入門經典

2

1

 範例:取亂數 >> << 範例:取近似值  

|亂數函數8.2 使用標準函數庫-數學函數

8.2.5 亂數

int rand()

void srand(unsigned int seed)

• 會回傳一個整數亂數,這個亂數介於 0 ~ 32767 。• RAND_MAX 可以取得最大可能的亂數值。• 產生可預期的虛擬亂數

• seed 為亂數種子,這是一個無號整數。• rand() 就會根據此亂數種子產生不同的亂數值出來。

Page 23: | 08  前置處理器與標準函數

C 語言入門經典

4

3

2

1

 範例:取亂數 >> << 亂數函數  

|範例:取亂數

輸出 6 個 0 ~ 32767 的亂數值:41, 6334,18467, 15724,26500, 19169,

8.2 使用標準函數庫-數學函數

8.2.5 亂數

Page 24: | 08  前置處理器與標準函數

C 語言入門經典

5

4

3

2

1

 範例:取得特定範圍的亂數 >> << 範例:取亂數  

|範例:取亂數

指定亂數種子:

2167

652

8.2 使用標準函數庫-數學函數

8.2.5 亂數

Page 25: | 08  前置處理器與標準函數

C 語言入門經典

5

4

3

2

1

  time() 的定義 >> << 範例:取亂數  

6

7

8

9

10

11

12

|範例:取得特定範圍的亂數

輸入所要產生的最大亂數 :41,53,64,34,29,16,60,54,34,44

66

8.2 使用標準函數庫-數學函數

8.2.5 亂數

Page 26: | 08  前置處理器與標準函數

C 語言入門經典  範例:取得目前時間 >> << 範例:取得特定範圍的亂數  

| time() 的定義8.3 使用標準函數庫-時間與日期函數

8.3.1 取得目前的系統時間

time_t time(time_t *timer)

• 回傳目前的系統時間 。

• time_t 型態是 long 型態的整數,表示格林威治時間 1970 年 1 月 1 日 00:00:00 到目前系統時間所經過的時間差,以秒為單位。

Page 27: | 08  前置處理器與標準函數

C 語言入門經典  轉換時間函數 – ctime() >> << time() 的定義  

|範例:取得目前時間

目前時間: 1264053485

8.3 使用標準函數庫-時間與日期函數

8.3.1 取得目前的系統時間

Page 28: | 08  前置處理器與標準函數

C 語言入門經典  範例:取得目前時間表示字串 >> << 範例:取得目前時間  

|轉換時間函數 - ctime()

char *ctime(const time_t *timer)

time_t 型態的常數指標參數轉換成為字串

8.3 使用標準函數庫-時間與日期函數

8.3.1 取得目前的系統時間

Page 29: | 08  前置處理器與標準函數

C 語言入門經典   clock() 函數 >> << 轉換時間函數 – ctime()   

|範例:取得目前時間表示字串8.3 使用標準函數庫-時間與日期函數

8.3.1 取得目前的系統時間

目前時間: Thu Jan 21 14:46:26 2010 2

1

Page 30: | 08  前置處理器與標準函數

C 語言入門經典  範例:取得程式執行時間 >> << 範例:取得目前時間表示字串  

| clock() 函數8.3 使用標準函數庫-時間與日期函數

8.3.2 取得程式執行時間

clock_t clock(void)

• clock_t 值以 CLK_TCK 為單位。• 常值表示經過一秒鐘長度時間需要的值。• 將 clock_t 除以 CLK_TCK 可以得到經過的

時間秒數。

Page 31: | 08  前置處理器與標準函數

C 語言入門經典

4

3

2

1

 計算時間差函數 – difftime() >> << clock() 函數  

|範例:取得程式執行時間

等待使用者輸入的時間: 5.00 秒

請輸入名稱:Hello,Tim

Tim

5

6

8.3 使用標準函數庫-時間與日期函數

8.3.2 取得程式執行時間

Page 32: | 08  前置處理器與標準函數

C 語言入門經典  範例:計算時間差 >> << 範例:取得程式執行時間  

|計算時間差函數 -difftime()8.3 使用標準函數庫-時間與日期函數

8.3.2 取得程式執行時間

double difftime(time_t time1, time_t time0);

• time0 為開始的時間。• time1 為結束的時間。• 回傳值以秒數為單位的 double 型態。

Page 33: | 08  前置處理器與標準函數

C 語言入門經典  範例:計算時間差 >> << 計算時間差函數 – difftime()   

|範例:計算時間差

1 2 3 4 5 6 7 8 9 10 經過 10 秒

8.3 使用標準函數庫-時間與日期函數

8.3.2 取得程式執行時間