• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于計算思維的計算機表達式教學方法實踐

      2017-06-19 19:31:59張化川楊林黎在萬
      現(xiàn)代計算機 2017年13期
      關(guān)鍵詞:運算符結(jié)合律數(shù)據(jù)類型

      張化川,楊林,黎在萬

      (重慶郵電大學軟件工程學院,重慶 400065)

      基于計算思維的計算機表達式教學方法實踐

      張化川,楊林,黎在萬

      (重慶郵電大學軟件工程學院,重慶 400065)

      針對計算機表達式教學中普遍存在重知識輕運用,甚至有些教材中有違反計算機編譯原理等問題,提出按照運算符的優(yōu)先級、結(jié)合律以及運算符中操作數(shù)的順序確定運算符的執(zhí)行順序和按照運算符的語義在馮·諾依曼機上逐個計算表達式中運算符的兩步教學方法。學生在運用該方法的過程中,學習數(shù)據(jù)類型、變量和運算符等相關(guān)的知識和技術(shù),培養(yǎng)其程序流程的編程思維方式,真正落實CDIO工程教育思想中“做中學”和“基于項目教育和學習”的方針,培養(yǎng)學生的“計算思維”能力。

      重慶市研究生教育教學改革研究項目(No.yjg143008)、全日制專業(yè)碩士研究生實踐創(chuàng)新能力提升研究(No.yjg153037)、重慶市大學生創(chuàng)新創(chuàng)業(yè)訓練計劃項目、重慶郵電大學教學改革研究項目(No.XJG1215)

      0 引言

      表達式是計算機語言的核心內(nèi)容,在程序設(shè)計課程的教學中具有重要地位,但實際的教學過程中,注重語法等方面的知識傳授,對語義等方面的知識重視不夠,也沒有將所涉及到的基礎(chǔ)知識系統(tǒng)組織起來講授,缺少運用這些知識解決實現(xiàn)問題的教學內(nèi)容,導致學生只能從一般的數(shù)學角度理解計算機表達式,不能理解計算機表達式在計算機中的運算過程,沒有真正理解計算機表達式,出現(xiàn)閱讀、編寫和調(diào)試程序等困難情況,最終嚴重影響了學生編程能力的培養(yǎng)。

      本文在CDIO工程教育思想指導下,分析了目前教學中存在的主要問題,根據(jù)計算機編譯表達式的基本原理,提出了按照運算符的優(yōu)先級、結(jié)合律以及運算符中操作數(shù)的順序確定運算符的執(zhí)行順序和按照運算符的語義在馮·諾依曼機上逐個計算表達式中運算符的兩步教學方法。

      在這種教學方法下,學生在確定表達式中運算符的執(zhí)行順序和計算運算符的過程中,學習數(shù)據(jù)類型、變量和運算符等相關(guān)的知識和技術(shù),培養(yǎng)其程序流程的編程思維方式,真正落實CDIO工程教育思想中“做中學”和“基于項目教育和學習”的方針[1-2],培養(yǎng)學生的“計算思維”,探尋一種計算思維能力培養(yǎng)“落地”[3]的新方法。

      1 以計算思維培養(yǎng)為目標重新確定教學重點和方法

      2006年3月,美國卡內(nèi)基·梅隆大學計算機科學系主任周以真(Jeannette M.Wing)教授在美國計算機權(quán)威期刊Communications of the ACM雜志上給出,并定義了計算思維(Computational Thinking)。周教授認為:計算思維是運用計算機科學的基礎(chǔ)概念進行問題求解、系統(tǒng)設(shè)計,以及人類行為理解等涵蓋計算機科學之廣度的一系列思維活動[4-5]。

      計算思維即運用計算機科學的基礎(chǔ)概念去求解問題 、設(shè)計系統(tǒng)和理解人類的行為[6-7]。計算思維包含兩個A[4,8]:Abstraction抽象,計算思維同時在多個抽象層次上同時進行,計算思維定義層次間的關(guān)系;Automa鄄tion自動化,即計算思維的思考方式是:使抽象層次及其關(guān)系機械化。

      計算機表達式來源于數(shù)學表達式,表示了計算機中的一個操作序列,從計算思維角度來講,就是將計算機中的一個操作序列抽象為表達式,將操作抽象為運算符,序列抽象為運算符的優(yōu)先級和結(jié)合律,以及運算符操作數(shù)的計算順序,將操作的對象抽象為變量和數(shù)據(jù)類型,并Automation自動化地計算這個操作序列。因此,計算機表達式的教學重點為,根據(jù)表達式的數(shù)學特性確定表達式中運算符的計算順序,并在馮·諾依曼體系結(jié)構(gòu)(又稱馮·諾依曼機)上Automation自動化地計算這個操作序列。在確定運算符的計算順序中,學習運算符的優(yōu)先級和結(jié)合律,從數(shù)學的抽象層次理解掌握表達式,在計算表達式過程中,學習運算符所規(guī)定的操作步驟,學習理解運算符的語義,學習理解變量及數(shù)據(jù)類型,從計算機技術(shù)層次理解掌握表達式。

      2 表達式的教學方法和教學重點

      本文根據(jù)計算機編譯表達式的原理,提出了按照運算符的優(yōu)先級、結(jié)合律以及運算符中操作數(shù)的順序確定運算符的執(zhí)行順序和按照運算符的語義在馮·諾依曼機上逐個計算表達式中運算符的兩步教學方法。

      學生在確定表達式中運算符的執(zhí)行順序和計算運算符的過程中,學習數(shù)據(jù)類型、變量和運算符等相關(guān)的知識和技術(shù),培養(yǎng)程序流程的編程思維方式。

      從本質(zhì)上講,計算機表達式描述的是一個計算機中的操作序列,并沒有要求滿足交換律和結(jié)合律等數(shù)學定律,在實際編程中,程序員也不會關(guān)注這些數(shù)學定律,而是關(guān)注按照表達式規(guī)定操作順序,逐個進行運算,最后能否得預期的結(jié)果。因此,確定表達式中運算符的順序,是一個程序員必須掌握的方法。

      計算機語言很多,對表達式的編譯方法有一定的區(qū)別,但都基于相同的原理和方法,這些原理和方法都要落腳到表達式的遞歸定義,表達式的遞歸定義實際上規(guī)定了表達式的語法。為了便于理解,我們給出了如下的遞歸定義。

      (1)常量和變量等是表達式;

      (2)表達式經(jīng)過運算符運算后仍然是一個表達式。

      “遞歸”這種方法,在中學數(shù)學的數(shù)學歸納法中已深入學習,很容易從遞歸或遞推兩個方向理解遞歸定義,遞推方向的順序剛好是表達式的運算順序,遞歸過程就是確定一個表達式中運算順序的過程,這也是編譯表達式的數(shù)學基礎(chǔ)。我們將這個過程總結(jié)如下:

      (1)根據(jù)優(yōu)先級和結(jié)合性找到表達式中最后計算的運算符;

      (2)根據(jù)這個運算符規(guī)定的操作數(shù)順序依次計算所包含的表達式,然后再計算這個運算符;

      (3)若表達式已是變量或常量,不用計算。

      C++標準文檔[9-10]中,計算機語言中的大多數(shù)運算符都沒有規(guī)定操作數(shù)的計算順序,只有少部分運算符,如邏輯運算符,規(guī)定了操作數(shù)的計算順序,導致了不同的編譯器可能計算順序不同,但在一個編譯器上計算順序一定是確定的,這可能導致編寫的表達式出現(xiàn)兼容性問題,在教學中需要重復強調(diào)。為了便于講解和學習,本文假設(shè)沒有規(guī)定操作數(shù)計算順序的運算符,它的操作數(shù)計算順序都是從左到右依次計算。

      確定了表達式中運算符的計算順序后,再根據(jù)運算符的語義,在馮·諾依曼機上依次計算所有運算符。從硬件上講,計算機的種類很多,但直到現(xiàn)在,仍然沒有突破馮·諾依曼體系結(jié)構(gòu),仍然是程序設(shè)計的理論基礎(chǔ),所以選擇從邏輯上在馮·諾依曼機上運行表達式。

      學生在確定表達式中運算符的執(zhí)行順序和計算運算符的過程中,學習數(shù)據(jù)類型、變量和運算符等相關(guān)的知識和技術(shù)。

      (1)變量和數(shù)據(jù)類型

      變量的概念來源于數(shù)學中的“變量”,具有數(shù)學層次的抽象特性,也具有計算機技術(shù)層面的抽象特性,即代表計算機中的內(nèi)存,這也導出了數(shù)據(jù)類型的概念。從數(shù)學層次理解變量比較容易,教學的重點是從計算機技術(shù)層面掌握變量及數(shù)據(jù)類型的概念。

      從計算機技術(shù)層面來講,變量代表的就是計算機中的一塊內(nèi)存,涉及到變量名、數(shù)據(jù)類型、存貯的值等概念,內(nèi)存的首地址、內(nèi)存的長度等術(shù)語,還涉及到為變量分配內(nèi)存、從變量中取數(shù)據(jù),將數(shù)據(jù)存到變量等3個基礎(chǔ)操作,這些是教學的重點也是教學的難點。

      如圖1所示,描述了變量相關(guān)教學內(nèi)容之間的關(guān)系,便于從計算機技術(shù)層面掌握相關(guān)的概念。

      圖1 變量相關(guān)教學內(nèi)容間的關(guān)系

      (2)運算符

      從計算機技術(shù)層面講,運算符表示了一個操作序列,包含語法和語義兩方面的內(nèi)容,運算符語法相對比較好理解,語義是教學的重點,它規(guī)定了運算符表示的操作序列以及操作對象的要求,每個運算符還應有一個運算結(jié)果,因此,運算符的主要教學內(nèi)容包括操作對象、操作序列、運算結(jié)果及類型轉(zhuǎn)換等內(nèi)容。這些在計算機語言標準文本中都有詳細的規(guī)定,但對學生是新的內(nèi)容,是教學的難點。下面舉例說明教學的過程。

      3 教學舉例

      國內(nèi)外大部分高校都將C++列為計算機大類專業(yè)入門語言,并被程序員廣泛使用。因此本文選用C++語言中具有代表性的數(shù)學表達式和計算機中特殊的表達式,舉例闡述運用本文提出的教學方法進行教學的過程。

      表達式x=c*f+(f/u-i%3)中c、f、u、i分別為char、float、unsigned、int類型的變量,該表達式不僅囊括了幾乎所有算術(shù)運算,同時也涉及到不同數(shù)據(jù)類型間的轉(zhuǎn)換,因此極具代表性。轉(zhuǎn)換規(guī)則表大部分教材[11-13]中都有描述,本文不再累述,下文將舉例說明。

      圖 2采用本文兩步教學法確定的表達式執(zhí)行順序

      (1)表達式中運算符的計算順序

      1)根據(jù)運算符的優(yōu)先級和結(jié)合律確定表達式x= c*f+(f/u-i%3)中最后執(zhí)行的運算符為“=”。

      2)根據(jù)運算符“=”的操作數(shù)的順序依次計算表達式x和c*f+(f/u-i%3)。由于表達式x中沒有運算符,因此不需要計算,只需計算表達式c*f+(f/u-i%3)。

      3)根據(jù)運算符的優(yōu)先級和結(jié)合律確定表達式c*f+(f/u-i%3)中最后執(zhí)行的運算符為“+”。

      4)根據(jù)運算符“+”的操作數(shù)的順序依次計算表達式c*f和(f/u-i%3)。

      5)表達式c*f運算符只有 “*”,直接計算表達式c*f,在圖2中標記為①。

      6)根據(jù)運算符的優(yōu)先級和結(jié)合律確定表達式 (f/ u-i%3)中最后執(zhí)行的運算符為“-”。表達式(f/u-i%3)中的“()”的作用為改變運算符的優(yōu)先級,并無其他語義。

      7)根據(jù)運算符“-”的操作數(shù)的順序依次計算表達式f/u和i%3。在圖2中分別標記為②、③。

      8)直接計算表達式(f/u-i%3)中的運算符“-”,在圖2中標記為④。

      9)直接計算表達式c*f+(f/u-i%3)中的運算符“+”,在圖2中標記為⑤。

      10)直接計算表達式x=c*f+(f/u-i%3)中的運算符“=”,在圖2中標記為⑥。

      (2)按順序計算表達式中的運算符

      1)根據(jù)運算符“*”的語義直接計算表達式c*f。從變量c中值取出一個char類型的值轉(zhuǎn)換為double,再從變量f中取出一個float類型的值轉(zhuǎn)換為double,相乘后得到一個double類型的值。

      2)根據(jù)運算符“/”的語義直接計算表達式f/u。從變量f中取出一個float類型的值轉(zhuǎn)換為double,再從變量u中取出一個unsigned char型的值轉(zhuǎn)換為double,相除后得到一個double類型的值。

      3)根據(jù)運算符“%”的語義直接計算表達式i%3。從變量i中取出一個int類型的值對3取余,得到一個int類型的值。

      4)根據(jù)運算符“-”的語義直接計算表達式(f/u-i% 3)。將(的計算結(jié)果與轉(zhuǎn)換成double類型的(的計算結(jié)果相減,得到一個double類型的值。

      5)根據(jù)運算符“+”的語義直接計算表達式c*f+(f/u-i%3)。將(的計算結(jié)果與(的計算結(jié)果相加,得到一個double類型的值。

      ⑥根據(jù)運算符“=”的語義直接計算表達式x=c*f+(f/u-i%3)。將(的計算得到的double類型的值存到表達式x的指定內(nèi)存中,得到變量x。

      圖3 確定u=i++-,a=++i執(zhí)行順序的過程

      根據(jù)前面講述的方法,在圖3中,標出了該表達式的計算順序,計算次序如下。

      ①根據(jù)“++”的語義計算表達式i++。i++中的“++”為后增量,將1加到變量i中,并得到原來的值(未加1的整數(shù))。

      ②根據(jù)運算符“=”的語義計算表達式u=i++。將①得到的值存在到表達式u指定的內(nèi)存中,得到變量u。

      ③根據(jù)“++”的語義計算表達式++i。++i中的“++”為前增量,將1加到變量i中,并得到變量i(左值lval鄄ue)。

      ④根據(jù)運算符“=”的語義計算表達式a=++i。將③變量i的值存取出,存到表達式a指定的內(nèi)存中。

      ⑤根據(jù)運算符“,”的語義計算表達u=i++,a=++i。運算符“,”的語義是從左到右依次計算各個表達式,結(jié)果是最后一個表達式的計算,即④得到的變量a。

      4 結(jié)語

      本文選取表達式作為教學研究實踐內(nèi)容,提出了按照運算符的優(yōu)先級、結(jié)合律以及運算符中操作數(shù)的順序確定運算符的執(zhí)行順序和按照運算符的語義在馮·諾依曼機上逐個計算表達式中運算符的兩步教學方法,該方法在傳授語法知識的同時,更加注重語義等方面知識的傳授。學生運用該方法在確定表達式中運算符的執(zhí)行順序和計算運算符的過程中,系統(tǒng)學習數(shù)據(jù)類型、變量和運算符等相關(guān)的知識和技術(shù),真正理解計算機表達式在計算機中的運算過程,真正理解計算機表達式,為閱讀、編寫和調(diào)試程序打下堅實基礎(chǔ),真正落實了CDIO工程教育思想中“做中學”和“基于項目教育和學習”的方針,培養(yǎng)了學生的“計算思維”能力。

      [1]李竹林.基于CDIO教育理念的高校計算機專業(yè)課程教學改革探討[J].教育與職業(yè),2012(20):127-128.

      [2]查建中.論“做中學”戰(zhàn)略下的CDIO模式[J].高等工程教育研究,2008(03):1-6.

      [3]馮博琴.對于計算思維能力培養(yǎng)“落地”問題的探討[J].中國大學教學,2012(09):6-9.

      [4]Jeannette M.Wing.Computational Thinking[J].Communication of the ACM,2006,49(3):33-35.

      [5]姚天昉.在程序設(shè)計課程中引入“計算思維”的實踐[J].中國大學教學,2012(02):61-62.

      [6]韓秋楓,孔波,李祁.大學計算機課程引入基于計算思維的問題探究式教學的思考[J].計算機工程與科學,2014(04):186:190.

      [7]陳杰華,戴麗娟.以培養(yǎng)計算思維為核心的程序設(shè)計實驗教學[J].實驗技術(shù)與管理,2011(01):125~127.

      [8]董榮勝.計算思維與計算機導論[J].計算機科學,2009(04):50~52.

      [9]Kenneth Slonneger,Barry L.Kurtz.Formal Syntax and Semantics of Programming Languages:a Laboratory Based Approach[M].USA:Addison-Wesley Pub.Co.,1995.

      [10]Internationg Standard-C++Standard ISO/IEC14882[M].American National Standards Institute,1998.

      [11]錢能.C++程序設(shè)計教程——設(shè)計思想與實現(xiàn)[M].北京:清華大學出版社,2009.

      [12]譚浩強.C程序設(shè)計[M].北京:清華大學出版社,2009.

      [13]葉乃文,王丹.Java語言程序設(shè)計教程[M].北京:機械工業(yè)出版社,2010.

      Practice of Com puter Expression Teaching Method Based on Com putational Thinking

      ZHANG Hua-chuan,YANG Lin,LIZai-wan
      (School of Software Engineering,Chongqing University of Posts and Telecommunications,Chongqing 400065)

      According to ignoring knowledge application,even violating compilation principle of computer about teaching programming expression, puts forward two steps teachingmethod.According to operator priority,associative property,and the sequential of operation number in the two sides of the operator,we can determine the order of executing operator and calculating expressions one by one in the John von Neu鄄mann machine.Applies thismethod,students are going to lean the knowledge and technologies about data types,variables and operators, and it is going to train way of programming thinking.It really implements the policy of CDIO engineering education thinking of learning by doing and educating and learning in project,and trains the ability of Computational Thinking.

      張化川(1979-),男,四川大竹人,碩士,實驗師,從事領(lǐng)域為計算機基礎(chǔ)課程的教學以及神經(jīng)網(wǎng)絡(luò)研究工作

      2017-03-09

      2017-04-20

      1007-1423(2017)13-0007-05

      10.3969/j.issn.1007-1423.2017.13.002

      計算機語言;計算思維;表達式;CDIO

      楊林(1995-),男,山東青島人,本科,從事領(lǐng)域為軟件建模研究工作

      黎在萬(1995-),女,四川瀘縣人,本科,從事領(lǐng)域為軟件建模研究工作

      Programming Languages;Computational Thinking;Programming Expression;CDIO

      猜你喜歡
      運算符結(jié)合律數(shù)據(jù)類型
      老祖?zhèn)魇诨具\算符
      科學24小時(2021年10期)2021-10-09 23:09:37
      詳談Java中的基本數(shù)據(jù)類型與引用數(shù)據(jù)類型
      如何理解數(shù)據(jù)結(jié)構(gòu)中的抽象數(shù)據(jù)類型
      究本溯源,提高計算能力
      探究求和問題
      基數(shù)意義下自然數(shù)的運算(二)
      湖南教育(2016年30期)2016-11-03 07:13:45
      巧用乘法結(jié)合律簡算
      C++運算符重載剖析
      價值工程(2014年17期)2014-04-16 03:29:20
      表達式求值及符號推導
      C++中運算符的重載應用
      光泽县| 普兰县| 甘孜| 天津市| 库尔勒市| 永丰县| 湘潭县| 靖安县| 大悟县| 儋州市| 镇安县| 策勒县| 崇文区| 南丰县| 仲巴县| 务川| 富平县| 沛县| 分宜县| 尼木县| 江都市| 朝阳区| 长垣县| 呈贡县| 满洲里市| 宁德市| 航空| 渝中区| 安吉县| 琼结县| 昆山市| 图片| 赞皇县| 崇义县| 襄垣县| 襄城县| 曲沃县| 大洼县| 富顺县| 遂昌县| 安泽县|