20. 目錄
•總共有21章,但看來本篇只提到第0章~第10章:
• Class 0 C語言的重要技術資料
• Class 1 Visual Studio介紹
• Class 2 C語言的用途/編譯方式
• Class 3 註解、基本變數宣告、運算子
• Class 4 基本的I/O
• Class 5 判斷式
• Class 6 其他的常用函數
• Class 7 迴圈
• Class 8 自訂函數
• Class 9 遞迴
• Class 10 陣列
36. Visual Studio 版本:
•由新至舊:
• Visual Studio 2017
• Visual Studio 2015
• Visual Studio 2013
• Visual Studio 2012
• Visual Studio 2011
• Visual Studio 2010
• Visual Studio 2008
• Visual Studio 2005
• 以下省略....
59. "/*文字*/" 註解
•這是C99(ISO9899:1999)規格前,唯一一種的註解寫法
•而在ISO9899:2011 6.4.9 Comments -1中所提到:
• a string literal, or a comment, the characters /* introduce a comment.
The contents of such a comment are examined only to identify
multibyte characters and to find the characters */ that terminate it.
• 意指:我們能夠在符號/*到符號*/之間去撰寫程式碼的註解
•而我們在維護C89或更早的程式碼時就能夠注意到只有這種註解
60. "//文字" 註解
•這是C99(ISO9899:1999)規格後,新種的註解寫法
•而在ISO9899:2011 6.4.9 Comments -2中所提到:
• Except within a character constant, a string literal, or a comment, the
characters //introduce a comment that includes all multibyte
characters up to, but not including, thenext new-line character.
• 意思是指://為單行註解,一個//註解範圍只能存在單一一行
•請注意如果你是使用C89或更早的編譯器時,請注意這是1999年
後才出現的新規範
64. 變數資料型態宣告
•我們所命名的變數前都會有變數的型態宣告,如:int 、float、
double、char 等.......
•根據ISO9899:2011 5.2.4.2 Numerical limits-1 中所提:
• An implementation is required to document all the limits specified in
this subclause,which are specified in the headers <limits.h> and
<float.h>. Additional limits are specified in <stdint.h>.
• 這些型態宣告的範圍限制<limits.h>、<float.h>中指定。 而其他限制是
在<stdint.h>中指定。
•我們在此介紹<limits.h>中部份的資料與稍微帶過浮點數的定義
69. 浮點數的型態(五)
•定義:
• the difference between 1 and the least value greater than 1 that is
representable in thegiven floating point type, b 1−p
•對應於:
• FLT_EPSILON 1E-5
• DBL_EPSILON 1E-9
• LDBL_EPSILON 1E-9
131. 分析:主程式(二)
•據國際 ISO9899:2011文件中 5.1.2.2.3 Program startup -1 提到:
• The function called at program startup is named main. The
implementation declares no prototype for this function. It shall be
defined with a return type of int and with no parameters:
• int main(void) { /* ... */ }
• or with two parameters (referred to here as argc and argv, though any
names may be used, as they are local to the function in which they are
declared):
• int main(int argc, char *argv[]) { /* ... */ }
132. 分析:主程式(三)
•上述的內容,即:
• 我們在宣告主程式的時候有兩種宣告方式:
• 1.規範使用int型態,並不傳入值,回傳int的返回值:
• 也就是我們執行程式結束時,就要回傳給電腦return的值
• 2.規範使用int型態,並傳入值int argc與char argv[],回傳int的返回值
• 這則是規範我們在用指令執行程式時,可以在給予程式一句字串的資料,argc對應輸入
字串索引值,argv[]則對應於輸入的每一個字元,其餘部份就如同上述的程式結束時,
也要回傳給電腦return的值
• 此外下段亦提即:
• The value of argc shall be nonnegative. :argv [argc]應為空指針
• argv[argc] shall be a null pointer. :argc的值應為非負數。
164. 主程式的"main function"
•根據ISO9899:2011 5.1.2.2.3 Program termination-1 中所提:
• If the return type of the main function is a type compatible with int,...
(中略)...terminates the main function returns a value of 0. If the
return type is not compatible with int, the termination status returned
to the host environment is unspecified.
• 亦即,我們在使用int兼容的型態去做main function的宣告時,正常結束
時要return 0來回傳;而使用void的時,則回傳是不確定的(不用回傳)
170. 講解 "exit(...);" 函數
•在ISO9899:2011 7.22.4.4 The exit function-2 中提到:
• The exit function causes normal program termination to occur.
• 即在使用exit( );函數時,系統會將所有這程式相關的東西都關掉
•而基於先前所提到的國際ISO9989:2011中已規範正常結束的值建
議是0,此情況用來中斷的exit( );就不建議回傳0,建議是回傳-1
•當然,在void的主程式則需使用exit;,不去回傳值(畢竟是void)
175. 講解 "break;" 函數
•在ISO9899:2011 6.8.6.3 The break statement -中提到:
• 1. A break statement shall appear only in or as a switch body or loop
body.
• 2. A break statement terminates execution of the smallest enclosing
switch or iteration statement.
• 1.即我們使用break;時,只能在switch(選擇)或loop(迴圈)這兩類函
數之中 [也就是指switch、for、do-while、while的函數]
• 2.而在執行 break;時,則會強制跳出switch或loop的函數
176. 邏輯範例 "break;" 函數
switch ("我的成績"){
case "成績是A":
"我及格了,不會被二一了!";
break;
case "成績是B":
"在讀一年!QAQ"
break;
}
•亦即執行到break;時,強制跳出程式,也是跳到 ' } ' 後
180. 講解 "abs(...)" 函數
•需引用<stdlib.h>
•在ISO9899:2011 7.22.6.1 The abs, labs and llabs functions -2 -3 提到:
• 2.The abs, labs, and llabs functions compute the absolute value of an
integer j. If the result cannot be represented, the behavior is
undefined.
• 3.The abs, labs, and llabs, functions return the absolute value.
• 意思是指在使用abs(...)、labs(...)、 llabs(...)時,會計算整數的絕對值
(基於上面的範例我沒複製過來,所以j其實是在括號內的整數變數),
且會回傳絕對值
※labs(...)是用於計算long int 的絕對值變數時
※llabs(...)則是用於計算long long int 的絕對值變數時
191. 講解 "ceil(...)" 函數
•需引用<math.h>函式庫
•在ISO9899:2011 7.12.9.1 The ceil functions -2 -3 中提到:
• 2.The ceil functions compute the smallest integer value not less than x.
• 3.The ceil functions return ⎡ x ⎤ , expressed as a floating-point number.
• 也就是指ceil(...)時,該函數會回傳 將輸入數值的小數點無條件進位
• 而返回的數值型態依然是浮點數的型態
197. 講解 "floor(...)" 函數
•需引用<math.h>函式庫
•在ISO9899:2011 7.12.9.2 The floor functions -2 -3 中提到:
• 2. The floor functions compute the largest integer value not greater
than x.
• 3. The floor functions return ⎣ x ⎦ , expressed as a floating-point
number.
• 也就是指floor(...)時,該函數會回傳 將輸入數值的小數點無條件捨去
• 而返回的數值型態依然是雙倍精準浮點數(double)的型態
205. 講解 "while(...)" 迴圈
•在ISO9899:2011 6.8.5.1 The while statement -1 提到:
• The evaluation of the controlling expression takes place before each
execution of the loop body.
• 也就是說我們會先判斷while括弧中的邏輯是否為真,如果為真,將會執
行底下{......}的內容,如果不是則跳出迴圈
•而我們在用while迴圈時,為了避免無限迴圈,需要在內部實做一
個控制變數,使得while迴圈不會變成無限迴圈
• 無限迴圈的寫法:
while(1){
//.......
}
209. 講解 "do{...}while(...)" 迴圈
•在ISO9899:2011 6.8.5.2 The do statement -1 提到:
• The evaluation of the controlling expression takes place after each
execution of the loop body.
• 也就是說我們會先執行do大括弧中的東西,在去執行while來判斷是否要
繼續執行迴圈
•即:do大括弧中的東西,一定會被執行一次
•請注意,此處的while需要加分號