程式設計 博碩文化出版發行.

Slides:



Advertisements
Similar presentations
第一單元 建立java 程式.
Advertisements

計算機程式語言實習課.
物件導向語言基礎 Chapter 4 認知 學完本章應了解何謂常數、變數。 了解有哪些運算式、運算子和基本輸入、輸出指令。
JAVA 程式設計 資訊管理系 - 網路組.
陳維魁 博士 儒林圖書公司 第九章 資料抽象化 陳維魁 博士 儒林圖書公司.
第1节 光的干涉 (第2课时).
資料結構使用Java 第1章 資料結構與Java程式複習.
Chapter 5 迴圈.
第3章 變數與運算子 3-1 電腦記憶體的基礎 3-2 變數的命名與宣告 3-3 VB.NET的資料型別
Introduction to the C Programming Language
Visual C++ introduction
簡易C++除錯技巧 長庚大學機械系
2-3 基本數位邏輯處理※.
2 C++ 程式概論 2.1 C++ 程式結構 程式註解 // 插入標題檔 #include 2-3
列舉(enum).
第四章 流程控制(一) if,if-else 與 switch
保留字與識別字.
使用VHDL設計—4位元加法器 通訊一甲 B 楊穎穆.
使用VHDL設計—4位元位移器 通訊一甲 B 楊穎穆.
Java程式概觀.
C語言簡介 日期 : 2018/12/2.
JAVA 程式設計 資訊管理系 - 網路組.
數位邏輯 第2章數字系統 2-1數目系統 2-2數目系統的互換 2-3二進制有號數的加減運算 2-4文數字碼與同位偵錯碼.
金融資訊管理 運算子與條件分支.
第 4 章 運算式 (Expression).
JAVA程式語言入門(I) 授課教師:王大瑾
邏輯關係運算 == 等於 & 且 (logical and) ~= 不等於 | 或 (logical or) < 小於
第一章 直角坐標系 1-1 數系的發展.
第 四 章 堆疊(Stack) 課程名稱:資料結構 授課老師:________ 2019/2/23.
第一單元 建立java 程式.
能盡物之性,則可以贊天地之化育。 可以贊天地之化育,則可以與天地矣。 《中庸﹒第二十一章》
網頁程式設計 本章投影片錄自HTML5、CSS3、RWD、jQuery Mobile跨裝網頁設計 陳惠貞 著 碁峰資訊股份有限公司出版
C程式的架構 基本的資料型態 變數的宣告 常見的語法錯誤 基本的運算 優先順序與結合律 資料型態的轉換
第三章 資料型態與輸出控制 本章學習目標 認識Matlab的基本資料型態 練習資料型態的轉換 學習如何控制Matlab的輸出格式
第 19 章 XML記憶體執行模式.
數學 近似值 有效數值.
金融資訊管理 運算子與條件分支.
JAVA 程式設計 資訊管理系 - 網路組.
輸入&輸出 函數 P20~P21.
ASP基礎— VBScript基本語法 張森.
5 重複迴圈 5.1 增減運算符號 增量運算符號 減量運算符號
第一次Labview就上手 參考書籍: LabVIEW for Everyone (Jeffrey Travis/Jim Kring)
CH05. 選擇敘述.
大綱:加減法的化簡 乘除法的化簡 去括號法則 蘇奕君 台灣數位學習科技股份有限公司
挑戰C++程式語言 ──第8章 進一步談字元與字串
|第 2 章 變數與資料型態.
認識常數與變數 學習C++所提供的各種基本資料型態 瞭解溢位的發生 學習認識資料型態之間的轉換
Foundations of Computer Science Chapter 4 資料運算
挑戰C++程式語言 ──第7章 輸入與輸出.
流程控制:Switch-Case 94學年度第一學期‧資訊教育 東海大學物理系.
計算機程式設計 老師:蘇炳煌 助教:楊斯竣.
陣列與結構.
Ch18. 位元運算子與運算子函式.
選擇性結構 if-else… switch-case 重複性結構 while… do-while… for…
1-1 二元一次式運算.
鄭士康 國立台灣大學 電機工程學系/電信工程研究所/ 資訊網路與多媒體研究所
適用於多選一 可減少if 與 else配對混淆的錯誤.
計算機程式設計 老師:謝孟諺 助教:楊斯竣.
第五章 運算關係式(Expression).
Programming & Language Telling the computer what to do
變數、常數與資料型態 大綱 變數與常數 變數 資料型別 資料的輸出.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
String類別 在C語言中提供兩種支援字串的方式 可以使用傳統以null結尾的字元陣列 使用string類別
10303: How Many Trees? ★★☆☆☆ 題組:Contest Archive with Online Judge
C語言程式設計 老師:謝孟諺 助教:楊斯竣.
快取映射 之直接對映 計算整理.
Introduction to the C Programming Language
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
InputStreamReader Console Scanner
Presentation transcript:

程式設計 博碩文化出版發行

第四章 運算子與運算式 課前指引 在C語言中,運算元包括了常數、變數、函數呼叫或其他運算式,而運算子的種類相當多,有指派運算子、算術運算子、比較運算子、邏輯運算子、遞增遞減運算子,以及位元運算子等六種。

章節大綱 4-1 運算式簡介 4-2 認識運算子 備註:可依進度點選小節

4-1 運算式簡介 在程式語言的領域中,如果依據運算子在運算式中的位置,可區分以下三種表示法: 中序法(Infix):運算子在兩個運算元中間,例如A+B、(A+B)*(C+D)等都是中序表示法。 前序法(Prefix):運算子在運算元的前面,例如+AB、*+AB+CD等都是前序表示法。 後序法(Postfix):運算子在運算元的後面,例如AB+、AB+CD+*等都是後序表示法。

4-1 運算式簡介 運算式分類 一元運算式:由一元運算子所組成的運算式,在運算子左側或右側僅有一個運算元。例如-100(負數)、tmp--(遞減)、sum++(遞增)等。 二元運算式:由二元運算子所組成的運算式,在運算子兩側都有運算元。例如A+B(加)、A=10(等於)、x+=y(遞增等於)等。 三元運算式:由三元運算子所組成的運算式。由於此類型的運算子僅有「? :」(條件)運算子,因此三元運算式又稱為「條件運算式」。 例如 a>b ? ‘Y‘ : ’N’。 語意:若a>b成立,則回傳字元Y;若否,則回傳字元N

4-1 運算式簡介 運算式中資料型態的自動轉換 運算式中會依照數值範圍大者作為轉換的類型 例如:整數型態會自動轉成浮點數型態 float x; x = 2 + 3.14159; 比較 int x; 如果指定敘述「=」兩邊的型態不同,會一律轉換成與左邊變數相同的型態。當然在這種情形下,要注意執行結果可能會有所改變,例如例如將double型態指定給short型態,可能會有遺失小數點後的精準度。

4-1 運算式簡介 範例CH04_01.c /*資料型態的 自動轉換*/

4-1 運算式簡介 執行結果

4-1 運算式簡介 程式解說 第7~11行宣告不同資料型態的變數。 第13行將整數100與字元c相加,並儲存到整數變數i中,字元變數c會轉成ASCII碼進行相加。 第15行將整數i與單精度浮點數f加法運算後,存入倍精度浮點數d,由第18行中的輸出可以看見d佔了8個位元組,就是我們所強調的運算結果會一律轉換成與左邊變數相同的型態。 第20行則是把d的值設定給短整數sum,因此在第22行輸出時會把小數點後得資料去掉。

4-2 認識運算子 前言 運算子的種類相當多,分門別類的執行各種計算功能,例如指派運算子、算術運算子、比較運算子、邏輯運算子、遞增遞減運算子,以及位元運算子等。 一個運算式中往往包含了許多運算子,如何來安排彼此間執行的先後順序,就需要依據優先權來建立運算規則了。

4-2 認識運算子 運算子計算的優先順序 (續) 運算子優先順序 說明 () 括號,由左至右。 〔〕 方括號,由左至右。 ! - ++ -- 邏輯運算NOT 負號 遞增運算 遞減運算,由右至左。 ~ 位元邏輯運算子,由右至左。 ++、-- 遞增與遞減運算子,由右至左。 * / % 乘法運算 除法運算 餘數運算,由左至右。 + 加法運算 減法運算,由左至右。 << >> 位元左移運算 位元右移運算,由左至右。

4-2 認識運算子 運算子計算的優先順序 運算子優先順序 說明 > >= < <= 比較運算大於 比較運算大於等於 比較運算小於 比較運算小於等於 == != 比較運算等於 比較運算不等於,由左至右。 & ^ | 位元運算AND,由左至右。 位元運算XOR 位元運算OR,由左至右。 && || 邏輯運算AND 邏輯運算OR,由左至右。 ?: 條件運算子,由右至左。 = 指定運算,由右至左。

4-2 認識運算子 範例CH04_02.c /*運算子的優先順序*/

4-2 認識運算子 執行結果 程式解說 第7行宣告整數變數sum。 第9行計算此運算式,並將此結果儲存在sum中,這運算式將根據C的運算子優先權順序來進行。 第10行使用%%方式輸出%運算子。

4-2 認識運算子 指定運算子 其實「=」主要是當做「指定」 (assign)的功能,各位可以想像成當宣告變數時會先在記憶體上安排位址,等到利用指定運算子(=)設定數值時,才將數值指定給該位址來儲存。 「=」指定運算子,由至少兩個運算元組成,主要作用是將等號右方的值指派給等號左方的變數。

4-2 認識運算子 範例CH04_03.c /*「=」之使用*/

4-2 認識運算子 執行結果 程式解說 第9行請輸入一個整數值,儲存在sum變數中。 第10行將sum的值加1,並重新儲存在sum中。

4-2 認識運算子 算術運算子 算術運算子是最常用的運算子類型。其符號與名稱如下表 運算子 說明 使用語法 執行結果(A=25,B=7) + 加 A + B 25+7=32 - 減 A - B 25-7=18 * 乘 A * B 25*7=175 / 除 A / B 25/7=3 % 取餘數 A % B 25%7=4 正號 +A +25 負號 -B -7

4-2 認識運算子 範例CH04_04.c /* 「+, ─, *, /, %」之使用*/

4-2 認識運算子 執行結果 程式解說 第8 行中分別輸入a與b的值。 第11~13行將a與b值直接代入運算式,在此各位可仔細觀察我們在printf()函數中格式化字串的寫法。 不要忘了,如果想在螢幕顯示出%字元,必須要重覆兩次%字元。

4-2 認識運算子 範例CH04_05.c /*「%」之使用*/

4-2 認識運算子 執行結果 程式解說 第8行當125除以4時,餘數為1。 而第9行125除以5時,餘數正好為0。 第10行除以6時,餘數正好為5。

4-2 認識運算子 關係運算子 關係運算子主要是在比較兩個數值之間的大小關係,共有六種,如下表所示。 關係運算子 功能說明 用法 A=15,B=2 > 大於 A>B 15>2,結果為true(1)。 < 小於 A<B 15<2,結果為false(0)。 >= 大於等於 A>=B 15>=2,結果為true(1)。 <= 小於等於 A<=B 15<=2,結果為false(0)。 == 等於 A==B 15==2,結果為false(0)。 != 不等於 A!=B 15!=2,結果為true(1)。

4-2 認識運算子 範例CH04_06.c /*關係運算子之使用*/

4-2 認識運算子 執行結果 程式解說 第5行:宣告a、b的值。

4-2 認識運算子 範例CH04_07.c /*數字0代表偽,其餘皆為真*/

4-2 認識運算子 執行結果 程式解說 第6行因為判斷式中為1,所以執行第7行指令。 第8行if(-5)為真,則執行第9行指令。

4-2 認識運算子 邏輯運算子 邏輯運算子也是運用在邏輯判斷的時候,可控制程式的流程,通常是用在兩個表示式之間的關係判斷 。 運算子 功能 用法 && AND a>b && a<c || OR a>b || a<c ! NOT !(a>b)

4-2 認識運算子 邏輯運算子 || (或)運算子 || 邏輯運算子 A 1 B

4-2 認識運算子 邏輯運算子 && (且) 運算子 && 邏輯運算子 A 1 B

4-2 認識運算子 邏輯運算子 ! (否)運算子 A 1 !運算子

4-2 認識運算子 範例CH04_08.c /*邏輯運算子之使用*/

4-2 認識運算子 執行結果 程式解說 第7行宣告a、b及c三個整數變數,並設定不同的值。 第12行當連續使用邏輯運算子時,它的計算順序為由左至右,也就是先計算「a<b && b<c」,然後再將結果與「c<a」進行OR的運算。 第13行則由括號內先進行,在由左而右依序進行。

4-2 認識運算子 位元運算子 區分為「位元邏輯運算子」與「位元位移運算子」兩種。 位元邏輯運算子 位元位移運算子 有 & (AND)、 | (OR)、 ^ (XOR) ~ (NOT) 位元位移運算子 有 左移運算子(<<) 右移運算子(>>)

4-2 認識運算子 位元邏輯運算子 &(AND;且) 執行AND運算時,對應的兩字元都為1時,運算結果才為1,否則為0。 例如:a=12,則a&38得到的結果為4,因為12的二進位表示法為1100,38的二進位表示法為0110,兩者執行AND運算後,結果為十進位的4。如下圖所示:

4-2 認識運算子 位元邏輯運算子 |(OR;或) 例如a=12,則a|38得到的結果為46,如下圖所示:

4-2 認識運算子 位元邏輯運算子 ^(XOR) 執行XOR運算時,對應的兩字元只有任一字元為1時,運算結果為1,但是如果同時為1或0時,結果為0。 例如a=12,則a^38得到的結果為42,如下圖所示:

4-2 認識運算子 位元邏輯運算子 ~(NOT) NOT作用是取補數(complement),也就是0與1互換。 例如a=12,二進位表示法為1100,取1的補數後,由於所有位元都會進行0與1互換,因此運算後的結果得到-13:

4-2 認識運算子 範例CH04_09.c /*位元邏輯運算子之使用*/

4-2 認識運算子 執行結果 程式解說 第6行宣告a=12,b=38。 第8行輸出a與b AND運算後的結果。 第9行輸出a與b OR運算後的結果。 第10行輸出a與b XOR運算後的結果。 第11行輸出a NOT運算後的結果。

4-2 認識運算子 位元位移運算子 <<(左移) 左移運算子(<<)可將運算元內容向左移動n個位元,左移後超出儲存範圍即捨去,右邊空出的位元則補0。語法格式如下: 例如運算式「12<<2」。數值12的二進位值為1100,向左移動2個位元後成為110000,也就是十進位的48。如下圖所示。 a<<n

4-2 認識運算子 位元位移運算子 >>(右移) 右移運算子(>>)與左移相反,可將運算元內容右移n個位元,右移後超出儲存範圍即捨去。 在此請注意,這時右邊空出的位元,如果數值是正數則補0,負數則填1。語法格式如下: 例如運算式「12>>2」。數值12的二進位值為1100,向右移動2個位元後成為0011,也就是十進位的3。如下圖所示。 a>>n

4-2 認識運算子 範例CH04_10.c /*「<<」,「 >>」之使用*/

4-2 認識運算子 執行結果 程式解說 6行宣告a=12,二進位表示法為00001100。 第9行左移2位運算,第10行右移2位運算。 第13行左移2位運算,第14行右移2位運算。

4-2 認識運算子 遞增與遞減運算子 分成「前置型」及「後置型」兩種,屬於一元運算子的一種 ,可分為底下兩種: 遞增運算子++ 遞減運算子--

4-2 認識運算子 遞增運算子++ 遞增運算子可放在字元的前方或後方,下表說明了遞增運算子(++)兩種格式的運作方式: 運算式 執行順序說明 int a=0,b=0; b=++a; /*宣告a與b為整數,初始值皆為0*/ a=a+1; /*先將a值加1,此時a=1*/ b=a; /*再將a值指定給b,此時b=1*/ b=a++; b=a; /*先將a值指定給b,此時a、b都是0*/ a=a+1; /*a值加1,但b值不變,此時a=1,b=0*/

4-2 認識運算子 遞減運算子-- 遞減運算子與遞增運算子功能相仿,不同的位置則會產生截然不同的計算順序如下表: 運算式 執行順序說明 int a=0,b=0; b=--a; /*宣告a與b為整數,初始值皆為0*/ a=a-1; /*先將a值減1,此時a=-1*/ b=a; /*將a值指定給b,此時b=-1*/ b=a--; b=a; /*先將a值指定給b,此時a、b都是0*/ a=a-1; /*a值減1,但b值不變,此時a=-1,b=0*/

4-2 認識運算子 範例 CH04_11.c /* 「++」, 「--」之使用 */

4-2 認識運算子 執行結果

4-2 認識運算子 程式解說 7行宣告a=15,第9行使用前置型遞增運算子,所以此時b=16。 第10行輸出時,a=16、b=16。

4-2 認識運算子 複合指定運算子 運算子 說明 使用語法 += 加法指定運算 A += B -= 減法指定運算 A -= B *= 乘法指定運算 A *= B /= 除法指定運算 A /= B %= 餘數指定運算 A %= B &= AND位元指定運算 A &= B |= OR位元指定運算 A |= B ^= NOT位元指定運算 A ^= B <<= 位元左移指定運算 A <<= B >>= 位元右移指定運算 A >>= B

4-2 認識運算子 範例CH04_12.c /*「*=」,「+=」 , 「%=」 ,「-=」之使用*/

4-2 認識運算子 執行結果 程式解說 第6~7行宣告多個變數與設定初始值。 第12行利用複合指定運算子,計算下列算式,運算時必須是由右方開始,依序逐步進行到左方。

本章結束 Q&A討論時間