Presentation is loading. Please wait.

Presentation is loading. Please wait.

10-1 字串與字元處理函數 10-2 時間及日期函數 10-3 數學函數 10-4 亂數函數 10-5 本章綜合練習

Similar presentations


Presentation on theme: "10-1 字串與字元處理函數 10-2 時間及日期函數 10-3 數學函數 10-4 亂數函數 10-5 本章綜合練習"— Presentation transcript:

1 10-1 字串與字元處理函數 10-2 時間及日期函數 10-3 數學函數 10-4 亂數函數 10-5 本章綜合練習
第10章 C語言的常用函數庫 10-1 字串與字元處理函數 10-2 時間及日期函數 10-3 數學函數 10-4 亂數函數 10-5 本章綜合練習

2 10-1 字串與字元處理函數 首先要為讀者介紹一些C語言中所提供字串與字元的基本處理方法,包括如何計算字串長度、複製、連接、搜尋、字元判斷等方法,在本節中將分別為您介紹。

3 字元處理函數 函數原型 說明 int isalpha(int c)
如果c是一個英文字母字元則傳回1(True),否則傳回 0(False)。 int isdigit(int c) 如果c是一個數字字元則傳回1(True),否則傳回 0(False)。 int isspace(int c) 如果c是空白字元則傳回1(True),否則傳回 0(False)。 int isalnum(int c) 如果c是英文字母或數字字元則傳回1(True),否則傳回 0(False)。 int iscntrl(int c) 如果c是控制字元則傳回1(True),否則傳回 0(False)。 int isprint(int c) 如果c是一個可以列印的字元則傳回1(True),否則傳回 0(False)。 int isgraph(int c) 如果c不是空白的可列印字元則傳回1(True),否則傳回 0(False)。 int ispunct(int c) 如果c是空白、英文或數字字元以外的可列印字元則傳回1(True),否則傳 回 0(False) int islower(int c) 如果c是一個小寫的英文字母則傳回1(True),否則傳回 0(False) int isupper(int c) 如果c是一個大寫的英文字母則傳回1(True),否則傳回 0(False)。 int isxdigit(int c) 如果c是一個16進位數字則傳回1(True),否則傳回 0(False) int tolower(int c) 如果c是一個大寫的英文字母則傳回小寫字母,否則直接傳回c int toupper(int c) 如果c是一個小寫的英文字母則傳回大寫字母,否則直接傳回c

4 字元處理函數的說明與應用:CH10_1 程式範例是利用標頭檔<ctype.h>中的字元處理函數來判斷所輸入的字元是英文字母、數字或其它符號。

5 字串處理函數表(一) 函數原型 說明 size_t strlen(char *str) 傳回字串 str 的長度。
char *strcpy(char *str1, char *str2) 將str2 字串複製到 str1字串,並傳回 str1 位址。 char *strncpy(char *d, char *s, int n) 複製 str2 字串的前 n 個字元到 str1字 串,並傳回 str1位址。 char *strcat(char *str1, char *str2) 將 str2 字串連結到字串 str1,並傳回 str1位址。 char *strncat(char *str1, char *str2,int n) 連結 str2 字串的前 n 個字元到 str1字 int strcmp(char *str1, char *str2) 比較 str1 字串與 str2 字串。 如果 str1 > str2,傳回正值 str1 == str2,傳回0 str1 < str2,傳回負值

6 字串處理函數表(二) int strncmp(char *str1, char *str2, int n)
比較 str1 字串與 str2 字串的前 n 個字元。 如果 str1 > str2,傳回正值 str1 == str2,傳回0 str1 < str2,傳回負值 char *strchr(char *str, char c) 搜尋字元 c 在 str 字串中第一次出現的位置,如果有找到則傳回該位置的位址,沒有找到則傳回 NULL。 char *strrchr(char *str, char c) 搜尋字元 c 在 str 字串中最後一次出現的位置,如果有找到則傳回該位置的位址,沒有找到則傳回 NULL。 char *strstr(char *str1, char *str2) 搜尋str2 字串在 str1 字串中第一次出現的位置,如果有找到則傳回該位置的位址,沒有找到則傳回 NULL。

7 字串處理函數的實作與應用:CH10_2 程式範例是利用標頭檔<string.h>中的各種字串處理函數來判斷所輸入字串大小,並列印比較結果。

8 字串轉換函數 在<stdlib.h>標頭檔中,也提供了將字串轉為數字資料型態的函數。
使用這些函數的條件,必需是由數字字元所組成的字串,如果輸入字串不是由數字字元組成,則輸出結果將會是數字型態的0。 函數原型 說明 double atof(const char *str) 把字串 str 轉為倍精準浮點數(double float)數值。 int atoi(const char *str) 把字串 str 轉為整數(int)數值。 long atol(const char *str) 把字串 str 轉為長整數(long int)數值。

9 字串轉換函數的說明與應用:CH10_3 程式範例是利用標頭檔<stdlib.h>中的字串轉換函數來將一個字串轉為倍精度浮點數,並求其立方值。

10 時間及日期函數 C語言中也所提供了與時間日期相關的函數,定義於time.h標頭檔中,包含了顯示與設定系統目前的時間、程式處理時間函數、計算時間差等等。

11 時間及日期函數簡介 函數原型 說明 time_t time(time_t *systime);
傳回系統目前的時間,而time_t為time.h中所定義的時間資料型態, 是以長整數型態表示。time()會回應從1970年1月1日 00:00:00 到目前 時間所經過的秒數。如果沒有指定time_t型態,就使用NULL,表示 傳回系統時間。不過如果想這個長整數轉換為時間格式,必須利用 其它的轉換函數。 char *ctime(const time_t *systime); 將t_time長整數轉換為字串,以我們可了解的時間型式表現。 struct tm *localtime(const time_t *timer); 取得當地時間,並傳回tm結構,而tm為time.h中所定義的結構型態, 包含年、月、日等資訊。 char* asctime(const struct tm *tblock); 傳入tm結構指標,將結構成員以我們可了解的時間型式呈現。 struct tm *gmtime(const time_t *timer); 取得格林威治時間,並傳回tm結構。 clock_t clock(void); 取得程式從開始執行到此函數,所經過的時脈數。clock_t型態定義 於time.h中,為一長整數,另外也定義了CLK_TCK來表示每秒的滴 答數,所以經過秒數必須將clock()函數值/CLK_TCK。 double difftime(time_t t2,time_t t1) 傳回t2與t1的時間差距,單位為秒。

12 time()函數、localtime()函數的說明與應用:CH10_4
程式範例將分別利用time()函數、localtime()函式來取得目前系統時間,並透過ctime()與asctime()函數轉換為日常通用的時間格式。

13 clock()與difftime()函數的說明與應用:CH10_5

14 數學函數 數學函數定義在<math.h>表頭檔裡,包括有三角函數、雙曲線函數、指數與對數函數和一些數學計算上的基本函數。

15 三角函數與雙曲線函數 函數原型 說明 double sin(double 徑度);
徑度(radian)=角度*π/180,而回傳值則為正弦值。 double cos(double 徑度); 傳遞的參數為徑度,而回傳值則為餘弦值。 double tan(double 徑度); 傳遞的參數為徑度,而回傳值則為正切值。 double asin(double 正弦值); 傳遞的參數為必須介於-1~1,而回傳值則為反正弦值。 double acos(double 餘弦值); 傳遞的參數為必須介於-1~1,而回傳值則為反餘弦值。 double atan(double 正切值) 回傳值為反正切值。 double sinh(double 徑度); 徑度(radian)=角度*π/180,而回傳值則為雙曲線的正弦值。 double cosh(double 徑度); 傳遞的參數為徑度,而回傳值則為雙曲線的餘弦值。 double tanh(double 徑度); 傳遞的參數為徑度,而回傳值則為雙曲線的正切值。

16 三角函數與雙曲線函數的輸出說明與應用:CH10_6
程式範例則是輸入角度,並將角度轉換成徑度,並求出三角函數與雙曲線函數的輸出。

17 指數與對數函數 函數原型 說明 double exp(double x); 傳遞一個實數為參數,計算後傳回e的次方值。
double log(double x); 傳遞正數(大於零)為參數,計算後傳回該數的 自然對數。 double log10(double x); 傳遞正數為參數,計算後傳回該數以10為底的 double pow(double x,double y); 傳回底數x的y次方,其中當x<0且y不是整數, 或x為0且y<=0時,會發生錯誤。 double sqrt(double x); 傳回x的平方根,x不可小於0。 double fmod(double x,double y); 計算x/y的餘數,其中x,y皆為double型態。

18 指數與對數函數的說明與應用:CH10_7 程式範例是簡單說明指數與對數函數的輸出功能。

19 其他數學函數 在這部分的數學函數是關於數值的轉換部分,包括有絕對值,無條件捨去法和無條件進入法的數值相關函數,以下是這些函數的相關說明:
函數原型 說明 double fabs(double number); 傳回number數值的絕對值。 double ceil(double number); 傳回不小於number數值的最小整數,相 當於無條件進入法。 double floor(double number); 傳回不大於number數值的最大整數,相 當於無條件捨去法。

20 其他數學函數的輸出說明與應用:CH10_8 程式範例是簡單說明絕對值,無條件捨去法和無條件進入法的數值相關函數的輸出功能。

21 亂數函數 亂數函數定義於<stdlib.h>的表頭檔中,其功能是能隨機產生數字提供程式做應用,像是猜數字遊戲、猜拳遊戲或是其它與機率相關的遊戲程式需要使用到亂數函數。

22 亂數函數簡介 函數原型 說明 int rand(void); 產生的亂數基本上是介於 0~RAND_MAX之間的整數。
void srand(unsigned seed); 設定亂數種子來初始化rand()的起始 點產生亂數的函數,範圍一樣介於 #define random(num) (rand() % (num)) 為一巨集展開,可以產生0~num之間 的亂數。

23 rand()函數的使用說明與應用:CH10_9

24 亂數種子 rand()函數的傳回值是藉由亂數公式所產生,因此每次重新產生亂數的起點都相同,如果可以隨機設定亂數的起點,每次所得到的亂數順序就不會相同。

25 srand()函數的使用說明與應用:CH10_10

26 密碼設定程式的說明與示範:CH10_11 程式範例是利用字元處理函數來檢查使用者設定的名稱與密碼是否符合規定,其中使用者名稱可以輸入英文或數字字元,但密碼中則必需含有數字字元。

27 strstr()字串替換函數:CH10_12 程式範例是利用strstr()函數與strncy()函數,將原始字串中的小字串替換成另一字串。

28 蒙地卡羅法 「蒙地卡羅法」是使用機率的方式來求解某些數值。例如可以隨意產生亂數座標,座標值介於(0,0)與(1,1)這個正方形區域中,而此時有些座標將會落於1/4圓之中,假設總共產生x個座標值,而其中有y個座標落於1/4圓中,則機率與面積之間的關係將會如下圖所示:

29 π數值求解程式:CH10_13 由於半徑設定為1,所以1/4圓的面積等於π/4,而正方形面積等於1,所以可以得到以下的公式,請您依照此公式設計程式求出π的數值(請利用本章所提供的函數庫):

30 樂透開獎程式的實作與練習:CH10_14 設計一樂透開獎程式,總共43顆球,每次開出6個號碼,一個特別號。


Download ppt "10-1 字串與字元處理函數 10-2 時間及日期函數 10-3 數學函數 10-4 亂數函數 10-5 本章綜合練習"

Similar presentations


Ads by Google