陳維魁 博士 wkchen@pchome.com.tw 儒林圖書公司 第三章 變數與繫結 陳維魁 博士 wkchen@pchome.com.tw 儒林圖書公司.

Slides:



Advertisements
Similar presentations
人的性别遗传 合肥市第四十九中学 丁 艳. 男女成对染色体排序图 1 、男性和女性各 23 对染色体有何异同 ? 哪 一对被称为性染色体 ? 2 、这两幅图中,哪幅 图显示的是男性的染色 体?哪幅图显示的是女 性染色体? 3 、图中哪条染色体是 Y 染色体?它与 X 染色体 在形态上的主要区别是.
Advertisements

JAVA 编 程 技 术 主编 贾振华 2010年1月.
回归教材、梳理知识、突出能力 ——2015年历史二轮复习思考 李树全 西安市第八十九中学.
1、一般地说,在生物的体细胞中, 和 都是成对存在的。
辨性别 A B. 辨性别 A B 第三节人类染色体与性别决定 昌邑市龙池初中 杨伟红 学习目标 1.理解人的染色体组成和传递规律。 2.解释人类性别决定的原理。 3.通过探究活动,解读数据了解生男生女的比例。
a simplified C to Java Compiler
迴圈 迴圈基本觀念 while迴圈 do 迴圈 for迴圈 巢狀迴圈 迴圈設計注意事項 其他控制指令 迴圈與選擇的組合.
C#程序设计案例教程 第3章 程 序 结 构.
湖南师大附中高三政治第二次月考 试题讲评 试题讲评.
1.1.2 四 种 命 题.
第 5 章 流程控制 (一): 條件分支.
色 弱 與 色 盲.
第二章 JAVA语言基础.
宠物之家 我的宠物性别? 雌(♀) or 雄(♂) 第一阶段:我的宠物我做主 第二阶段:宠物“相亲记” 第三阶段:家族诞生
新世代計算機概論 第14章 程式語言.
選擇 運算式 邏輯運算 if指令 流程圖基本觀念 程式註解 巢狀if指令 switch指令.
第三章 控制结构.
第八章 编码和测试 编码概述 编码语言与编码工具 编码示例 测试的基本概念 黑盒测试和白盒测试 测试用例设计 多模块程序的测试策略
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
第八章 符号表 符号表的作用: 一致性检查和作用域分析; 辅助代码生成..
第一章 C语言概述.
物件導向程式設計 (Object-Oriented rogramming)
第二章 C# 基础知识.
陳維魁 博士 儒林圖書公司 第七章 參數的傳遞 陳維魁 博士 儒林圖書公司.
C++Primer 3rd edition 中文版 Chap 5
C++程序设计 第二讲 清华大学软件学院.
第一次随堂作业(10.16) 请用扩展的 BNF 描述 C语言里语句的结构; 请用扩展的 BNF 描述 C++语言里类声明的结构;
编译原理与技术 类型检查 2018/11/21 《编译原理与技术》-类型检查.
程式敘述執行順序的轉移 控制與重複、方法 Lecturer:曾學文.
C 程式設計— 控制敘述 台大資訊工程學系 資訊系統訓練班.
程式設計實作.
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
第三章 C++中的C 面向对象程序设计(C++).
2 C++ 的基本語法和使用環境 親自撰寫和執行程式是學好程式語言的不二法門。本章藉由兩個簡單的程式,介紹C++ 程式的基本結構和開發環境,讓初學者能逐漸建立使用C++ 的信心。
變數命名 保留字(Reserved Word)
實作輔導 3 日期: 4/14(星期六) 09:10~12:00、13:10~16:00
本章中將會更詳細地考慮有關重複的概念,並且會 介紹for和do…while等兩種用來控制重複的敘述 式。 也將會介紹switch多重選擇敘述式。 我們會討論直接和迅速離開某種控制敘述式的 break敘述式,以及用來跳過重複敘述式本體剩餘 部份的continue敘述式。 本章會討論用來組合控制條件的邏輯運算子,最後.
2019/1/17 Java语言程序设计-程序流程 教师:段鹏飞.
$10 可空类型.
陳維魁 博士 儒林圖書公司 第五章 控制結構 陳維魁 博士 儒林圖書公司.
編譯程式設計 期末專題說明 V1.1 May 2004.
實作輔導 2 日期: 3/24(星期六) 09:10~16:00 地點:臺北市立大學 臺北市中正區愛國西路一號 (中正紀念堂站7號出口)
第二章Java基本程序设计.
C语言概述 第一章.
Chapter 2 基本語法.
OpenMP程序设计 2019/4/25.
Oop8 function函式.
指標
第3 语言翻译问题 [学习目标]:学习和掌握语言的语法的基本概念和基本要素,理解翻译的步骤;学习和掌握BNF文法。
程式的時間與空間 Time and Space in Programming
C++语言程序设计教程 第2章 数据类型与表达式 第2章 数据类型与表达式 制作人:杨进才 沈显君.
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
第二章 Java语法基础.
挑戰C++程式語言 ──第9章 函數.
#include <iostream.h>
第二章 Java基本语法 讲师:复凡.
第一讲 面向对象方法学与信息系统建模.
第二章 Java基本语法 讲师:复凡.
第1章 数据结构基础概论 本章主要介绍以下内容 数据结构研究的主要内容 数据结构中涉及的基本概念 算法的概念、描述方法以及评价标准.
第十二章 位运算.
编译原理 第一章 引 论 南京大学计算机科学与技术系 戴新宇.
PPT注意事项: 当前PPT课件文件必须和提供的源代码文件夹“代码”在同一目录中即不要移动文件夹“代码”的默认位置。
變數、資料型態、運算子.
第2章 Java语言基础.
05 方法. 05 方法 5.1 方法 在一個較大型的程式中,通常會將具有特定功能或經常重複使用的程式,撰寫成獨立的小單元,稱為「方法」(Method),並賦予方法一個名稱,當程式需要時就可以呼叫此方法來執行該段特定程式。(此種重複使用的程式小單元在其他語言中可能稱為程序、副程式或函式, Visual.
判斷(選擇性敘述) if if else else if 條件運算子.
C语言基本语句 判断循环.
第三章 流程控制 程序的运行流程 选择结构语句 循环结构语句 主讲:李祥 时间:2015年10月.
第二章 Java基础语法 北京传智播客教育
陳維魁 博士 儒林圖書公司 第六章 領域與範圍 陳維魁 博士 儒林圖書公司.
Presentation transcript:

陳維魁 博士 wkchen@pchome.com.tw 儒林圖書公司 第三章 變數與繫結 陳維魁 博士 wkchen@pchome.com.tw 儒林圖書公司

大綱 變數的定義 變數元件 儲存區配置問題 參考的透明性 完全計算 捷徑計算 繫結(binding) 繫結時間 精選習題

變數的定義 變數是由四個元件所組成 名稱(name) 屬性(attribute) 引用(reference) 值(value) 名稱、位址、值、型態、生命期、領域

變數元件 名稱 變數的名字 並非所有的變數都是有名稱的,有的變數是沒有名稱的,如指標變數(pointer variable)的名稱僅是引用(reference)該變數的方式,並非真正的名稱,此類變數稱為不具名變數(anonymous variable)。

變數元件 屬性 屬性即為型態,代表變數的性質 如整數、實數、字元、字串及布林值等等 變數的屬性有的程式語言是在設計程式時決定,如Pascal;有些則是在執行的時候決定,如SNOBOL

變數元件 引用(位址) 即指變數的儲存位址 詳細內容請見第二節之內容

位址 同一個名稱在不同時間可能對應不同變數位址 別名:不同變數名稱引用同一個記憶體位址 1程序參數引起 如呼叫SUB(A,A) 2Fortran的EQUIVALENCE 陣列 3可變紀錄:可以用不同攔位名稱來引用同個記憶體 4指標變數引起,當兩個指標只到同個記憶體

位址 別名的優點 共用記憶體節省空間 有效率的存取矩陣元素 缺點 程式的可讀性降低 驗證程式的正確性比較難

變數元件 值 變數的值 以C語言的“int x = 1;”敘述來作為範例,此敘述表示宣告一個名稱為x的變數,其屬性為整數而值為1,但其在記憶體中的位址則需視系統是利用靜態儲存區配置或動態儲存區配置才能決定系統會於何時配置記憶體空間給變數x使用

儲存區配置問題 靜態儲存區配置(static storage allocation) 代表程式執行前,配置記憶體空間給變數 如Fortran,Cobol,Pascal的全域變數與PL/1的static記憶指令 可加速執行的速度。 動態儲存區配置(dynamic storage allocation) 代表程式執行時,配置記憶體空間給變數 如Algol 60,APL,LISP,Snobol與Pascal的區域變數 可增加執行時的彈性,但執行速度較慢

參考的透明性 referential transparency 意義 程式執行的過程中,計算運算式(expression)後, 應只能得到一個值,不能更改或破壞原來執行的環境這種現象便是參考的透明性

完全計算 complete circuit evaluation 指對運算式作求值動作時,必需做完整個運算式才可得出最後的結果,如此的計算方式便稱為完全計算

捷徑計算 short circuit evaluation short cut evaluation 指對運算式(通常是指布林運算式)作求值動作時,無需做完整個運算式即可得出最後的結果

捷徑計算範例 A1×A2×A3×……×A100 A and B and C A or B or C 若A為false則運算式的結果為false,不需將整個運算式計算完畢再決定最後的結果值 A or B or C 只要A為true則整個運算式的結果就為true,不需將整個運算式計算完畢再決定最後的結果值

捷徑計算 各種語言對“捷徑計算”的處理方式 內定(default)法 運算子(operator)法 PASCAL內定採用完全計算 若在程式段中加入“{$B-}”敘述,則在該敘述後之所有布林運算式將採用捷徑計算 若利用“{$B+}”則可恢復完全計算 C與C++則內定採用捷徑計算 運算子(operator)法 ADA利用AND THEN及OR ELSE代表採用捷徑計算 A OR ELSE B OR ELSE C及A AND THEN B AND THEN C AND及OR則是代表採用完全計算 JAVA利用 || 及&&代表採用捷徑計算,而 | 及&則是代表採用完全計算。

例如 PASCAL程式片段 i:=1; While (i<=n) and(a[i]<>key) do i:=i+1; PASCAL採用完全計算,搜尋第n筆後執行i會變成n+1 判斷條件a[i]<>key仍會執行產生錯誤

例如 C語言採用捷徑計算 Void main(); { int a=1, b=10; c=((a>1)&&(b++)); }

繫結(binding) 意義 繫結是指變數的名稱與其位址,屬性或值相結合的動作

繫結時間 程式語言設計時的繫結 程式語言製作時的繫結 程式語言所提供的所有可能資料型態 所有符號的意義等等 限制撰寫程式所能選擇的項目 所有跟機器相關的特性及變數可能的值 在不同計算機中即使相同的數學運算式,亦可能得到不同的結果 固定在某種機器上才有的特性,另一台機器可能就無法執行

繫結時間 翻譯時的繫結 執行時的繫結 編譯時期由設計師指定:如宣告int,則在編譯時繫結到整數型態 編譯時期由編譯器指定:如x:=x+10, +執行何種型態的相加,由編譯器決定 載入時期:繫結到指定的變數位址(若採靜態儲存區配置法) 連結時期:變數真正的型態(若採外顯式—explicit 型態法)在連結時期發生 執行時的繫結 執行時期進入副程式:例如宣告在Pascal副程式的局部變數繫結 執行時期的任何時刻:例如執行X:=X+10,變數會繫結到新的值

範例 假設“y = x+100;”為一個C語言的敘述(statement),若 以“=”為指定運算子(assignment operator) ”=”是指運算子是符號代表的意義,程式設計時決定,是”程式設計時的繫結” 以“+”為加法符號 “+”是加法符號代表意義,程式設計時決定,是”程式設計時的繫結” “+”表示整數加法 等到運算元的型態決定後,才能決定,運算元型態是在編譯時候才能決定,“翻譯時的繫結” “100”表示十進位的一百 在程式設計時決定,,是”程式設計時的繫結” 整數100的內部表示法(internal representation) 涉及機器相關的實作問題,是”語言製作時的繫結”

繫結時間 100為整數 x, y的型態(type) x, y的值 x, y的位址(address) x, y可以宣告的型態 是符號代表的意義,程式設計時決定,是”程式設計時的繫結” x, y的型態(type) 編譯時候才能決定,是“翻譯時的繫結” x, y的值 變數的值通常在執行時決定,是“執行時的繫結” x, y的位址(address) 變數的位址應該在執行時決定是“執行時的繫結” x, y可以宣告的型態 變數可能型態在設計時決定,是是”程式設計時的繫結”

精選習題 假設以下的敘述為一未提供“捷徑計算”能力的程式段,請利用程式設計的技巧,使此敘述經此改寫的動作後,具有與“捷徑計算”之處理方法相同之處理模式 。 if <A> and <B> then E1 else E2

Ans if <A> then if <B> then E1 else E2 endif else E2 endif

(1) 寫出兩種布耳表式(boolean expression)之AND與OR兩運算子(operator)運算方式並比較兩方法之主要優缺點。 (2) 比較ADA,C,Pascal等三種程式語言對布耳表式運算方式所提供的機制。

(1) 二種作法: a. 捷徑計算(short circuit evaluation)的意義: 對運算式作求值動作時,無需做完整個運算式即可得出最後的結果,如此的計算方式便稱為捷徑計算。 範例: (a) A and B 當A為false時,A and B之結果即為false。 (b) A or B 當A為true時,A or B之結果即為true。 b. 完全計算(complete circuit evaluation)的意義: 對運算式作求值動作時,必需做完整個運算式,可得出最後的結果,如此的計算方式便稱為完全計算。 (a) A and B 當A為false時,仍然必須處理B之值,但結果依然為false。 (b)A or B 當A為true時,仍然必須處理B之值,但結果依然為true。 捷徑計算與完全計算之比較: 捷徑計算效率較佳,但可能較容易使程式設計師犯下難以除錯之邏輯錯誤;而完全計算則是效率較差,但較不容易使程式設計師犯下難以除錯之邏輯錯誤。

(2) a. ADA利用不同的運算子代表不同之計算,如and與or代表完全計算而and then與or else則代表捷徑計算。 b. C採用捷徑計算。 c. Pascal採用完全計算。

精選習題 試問在C語言中,最佳化編譯程式(optimization compiler)是否可以將二元布林運算子(boolean operator)前後的兩項子敘述(sub-expression)互相對調?其理由為何

Ans 因為C語言採用捷徑計算,所以最佳化編譯程式不可以將二元布林運算子前後的兩項子陳式互相對調,否則可能會使得執行結果不唯一。

精選習題 試說明何以動態儲存區配置允許程式中使用遞迴呼叫(recursive call),而靜態儲存區配置則不允許?

Ans 因為若使用靜態儲存區配置則在編譯時就已將記憶體配置好,但是遞迴呼叫則是在執行時才知道會呼叫幾次,因為呼叫次數未定故無法事先配置記憶體空間,所以靜態儲存區配置不允許程式中使用遞迴呼叫,而動態儲存區配置則是執行時才分配記憶體空間,所以允許使用遞迴呼叫。

精選習題 試定義何謂靜態型態繫結(static type binding)及動態型態繫結(dynamic type binding) 試說明下列的語言,各主要採取何種型態繫結方式:Fortran,Pascal,Lisp,APL,Smalltalk。

Ans (1) 靜態資料型態繫結:在編譯時,指定變數的型態。例:Fortran,Pascal。 (2) 動態資料型態繫結:在執行時,指定變數的型態。例:Lisp,APL及Smalltalk。

練習 參考下列程式,說明可能繫結的位置 main(){ int x,y; scanf(“%d”,y); x=y+10; printf(“x=%d”,x);

Ans 程式設計時的繫結各種敘述和符號,如+-; 程式語言製作時的繫結,變數x,y可能值的範圍 程式編譯時的繫結,變數x,y的資料型態 執行載入:繫結目的程式的記憶體位址 執行連結:繫結程式庫的位址 執行進入main():繫結x,y的記憶體 執行時期,y繫結到scanf讀取的值和y+10的值