| 08 前置處理器與標準函數
description
Transcript of | 08 前置處理器與標準函數
C 語言入門經典
| 08 前置處理器與標準函數
C 語言入門經典 #define 指令 >> |
|前置處理器與相關指令8.1 前置處理器
8.1.1 關於前置處理器
• 前置處理器是程式開始之前的一段區塊,指令 #include 指定含括的標頭檔被引用進來成為程式的一部份。
• 前置處理器指令除了 #inclde ,還有 #define 指令與條件式編譯 #ifdef 指令。
• 前置處理器可以讓我們避免重複開發,簡化程式的開發與提升程式碼的使用效率,降低程式維護的難度。
C 語言入門經典
2
1
範例:定義 PI >> << 前置處理器與相關指令
| #define 指令8.1 前置處理器
8.1.2 #define
#define dname 程式元素
• #define 是一種巨集指令,提供替代指令的功能,在標頭檔預先定義各種程式元素,並以特定識別名稱命名。
• 當程式中要使用到包含常數、字串,甚至一段程式碼的特定內容,可以直接透過定義的名稱進行引用替代原有的內容,簡化程式碼的撰寫工作。
dname 是用來取代程式元素的識別名稱。 例子:以 PI 的名稱定義以取代難讀的數值 3.14 。
C 語言入門經典
2
1
範例:定義函數內容 >> << #define 指令
|範例:定義 PI
半徑 10 的圓形面積等於 314.00
10 *10*3.14
3.14
8.1 前置處理器
8.1.2 #define
C 語言入門經典
3
2
1
範例:定義內建符號 >> << 範例:定義 PI
|範例:定義函數內容
Hello, Tim歡迎學習 C 語言
Tim
8.1 前置處理器
8.1.2 #define
C 語言入門經典 範例: #define 指令的定義衝突 >> << 範例:定義函數內容
|範例:定義內建符號8.1 前置處理器
8.1.2 #define
2
1
C 語言入門經典 範例: #define 指令的錯誤 >> << 範例:定義內建符號
|範例:# define 指令的定義衝突8.1 前置處理器
8.1.3 #define 的問題
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 的問題
C 語言入門經典 stdio.h >> << 範例: #define 指令的錯誤
8.1 前置處理器
8.1.4 #include
|標頭檔編譯行為
C 語言入門經典 範例:自訂標頭檔 >> << 標頭檔編譯行為
| stdio.h8.1 前置處理器
8.1.4 #include
C:\Dev-Cpp\include
C 語言入門經典 範例:含括自訂標頭檔 >> << stdio.h
|範例:自訂標頭檔8.1 前置處理器
8.1.4 #include
C 語言入門經典 #include 指令特性 >> << 範例:自訂標頭檔
|範例:含括自訂標頭檔
10*10*3.14
8.1 前置處理器
8.1.4 #include
4
3
2
1
C 語言入門經典 範例:使用 math.h >> << 範例:含括自訂標頭檔
|# include 指令特性8.1 使用標準函數庫-數學函數
8.2.1 數學函數與 math.h
#include "headerh.h"
#include <stdio.h>
#include "C:\headerh.h"
• 將 headerh.h 配置於 C 根目錄底
• 直接至系統資料夾裏面尋找
• 適合自訂標頭檔
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
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) 的計算結果。
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
C 語言入門經典 範例:次方運算 >> << 範例:指數對數
|次方運算函數
double pow(double x,double y)
8.2 使用標準函數庫-數學函數
8.2.3 次方與開根號
• 計算 x 的 y 次方值
• 計算 x 的平方根double sqrt(double x)
C 語言入門經典
4
3
2
範例:平方根運算 >> << 次方運算函數
|範例:次方運算
輸入次方運算的值( x,y ):4 的 3 次方: 64
4,3
4 的 3 次方運算
1
8.2 使用標準函數庫-數學函數
8.2.3 次方與開根號
C 語言入門經典 近似值函數 >> << 次方運算
|範例:平方根運算
輸入平方根運算的值:100100.00 的平方根: 10.00
4
3
2
1
8.2 使用標準函數庫-數學函數
8.2.3 次方與開根號
C 語言入門經典 取近似值 >> << 範例:半方根運算
|近似值函數
double floor(double x)double ceil(double x)
• floor() 或是 ceil() 取得參數近似值然後回傳。
• floor() 回傳小於或等於 x 的最大整數。
• ceil() 回傳大於或等於 x 的最小整數。
8.2 使用標準函數庫-數學函數
8.2.4 取得近似整數
C 語言入門經典
5
4
3
2
1
亂數函數 >> << 近似值函數
|範例:取近似值
輸入欲取近似值的數值:floor(100.23) : 100.00 ceil(100.23) : 101.00
100.234
6
8.2 使用標準函數庫-數學函數
8.2.4 取得近似整數
C 語言入門經典
2
1
範例:取亂數 >> << 範例:取近似值
|亂數函數8.2 使用標準函數庫-數學函數
8.2.5 亂數
int rand()
void srand(unsigned int seed)
• 會回傳一個整數亂數,這個亂數介於 0 ~ 32767 。• RAND_MAX 可以取得最大可能的亂數值。• 產生可預期的虛擬亂數
• seed 為亂數種子,這是一個無號整數。• rand() 就會根據此亂數種子產生不同的亂數值出來。
C 語言入門經典
4
3
2
1
範例:取亂數 >> << 亂數函數
|範例:取亂數
輸出 6 個 0 ~ 32767 的亂數值:41, 6334,18467, 15724,26500, 19169,
8.2 使用標準函數庫-數學函數
8.2.5 亂數
C 語言入門經典
5
4
3
2
1
範例:取得特定範圍的亂數 >> << 範例:取亂數
|範例:取亂數
指定亂數種子:
2167
652
8.2 使用標準函數庫-數學函數
8.2.5 亂數
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 亂數
C 語言入門經典 範例:取得目前時間 >> << 範例:取得特定範圍的亂數
| time() 的定義8.3 使用標準函數庫-時間與日期函數
8.3.1 取得目前的系統時間
time_t time(time_t *timer)
• 回傳目前的系統時間 。
• time_t 型態是 long 型態的整數,表示格林威治時間 1970 年 1 月 1 日 00:00:00 到目前系統時間所經過的時間差,以秒為單位。
C 語言入門經典 轉換時間函數 – ctime() >> << time() 的定義
|範例:取得目前時間
目前時間: 1264053485
8.3 使用標準函數庫-時間與日期函數
8.3.1 取得目前的系統時間
C 語言入門經典 範例:取得目前時間表示字串 >> << 範例:取得目前時間
|轉換時間函數 - ctime()
char *ctime(const time_t *timer)
time_t 型態的常數指標參數轉換成為字串
8.3 使用標準函數庫-時間與日期函數
8.3.1 取得目前的系統時間
C 語言入門經典 clock() 函數 >> << 轉換時間函數 – ctime()
|範例:取得目前時間表示字串8.3 使用標準函數庫-時間與日期函數
8.3.1 取得目前的系統時間
目前時間: Thu Jan 21 14:46:26 2010 2
1
C 語言入門經典 範例:取得程式執行時間 >> << 範例:取得目前時間表示字串
| clock() 函數8.3 使用標準函數庫-時間與日期函數
8.3.2 取得程式執行時間
clock_t clock(void)
• clock_t 值以 CLK_TCK 為單位。• 常值表示經過一秒鐘長度時間需要的值。• 將 clock_t 除以 CLK_TCK 可以得到經過的
時間秒數。
C 語言入門經典
4
3
2
1
計算時間差函數 – difftime() >> << clock() 函數
|範例:取得程式執行時間
等待使用者輸入的時間: 5.00 秒
請輸入名稱:Hello,Tim
Tim
5
6
8.3 使用標準函數庫-時間與日期函數
8.3.2 取得程式執行時間
C 語言入門經典 範例:計算時間差 >> << 範例:取得程式執行時間
|計算時間差函數 -difftime()8.3 使用標準函數庫-時間與日期函數
8.3.2 取得程式執行時間
double difftime(time_t time1, time_t time0);
• time0 為開始的時間。• time1 為結束的時間。• 回傳值以秒數為單位的 double 型態。
C 語言入門經典 範例:計算時間差 >> << 計算時間差函數 – difftime()
|範例:計算時間差
1 2 3 4 5 6 7 8 9 10 經過 10 秒
8.3 使用標準函數庫-時間與日期函數
8.3.2 取得程式執行時間