C Functions
|
|
|
- 帛 茹
- 7 years ago
- Views:
Transcription
1
2
3
4 大部分用來解決真實世界問題的電腦程式, 都要比我們在前幾章中所介紹的程式大很多 經驗告訴我們, 發展和維護大型程式的最好方法, 便是以一些較小的單元或模組 (module) 來建構整個程式, 這些小單元要比整個大程式好管理多了 這種技巧稱為各個擊破 (divide and conquer) 本章將介紹關於 C 在設計 實作 操作 和維護大型程式方面的功能
5 C 裡面的模組稱為函式 (function) C 程式的撰寫, 通常是將程式設計師所寫的新函式, 與位於 C 標準函式庫 (C standard library) 中事先寫好的函式結合起來構成一個程式 C 標準函式庫提供了包羅萬象的函式, 包括了常用的數學運算 字串處理 字元處理 輸入 / 輸出, 以及許多其他有用的功能
6
7
8
9 我們所用過的 printf scanf 和 pow 函式都是標準函式庫的函式 你可以為某個將在程式中許多位置用到的工作, 撰寫成一個函式 這種函式有時稱為程式設計師自訂函式 (programmerdefined functions) 定義此函式的敘述式只需撰寫一次, 而且這些敘述式對其他函式來說是隱藏起來的 函式經由函式呼叫 (function call) 的方式引用 (invoked) 函式呼叫指明了欲引用之函式的名稱, 並提供所需的資訊 ( 當作引數,argument) 給受呼叫函式, 以執行其工作
10 與此十分類似的是管理的階層形式 老闆 ( 呼叫函式或呼叫者,calling function 或 caller) 要求某位員工 ( 受呼叫的函式,called function) 去執行某項工作, 並在工作完成後回報 ( 圖 5.1) 舉個例來說, 某個函式想在螢幕上顯示資訊, 它便呼叫員工函式 printf 去執行這項工作, 然後 printf 將資訊顯示出來, 並在顯示完畢之後回報 -- 或返回 (return) -- 呼叫函式 老闆函式並不知道員工函式如何執行這項工作
11 員工可能會再呼叫其他的員工函式, 而老闆並不曉得 我們將很快可以看到, 諸如此類的隱藏製作細節將如何來促進良好的軟體工程 圖 5.1 展示了 main 函式以階層式的方式與數個員工函式進行通訊 請注意 worker1 的動作相當於 worker4 和 worker5 的老闆函式 函式間的關係並非一定如此圖所示的階層式架構
12
13 數學函式庫函式讓你能夠執行某些常用的數學運算 函式在程式裡引用的方法, 通常是先寫函式名稱, 接著寫一個左括號, 然後跟著寫此函式的引數 (argument) ( 或是由逗號分隔的一個引數列 ), 最後再寫一個右括號 例如, 若程式設計師想計算並印出 的平方根, 可以寫成 printf( "%.2f", sqrt( ) ); 當此敘述式執行時, 數學函式庫函式 sqrt 將被呼叫來計算括號內之值 (900.0) 的平方根
14 900.0 這個數便是 sqrt 函式的引數 上述的敘述式將會印出 sqrt 函式的引數型別為 double, 它的傳回值的型別也是 double 數學函式庫中所有函式傳回的浮點數, 其資料型別都是 double 請注意到 double 型別的值和 float 型別的值類似, 都可以使用 %f 轉換指定詞來輸出
15
16 函式的引數可以是常數 變數 或運算式 如果 c 1 = 13.0,d = 3.0, f = 4.0, 的話, 下面的敘述式 printf( "%.2f", sqrt( c1 + d * f ) ); 將計算並且印出 * 4.0 = 25.0 的平方根, 答案是 5.0 圖 5.2 整理一些 C 的數學函式庫函式 在此圖中, 變數 x 和 y 的型別都是 double.
17
18
19 函式讓你能夠模組化一個程式 所有宣告在函式定義裡的變數都是區域變數 (local variable)-- 只有定義它們的函式才知道這些變數的存在 大多數的函式都有一列參數 (parameter) 參數提供了函式間交換資訊的管道 函式的參數也是區域變數
20
21 有數個動機誘使我們將程式 函式化 第一個動機是各個擊破的方法使得程式發展更容易管理 另一個動機是軟體可以重複使用性 (software reusability)-- 利用現有的函式做為磚塊來建構新程式 軟體的可重複使用性是物件導向程式設計的主要因素, 當你學習了 C 語言所衍生出來的語言 ( 像是 C++ Java 以及 C#) 之後, 你將會瞭解更多 每當我們撰寫含括標準函式庫函式 ( 如 printf scanf 和 pow) 的程式時, 就使用了抽象化技巧 第三個動機是可以避免程式中重覆地撰寫相同的程式碼 像函式這種包裝好的程式碼, 可以在程式中的各個位置呼叫來執行
22
23
24 經由妥善的函式命名和定義, 程式可以由執行某些特定工作的標準化函式來加以建構, 而不需使用各人撰寫的程式碼 此項技術稱為抽象化 (abstraction) 每當我們撰寫含括標準函式庫函式 ( 如 printf scanf 和 pow) 的程式時, 就使用了抽象化技巧 第三個動機是可以避免程式中重覆地撰寫相同的程式碼 像函式這種包裝好的程式碼, 可以在程式中的各個位置呼叫來執行
25
26
27 我們介紹過的每個程式都含有一個稱為 main 的函式, 它負責呼叫標準函式庫函式來完成程式的工作 再讓我們來看看程式設計師該如何撰寫他們自己的函式 請看圖 5.3 的程式, 此程式使用了一個稱為 square 的函式來計算 1 到 10 之整數的平方
28
29
30
31 在此程式中,square 函式是在 main 的 printf 敘述式 ( 第 14 行 ) 中被引用 (invoked) 或被呼叫 (called) printf( "%d ", square( x ) ); /* function call */ 函式 square 用它的參數 (parameter) y 接收了一份 x 的複製品 ( 第 22 行 ) 然後 square 執行 y * y 的計算 ( 第 24 行 ) 計算的結果傳回給引用 square 的 printf 敘述式, 接著 printf 便將此結果顯示出來 這個過程將因 for 重複敘述式的使用而重複 10 次
32 square 的定義告訴我們它希望接收一個整數參數 y 位於函式名稱之前的保留字 int ( 第 22 行 ), 則表示 square 將傳回一個整數值 square 中的 return 敘述式用來將計算結果傳回給呼叫函式 第 5 行 int square( int y ); /* function prototype */ 函式原型 (function prototype) 括號內的 int 告訴編譯器,square 希望從呼叫函式接收一個整數值
33 而函式名稱之前的 int 則告訴編譯器,square 會傳回一個整數值給呼叫函式 編譯器根據函式的原型來檢查對 square ( 第 14 行 ) 的呼叫, 看它是否使用正確的回傳型別, 引數的數目是否正確, 引數的型別是否正確, 以及引數的排列順序是否正確 函式定義的格式如下 return-value-type function-name( parameter-list ) { definitions statements }
34 function-nam 是任何合法的識別字 return-value-type 是指傳回給呼叫者之結果的資料型別 return-value-type 為 void 的話, 表示此函式沒有傳回值 有時候把 return-value-type function- name 以及 parameter-list 稱為函式標頭 (function header)
35
36
37 parameter-list 中的各參數是以逗號分隔, 它含有在函式呼叫時所接收的參數宣告 如果某個函式不接收任何的數值, 那麼它的 parameter-list 為 void 每個參數的型別都必須明確列出
38
39
40
41
42 大括號內的 definitions 和 statements 構成了函式的本體 (function body) 函式的本體通常也稱為區塊 (block) 任何區塊中都可以宣告變數, 區塊可以是巢狀的 函式不能夠定義在另一個函式之內
43
44
45
46
47
48
49 有三種方式將控制權傳回引用函式的位置 如果函式並沒有回傳值, 則當到達函式終止的右大括號時, 控制權便自動地傳回 我們也可以執行底下的敘述式來傳回控制權 return; 如果函式有回傳值的話, 底下的敘述式 return expression; 會將 expression 的值傳回給呼叫者
50 圖 5.4 是我們的第二個例子 此程式使用一個程式設計師自訂函式 maximum, 來判斷並傳回三個整數中最大的一個 這三個整數傳給了 maximum( 第 19 行 ), 以決定最大整數 maximum 將最大值以 return 敘述式傳回給 main ( 第 37 行 )
51
52
53
54
55 ANSI C 最重要的功能之一便是函式原型 (function prototype) 標準 C 委員會向 C++ 的開發者借用這項功能 函式原型會告訴編譯器有關函式傳回值的資料型別, 函式希望接收到的參數個數, 參數的型別, 以及這些參數的排列順序 編譯器將利用函式原型來驗證函式呼叫
56 早期版本的 C 並沒有執行這類的檢查, 編譯器無法偵測到這些錯誤, 因此函式呼叫有可能不正確 這種函式呼叫可能會導致致命的執行時錯誤, 或者導致非致命但卻難以偵錯的邏輯錯誤
57
58 圖 5.4 中 ( 第 5 行 ), 函式 maximum 的函式原型為 /* function prototype */ int maximum( int x, int y, int z ); 它指明了 maximum 有三個型別為 int 的引數, 且傳回型別為 int 的呼叫結果 請注意, 函式原型和 maximum 函式定義的第一行是一樣的
59
60
61 不合函式原型規定的函式呼叫將造成編譯錯誤 若是函式原型與函式定義不一致的話, 也會造成錯誤 舉例來說, 如果圖 5.4 中的函式原型變成了 void maximum( int x, int y, int z ); 將會使編譯器產生一個錯誤, 因為這個函式原型中的 void 回傳型別, 與函式標頭中的 int 回傳型別不一致
62 函式原型的另一項功能是強制的引數型別轉換 (coercion of arguments), 亦即強迫引數變成恰當的型別 例如, 雖然數學函式 sqrt 其函式原型 ( 位於 math.h 檔 ) 規定了一個 double 引數, 但我們可以用一個整數引數來呼叫它, 而且此函式也能正確地運作 敘述式 printf( "%.3f\n", sqrt( 4 ) ); 可以正確地執行 sqrt(4), 並印出值 2.000
63 編譯器會在引數值傳給 sqrt 之前, 將整數值 4 轉換成 double 值 4.0 總而言之, 當引數的值沒有準確地對應到函式原型中的參數型別時, 這些引數值將會在函式呼叫之前, 先轉換成正確的型別 這種轉換如果沒有遵守 C 的提升規則 (promotion rules) 的話, 可能導致不正確的結果產生 提升規則規定了在不遺漏資料的前提下, 某一型別如何才能轉換成另一型別
64 在 sqrt 的例子中,int 可以自動轉換成 double 而不會遺漏資料 不過, 若是 double 轉換成 int 的話,double 值的小數部分將會捨去 將大的整數型別轉換成較小的整數型別 ( 如 long 變 short), 也可能造成數值改變 提升規則會自動應用到含有兩種 ( 或更多 ) 資料型別之數值的運算式, 也稱為混合型別運算式 (mixed-type expressions)
65 混合型別運算式中, 每一個值的型別會自動提升為此運算式中的最高型別 ( 事實上是為每個值製造一個暫時的值, 用在運算式的計算上 -- 原來的值並沒有跟著改變 ) 圖 5.5 由最高型別至最低型別列出了所有的資料型別, 並列出每一個型別的 printf 和 scanf 轉換指定
66
67 將數值轉換成較低的型別, 通常會得到不正確的值 因此, 我們只能用 cast 運算子, 或明確地將值指定給較低型別的變數, 才能夠轉換成較低的型別 函式的引數值要想能夠轉換成函式原型中的參數型別, 其條件是這些數值必須能夠直接指定給那些型別的變數 圖 5.3 的 square 函式使用了一個整數參數, 若我們以一個浮點數引數來呼叫它的話, 此引數將轉換成 int( 較低的型別 ), 而 square 則可能經常傳回不正確的值
68
69 如果某個函式沒有函式原型, 那麼編譯器將會以第一次遇到此函式的形式 ( 不論是函式定義或函式呼叫 ), 來建立它自己的函式原型 這可能會產生警告或錯誤 ( 取決於你用的編譯器 )
70
71
72 要了解 C 是如何處理函式呼叫, 我們必須先了解一種稱為堆疊 (stack) 的資料結構 你可以把堆疊想成一疊盤子 當一個盤子堆上去的時候, 通常是放在頂端, 又稱為把盤子 推入 (push) 堆疊 同樣地, 當一個盤子拿下來的時候, 通常是從頂端拿, 又稱為把盤子從堆疊 取出 (pop) 堆疊是一種後進先出 (last-in, first-out,lifo) 的資料結構, 也就是說, 最後推入 ( 加入 ) 堆疊的項目會最先從堆疊取出 ( 移除 )
73 當程式呼叫函數時, 被呼叫的函數必須知道要怎麼回到呼叫者的位置, 因此呼叫函數的返回位址會被推入程式執行堆疊 (program execution stack) 中, 又稱作函式呼叫堆疊 (functioncall stack) 假如發生了一系列的函式呼叫, 返回位址會依後進先出的順序被推入堆疊中, 因此每個函式都能返回它的呼叫者 程式執行堆疊中也包含了程式執行時, 函式所使用的區域變數的記憶體
74 這些儲存在程式執行堆疊中的資料, 也稱為函式呼叫的 活動紀錄 (activation record) 或 堆疊框架 (stack frame) 當函式呼叫發生時, 此函式呼叫的活動紀錄會被推入程式執行堆疊中 當函式返回它的呼叫者時, 此函式呼叫的活動紀錄會從堆疊中被取出, 而程式就無法使用這些區域變數了
75 當然, 電腦的記憶體容量有限, 因此可以用來儲存程式執行堆疊中活動紀錄的記憶體容量也是有限的 假如函式呼叫的數量超過程式執行堆疊可以儲存的活動紀錄時, 會產生稱為 堆疊溢位 (stack overflow) 的錯誤
76 每個標準函式庫都有一個相對應的標頭 (header), 它含有此函式庫中所有函式的函式原型, 以及這些函式所需之各種資料型別和常數的定義 圖 5.6 依字母的順序列出了可以含括進程式裡的標準函式庫標頭檔 在此圖中, 巨集 這個名詞出現了許多次, 我們將在第 13 章再詳細地介紹 你也可以撰寫自己的標頭檔 程式設計師定義的標頭檔, 也應以.h 做為副檔名
77 我們可以用前置處理器命令 #include 含括進程式設計師定義的標頭檔 舉例來說, 假如我們的 square 函式位在標頭檔 square.h 中, 我們可以將標頭檔含括在我們的程式中 在程式的上方使用下列的命令 : #include "square.h"
78
79
80 傳值呼叫 (call by value) 和傳參考呼叫 (call by reference) 是大多數的程式語言用來引用函式的兩種方式 當以傳值呼叫來傳遞引數時, 此引數值的一份複製將會傳給受呼叫的函式 對此複製所做的修改並不會影響到呼叫者原來變數的值 當以傳參考來傳遞引數時, 呼叫者允許受呼叫函式修改原來的變數值 當受呼叫函式不需修改呼叫者的原始變數時, 應該使用傳值呼叫
81 如此一來, 便可防止偶發性的副作用 (side effect) ( 變數被更改 ), 而此項副作用會大幅妨礙正確和可信賴軟體系統的研發 傳參考呼叫最好只用在可靠度高, 且必須修改原始變數的受呼叫函式身上 對 C 來說, 所有的呼叫都是傳值呼叫 在第六章可以看到陣列將會自動地以傳參考呼叫來傳遞
82 現在讓我們來介紹一個有趣的程式應用, 模擬和賭博程式 在電腦的應用程式裡, 我們可以用 C 標準函式庫中, 標頭檔 stdlib.h 中的 rand 函式來模擬機會的運行 請看下列的問題描述 : i = rand(); 其中 rand 函式會產生一個介於 0 和 RAND_MAX ( 定義在 <stdlib.h> 標頭檔中的符號常數 ) 之間的整數
83 ANSI 標準規定 RAND_MAX 的值至少需為 32767, 此也是兩個位元組 ( 即 16 bit) 所能表示的最大整數值 本節的程式測試環境是 RAND_MAX 值為 的 C 系統 如果 rand 真的可以隨機產生整數的話, 那麼每一次呼叫 rand 時,0 到 RAND_MAX 之間的每一個整數應有相同的機會 (chance) 或機率 (probability) 選到 rand 所產生的值, 其範圍通常不合乎某個特定應用的需求
84 例如, 一個模擬擲銅板動作的程式, 只需要用 0 來代表正面以及用 1 來代表反面 而一個模擬擲骰子動作的程式, 則需要 1 到 6 來代表骰子的 6 個面 為了示範 rand, 讓我們發展一個程式來模擬投擲 6 面的骰子 20 次, 並印出每一次擲所得的值 rand 的函式原型在 <stdlib.h> 檔裡 我們以模數運算子 (%) 與 rand 一起使用, 如下 rand() % 6 來產生 0 到 5 的整數
85 這稱為比例化 (scaling) 6 稱為比例因子 (scaling factor) 接著再將產生的結果加 1, 將數值的範圍移位 (shift) 因此圖 5.7 裡的結果便落在 1 到 6 之間 其結果因編譯器而異
86
87
88 為了證明這些數出現的機率差不多, 我們用圖 5.8 的程式來模擬 6000 次的骰子投擲 從 1 到 6 的每個整數出現的次數都應在 1000 次左右 就如同程式的輸出所示, 我們可以用比例化和移位的方式, 將 rand 函式模擬成 6 面骰子的投擲結果 程式中的 switch 敘述式並沒有提供 default 狀況
89 還有, 我們使用了 %s 轉換指定詞來印出字串 "Face" 和 "Frequency" 做為每一列的標頭 ( 第 53 列 ) 在學到第六章的陣列後, 我們將展示如何將整個 switch 結構換成單行的敘述式
90
91
92
93
94 再次執行圖 5.7 的程式時會出現同樣的順序 那麼這些值如何能稱為亂數呢? 諷刺的是, 這種重複性卻是 rand 函式的一項重要的特性
95 當我們偵錯一個程式時, 此重複性正是修正程式不可以或缺的 事實上,rand 函式所產生的是虛擬亂數 (pseudorandom numbers) 重複呼叫 rand 所產的數列, 看起來也是隨機的 只不過每次執行時, 都會出現相同的數列 一旦程式已經偵錯完成了, 我們便可以透過一些其他的步驟, 來使每次的執行產生不同的數列
96 此過程稱為隨機化 (randomizing), 可以用標準函式庫函式 srand 來進行 srand 函式需要一個 unsigned 整數引數, 它為 rand 函式提供了種子 (seed), 讓 rand 能夠在每次執行時產生不同順序的亂數 我們在圖 5.9 中示範 srand 的用法
97 而型別為 unsigned 的變數也存放在至少兩個位元組的記憶體裡 但兩個位元組的 unsigned 卻只能代表 0 到 之間的正整數 而四個位元組的 unsigned 也只能代表 0 到 之間的正整數 srand 函式需要一個 unsigned 值的引數 我們在 scanf 裡用轉換指定詞 %u 來讀進 unsigned 變數的數值 srand 的函式原型位於 <stdlib.h> 裡
98
99
100 讓我們來執行這個程式數次, 並觀察其結果 我們可以看到, 當我們輸入不同的 seed 時, 此程式每次執行所產生的亂數順序便不相同 如果我們想要不需每次輸入一個 seed, 便能達到隨機化的效果, 可以用如下的敘述式 srand( time( NULL ) ); 此舉可以使電腦自動地讀取它內部的時鐘, 來做為 seed 的值 time 函式會傳回從 1970 年 1 月 1 日午夜到目前所經過的秒數
101 此值將轉換成一個 unsigned 整數, 並做為亂數產生器的 seed 在上述敘述式中,time 函式會以 NULL 做為引數 (time 可以以字串來表示它傳回的值 ; 若以 NULL 為引數的話, 則不具此項功能 ) time 的函式原型位於 <time.h> 裡
102 直接由 rand 所產生的值一定落在 : 0 rand() RAND_MAX 前面我們介紹過如何以下列敘述式來模擬六面骰子的投擲結果 : face = 1 + rand() % 6; 此敘述式會將一個整數值 ( 隨機的 ) 指定給變數 face, 而且一定在 1 < face < 6 這個範圍內 我們注意到範圍的大小 ( 在範圍內連續整數的個數 ) 為 6, 而範圍的起始數為 1
103 從上面的敘述式我們可以看出, 範圍的大小取決於對 rand 進行比例化之數值 ( 即 6), 而範圍的起點則是加到 rand() % 6 的數值 因此, 我們可以歸納出如下的結果 : n = a + rand() % b; 其中 a 代表位移值 (shifting value), 即連續整數範圍的第一個數 b 代表比例因子 ( 即連續整數範圍的大小 )
104
105 一種最普遍的賭博遊戲是稱為 "crap" 的擲骰子遊戲, 這個遊戲的規則很簡單, 如下 : 玩家投擲兩顆骰子 每一顆骰子有六個面 這些面分別刻有 1, 2, 3, 4, 5, 和 6 個點 當骰子靜止下來後, 將兩個骰子朝天的那一面的點數相加起來 如果第一次投擲便擲出 7 點或 11 點, 那麼判定玩家贏 若第一次擲出 2 點 3 點或 12 點 ( 這些點數稱為 crap), 那麼則是玩家輸 ( 莊家贏 ) 如果第一次擲出 4 點 5 點 6 點 8 點 9 點或 10 點, 則這個點數成為玩家的目標點數 你必須繼續投擲這兩顆骰子, 直到擲出你的目標點數才算贏 但若玩家在達成目標點數之前擲出了 7 點, 則判定玩家輸 圖 5.10 的程式模擬了這個遊戲, 圖 5.11 則列出了數個執行結果
106
107
108
109
110
111 請注意遊戲規則, 玩家在第一次及後續輪擲時, 均需投擲兩顆骰子 我們定義了 rolldice 函式來投擲骰子, 並計算印出他們的點數和 函式 rolldice 只定義一次, 不過卻在程式中的兩個位置呼叫 ( 第 23 和 51 列 ) rolldice 不需要引數, 因此我們在它的參數列寫上 void ( 第 76 列 ) rolldice 函式會傳回兩顆骰子的點數和, 所以在它的函式標頭以 int 標示其回傳型別
112 玩家在第一輪便可能贏或輸, 或者在接下來的數回合中都有可能贏或輸 變數 gamestatus 被定義為新型別 enum Status, 用來記錄目前的狀態 第 8 行建立了一個稱為列舉 (enumeration) 的使用者定義型別 列舉由關鍵字 enum 定義, 它是一個表示為識別字的整數常數的集合 列舉常數 (Enumeration constants) 有時候稱為符號常數 enum 裡面的值從 0 開始, 並且以 1 遞增
113 在第 8 行, 常數 CONTINUE 的值是 0,WON 的值是 1, 以及 LOST 的值是 2 但是也可以將整數型別的值指定給 enum 中的識別字 ( 參見第 10 章 ) 列舉中的識別字必須唯一, 但是不能有重複的元素
114
115
116 如果玩家在第一回合或接下來的回合中贏了,gameStatus 將設定為 WON 如果玩家在第一回合或接下來的回合中輸了,gameStatus 將設定為 LOST 其他的狀況下則會將 gamestatus 設定為 CONTINUE, 表示遊戲還須繼續進行 在第一次投擲之後, 如果遊戲已經結束了,while 結構將因 gamestatus 不等於 CONTINUE 而跳過 ( 第 50 行 ) 程式接著執行第 68 行的 if...else 敘述式 如果 gamestatus 為 1 的話, 則它會印出 "Player wins", 否則便印出 "Player loses"
117 在第一次投擲之後, 若遊戲未結束, 那麼便將 sum 存到 mypoint 這個變數 由於此時 gamestatus 等於 CONTINUE, 所以程式接下來執行 while 敘述式 ( 第 50 列 ) while 的每次重複都會呼叫 rolldice 來產生新的 sum 如果 sum 和 mypoint 相同的話, 將 gamestatus 設為 1, 表示玩家贏了, 接著 while 的條件檢查失敗, 程式跳出 while 迴圈繼續 if...else 結構的執行 If...else 結構印出 "Player wins" 後 ( 第 65 列 ), 便結束了整個程式
118 如果 sum 等於 7 的話 ( 第 58 列 ),gamestatus 將設為 2 表示玩家輸了, 接著跳出 while 迴圈, 然後 if...else 敘述式 ( 第 65 行 ) 印出 "Player loses" 之後, 程式便會結束執行 請注意到本程式的控制結構 我們使用了兩個函式 (main 和 rolldice), 以及 switch, while, 巢狀 if...else 和巢狀 if 等敘述式 我們將在習題裡介紹到一些有關 craps 遊戲的有趣特性
119 在第二章到第四章當中, 我們已使用了識別字來做為變數的名稱 變數的特性包括了名稱 型別 大小和值 在本章中我們也使用了識別字做為使用者定義的函式名稱 事實上, 程式中的每一個識別字都還有一些其他特性, 包括儲存類別 (storage class), 儲存佔用期間 (storage duration) 範圍 (scope) 和連結 (linkage) C 提供了四種儲存類別, 分別以下列四個儲存類別指定詞 (storage class specifiers) 來表示 : auto, register, extern, 和 static 識別字的儲存類別 (storage class) 有助於判斷他們的儲存佔用期間 範圍 和連結等特性 識別字的儲存佔用期間 (storage duration) 是指此識別字存在記憶體中的時期
120 有些識別字只存在一下子, 有些則重複地建立和清除, 而有些則在程式的執行過程中一直都存在 識別字的範圍是指此識別字在程式中能夠被參考的範圍 有些識別字在整個程式中都可以引用, 而有些只能程式的某部分所引用 識別字的連結 (linkage) 是指在有數個原始程式檔的情況下 ( 第 14 章將會介紹 ), 此識別字是否只有目前的原始檔知道它, 還是只要正確的宣告的話, 任何原始檔都可以知道它的存在 本節將討論儲存類別, 以及儲存佔用期間
121 5.13 節將討論範圍 至於識別字的連結, 和使用數個原始檔的程式設計, 則留等第 14 章再繼續討論 上述的四個儲存類別指定詞, 可以分為兩種儲存佔用期間 : 自動儲存佔用期間 (automatic storage duration) 和靜態儲存佔用期間 (static storage duration) auto 和 register 這兩個關鍵字用來宣告自動儲存佔用期間的變數 具有自動儲存佔用期間的變數, 是在程式控制進入宣告他們的區塊時, 才會產生出來 而當程式控制離開這個區塊時, 他們便清除了
122 只有變數才能具有自動儲存佔用期間 函式的區域變數 ( 宣告在函式的參數列或函式本體中的變數 ) 通常都具有自動儲存佔用期間 識別字 auto 用來明確地宣告變數為自動儲存佔用期間
123 例如, 下列的宣告表示 float 變數 x 和 y 為自動區域變數, 他們只存在於宣告他們的函式本體中 : auto double x, y; 區域變數內定為具有自動儲存佔用期間, 因此 auto 識別字很少使用 在接下來的內容中, 我們會將具有自動儲存佔有期間的變數, 簡稱為自動變數 (automatic variables)
124
125
126 在機器語言的程式中, 資料通常都會載入暫存器中, 以進行計算及其他的處理
127
128 編譯器可以忽略 register 的宣告 例如, 當暫存器的數目不敷編譯器使用時 下面的宣告建議編譯器將整數變數 counter 放到電腦的暫存器中, 並指定它的初始值為 1: register int counter = 1; 關鍵字 register 只能對自動變數使用
129
130 識別字 extern 和 static 是用來將變數或函式的識別字宣告為具有靜態儲存佔用期間 具有靜態儲存佔用期間的識別字, 從程式開始執行時便已經存在 對變數來說, 當程式開始執行時, 便為它配置好儲存並設好初始值了 ( 只做一次 ) 對函式來說, 在程式開始執行時, 此函式的名稱就存在了
131 不過, 即使這種變數和函式的名稱在程式一開始執行時便存在, 並不代表這些識別字在程式的各個角落都可以使用 識別字的範圍 ( 名稱可以使用的區域 ) 和儲存暫用期間是另一個主題 我們將在 5.13 節中討論 有兩種識別字屬於靜態儲存佔用期間 : 外部的識別字 ( 如全域變數和函式的名稱 ), 以及以儲存類別指定詞 static 宣告的區域變數 全域變數和函式名稱預設為 extern 的儲存類別
132 全域變數的製造方法是將變數的宣告放在任何函式定義之外, 他們將會在整個程式執行期間, 一直保有他們的值 全域變數和函式, 可以被同檔案中位於他們的宣告或定義之後的任何函式參考 這便是為什麼要使用函式原型的原因之一 當我們為某個呼叫 printf 的程式含入 stdio.h 之後, printf 的函式原型便放到檔案的前頭, 這使得 printf 這個名稱能夠讓檔案的其他位置都知道
133
134 以保留字 static 宣告的區域變數也只能夠在定義它的函式中使用, 但它並不像自動變數,static 區域變數在程式離開這個函式之後, 還會保有他們的值 當這個函式下一次再進行呼叫時,static 區域變數的值會和此函式上次離開函式時的值相同 下面的敘述式會將區域變數 count 宣告為 static, 並為它指定初始值 1 static int count = 1;
135 如果你沒有明確指定初始值的話, 則所有靜態儲存佔用期間的數字變數, 都會將初始值設定為 0 extern 和 static 這兩個關鍵字如果用於外部識別字的話, 會具有特殊的意義 我們將在第 14 章討論明確使用 extern 和 static 在外部識別字以及多個原始檔的程式上
136 識別字的範圍 (scope) 是指可以參考到此識別字的程式部分 例如, 當我們在某區塊中宣告一個區域變數時, 此變數只能在這個區塊或其內的巢狀區塊引用 識別字的四種範圍分別是函式範圍 (function scope) 檔案範圍 (file scope) 區塊範圍 (block scope) 以及函式原型範圍 (function-prototype scope) 標籤 ( 識別字再加一個冒號, 如 start:) 是唯一具有函式範圍 (function scope) 的識別字 標籤可以在他們出現的函式中的任何位置使用, 不過出了這個函式的本體, 便不能參用這些標籤
137 標籤會用在 switch 敘述式 ( 如 case 標籤 ) 和 goto 敘述式裡 ( 見第 14 章 ) 標籤屬於函式內部的實作細節, 函式將其隱藏起來不讓別的函式知道 這種隱藏 -- 較正式的稱法為資訊隱藏 (information hiding)..是以最小權限原則 (principle of least privilege) 建構的方法, 是良好的軟體工程最基本的原則之一 宣告在任何函式之外的識別字都具有檔案範圍 (file scope) 從這種識別字宣的位置開始, 一直到整個檔案結束, 所有的函式中都會知道它的存在
138 全域變數 函式定義, 和放在函式之外的函式原型都具有檔案範圍 宣告在區塊之內的識別字都具有區塊範圍 (block scope) 區塊範圍終止的位置在此區塊的結束右大括號 (}) 宣告在函式一開頭的區域變數, 和此函式的參數都具有區塊範圍 任何區塊都可以含有變數的宣告
139 在巢狀區塊的情形下, 如果外層區塊的某個識別字與內層區塊某個識別字名稱相同的話, 外層區塊的識別字在內層區塊裡將隱藏起來, 直到內層區塊結束為止 這表示當執行到內層區塊時, 內層區塊看到的是它自己的識別字的值, 而不是外層區塊那個與它同名稱的識別字的值 雖然宣告為 static 的區域變數從程式一開始執行便存在, 但他們仍然是屬於區塊範圍
140 因此儲存佔用期間並不會影響到識別字的範圍 唯一具有函式原型範圍 (function-prototype scope) 的是用在函式原型參數列中的識別字 我們在前面曾經提過, 函式原型的參數列中並不需要名稱 -- 只需要型別 如果參數列中使用了名稱的話, 編譯器將會忽略這些名稱 這些識別字可以在程式的其他位置重複使用, 而不會有模稜兩可以的情況發生
141
142
143 圖 5.12 的程式分別以全域變數, 自動區域變數, 以及 static 區域變數, 來示範範圍界定的問題 程式中宣告了一個全域變數 x, 並將其初始值設為 1 ( 第 9 行 ) 這個全域變數在任何區塊 ( 或函式 ) 內將會隱藏起來, 如果他們也都宣告了一個稱為 x 的變數的話 main 程式中宣告了一個區域變數 x, 並將其初始值設為 5 ( 第 14 行 ) 這個變數會印出來, 以顯示全域的 x 在 main 裡隱藏起來了 接下來, 一個新區塊定義在 main 裡面, 它也宣告了一個區域變數 x, 初始值為 7 ( 第 19 行 )
144 程式再把此變數印出來, 以顯示它掩蓋了外層區塊裡的 x 當這個區塊結束時, 值為 7 的變數 x 便會自動清除 這時再印出外層區塊的 x 值, 以顯示此變數已不再受隱藏了 程式定義了三個函式, 他們都沒有任何引數也沒有傳回任何東西 函式 uselocal 定義一個自動變數 x, 並且將它初始為 25 ( 第 40 列 ) 當呼叫 uselocal 之後, 先印出此變數的值, 然後將它遞增, 最後在離開此函式前再印一次它的值
145 每次函式 uselocal 呼叫時, 自動變數 x 都會重新設成 25 函式 usestaticlocal 宣告了一個 static 變數 x 其初始值為 50 ( 第 53 列 ) 宣告成 static 的區域變數會一直保存他們的值, 即使已經離開了他們的範圍亦是如此 當 usestaticlocal 呼叫時, 會先印出 x 的值, 然後將它遞增, 最後在離開此函式之前再印一次 x 的值 而在下一次呼叫函式 usestaticlocal 時,static 區域變數 x 的值將會是 51 useglobal 函數沒有宣告任何變數
146 因此當它參考到變數 x 時, 便會使用全域變數 x ( 第 9 行 ) 當 useglobal 呼叫時, 先印出此全域變數的值, 然後將它乘以 10, 最後在離開此函式之前再印一次它的值 下次函式 useglobal 再呼叫時, 全域變數的值應該就是上次改過之後的值, 即 10 程式的最後再印一次 main 中的區域變數 x ( 第 33 行 ), 以確定所有的函式呼叫都沒有更改 x 的值, 因為這些函式呼叫所參考到的是其他範圍裡的變數 x
147
148
149
150
151 到目前為止, 我們所討論過的程式, 其結構通常是某個函式以階層式的方式呼叫其他的函式 不過對某些類型的問題來說, 如果函式可以呼叫它自己, 將會十分有用 遞迴函式 (recursive function) 就是一種可以直接或間接呼叫自己的函式 遞迴是進階電腦科學課程中所討論的一項複雜的課題 在本節和下一節中, 將會介紹簡單的遞迴範例
152 本書的第五到八章以及第十二章, 將廣泛地介紹遞迴 在 5.16 節的圖 5.17 中, 將整理本書所有關於遞迴的 31 個範例和習題 首先讓我們瞭解遞迴的觀念, 然後再來看看幾個含有遞迴函式的程式 遞迴函式的解決問題方法都具有一些共同特點 他們會呼叫一個遞迴函式來解決問題, 這個函式只曉得如何解決最簡單的情況, 或稱為基本情況 (base case)
153 如果此函式是在基本情況下呼叫, 那麼它便會傳回某個數值 如果是以較複雜的問題來呼叫, 則此函式會將問題分成兩個概念性的小塊 : 一塊是此函式知道該怎麼做, 另一塊是此函式不知道該怎麼做的部分, 為了使遞迴順利進行, 後面一塊必須類似原來的問題, 不過比原先的問題簡單也比較小
154 由於新的問題看起來很像原來的問題, 因此, 此函式呼叫它自己來解決這個較小的問題 - 這稱為遞迴呼叫 (recursive call), 也稱為遞迴步驟 (recursion step) 遞迴步驟裡也包含了 return 這個保留字, 因為它的結果會和知道問題該如何解決的部分, 結合形成最後的結果, 並且傳回給最原始的呼叫者, 可能是 main 當對遞迴函式的原始呼叫還沒得到結果時, 遞迴步驟便會持續執行下去
155 遞迴步驟可以導致更多相同的遞迴步驟 函式持續地將每個問題分成兩個概念性的小塊 為了使遞迴能結束, 每次所衍生出之較簡單的問題, 應該逐漸地接近基本情況 當到達基本情況時, 當時的函式將結果傳回給上一份的函式, 接著如骨牌效應似的回傳動作, 最終將可以讓原始的函式將結果傳回給 main
156 非負整數的階乘 n, 寫成 n! ( 讀作 n 階乘 ) 如以下乘積 : n (n 1) (n 2) 1 的乘積, 而 1! 等於 1,0! 也定義成 1 例如,5! 便是 5*4*3*2*1 的乘積, 其值為 120 對於大於等於零的整數 number, 其階乘可以用 for 敘述句重複地 (iteratively) 計算 ( 這不是遞迴 ) 如下 : factorial = 1; for ( counter = number; counter >= 1; counter-- ) factorial *= counter;
157 階乘函式的遞迴定義, 可以經由觀察下列關係而得 : n! = n (n 1)! 例如, 由底下的式子可以證明 5! 即等於 5*4! 5! = ! = 5 ( ) 5! = 5 (4!) 5! 的計算可以如圖 5.13 所示執行
158 圖 5.13(a) 顯示遞迴呼叫不斷地進行, 直到 1! 計算成 1 為止, 這時遞迴將會結束 圖 5.13(b) 顯示了每個遞迴呼叫會回傳數值給呼叫它的函式, 直到計算出最終的數值並且傳回之後才停止 圖 5.14 的程式利用遞迴來計算並印出 0 到 10 之整數的階乘值 ( 稍後將解釋為何選用 long 資料型別 ) 遞迴函式 factorial 檢查結束條件是否為真, 亦即 number 是否小於等於 1
159 如果 number 小於等於 1 則 factorial 傳回 1, 不需再進一步的遞迴, 程式也因而結束 如果 number 大於 1 的話, 便執行底下的敘述式 return number * factorial( number - 1 ); 此敘述式將問題表示成 number 與對 factorial 遞迴呼叫 ( 用來求出 number-1 的階乘 ) 的乘積 factorial (number-1) 比原來的 factorial(number) 稍微簡單一點
160 函式 factorial 宣告成接收一個 long 型別的參數 ( 第 22 列 ), 並傳回一個 long 型別的結果, 這是 long int 的縮寫 ANSI 標準規定, 型別為 long int 的變數至少要以 4 個位元組來儲存, 因此它所能表示的最大值為 我們可以在圖 5.14 中看到, 階乘值很快地就會變得非常大 選用資料型別 long 使得此程式能夠在整數位元數較小的電腦 ( 如 2 個位元組 ) 上計算大於 7! 的階乘值
161
162
163
164 我們用轉換指定詞 %ld 來印出 long 的值 但是由於 factorial 函式所產生的數值很快地變得非常大, 就算用 long int 也沒辦法印出, 太大的階乘值會超出 long int 變數的最大值 在習題裡我們會發現, 需要用 double 來算出較大數值的階乘值
165 這指出 C 語言 ( 以及許多其他的程式語言 ) 的一項弱點, 這種程式語言無法簡易地擴展來處理不同應用的獨特需求 而 C++ 則是一種可擴充的程式語言, 它讓我們能建立任何大小的整數
166
167
168 費伯那契級數 0, 1, 1, 2, 3, 5, 8, 13, 21, 是以 0,1 開始, 之後的每一個 Fibonacci 數, 都是它的前兩個 Fibonacci 數之和 這種數列會在自然界中出現, 特別是描述了螺旋狀 連續兩個 Fibonacci 數的比值為一常數
169 這個常數也在自然界中不斷地出現, 稱為黃金比例 (golden ratio) 或黃金平均值 (golden mean) 人們試著找出黃金比例以求美觀 而建築師們也將窗戶, 房間和建築物的長寬比例設計成黃金比例 此外, 明信片的長寬比也依此黃金比例來設計
170 費伯那契級數可以遞迴地定義, 如下 : fibonacci(0) = 0 fibonacci(1) = 1 fibonacci(n) = fibonacci(n 1) + fibonacci(n 2) 圖 5.15 的程式利用函式 Fibonacci, 遞迴地計算出第 n 個 Fibonacci 數 Fibonacci 數會迅速變成很大, 因此我們必須以 long 來做為 fibonacci 函式的參數和傳回值的型別 在圖 5.15 當中, 每個輸出行分別表示一次程式執行的結果
171
172
173
174
175 從 main 對 Fibonacci 的呼叫不是遞迴呼叫 ( 第 18 列 ), 其他對 Fibonacci 的呼叫全都是遞迴呼叫 ( 第 33 列 ) 每次 Fibonacci 被呼叫時, 它會馬上檢測基本情況 --n 是否等於 0 或等於 1 如果是的話, 將傳回 n 有趣地是, 如果 n 大於 1, 遞迴步驟會產生兩個遞迴呼叫, 每個都代表一個比原來問題還簡單的問題 圖 5.16 示範 Fibonacci 函式如何計算 Gibonacci(3)
176
177 此圖產生一些有趣的問題,C 編譯器是以何種順序來對運算子的運算元求值呢? 另一個不同的問題就是運算子應用到運算元的順序為何, 也就是由運算子優先次序來獲取運算規則 圖 5.16 說明, 在求 fibonacci( 3 ) 的值時, 會先進行兩次遞迴呼叫, 這分別是 fibonacci( 2 ) 和 fibonacci( 1 ) 但這兩個呼叫執行的順序為何呢? 大多數的程式設計師都假設運算元是由左向右運算
178 但令人訝異的是,ANSI 標準並沒有指明大多數運算子 ( 包括 +) 的運算元之運算順序 因此, 你不應該對這種順序進行任何假設 程式可能先執行 fibonacci( 2 ) 再執行 fibonacci( 1 ), 也可能先執行 fibonacci( 1 ) 再執行 fibonacci( 2 ) 在本程式以及其他許多的程式裡, 這兩種執行順序會得到相同的結果
179 不過在某些程式中, 對某個運算元運算可能會產生副作用, 而影響運算式最終的結果 在 C 的大多數運算子中,ANSI 標準只規定四種運算子的運算元運算順序, 他們是 &&,, 逗號運算子 (,) 和 (?:) 前三個屬於二元運算子, 他們的運算子均由左往右運算
180 [ 請注意 : 在函式呼叫中用來分隔引數的逗號不是逗號運算子 ] 最後一個是 C 的唯一的三元運算子 它的最左邊運算元一定最先運算 ; 如果運算得到非零的值, 便進行中間運算元的運算, 並忽略最右邊的運算元 ; 而如果最左邊運算元運算的結果為零, 那麼便進行最右邊運算元的運算, 並且忽略掉中間的運算元
181
182
183 關於遞迴程式 ( 例如我們用來產生 Fibonacci 數的程式 ) 有一點值得注意, 也就是它的複雜度等級的問題 在 fibonacci 函式中, 每一級的遞迴都會讓呼叫的總數變為 2 倍, 亦即計算第 n 個 Fibonacci 數時, 需要執行 2n 次的遞迴呼叫 這會很快失去控制 想想看, 當我們要計算第 20 個 Fibonacci 數, 便需要約 220 個函式呼叫, 也就是一百萬個函式呼叫 要計算第 30 個 Fibonacci 數, 便需要約 230 個函式呼叫, 也就是十億個函式呼叫
184 電腦科學家將這種現象稱為指數等級複雜度 (exponential complexity) 遇上這類的問題, 即使是世界上最強大的電腦也束手無策了! 有關複雜度的問題, 特別是指數複雜度, 在稱為 演算法 的進階電腦科學課程中會加以介紹
185
186 本節中討論的範例是用直覺的方法來計算 Fibonacci 數列, 但是應該有更好的方式 習題 5.48 要你深入研究遞迴, 找出其他實作遞迴 Fibonacci 演算法的方法
187 在上一節中, 我們討論兩個可以輕易以遞迴或迭代方式來製作的函式 本節將比較這兩種方法, 並且討論在何種條件下, 程式設計師應該選用哪一種方法 迭代和遞迴都是以控制結構為基礎 : 迭代使用重複結構 ; 遞迴使用選擇結構 迭代和遞迴都含有重覆性 : 迭代明確地使用重複結構 ; 遞迴則使用重複的函式呼叫
188 迭代和遞迴都含有一個終止檢測 : 重複在迴圈繼續條件失敗時結束 ; 遞迴在到達基本情況時結束 迭代使用計數器控制重複結構, 遞迴則逐步接近終止 : 迭代會持續改變計數器的值, 直到計數器的值讓迴圈持續的條件不符合為止 ; 遞迴則持續將原始的問題簡化, 直到問題變成基本狀況為止
189 迭代和遞迴都可能會產生無窮迴圈 : 在迴圈持續的條件永遠不是偽的時候, 迭代會產生無窮迴圈 ; 在遞迴步驟無法將問題收斂到基本狀況時, 遞迴會產生無窮迴圈 遞迴有許多缺點 由於它會重複引用函式, 造成多餘的負擔 因此在執行時間和記憶體空間兩方面, 都會帶來昂貴的額外負擔
190 每個遞迴呼叫都會產生此函式的另一份拷貝 ( 實際上只有此函式內的變數 ), 這將消耗可觀的記憶體空間 迭代則通常只會在同一個函式內進行, 因此沒有重複的呼叫函式所造成的額外記憶體負擔 為什麼要使用遞迴呢?
191
192
193 圖 5.17 整理本書中 31 個有關遞迴的例子
194
195
196 讓我們以本書中常提到的一些觀點來結束本章 良好的軟體工程是很重要的, 而高效率也是很重要的 不幸地是, 這兩種目標通常無法兼顧 良好的軟體工程是我們能夠更容易管理複雜軟體系統的關鍵 高效率則是實現未來軟體系統的關鍵, 在硬體上, 對計算的需求甚至更高 哪裡有適合這裡的函式呢?
197
0 0 = 1 0 = 0 1 = = 1 1 = 0 0 = 1
0 0 = 1 0 = 0 1 = 0 1 1 = 1 1 = 0 0 = 1 : = {0, 1} : 3 (,, ) = + (,, ) = + + (, ) = + (,,, ) = ( + )( + ) + ( + )( + ) + = + = = + + = + = ( + ) + = + ( + ) () = () ( + ) = + + = ( + )( + ) + = = + 0
資料結構之C語言重點複習
鏈結串列自編教材 ( 一 ) 本教材 ( 一 ) 目標問題 : 每次以亂數產生一 [0,1000] 之整數值, 若該值 >100, 則以同方式繼續產生下一亂數值, 若該值
840 提示 Excel - Excel -- Excel (=) Excel ch0.xlsx H5 =D5+E5+F5+G5 (=) = - Excel 00
Excel - - Excel - -4-5 840 提示 Excel - Excel -- Excel (=) Excel ch0.xlsx H5 =D5+E5+F5+G5 (=) = - Excel 00 ( 0 ) 智慧標籤 相關說明提示 -5 -- Excel 4 5 6 7 8 + - * / % ^ = < >= & 9 0 (:) (,) ( ) Chapter - :,
運算子多載 Operator Overloading
多型 Polymorphism 講師 : 洪安 1 多型 編譯時期多型 ( 靜態多型 ) function overloading 如何正確呼叫同名的函數? 利用參數個數與型態 operator overloading 其實同 function overloading 執行時期多型 ( 或動態多型 ) 如何正確呼叫不同物件的相同名稱的成員函數 利用繼承與多型 2 子類別與父類別物件間的指定 (assignment)
Microsoft Word - ACL chapter02-5ed.docx
第 2 章神奇的質數 2.1.1 什麼是質數 1 1 1 打下好基礎 - 程式設計必修的數學思維與邏輯訓練 1 1 0 10 2 3 5 7 4 6 8 9 10 4 10000 1229 1000 168 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131
CC213
: (Ken-Yi Lee), E-mail: [email protected] 49 [P.51] C/C++ [P.52] [P.53] [P.55] (int) [P.57] (float/double) [P.58] printf scanf [P.59] [P.61] ( / ) [P.62] (char) [P.65] : +-*/% [P.67] : = [P.68] : ,
新・明解C言語入門編『索引』
!... 75!=... 48 "... 234 " "... 9, 84, 240 #define... 118, 213 #include... 148 %... 23 %... 23, 24 %%... 23 %d... 4 %f... 29 %ld... 177 %lf... 31 %lu... 177 %o... 196 %p... 262 %s... 242, 244 %u... 177
46 2011 11 467 數位遊戲式學習系統 7 2011 11 467 47 3 DBGameSys 48 2011 11 467 正規化資料模組 如何配置並儲存電子化資料 以 便減少資料被重覆儲存的程序 DBGameSys的主要功能模組包 學習者 審核評分模組 含 正規化資料模組 審核評分 模組 高分列表模組3大區塊 系統資料庫 在正規化資料模組的執行 高分列表模組 過程中 先要求學習者瀏覽遊戲
單步除錯 (1/10) 打開 Android Studio, 點選 Start a new Android Studio project 建立專案 Application name 輸入 BMI 點下 Next 2 P a g e
Android Studio Debugging 本篇教學除了最基本的中斷點教學之外, 還有條件式中斷的教學 條件式中斷是進階的除錯技巧, 在某些特定情況中, 我們有一個函數可能會被呼叫數次, 但是我們只希望在某種條件成立時才進行中斷, 進而觀察變數的狀態 而條件式中斷這項技巧正是符合這項需求 本教學分兩部分 單步除錯 (Page2~11, 共 10) 條件式中斷點 (Page12~17, 共 6)
Microsoft PowerPoint - 07-overloaded.ppt
Overloaded Functions 前言 處理多載函式宣告的規則 處理多載函式呼叫的規則 多載函式與 scope 函式呼叫的議決 前言 C 語言規定 : 函式的名稱不可相同 這樣的規定使得我們必須為功能相近但參數型態相異的函式取不同的名稱, 譬如 : int imax (int, int); double dmax (double, double ); // max function for
10-2 SCJP SCJD 10.1 昇陽認證 Java 系統開發工程師 的認證程序 Java IT SCJD
10 SCJD 簡介 Java 10-2 SCJP SCJD 10.1 昇陽認證 Java 系統開發工程師 的認證程序 Java IT SCJD 10 SCJD 10-3 Java Java SCJD 7 Swing RMI 10.1.1 The Assignment The Essay 9 10 10-4 SCJP SCJD 90 10.1.2 SCJP Java 90 120 Swing 10
Chapter 3 Camera Raw Step negative clarity +25 ] P / Step 4 0 ( 下一頁 ) Camera Raw Chapter 3 089
Photoshop CC Camera Raw Photoshop Camera Raw Step 1 3 1 2 3 SCOTT KELBY Step 2 B Camera Raw 088 Chapter 3 Camera Raw Chapter 3 Camera Raw Step 3-4 -100 negative clarity +25 ] P / -75-50 Step 4 0 ( 下一頁
CC213
: (Ken-Yi Lee), E-mail: [email protected] 9 [P.11] : Dev C++ [P.12] : http://c.feis.tw [P.13] [P.14] [P.15] [P.17] [P.23] Dev C++ [P.24] [P.27] [P.34] C / C++ [P.35] 10 C / C++ C C++ C C++ C++ C ( ) C++
Microsoft Word - ACG chapter00c-3ed.docx
Python 好好玩, 趣學電玩遊戲程式設計 Python Python BASIC Java JavaScript PHP C++ BASIC Python Python Python Xbox PlayStation Nintendo - 2 - 簡介 : 互動式 Python Shell : 編寫程式 Python File editor : 猜數字 : 腦筋急轉彎 : 龍域 ( ) : 使用
理性真的普遍嗎 注意力的爭奪戰 科學發展 2012 年 12 月,480 期 13
12 科學發展 2012 年 12 月,480 期 你可能不知道的媒體影響 劉正山若用 選戰 的角度來看選舉和參與選舉, 你大腦裡情感的作用一定大過理性的作用, 便會很習慣地拿各種媒體或別人的觀點來使自己的選擇合理化 2012 理性真的普遍嗎 注意力的爭奪戰 科學發展 2012 年 12 月,480 期 13 14 科學發展 2012 年 12 月,480 期 agendasetting 報紙和網路新聞的頭版空間有限,
CU0594.pdf
8 SOHO 1 3 003 SOHO SOHO Coder Programmer HTML CSS PHP JavaScrip 009 LECTURE 1-1 1 048 PART 2 LECTURE 1-1 1 049 SOHO Landing Page Landing 050 PART 2 LECTURE 1-1 1 SEO SEO P.093 SEO SEO SEO SEO SEO 051
第二節 研究方法 本論文第一章 緒論 說明研究動機與目的 研究方法及研究的範圍及限制 並對 飲食散文的義界 作一觀念的釐清 第二章 文獻探討 就將本研究的理 論建構中的概念作釐清 分別為 現代文學 飲食文學的重要論著 等兩個部 分來描述目前文獻的研究成果 並探討其不足待補述的地方 本研究以 文化研 究 為主要研究基礎 統攝整個研究架構 在不同章節裡 佐以相關研究方法進 行論述 茲圖示如下 研究方法
C/C++基礎程式設計班
C/C++ 基礎程式設計 我們必須讓小事也令人難忘 We ve got to make the small things unforgettable. -Steve Jobs 函式 (Function) 講師 : 張傑帆 CSIE NTU 課程大綱 函式概論 變數類型 - 全 / 區域變數 函式中以指標當參數 傳遞陣列參數 把程式拆成多個檔案 函式 (Function) 包函許多程式碼的一行程式 (
Microsoft Word - _m30.doc
1 2 3 4 5 6 7 8 公式 2 4 2 1 能 整除 因此後玩 者贏 且關鍵數 字為3 的倍數 3 0 3 1 不能整除 所 以先拿餘數 2 關鍵數字是 4的倍 數 2 先玩者贏 4 0 4 1 能整除 因此 後玩者贏 且 關鍵數字為 5 的倍數 5 0 5 1 不能整除 所 以先拿餘數 2 關鍵 數字是 6的倍 數 2 先玩者贏 7 0 6 1 能整除 因此 後玩者贏 且 關鍵數字為7
Python a p p l e b e a r c Fruit Animal a p p l e b e a r c 2-2
Chapter 02 變數與運算式 2.1 2.1.1 2.1.2 2.1.3 2.1.4 2.2 2.2.1 2.2.2 2.2.3 type 2.2.4 2.3 2.3.1 print 2.3.2 input 2.4 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 + 2.4.6 Python Python 2.1 2.1.1 a p p l e b e a r c 65438790
Microsoft PowerPoint - STU_C_Lang_CH13.ppt
第 13 章 動態配置記憶體 程式設計與生活 - 使用 C 語言 Shi-Huang Chen Spring 2013 第 13 章 動態配置記憶體 13-1 記憶體配置函式 malloc( ) 13-2 動態配置結構陣列 配置記憶體 預估需求數量的範圍是一項不容易的學問 例 : 大到預估今年國家預算, 小到預估櫥窗裡展示的毛線衣, 需要多少磅毛線才能織成 撰寫程式時, 一樣無法預估程式執行所需的記憶體空間
Chapter 6 基本的使用者定義函式
基本的使用者定義函式 范洪源 范洪源 函式介紹 的變數傳遞方式 按值傳遞選擇性引數使用共用記憶體分享資料函式呼叫間的資料保存 內建函式 排序與亂數涵式 范洪源 函式介紹 范洪源 檔案的類型 儲存 程式碼的檔案稱為 檔案 副檔名是, 包含 程序檔案或稱底稿檔案 ( ) 它是由一系列宣告式所組成的檔案 執行結果如同把所有的指令直接鍵入指令視窗一樣 任何由程序檔所產生的變數, 都會繼續存留在工作區內而互相影響
新版 明解C++入門編
511!... 43, 85!=... 42 "... 118 " "... 337 " "... 8, 290 #... 71 #... 413 #define... 128, 236, 413 #endif... 412 #ifndef... 412 #if... 412 #include... 6, 337 #undef... 413 %... 23, 27 %=... 97 &... 243,
Java 程式設計入門
Java 程式設計入門 講師 : 陳昭源 CISE, NTU August 28, 2005 Outline 變數 Variables 運算子 Operators 運算式 (Expressions) 敘述(Statements) & 程式區塊 (Blocks) 流程控制 Control Flow Statements if-else statements switch statements August
The golden pins of the PCI card can be oxidized after months or years
Q. 如何在 LabWindows/CVI 編譯 DAQ Card 程式? A: 請參考至下列步驟 : 步驟 1: 安裝驅動程式 1. 安裝 UniDAQ 驅動程式 UniDAQ 驅動程式下載位置 : CD:\NAPDOS\PCI\UniDAQ\DLL\Driver\ ftp://ftp.icpdas.com/pub/cd/iocard/pci/napdos/pci/unidaq/dll/driver/
Microsoft PowerPoint - Bronson-v3-ch06.ppt [相容模式]
C++ FOR ENGINEERS AND SCIENTISTS THIRD EDITION Chapter 6 Modularity Using Functions Objectives 2 In this chapter, you will learn about: Function and parameter declarations 函數和參數宣告 Returning a single value
Introduction to C Programming
C 語言使得程式設計者能以結構化且有條理的方法來設計程式 本書將簡單介紹 C 程式的設計, 並舉出數個例子來說明 C 語言的一些重要特性 第三和第四章將會介紹 C 的結構化程式設計 (structured programming) 我們從一個簡單的 C 程式開始 第一個例子是列印一行文字 第 1 行和第 2 行 /* Fig. 2.1: fig02_01.c A first program in
Microsoft PowerPoint - C-Ch08.ppt
函數 8-1 函數 函數 (function) 可以整合某些特定的處理 整合好的處理可以隨時呼叫使用 C 語言的程式本身也是一個函數, 也就是 main() 函數 使用函數可簡化程式 提款的處理 1. 將提款卡插入自動提款機當中 2. 輸入個人密碼 3. 指定提款金額 4. 領取款項 5. 確認款項與提款卡 提款處理 8-2 函數的定義與呼叫 定義函數的語法 : 傳回值的型態函數名稱 ( 引數列表
1: public class MyOutputStream implements AutoCloseable { 3: public void close() throws IOException { 4: throw new IOException(); 5: } 6:
Chapter 15. Suppressed Exception CH14 Finally Block Java SE 7 try-with-resources JVM cleanup try-with-resources JVM cleanup cleanup Java SE 7 Throwable getsuppressed Throwable[] getsuppressed() Suppressed
Microsoft PowerPoint - Class4.pptx
C++ 程式初探 IV 2015 暑期 ver. 1.0.2 C++ 程式 IV 大綱 1. 時間函式 2. 格式化輸出 3. 遞迴函式 (recursion) 4. 字串 5. 字串轉型 2 補充語法 時間計算 引入標頭檔 #include #include #include #include using namespace
主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new
ListView 自訂排版 主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new int[]{r.drawable.dog1, R.drawable.dog2,
第1章
第 8 章 函式 1 本章提要 8.1 前言 8.2 如何定義函式 8.3 函式的呼叫和返回 8.4 傳遞陣列 8.5 方法多載 8.6 遞迴 8.7 綜合練習 8.8 後記 2 8.1 前言 每一種高階程式語言都有提供函式 (Function)( 或稱函數 ) 的功能, 以便將經常使用到的程式功能包裝成函式的形式, 如此一來便能反覆地呼叫該函式來完成某件特定工作在高階程式語言中, 副程式 (Subroutine)
第一篇文概說第七章公文的用語及標點符號公本篇內容 第一章 緒論 第二章 公文的意義 第三章 公文與高 普 特各類考試 第四章 公文程式之意義及演變 第五章 公文之分類及其行文系統 第六章 公文之結構與行款 第一篇 第一章緒論 003 第一章緒論 等 等 004 最新應用公文 第一篇 第二章公文的意義 005 第二章公文的意義 第一節 一 須為公務員製作之文書 二 須為公務員 職務上 製作之文書 006
投影片 1
資料庫管理程式 ( 補充教材 -Part2) 使用 ADO.NET 連結資料庫 ( 自行撰寫程式碼 以實現新增 刪除 修改等功能 ) Private Sub InsertButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles InsertButton.Click ' 宣告相關的 Connection
AutoCAD 用戶如何使用 ArchiCAD
AutoCAD 用戶如何使用 ArchiCAD AutoCAD用戶如何使用ArchiCAD ( 中文版 ) 由 Scott MacKenzie, Simon Gilbert, Geoffrey Moore Langdon, David Byrnes, Ralph Grabowski 編寫 龍庭資訊有限公司 1/73 - 2. 3. 4. -
Microsoft PowerPoint - 04-array_pointer.ppt
Array 與 Pointer Array Dynamical Memory Allocation Array( 陣列 ) 陣列是用來存放同樣型態的資料陣列的大小必須在程式中預先設定在程式執行中, 陣列的大小無法改變陣列中的資料是透過索引 (index) 來存取 一維陣列的宣告 type array_name[array_size]; int iarray[100]; /* an integer array
二次曲線 人們對於曲線的使用及欣賞 比曲線被視為一種數學題材來探討要早 得多 各種曲線中 在日常生活常接觸的 當然比較容易引起人們的興趣 比如 投擲籃球的路徑是拋物線 盤子的形狀有圓形或橢圓形 雙曲線 是較不常見的 然而根據科學家的研究 彗星的運行軌道是雙曲線的一部 分 我們將拋物線 圓與橢圓 雙曲
-1 圓方程式 第 章 二次曲線 38 二次曲線 人們對於曲線的使用及欣賞 比曲線被視為一種數學題材來探討要早 得多 各種曲線中 在日常生活常接觸的 當然比較容易引起人們的興趣 比如 投擲籃球的路徑是拋物線 盤子的形狀有圓形或橢圓形 雙曲線 是較不常見的 然而根據科學家的研究 彗星的運行軌道是雙曲線的一部 分 我們將拋物線 圓與橢圓 雙曲線合稱為圓錐曲線 因為在平面坐標 系中 其對應的方程式均為二元二次式
Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc
References (Section 5.2) Hsuan-Tien Lin Deptartment of CSIE, NTU OOP Class, March 15-16, 2010 H.-T. Lin (NTU CSIE) References OOP 03/15-16/2010 0 / 22 Fun Time (1) What happens in memory? 1 i n t i ; 2
Microsoft Word - ACI chapter00-1ed.docx
前言 Excel Excel - v - 財務管理與投資分析 -Excel 建模活用範例集 5 相關 平衡 敏感 - vi - 前言 模擬 If-Then 規劃 ERP BI - vii - 財務管理與投資分析 -Excel 建模活用範例集 ERP + BI + ERP BI Excel 88 Excel 1. Excel Excel 2. Excel 3. Excel - viii - 前言 1.
Java 程式設計初階 第 5 章:基本輸出入 & 流程控制
Java 程式設計 標準輸出入與流程控制 本章大綱 標準輸出入 (Standard I/O) 分支 (Branch) if ~ else switch ~ case 迴圈 (Loop) for while do ~ while 中斷指令 break continue 總整理 標準輸出 定義 : 將資料印到螢幕上 Java 標準輸出指令 System.out.println( 資料 ) 將資料印出後換行
C++ 程式設計
C C 料, 數, - 列 串 理 列 main 數串列 什 pointer) 數, 數, 數 數 省 不 不, 數 (1) 數, 不 數 * 料 * 數 int *int_ptr; char *ch_ptr; float *float_ptr; double *double_ptr; 數 (2) int i=3; int *ptr; ptr=&i; 1000 1012 ptr 數, 數 1004
Excel VBA Excel Visual Basic for Application
Excel VBA Jun5,00 Sub 分頁 () Dim i As Integer Dim Cname As String Dim Code As Variant Set score=thisworkbook.sheets("sheet") Code=Array(" 專北一 "," 專北二 "," 專北三 "," 專桃園 "," 專桃竹 "," 專中苗 ", " 專台中 "," 專台南 ","
Microsoft PowerPoint - Class5.pptx
C++ 程式初探 V 2015 暑期 ver. 1.0.1 C++ 程式語言 大綱 1. 大量檔案讀取 & 計算 2. 指標 3. 動態記憶體 & 動態陣列 4. 標準函式庫 (STL) vector, algorithm 5. 結構與類別 2 大量檔案讀取 & 計算 若目前有一個程式將讀取純文字文件 (.txt) 中的整數, 並將該文件中的整數有小到大排序後, 儲存到另外一個新的純文字件中 假設有
ROP_bamboofox.key
ROP Return Oriented Programming Lays @ BambooFox Who Am I Lays / L4ys / 累死 - l4ys.tw Reverse Engineering BambooFox / HITCON Outline Buffer Overflow ret2libc / ret2text Return Oriented Programming Payload
Microsoft PowerPoint - 13_指標、資料傳遞2.pptx
1 2 指標 Lecture 13 指標函式呼叫的資料傳遞 (III) 傳址指標與陣列 Pointer 3 4 指標 / 指位器 (Pointer) 變數 int a; 整數型別, 名稱為 a 變數是為了使用記憶體資源來儲存資料與進行運算 所有的變數都佔有記憶體空間 記憶體 可視為一個很大的一維陣列, 單位是 byte 問題 一個 4KB 的電腦, 其記憶體位置 ( 編號 ) 從 0 至? 4 x
第二章 簡介類別
Instructor Hsueh-Wen Tseng 曾學文,[email protected] Textbook C++ 程式設計風格與藝術 (O Reilly). Requirements Assignment x? 100% TAs 第一章概觀 C++ 1-2 二種版本的 C++ 1-5 初步檢視類別 1-1 何謂物件導向程式設計 1-8 C++ 的關鍵字 1-2 二種版本的 C++ //
Microsoft Word - chap05.doc
31 5. Structures/Simple Classes in C++ 結構體是程式設計者自訂的資料型態 (data type), 一結構體是由多個彼此相關之基本資料型態之資料所構成的複合式資料型態 程式設計者可將程式中彼此相關 且類型不同的資料整合在一起, 定義為結構體, 此新的資料型態宣告建立後, 便可產生屬於此結構體類型 ( 定義 ) 的變數 ( 實體 ), 此有助於資料的管理 結構體與陣列都屬於複合式的資料型態,
ACI pdf
09 9.1 -...9-2 9.1.1...9-2 9.1.2...9-3 9.2 -...9-4 9.2.1 PMT - ()...9-4 9.2.2...9-6 9.3 -...9-8 9.3.1 PMT - ()...9-8 9.4...9-10 9.4.1... 9-11 9.4.2...9-12 9.4.3...9-14 9.5 -...9-17 9.5.1...9-18 1 Excel...9-21
C/C++ 语言 - 循环
C/C++ Table of contents 7. 1. 2. while 3. 4. 5. for 6. 8. (do while) 9. 10. (nested loop) 11. 12. 13. 1 // summing.c: # include int main ( void ) { long num ; long sum = 0L; int status ; printf
105A 資管一程式設計實驗 06 函式定義謝明哲老師 2 程式設計實驗 6.3: 自行定義一個可以接受兩個整數並傳回其最大公因數的函式, 接著利用該函式自 行定義一個可以接受兩個整數並傳回其最小公倍數函式 // gcd_fcn.cpp int gcd(int m,
105A 資管一程式設計實驗 06 函式定義謝明哲老師 [email protected] 1 程式設計實驗 06 函式定義 模擬問題 03 在模擬問題 02, 小組已完成擬定一個與學習或日常生活有關的問題, 並依據在 Ch5 所 學到的流程控制與檔案存取技術發展小組的第二版個別化資訊服務程式 現在請小組對第二版程式的 結構進行分析, 檢查是否有哪些功能可以使用在 Ch6 所學到的函式定義來加以模組化,
APA Preliminaries Text Reference 1. Cover Page 2. Title Page 3. Signature Page 4. Advisor s recommendation letter 5. Approval page 6. Copyri
1 研究報告與論文的寫作格式 CHAPTER 1-1 1-2 專 題 研究報告, 乃至論文寫作都 有一定的標準與規範, 而寫作的 工具, 除了堪稱石器時代所用的筆與紙 外, 打字機及電動打字機仍是至今尚未完 消失的機具, 然而, 步入雲端世紀之後, 電腦文書處理的軟體早已是不可或缺的必備利器 這裡首推大家耳熟能詳的 Microsoft Word 1-2 1-2-2 APA Preliminaries
FY.DOC
高 职 高 专 21 世 纪 规 划 教 材 C++ 程 序 设 计 邓 振 杰 主 编 贾 振 华 孟 庆 敏 副 主 编 人 民 邮 电 出 版 社 内 容 提 要 本 书 系 统 地 介 绍 C++ 语 言 的 基 本 概 念 基 本 语 法 和 编 程 方 法, 深 入 浅 出 地 讲 述 C++ 语 言 面 向 对 象 的 重 要 特 征 : 类 和 对 象 抽 象 封 装 继 承 等 主
Microsoft PowerPoint - Class2.pptx
C++ 程式初探 II 2015 暑期 C++ 程式 II 大綱 1. 變數 2. 運算式 3. 輸出 4. 條件判斷 5. 迴圈 6. 陣列 2 基本變數型態 整數 位元組 浮點數 位元組 字元 位元組 short 2 float 4 char ( 整數 ) 1 int 2 (4) double 8 long 4 (8) long double 8(10) 位元組 整數値域 浮點數値域 準確度 1-128
<4D F736F F F696E74202D FB5F8B3A5A142B8EAAEC6B6C7BBBCA142BB50C0C9AED7BEDEA7402E >
1 2 回顧 指標與其算術運算 指標可類比於變數住的房間號碼 指標可以當陣列使用, 也可說指標可用來當陣列的別名 陣列的名稱本身可視為指標 int a[] = {1,2,,4,5; int *b = a; // 此時 b 記得 1 所住的房間號碼 cout
基本數學核心能力測驗_行為觀察記錄紙_G2版本
基本數學數學核心能力測驗 G2 行為觀察記錄記錄紙 學校 : 班級 : 姓名 : 日期 : 記錄者 : ~ 學生作答時, 請他 ( 她 ) 將雙手皆置於桌面 ~ 認識數字 ( 三 ): 數列 ( 共 1 頁 ) 注意事項 逐題觀察並作底下記錄, 等分測驗做完後, 每一個策略任選一題問 這一題你是怎麼算的? ( 如果只運用一種策略, 則再任選 2-3 題訪問 ) 利用學生的回答來作為 自己觀察記錄的證據
C 1 # include <stdio.h> 2 int main ( void ) { 4 int cases, i; 5 long long a, b; 6 scanf ("%d", & cases ); 7 for (i = 0;i < cases ;i ++) 8 { 9
201 201 21 ( ) 1. C pa.c, pb.c, 2. C++ pa.cpp, pb.cpp Compilation Error long long cin scanf Time Limit Exceeded 1: A 1 B 1 C 5 D RPG 10 E 10 F 1 G II 1 1 201 201 C 1 # include 2 int main ( void
If Close[Length]!= 0 Then B Close[Length] 是 Length 日前的 Close 不是 0 的話則執行 B % Number 以 Divisor 來求取除法並傳回剩下的部份和 Divisor 具備相同的符 號 格式 :Number % Divisor Numb
邏輯判斷與條件控制語法說明 數學演算符號意義 * 乘法 / 除法 + 加法 - 減法! 這單字使用方式類似 Not 邏輯運算子 注意 : 由於是邏輯運算, 只能執行布林值 ( 真 / 假 ) 的運算, 不能被使用在 指標或數值運算中 If!A Then B 若 A 為 False 則!A 是 True 就執行 B, 若 A 為 True,!A 則為 False 就 退出 If ( 條件 ) 指令 If!
投稿類別:資訊類
投稿類別 : 資訊類 篇名 : 從 VB.Net 學 C# 作者 : 陳諭瑩 高雄市立高雄高級工業職業學校 資訊科高三乙班王子喬 高雄市立高雄高級工業職業學校 資訊科高三乙班李宗恩 高雄市立高雄高級工業職業學校 資訊科高三乙班 指導老師 : 莊利吉老師 壹 前言 一 研究動機 在高職裡 VB.Net 是課程標準, 但由於現在職場上大部分都是使用 C#, 所以我們用 VB.Net 的基礎學 C#, 再利用高職所學到的
運算子多載 Operator Overloading
多載 Overloading 講師 : 洪安 1 多型 編譯時期多型 ( 靜態多型 ) function overloading 函數多載 如何正確呼叫同名的函數? 利用參數個數與型態 operator overloading 運算子多載 其實同 function overloading 執行時期多型 ( 或動態多型 ) 如何正確呼叫不同物件的相同名稱的成員函數 利用繼承與多型 2 函數多載 Function
( CIP) /. :, ( ) ISBN TP CIP ( 2005) : : : : * : : 174 ( A ) : : ( 023) : ( 023)
( CIP) /. :, 2005. 2 ( ) ISBN 7-5624-3339-9.......... TP311. 1 CIP ( 2005) 011794 : : : : * : : 174 ( A ) :400030 : ( 023) 65102378 65105781 : ( 023) 65103686 65105565 : http: / /www. cqup. com. cn : fxk@cqup.
nooog
C : : : , C C,,, C, C,, C ( ), ( ) C,,, ;,, ; C,,, ;, ;, ;, ;,,,, ;,,, ; : 1 9, 2 3, 4, 5, 6 10 11, 7 8, 12 13,,,,, 2008 1 1 (1 ) 1.1 (1 ) 1.1.1 ( ) 1.1.2 ( ) 1.1.3 ( ) 1.1.4 ( ) 1.1.5 ( ) 1.2 ( ) 1.2.1
前言 人類的歷史, 因 一個簡單的思維 而改變! 1776 Thomas Paine COMMON SENSE
抓到重點 + 專注力, 做事有效率 GPS You Can Change Your Way of Working Just by Changing Your Way of Thinking 高橋政史 著 黃玉寧 譯 前言 人類的歷史, 因 一個簡單的思維 而改變! 1776 Thomas Paine COMMON SENSE 8 12 1930 60 3 Steve Jobs 你所需要的是技巧? 還是思考方法?
6 2012 8476你猜得到它是什麼嗎 它就是 高分子! 生活中的高分子 有種物質的重要性不亞於我們所呼吸的空氣, 不管身在何處, 都有它的存在, 它甚至就隱藏在人體裡面! 人類若失去了它, 就得回到遠古時代, 甚至可能終止生命 高分子是什麼 高分子是由千個 甚至萬個以上的原子所組成, 呈現柔軟的特性 日常生活中使用的塑膠袋就是由高分子製造的, 人體組成中的 DNA 也是一種高分子 2012 8476
Microsoft PowerPoint - chap3
第三章基本輸出與輸入的方法 資訊科技系 林偉川 本章簡介 如何從鍵盤輸入資料以及從螢幕輸出結果, 是寫程式一個很基本的技巧, 因為這也是使用者與電腦交談的重要橋樑 在 C 語言函式庫中有不少輸出 / 入相關函式, 不過較常用到的也只有其中幾個 從螢幕輸出類 : 由鍵盤輸入類 : 2 1 從螢幕輸出類 printf(): 函數名稱取 print 以及 format 兩個字組成 此函式會將我們指定的字串以指定的格式輸出在螢幕上
1
守大學電機系 電腦視覺 報告 單元一 數位影像 : 格式和操作 參考解答 MIAT( 機器智慧與自動化技術 ) 實驗室 中華民國 93 年 9 月 29 日 1. (a) 如果指紋影像 finger300x300 的取像面積是 14(mm)x14(mm), 請計算取像系統的 dpi (b) 如果 kaoshiung512x512 遙測影像的覆蓋面積是 5(Km)x5(Km), 請計算該影像的解析度
任務二 : 產生 20 個有炸彈的磚塊, 放在隨機的位置編輯 Block 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) Write a description of class
踩地雷遊戲 高慧君南港高中 開啟專案 MineSweep 任務一 : 產生 30X20 個磚塊編輯 Table 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) import java.util.arraylist; Write a description of class MyWorld
現在人類獲取地球內部訊息的方法, 是從可能影響我們身家性命安全的地震, 用數學模型把地震資料轉換成地震波速度, 進而獲得地底物質密度與深度的關係 地下世界知多少 km/s g/cm 3 P Gpa km S P S 3,000 3,000 ak K 透視地底 Percy Bridgma
透視地球深處 的窗戶? extreme condition extreme environment 94.5 1 270 21 3.9 12.3 6,400 300 4,000 1864 Jules Gabriel Verne 1959 2008 1990 Paul Preuss 2003 24 2013 2 482 現在人類獲取地球內部訊息的方法, 是從可能影響我們身家性命安全的地震, 用數學模型把地震資料轉換成地震波速度,
( )... 5 ( ) ( )
2016 大學校院招收大陸地區學生聯合招生委員會 71005 臺南市永康區南臺街 1 號 E-mail:[email protected] WEB:http://rusen.stust.edu.tw TEL:+886-6-2435163 FAX:+886-6-2435165 2 0 1 6 0 1 1 9 2016... 2... 3... 5 ( )... 5 ( )... 5 1... 6 2...
Microsoft Word - part doc
3 指標與陣列 3-1 指標與一維陣列 3-2 指標與二維陣列 3-3 陣列指標 3-4 為什麼 parr 等同於 *parr? 3-5 指向陣列的指標 3-6 多重指標 3-7 命令列引數 3-8 除錯題 3-9 問題演練 3-10 程式實作 32 Part 1 C 程式語言篇 指標其實就是一位址 陣列的名稱, 表示此陣列第一個元素的位址, 所以它也是指標 由此可知, 指標與陣列的關係是很密切的
C
C 2017 4 1 1. 2. while 3. 4. 5. for 6. 2/161 C 7. 8. (do while) 9. 10. (nested loop) 11. 12. 3/161 C 1. I 1 // summing.c: 2 #include 3 int main(void) 4 { 5 long num; 6 long sum = 0L; 7 int status;
CH09
(Preprocessor) (Macro) C++ (#) 9-1 9-2 9-3 9-4 備註 : 可依進度點選小節 9-1 前置處理器 (Preprocessor) 9-1 前置處理器 (Preprocessor) 在上圖中, 為了開發一個大型的應用程式所需的 include 檔案 原始檔案都不一定只有一個 而在連結過程當中所加入的其它目的檔案也可以是 0 到多個, 但它的副檔名不一定只有.obj,
投影片 1
計算機程式及實習 期末報告 題目 : 六宿炒翻天 班級 : 奈米一乙姓名 : 陳洋翼學號 :4A514050 老師 : 謝慶存 程式說明 設計結帳系統, 選擇數量後, 在按下計算, 將會顯示總金額 若是老人或小孩, 將可享 8 折或 9 折的優惠 程式畫面 填選數量 在火腿蛋炒飯的數量選擇 1, 並按下計算, 可得總金額 50 元 程式畫面 打折 填選完後, 若客人是小孩或老人, 選擇欲打折項目,
Spyder Anaconda Spyder Python Spyder Python Spyder Spyder Spyder 開始 \ 所有程式 \ Anaconda3 (64-bit) \ Spyder Spyder IPython Python IPython Sp
01 1.6 Spyder Anaconda Spyder Python Spyder Python Spyder Spyder 1.6.1 Spyder 開始 \ 所有程式 \ Anaconda3 (64-bit) \ Spyder Spyder IPython Python IPython Spyder Python File
chap07.key
#include void two(); void three(); int main() printf("i'm in main.\n"); two(); return 0; void two() printf("i'm in two.\n"); three(); void three() printf("i'm in three.\n"); void, int 标识符逗号分隔,
17-72c-1
台灣喜宴文化與陶瓷餐具設計開發 廖素慧 林長弘 林秀娟 摘 要 喜宴文化它包括了生活風俗習慣 禮教的 禁忌與料理 飲食的結合 可以看到民族的思 想行為以及社會的結構模式 是生活文化的濃 縮 它的過程對於一對新人在人生旅程開始 時 得到關愛與祝福也給予責任 所以喜宴的 禮教約束 是人生很重要的一個過程 好的飲 食禮教約束可以產生良性的人生觀 從喜宴的 食物料理與新開發餐具的造形與裝飾美感等的 結合來做一個開始
男人的大腦 女人的大腦
46 2014 6 498 男女大乾坤 男女的戀愛行為 男人的大腦 女人的大腦 2014 6 498 47 48 2014 6 498 女人的戀愛行為 70 900 男人的戀愛行為 8 2014 6 498 49 50 2014 6 498 對於愛與性的混淆 男女所面臨的問題 和我一樣喜歡做愛除了我, 不可以看別人相信我, 沒有問題現在, 和我做愛知道如何引燃我從不傷害我 朋友關係和性 嫉妒和占有欲
行政法概要 本章學習重點 本章大綱 第一節行政作用之概念 第二節行政作用之分類 一 行政程序法 第三節行政作用法之範圍 第四節行政作用之私法 行為 二 行政罰法三 行政執行法一 源起二 類型 第五節行政作用中的非 權力行為 一 類型 二 事實行為 第六節行政作用之內部 行為 一 行政規則
第 6 章 行政作用及其分類 行政法概要 本章學習重點 1. 2. 本章大綱 第一節行政作用之概念 第二節行政作用之分類 一 行政程序法 第三節行政作用法之範圍 第四節行政作用之私法 行為 二 行政罰法三 行政執行法一 源起二 類型 第五節行政作用中的非 權力行為 一 類型 二 事實行為 第六節行政作用之內部 行為 一 行政規則 二 內部指令 CHAPTER 6 行政作用及其分類 內文教學區 1 行政法概要
的友誼 而且無論外貌怎樣改變 自信心是自己給自己的 發自內心 的自我認同感是無法改變的 只要自我認同才能得真正的心靈富足 而不是單純的改變外表 不同的整容公司亦會利用現今社會的價值觀來作宣傳 誇大整容 後的效果 又用明星效應 令消費者認為整容真的能變成明星一樣 整容這個風氣是由人們的價值觀造成的 有人指出 我們要接納 整容後的人以及香港社會應對此持更開放的態度 但相反地 為什麼 不能接納那些我們認為不
C/C++基礎程式設計班
C/C++ 基礎程式設計 C++: 物件的使用 參考 重載函式 成就別人認為不可能的事 Do what nobody else considered possible. -Steve Jobs 講師 : 張傑帆 CSIE NTU C++ 相較於 C 的特色 向下相容 在 C 語言中, 我們學了許多程式語法, 所有學過的東西, 在 C++ 中都可以使用 高階的程式描述方式 更利於用來開發大型專案, 讓程式設計師在分工時更能快速的開發程式,
C Arrays
本章將介紹資料結構中的重要主題 陣列 (Arrays) 是由相同型別的相關資料項所組成的資料結構 在第十章當中, 我們會討論 C 的 struct( 結構 )- 它可能是由不同型別的相關資料項所組成的資料結構 陣列和結構都屬於 靜態 的資料結構, 它們在程式執行期間的大小並不會改變 十二章介紹的是動態資料結構, 例如串列 佇列 堆疊和樹, 它們都可以在程式執行期間改變大小 陣列是一群具有相同名稱以及相同型別的記憶體位置
Microsoft PowerPoint - chap07.ppt
第七章類別類別與物件 資訊科技系 林偉川 類別的定義語法 修飾字 class 類別名稱 { // 類別的標頭 // 屬性宣告 // 建構子定義 // 方法定義 2 1 類別的修飾字 public- 公開類別, 宣告成此種類別可以被任何類別所使用 無修飾字 (default) 類別, 此種類別僅能被同一套件 (package) 內的類別使用 final- 此種類別不可被繼承 abstract- 此為抽象類別的修飾字
Microsoft Word - 01.DOC
第 1 章 JavaScript 简 介 JavaScript 是 NetScape 公 司 为 Navigator 浏 览 器 开 发 的, 是 写 在 HTML 文 件 中 的 一 种 脚 本 语 言, 能 实 现 网 页 内 容 的 交 互 显 示 当 用 户 在 客 户 端 显 示 该 网 页 时, 浏 览 器 就 会 执 行 JavaScript 程 序, 用 户 通 过 交 互 式 的
封面-12
第十二章 701Client TECHNOLOGY CO.,LTD. 701Client 701Server 701Client "701Client", 12-1 :supervisor :supervisor : 1. : 00~99 100 2. : 00~63 ( 63 / / ) 3. : 18 9 4. : 18 9 5. 12-2 TECHNOLOGY CO.,LTD. 701Client
C/C++语言 - 分支结构
C/C++ Table of contents 1. if 2. if else 3. 4. 5. 6. continue break 7. switch 1 if if i // colddays.c: # include int main ( void ) { const int FREEZING = 0; float temperature ; int cold_ days
翁秉仁教授 本著作除另有註明, 所有內容取材自作者翁秉仁教授所著作的微積分講義, 採用創用 CC 姓名標示 - 非商業使用 - 相同方式分享 3.0 台灣授權條款釋出
翁秉仁教授 本著作除另有註明, 所有內容取材自作者翁秉仁教授所著作的微積分講義, 採用創用 CC 姓名標示 - 非商業使用 - 相同方式分享 3.0 台灣授權條款釋出 函數與圖形方程式與平面曲線 隱函數反函數反三角函數連續函數與極限 與自然對數 函數與圖形方程式與平面曲線 隱函數反函數反三角函數連續函數與極限 與自然對數 函數與圖形方程式與平面曲線 隱函數反函數反三角函數連續函數與極限 與自然對數函數定義函數必須滿足兩個條件
Scott Effective C++ C++ C++ Roger Orr OR/2 ISO C++ Effective Modern C++ C++ C++ Scoot 42 Bart Vandewoestyne C++ C++ Scott Effective Modern C++ Damien
Effective Modern C++ C++ C++ C++11/C++14 C++ Scott Meyers Gerhard Kreuzer Siemens AG Effective Modern C++ Effective Modern C++ Andrei Alexandrescu Facebook Modern C++ Design C++ C++ Nevin Liber DRW Trading
Autodesk Product Design Suite Standard 系統統需求 典型使用用者和工作流程 Autodesk Product Design Suite Standard 版本為為負責建立非凡凡產品的設計師師和工程師, 提供基本概念設計計和製圖工具, 以取得令人驚驚嘆
Autodesk Product Design Suite Standard 20122 系統統需求 典型使用用者和工作流程 Autodesk Product Design Suite Standard 版本為為負責建立非凡凡產品的設計師師和工程師, 提供基本概念設計計和製圖工具, 以取得令人驚驚嘆的產品設計計 Autodesk Product Design Suite Standard 版本中中包括以下軟體體產品
<4D F736F F D B0D3B77EC3FEA7DEC3C0C476C1C9A5BFA6A1B8D5C3442DB57BA6A1B35DAD702DBEC7ACEC2E646F6378>
全國國高級中中等學校 105 學年度商商業類學學生技藝藝競賽 程式式設計 職職種 學學科 試試卷 崗位位編號 : 姓名 : 注意事項 : 請將答案案劃記於答案案卡, 未依依規定劃記者者不予計分分 試題說明 :( 選擇題每每題 4 分, 共 100 分 ) ( )1. 執行以下 Visual Basic 程式片段, 其結果為何?(A) 15 Dim i As Byte i = &HFC Console.WriteLine(Not
書面
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 5.4 互動功能畫面 程式碼請參考附件-程式三 在進入互動頁面時 會執行setAllText()依寵物狀態數值來 設定狀態文字與頭像 並且依心情決定是否要不要播放音效 觸摸的區域 由於是自己寫的 view 所以並未透過xml來設置 而是透過Layut.addview()來動態新增
戒菸實務個案自助手冊105年Ver.2
本計劃經費來自 品健康福利捐支應 衛生福利部國民健康署 我 名字 為了 以下理由 1. 2. 3. 4. 5. 決定從 年 月 日起 簽署人 (簽章) 見證人 (簽章) 年 月 日 a 準備戒 V 環境的準備 排除讓自己想吸 自己戒 的環境 V 心理的準備 瞭解自己的吸 的環境 建立能提醒 行為 強化戒 決心 V 身體的準備 評估身體的尼古丁依賴度 必要時找尋 藥物降低戒 戒 的難度
街街街街街街街街
1 基本輸出入 與四則運算 本章大綱 5.1 本章的教學目標 5.2 Java 語言的運算子 5.3 算術與字串連接運算子 5.4 位元運算子 5.5 資料型態的轉換 5.1 本章的教學目標 程式語言有許多的算術運算所組成, 本章將介紹 Java 程式語言中基本輸出入運算子的功能與使用方式, 運算子包括 : 指定運算子 算數與字串連接運算子 位元運算子 資料型態的轉換運算子的功能與相關應用, 讓各位同學了解不同運算子的使用時機與應用方法
Microsoft Word - C-pgm-ws2010.doc
Information and Communication Technology 資訊與通訊科技 Loops (while/for) C 廻路 姓名 : 班別 : ( ) CS C Programming #1 Functions 函數 : 1 若 n=14, 求以下表示式的值 Expressions 表示式 Value 值 Expressions 表示式 Value 值 A 20 2 * (n /
Microsoft Word - 投影片ch11
Java2 JDK5.0 教學手冊第三版洪維恩編著博碩文化出版書號 pg20210 第十一章抽象類別與介面 本章學習目標認識抽象類別學習介面的使用認識多重繼承與介面的延伸 抽象類別與介面 11-2 11.1 抽象類別 抽象類別的目的是要依據它的格式來修改並建立新的類別 11.1.1 定義抽象類別 定義抽象類別的語法如下 : abstract class 類別名稱 { 宣告資料成員 ; // 定義抽象類別
