亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        Android平臺上基于卷積神經(jīng)網(wǎng)絡(luò)的手寫數(shù)字識別實驗

        2017-11-09 08:46:51朱虎明緱水平田小林焦李成張小華
        計算機(jī)教育 2017年11期
        關(guān)鍵詞:程序設(shè)計教材

        朱虎明,羅 政,緱水平,田小林,焦李成,張小華

        (西安電子科技大學(xué) 電子工程學(xué)院,陜西 西安 710071)

        劉喜平, 萬常選, 舒 蔚, 駱?biāo)刮?/p>

        (江西財經(jīng)大學(xué) 信息管理學(xué)院, 江西 南昌 330013)

        Android平臺上基于卷積神經(jīng)網(wǎng)絡(luò)的手寫數(shù)字識別實驗

        朱虎明,羅 政,緱水平,田小林,焦李成,張小華

        (西安電子科技大學(xué) 電子工程學(xué)院,陜西 西安 710071)

        卷積神經(jīng)網(wǎng)絡(luò)算法由于良好的性能已經(jīng)廣泛使用在自動駕駛、語音識別和圖像分類等領(lǐng)域,為增強(qiáng)學(xué)生學(xué)習(xí)和利用卷積神經(jīng)網(wǎng)絡(luò)算法的能力,文章設(shè)計在Android平臺上基于TensorFlow卷積神經(jīng)網(wǎng)絡(luò)的手寫數(shù)字識別實驗,并說明實施過程,同時介紹卷積神經(jīng)網(wǎng)絡(luò)算法、Android平臺相關(guān)技術(shù)原理和實驗過程。

        卷積神經(jīng)網(wǎng)絡(luò); 手寫數(shù)字識別;Android; TensorFlow

        1 背 景

        2006年加拿大多倫多大學(xué)的Hinton教授提出了基于“逐層訓(xùn)練”和“精調(diào)”的兩階段策略,解決深度神經(jīng)網(wǎng)絡(luò)中參數(shù)訓(xùn)練的難題,此后紐約大學(xué)的LeCun、蒙特利爾大學(xué)的Bengio和斯坦福大學(xué)的Andrew Ng等人對深度神經(jīng)網(wǎng)絡(luò)展開研究,并提出深度自編碼器(Deep Auto Encoder)、深度置信網(wǎng)(Deep Belief Networks)、卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks)等深度模型[1]。深度神經(jīng)網(wǎng)絡(luò)獲得學(xué)術(shù)界和工業(yè)界的廣泛關(guān)注,在圍棋和德州撲克等領(lǐng)域獲得突破性進(jìn)展,而且深度學(xué)習(xí)的相關(guān)課程也逐漸進(jìn)入高校。在國內(nèi),吳立德教授在復(fù)旦大學(xué)開設(shè)了深度學(xué)習(xí)課程;在國外,一些知名高校也開設(shè)了深度學(xué)習(xí)課程,如斯坦福大學(xué)、牛津大學(xué)、紐約大學(xué)等。目前,深度學(xué)習(xí)在本科教學(xué)中目前涉及的內(nèi)容還比較少,為幫助學(xué)生更好的理解和學(xué)習(xí)算法,筆者設(shè)計在Android平臺上進(jìn)行深度學(xué)習(xí)實驗,實驗以卷積神經(jīng)網(wǎng)絡(luò)為例,利用TensorFlow深度學(xué)習(xí)框架并將其應(yīng)用于手寫體識別。

        卷積神經(jīng)網(wǎng)絡(luò)是近年發(fā)展起來并引起廣泛重視的一種高效識別方法。20世紀(jì)60年代,Hubel和Wiesel在研究貓腦皮層中的神經(jīng)元時發(fā)現(xiàn)其獨特的網(wǎng)絡(luò)結(jié)構(gòu)可以有效地降低反饋神經(jīng)網(wǎng)絡(luò)的復(fù)雜性,繼而提出卷積神經(jīng)網(wǎng)絡(luò)?,F(xiàn)在,卷積神經(jīng)網(wǎng)絡(luò)已經(jīng)成為眾多科學(xué)領(lǐng)域的研究熱點之一,特別是在模式分類領(lǐng)域,由于卷積神經(jīng)網(wǎng)絡(luò)算法避免了對圖像手工提取特征等步驟,因而得到更為廣泛的應(yīng)用。

        隨著智能終端在全球范圍內(nèi)的普及,目前主流的智能手機(jī)操作系統(tǒng)有谷歌公司的Android系統(tǒng)、蘋果公司的iOS系統(tǒng)和微軟公司的Windows Phone系統(tǒng),由于Android系統(tǒng)的開源特性,使得華為、三星、小米等廠商的手機(jī)都采用了Android操作系統(tǒng)。2017年5月,NetMarketShare數(shù)據(jù)網(wǎng)站公布了手機(jī)操作系統(tǒng)市場份額,其中Android系統(tǒng)的占有率是65.19%,排名居首。鑒于Android系統(tǒng)越來越廣的使用領(lǐng)域,目前高校開設(shè)了很多基于Android系統(tǒng)的實驗類課程[23]。

        2015年11月9日,Google發(fā)布并開源第二代人工智能學(xué)習(xí)系統(tǒng)TensorFlow[4],其命名源于本身的運(yùn)行原理。Tensor(張量)意味著N維數(shù)組,F(xiàn)low(流)意味著基于數(shù)據(jù)流圖的計算,TensorFlow為張量從流圖的一端流動到另一端的計算,TensorFlow是將復(fù)雜的數(shù)據(jù)輸入至人工智能神經(jīng)網(wǎng)中進(jìn)行分析和處理過程的系統(tǒng),它可在小到一部智能手機(jī)、大到數(shù)千臺數(shù)據(jù)中心服務(wù)器的各種設(shè)備上運(yùn)行。

        2 卷積神經(jīng)網(wǎng)絡(luò)算法介紹

        卷積神經(jīng)網(wǎng)絡(luò)是一種前饋神經(jīng)網(wǎng)絡(luò)[5],其基本結(jié)構(gòu)一般包括兩層:其一為特征提取層,每個神經(jīng)元的輸入與前一層的局部感受相連,并提取該局部的特征[5],一旦該局部特征被提取后,它與其他特征間的位置關(guān)系也隨之確定下來;其二是特征映射層,網(wǎng)絡(luò)的每個計算層由多個特征映射組成,每個特征映射是一個平面,平面上所有神經(jīng)元的權(quán)值相等。

        卷積神經(jīng)網(wǎng)絡(luò)主要用來識別位移、縮放及扭曲不變性的二維圖像[68]。由于卷積神經(jīng)網(wǎng)絡(luò)的卷積層通過訓(xùn)練數(shù)據(jù)進(jìn)行學(xué)習(xí),所以在使用時,避免了顯式的特征提取,而隱式地從訓(xùn)練數(shù)據(jù)中進(jìn)行學(xué)習(xí);再者由于同一特征映射面上的神經(jīng)元權(quán)值相同,所以網(wǎng)絡(luò)可以并行學(xué)習(xí)。

        本次實驗的卷積神經(jīng)網(wǎng)絡(luò)是由兩個卷積層(conv)、兩個池化層(pool)和兩個全連接層(fc)以及一個softmax組成。第一層卷積層有32個5*5的卷積核,網(wǎng)絡(luò)采用了Relu(Recti fi ed Linear Unit 修正線性函數(shù))作為激活函數(shù)。第二層是最大池化層,求取特征圖后,用大小為2*2池化窗口對特征圖進(jìn)行池化操作。第三層中,有64個5*5的卷積核,同樣采用Relu作為激活函數(shù)。第四層也是池化窗口為2*2的最大池化層。第五層是全連接層,有1024個神經(jīng)元。為了減少過擬合,在輸出層之前加入dropout算子。只在訓(xùn)練過程中啟用dropout。第六層也是全連接層,有10個神經(jīng)元。最后添加一個softmax層,將網(wǎng)絡(luò)輸出值轉(zhuǎn)換成概率值,網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示。

        3 實驗步驟

        實驗過程分為兩個部分,訓(xùn)練過程和推理過程。在訓(xùn)練過程中,首先要建立卷積神經(jīng)網(wǎng)絡(luò)的網(wǎng)絡(luò)結(jié)構(gòu),同時設(shè)置訓(xùn)練過程的一些超參數(shù),如學(xué)習(xí)率、動力因子、最大迭代次數(shù)等,接著使用訓(xùn)練集對網(wǎng)絡(luò)參數(shù)進(jìn)行訓(xùn)練,但在部分情況下,會把訓(xùn)練集劃分出一部分作為驗證集用來交叉驗證。推理過程是用測試集對模型進(jìn)行驗證。實驗流程如圖2所示。

        圖1 卷積神經(jīng)網(wǎng)絡(luò)網(wǎng)絡(luò)結(jié)構(gòu)

        圖2 實驗流程

        3.1 訓(xùn)練過程

        卷積神經(jīng)網(wǎng)絡(luò)訓(xùn)練過程在計算機(jī)上完成,分為3個步驟:①建立卷積神經(jīng)網(wǎng)絡(luò)網(wǎng)絡(luò)結(jié)構(gòu);②利用帶有GPU的計算機(jī)訓(xùn)練模型;③保存模型。

        (1)建立卷積神經(jīng)網(wǎng)絡(luò)網(wǎng)絡(luò)結(jié)構(gòu)。

        TensorFlow深度學(xué)習(xí)框架提供了python語言的API接口,因此利用python編程語言編寫訓(xùn)練代碼,建立卷積神經(jīng)網(wǎng)絡(luò)的網(wǎng)絡(luò)結(jié)構(gòu),本次實驗參考TensorFlow官方給出的Deep MNIST for Experts模型訓(xùn)練卷積神經(jīng)網(wǎng)絡(luò)。

        (2)利用帶有GPU的計算機(jī)訓(xùn)練模型。

        在建立好網(wǎng)絡(luò)結(jié)構(gòu)之后,下一步是訓(xùn)練模型,訓(xùn)練模型的時間一般比推理時間長很多,且模型的超參數(shù)會影響正確率,所以一般需要多次訓(xùn)練,一般采用安裝有GPU的計算機(jī)進(jìn)行訓(xùn)練,由于GPU強(qiáng)大的計算能力,可以大大縮短深度神經(jīng)網(wǎng)絡(luò)的訓(xùn)練時間。

        本次實驗采用的是MNIST數(shù)據(jù)集,手寫數(shù)字MNIST數(shù)據(jù)庫包含一個訓(xùn)練樣本集和一個測試樣本集,訓(xùn)練樣本集包含60,000個樣例,測試樣本集包含10,000個樣例。圖片被歸一化成一張放在中間部位的28*28像素的灰度圖。該數(shù)據(jù)集包含0~9共10類阿拉伯?dāng)?shù)字。數(shù)據(jù)集共包含4個文件,它們分別是訓(xùn)練樣本數(shù)據(jù)集、訓(xùn)練數(shù)據(jù)樣本標(biāo)簽集、測試用例數(shù)據(jù)集和測試用例數(shù)據(jù)標(biāo)簽集。MNIST的部分樣例如圖3所示。

        圖3 MNIST數(shù)據(jù)集樣例

        本實驗中,訓(xùn)練優(yōu)化方法分別采用Adagrad、GradienDescent和Adam,其中GradienDescent優(yōu)化方法測試了多組參數(shù),對比識別的準(zhǔn)確率(見表1)發(fā)現(xiàn),GradientDescent(學(xué)習(xí)率為0.001)的正確率最高,因此網(wǎng)絡(luò)采用GradientDescent(學(xué)習(xí)率為0.001)的優(yōu)化算法。

        (3)保存模型。

        在模型訓(xùn)練結(jié)束后,使用TensorFlow的API函數(shù)tf.g fi le.FastGFile()將模型保存為.pb文件,該函數(shù)既能保存模型的結(jié)構(gòu),又能夠保存模型中參數(shù)的值。

        表1 優(yōu)化算法對比表

        3.2 推理過程

        推理過程分為兩個步驟:①搭建Android平臺上的卷積神經(jīng)網(wǎng)絡(luò)系統(tǒng);②系統(tǒng)性能測試。

        (1)搭建Android平臺上的卷積神經(jīng)網(wǎng)絡(luò)。

        本次實驗所用到的集成開發(fā)軟件為Android工具Android studio IDE,設(shè)計開發(fā)的Android應(yīng)用程序分為兩個部分,第一部分是UI界面的設(shè)計,第二部分是將采集的測試樣本進(jìn)行推理。

        UI界面設(shè)計主要是和用戶進(jìn)行交互,實驗中使用了兩個Button和一個Bitmap控件。系統(tǒng)界面布局如圖4所示,本次實驗中Android應(yīng)用通過Bitmap和Canvas操作使得界面自適應(yīng)屏幕大小。通過Android觸控屏記錄手寫過程的軌跡,并將手寫軌跡存儲為圖像數(shù)據(jù)即可生成了手寫體數(shù)據(jù)。執(zhí)行圖像預(yù)處理,即后臺處理生成bitmap,作為模型的輸入。一個Button用作清屏,另一個Button用作觸發(fā)推理事件,即調(diào)用訓(xùn)練好的模型進(jìn)行推理,并且將返回推理結(jié)果更新到界面上。

        圖4 系統(tǒng)界面布局

        接下來是將TensorFlow移植到Android平臺上,首先編譯在Android平臺上調(diào)用TensorFlow模型需要的jar包和so文件;接著將訓(xùn)練好的模型pb文件放入項目中app/src/main/assets位置,添加jar包和so文件;接下來是創(chuàng)建接口和實現(xiàn)調(diào)用,分為四步:導(dǎo)入jar包、導(dǎo)入so文件、Tensor fl ow 接口初始化和模型的調(diào)用。

        然后接下來的主要工作就是安卓項目的編譯以及將編譯完的apk文件安裝到手機(jī),這部分內(nèi)容與一般的安卓項目沒有區(qū)別。

        (2)系統(tǒng)性能測試。

        基于卷積神經(jīng)網(wǎng)絡(luò)的手寫數(shù)字識別APP設(shè)計完成且安裝到Android設(shè)備后,在運(yùn)行時,利用Android的觸屏功能記錄軌跡,手寫完成后,單擊測試按鈕,調(diào)用模型,進(jìn)行識別,并輸出結(jié)果到用戶界面。在測試完成后,單擊清除按鈕,會將繪圖區(qū)域內(nèi)生成的手寫數(shù)字以及識別結(jié)果清除。

        4 實驗結(jié)果展示

        本次實驗結(jié)果如圖5、圖6所示,由圖5可知,在Android上實現(xiàn)的手寫數(shù)字識別算法取得了較好的識別效果。圖6則是無法正確識別的實例,比如當(dāng)字符比較小的時候或者字符出現(xiàn)在Bitmap的邊緣的時候,識別效果不太理想。

        筆者下一步將著重從圖像預(yù)處理方面改善因字符太小和書寫位置偏離中心位置等原因造成手寫數(shù)字識別度不高的問題。

        圖5 手寫數(shù)字識別圖—識別正確

        圖6 手寫數(shù)字識別圖—識別錯誤

        [1] Hinton G E, Salakhutdinov R R. Reducing the dimensionality of data with neural networks[J]. Science, 2006(5786): 504-507

        [2] 劉春.以Android應(yīng)用為案例的軟件工程教學(xué)[J]. 計算機(jī)教育,2015(11):75-77.

        [3] 劉成明,李瑋瑋. Android手機(jī)開發(fā)課程的案例教學(xué)法[J]. 計算機(jī)教育, 2015(14): 37-40.

        [4] Abadi M, Agarwal A, Barham P, et al. TensorFlow: Large-Scale machine learning on heterogeneous distributed systems[EB/OL].(2016-03-14)[2017-04-05]. http://download. tensor fl ow.ong/paper/white paper 2015.pdf.

        [5] 吳岸城. 神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)[M]. 北京: 電子工業(yè)出版社. 2016.

        [6] 周飛燕, 金林鵬, 董軍. 卷積神經(jīng)網(wǎng)絡(luò)研究綜述[J]. 計算機(jī)學(xué)報, 2017(7): 1-23.

        [7] 余濱, 李紹滋, 徐素霞, 等. 深度學(xué)習(xí): 開啟大數(shù)據(jù)時代的鑰匙[J]. 工程研究——跨學(xué)科視野中的工程, 2014(3): 234-235.

        [8] 焦李成, 楊淑媛, 劉芳, 等. 神經(jīng)網(wǎng)絡(luò)七十年: 回顧與展望[J]. 計算機(jī)學(xué)報, 2016(8): 1697-1716.

        1672-5913(2017)11-0159-04

        G642

        西安電子科技大學(xué)新實驗開發(fā)與新實驗設(shè)備研制及實驗教學(xué)改革(SY1408)。

        朱虎明,男,副教授,研究方向為高性能計算及其應(yīng)用,zhuhum@mail.xidian.edu.cn。

        (編輯:史志偉)

        教材建設(shè)

        器—術(shù)—道:程序設(shè)計教材建設(shè)經(jīng)驗談

        劉喜平, 萬常選, 舒 蔚, 駱?biāo)刮?/p>

        (江西財經(jīng)大學(xué) 信息管理學(xué)院, 江西 南昌 330013)

        文章編號:1672-5913(2017)11-0163-04

        中圖分類號:G642

        摘 要:介紹編程能力培養(yǎng)的3個層次:器—術(shù)—道,分析這3個層次對能力的要求,然后探討《C程序設(shè)計:方法與實踐》教材在夯實編程之器、提煉編程之術(shù)、引導(dǎo)編程之道3個方面中的做法。

        關(guān)鍵詞:程序設(shè)計; 教材; C語言; 器—術(shù)—道

        基金項目:江西省2013年度普通本科高校卓越工程師教育培養(yǎng)計劃項目(贛教高字[2013]78 號);江西省高等學(xué)校省級教改立項重點項目(JXJG-16-4-6);江西財經(jīng)大學(xué)“3+7+x”專業(yè)主干課程建設(shè)項目(教務(wù)通知字[2017]33號)。

        作者簡介:劉喜平,男,副教授,研究方向為數(shù)據(jù)庫和數(shù)據(jù)挖掘,lewislxp@gmail.com;

        萬常選(通信作者),男,教授,研究方向為信息檢索和數(shù)據(jù)挖掘,wanchangxuan@263.net。

        0 引 言

        程序設(shè)計的境界有3種:器—術(shù)—道。在程序設(shè)計能力培養(yǎng)方面,一般由“器”入門,通過熟悉“術(shù)”,最終達(dá)到“道”的境界。在編寫程序設(shè)計教材的時候,要注意這3個層次的內(nèi)容安排,并注意它們之間的過渡。

        1 編程中的“器術(shù)道”

        1.1 編程中的“器”

        《易經(jīng)》曰“形而下者謂之器”,說得通俗一些,“器”就是具體工具。在編程中,“器”首先指編程語言,如Java、C/C++?!捌鳌钡牧硪粚右馑际蔷唧w特性。要學(xué)好一門語言,首先要掌握語言的基本特性,如選擇、循環(huán)、函數(shù)等;其次要掌握好這門語言的獨特特性,如指針操作之于C?!捌鳌钡牡谌龑右馑际蔷唧w的開發(fā)和調(diào)試工具。學(xué)任何語言的時候,初學(xué)者都要熟練掌握一種開發(fā)和調(diào)試工具,如C/C++編程,在Linux下要學(xué)會使用GDB調(diào)試,在Windows下,要會使用Visual Studio或者其他工具開發(fā)。

        1.2 編程中的“術(shù)”

        “術(shù)”是中國古人對技藝、技巧、技能的一個稱謂,比如武術(shù)。“術(shù)”強(qiáng)調(diào)的是應(yīng)用,是對“器”非常熟練基礎(chǔ)上的靈活運(yùn)用。

        在編程中,“術(shù)”對應(yīng)套路、思路和算法。比如,在C文件編程中,要把一個二進(jìn)制文件中的某些記錄刪除,直觀的做法是:逐個記錄掃描,如果記錄需要刪除,則將后面的記錄往前挪動。兩種常見的套路是:①創(chuàng)建一個新的文件,將需要保留的數(shù)據(jù)復(fù)制到新文件中,需要刪除的記錄則跳過,最后將舊文件刪除,將新文件重命名為舊文件,這種刪除套路稱為硬刪除;②軟刪除,不真正地刪除記錄,而是標(biāo)上記號。這兩種套路各有優(yōu)缺點,需要靈活選用。再比如,在一個應(yīng)用中如果需要將商品按照銷量排序,那么需要用到某種排序算法;如果經(jīng)常需要排序的話,需要考慮用某種數(shù)據(jù)結(jié)構(gòu),如B樹、堆等。

        1.3 編程中的“道”

        《易經(jīng)》說“形而上者謂之道”,也就是說,“道”是對事物蘊(yùn)含思想、哲理的反思。掌握了編程之“道”的人,看透了編程工具和語言背后的差別,不再執(zhí)著于某種工具和語言,通常談?wù)摰氖羌軜?gòu)、設(shè)計模式、框架、抽象、分解等概念。如果要用一個簡單的詞語概括編程中的“道”,那就是常說的“計算思維”[1]。

        舉兩個簡單的例子說明“道”和“術(shù)”在編程上的區(qū)別。對于二分查找算法,得“術(shù)”者看到的是這個算法的運(yùn)用前提(數(shù)據(jù)存儲在線性表中且有序)、算法的基本思路等,而得“道”者看到的是這個算法背后的分治思想;當(dāng)應(yīng)用某一種框架的時候,得“術(shù)”者看到的是這個框架的組成、交互方式等,得“道”者看到的是這個框架背后的思維,如模型、視圖和控制相分離的原則。

        2 編程中的“器術(shù)道”在程序設(shè)計教材中的體現(xiàn)

        面向初學(xué)者的程序設(shè)計課程的目標(biāo),是讓學(xué)生掌握“器”,熟悉“術(shù)”,并引導(dǎo)他們感悟“道”。

        2.1 夯實編程之“器”

        C程序設(shè)計是一門非?;A(chǔ)的課程,在“器”這個層面上,必須要掌握兩部分:一是C語言的知識點;二是C語言的開發(fā)和調(diào)試工具。

        大部分教材介紹C語言知識點的時候,把這些知識點分割成若干個條塊。一種常見的知識點劃分見圖1,其中虛線框部分可以并列,其先后順序比較隨意。

        圖1 C語言知識點條塊結(jié)構(gòu)圖

        這種條塊式結(jié)構(gòu)的優(yōu)點是:結(jié)構(gòu)清晰,方便教學(xué)。學(xué)校的教學(xué)實踐,初期也采取這種教學(xué)模式,但是在實踐中發(fā)現(xiàn),這種條塊式結(jié)構(gòu)存在以下不足:

        (1)知識點之間的滲透不夠。

        (2)教學(xué)初期的例子比較簡單、單調(diào)。

        (3)學(xué)生的綜合訓(xùn)練比較少。

        考慮到這些問題,筆者采取一種新的層級式結(jié)構(gòu):先介紹C語言的內(nèi)核,再系統(tǒng)地介紹C語言知識點,這個內(nèi)核包含的內(nèi)容如下。

        · C程序的構(gòu)成;

        · 最常見的數(shù)據(jù)類型:int、 fl oat和 double、char 4種基本數(shù)據(jù)類型;

        · 輸入輸出:printf和scanf函數(shù)(只介紹常用的格式控制符);

        · 常量和變量的概念;

        · 運(yùn)算符與表達(dá)式:算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、賦值運(yùn)算符;

        · 語句:簡單語句、語句塊、if語句、for語句、while語句;

        · 函數(shù)調(diào)用。

        在此基礎(chǔ)上,系統(tǒng)地介紹C語言的知識點。按照順序分別是:數(shù)據(jù)類型與輸入輸出、運(yùn)算符與表達(dá)式、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)、函數(shù)、指針與數(shù)組、C程序運(yùn)行原理、結(jié)構(gòu)體、文件和其他。在這些章節(jié)中,有幾個部分值得特別介紹。

        (1)數(shù)據(jù)類型與輸入輸出。這一部分與其他教材差別很大。除了基本數(shù)據(jù)類型及其輸入和輸出,也介紹了:

        · 數(shù)組、字符串及其輸入輸出。這里介紹了數(shù)組是如何創(chuàng)建、初始化和遍歷的(用for、while語句),還介紹了puts、gets等常見的字符串輸入和輸出函數(shù),但沒有直接引入指針的概念。

        · 文本文件輸入輸出,包括fscanf和fprintf兩個格式化輸入輸出函數(shù)。

        (2)循環(huán)結(jié)構(gòu)。在介紹循環(huán)結(jié)構(gòu)的時候,引入了選擇排序、冒泡排序、楊輝三角、字符串單詞統(tǒng)計、文本文件字符統(tǒng)計等例子,一方面讓學(xué)生更好地掌握復(fù)雜的循環(huán)結(jié)構(gòu),另一方面加強(qiáng)了知識點的融合,擴(kuò)大了知識面。

        (3)C程序運(yùn)行原理。這一章包含了所有系統(tǒng)底層的介紹,包括計算機(jī)的存儲器體系結(jié)構(gòu)、程序的內(nèi)存布局、變量的存儲類型等。這一章的目的是更好地培養(yǎng)學(xué)生的系統(tǒng)觀。

        (4)文件。由于在前面章節(jié)中已經(jīng)對文本文件的讀寫操作進(jìn)行了很多演練,因此這一章主要圍繞二進(jìn)制文件的讀寫進(jìn)行。特別地介紹了二進(jìn)制文件記錄的讀、寫、刪、查等操作場景。通過這些例子,可以讓學(xué)生更熟悉文件操作,也更側(cè)重實際應(yīng)用。

        通過這樣的安排,不僅加強(qiáng)了知識點之間的融合,而且大大提高了例題的多樣性,還可以在教學(xué)過程中安排更多的綜合訓(xùn)練,比如文本文件處理。

        另一方面,“器”還強(qiáng)調(diào)對工具的使用,這里最主要的是調(diào)試工具。筆者在教材中安排一章介紹常見開發(fā)環(huán)境的使用(介紹了Visual Studio Community和Code::Blocks),可以幫助初學(xué)者掌握調(diào)試技巧。

        2.2 提煉編程之“術(shù)”

        程序設(shè)計中的“術(shù)”就是應(yīng)用基本的程序設(shè)計知識點解決問題的模式[2]、套路和算法。因此,它是知識點的綜合應(yīng)用,是一些解決問題的有效思路。為了讓學(xué)生盡快熟悉編程之術(shù),在教材中采取了以下策略。

        (1)精選例題,從例題中引申出編程之術(shù)。筆者安排了綜合性、有代表性的例子,例如在循環(huán)結(jié)構(gòu)這一章,介紹了選擇排序和冒泡排序兩種排序算法;在函數(shù)這一章,安排了輸出日歷以及簡單四則運(yùn)算的例子,通過分析這些問題,學(xué)生可以學(xué)習(xí)到程序分解的過程以及關(guān)于日期的操作;在結(jié)構(gòu)體這一章,介紹了基于鏈表的學(xué)生學(xué)籍信息管理實例,讓學(xué)生掌握與記錄操作相關(guān)的套路;在文件這一章,展示了如何從二進(jìn)制文件中刪除滿足某些條件的記錄的思路。

        (2)注重總結(jié),提煉出編程之術(shù)。初學(xué)者往往不善于總結(jié),因此教材中加入了大量的總結(jié)和提煉。首先,每一章結(jié)束后都有本章小結(jié),對本章的知識點、常見套路和算法進(jìn)行了總結(jié)。其次,在一些代表性的例題后面,對例題中的關(guān)鍵算法進(jìn)行了總結(jié)。第三,介紹一些知識點的時候,順便介紹該知識點相關(guān)的常見套路。例如介紹了字符之后,總結(jié)大小寫字符之間的轉(zhuǎn)換等;在介紹浮點數(shù)的時候,提醒浮點數(shù)比較的注意事項;在介紹循環(huán)結(jié)構(gòu)的時候,提煉窮舉算法的思想和注意事項;在講解遞歸函數(shù)調(diào)用的時候,總結(jié)遞歸這一技巧應(yīng)用的要點。

        (3)及時訓(xùn)練,鞏固編程之術(shù)。在習(xí)題和實驗中,設(shè)計了相關(guān)題目,要求學(xué)生及時應(yīng)用學(xué)到的套路和算法。

        在編程實踐中,還有大量與編程風(fēng)格和編程效率有關(guān)的經(jīng)驗和技巧,這些也屬于“術(shù)”的范疇。這些內(nèi)容在教材中的8個“編程實踐”章節(jié)中有所涉及,如代碼風(fēng)格、命名、程序計時、軟件測試、實用字符串處理、程序設(shè)計與操作系統(tǒng)、中文處理等。這8個章節(jié)的內(nèi)容可以擴(kuò)大學(xué)生的知識面,激發(fā)學(xué)生的興趣。在實際教學(xué)中,這8個章節(jié)不一定由教師講授,完全可以讓學(xué)生自學(xué)。

        2.3 感悟編程之“道”

        對初學(xué)者來說,編程之“道”,或者說計算思維,往往比較抽象,難以理解。因此,需要對學(xué)生加以引導(dǎo)和點化。本教材中,很多地方都點出了程序背后的“道”。

        (1)專門開辟了一個章節(jié)“復(fù)雜問題的求解算法”,介紹了很多面向問題求解的思想,如分治、貪心、動態(tài)規(guī)劃和回溯。對于每種思想,描述了其思維模式,指出其應(yīng)用范圍和優(yōu)缺點,并給出多個例子演示其應(yīng)用。這樣,對于這些抽象思想,學(xué)生就有了比較感性的認(rèn)識。

        (2)在介紹知識點的時候適時點化。比如,緩存的思想在計算機(jī)硬件和軟件中經(jīng)常用到。教材在介紹計算機(jī)存儲體系的時候,不是直接介紹這些存儲器,而是把內(nèi)存看作CPU和磁盤之間的緩存,L2 cache看作CPU和內(nèi)存之間的緩存,L1 cache又是CPU和L2 cache之間的高速緩存。最后,指出其中存在緩存思路的反復(fù)應(yīng)用:為了彌補(bǔ)高速處理器和低速存儲器之間的速度差異,可以在它們之間插入一個更小但更快的存儲器,換句話說,中間存儲器是低速存儲器的高速緩存。

        類似這樣的例子還有很多。通過這些例子,點出一些典型的計算思維,也許學(xué)生不一定馬上就能夠應(yīng)用這些思維解決問題,但是可以引導(dǎo)學(xué)生從一個更高的角度看待問題,這對學(xué)生理解程序設(shè)計的本質(zhì)和計算機(jī)系統(tǒng)無疑是有巨大幫助的。

        當(dāng)然,真正讓學(xué)生感悟這些“道”,還需要教師在教學(xué)過程中的引導(dǎo)。

        3 教材結(jié)構(gòu)

        教材《C程序設(shè)計:方法與實踐》[3](以下簡稱本教材)的前身是2009年出版的《C語言與程序設(shè)計方法》第1版[4]和第2版[5]。在本教材正式出版之前,初稿于2015—2016年在本校試用了兩年,并根據(jù)反饋意見進(jìn)行了修改、定稿,最后由清華大學(xué)出版社于2017年5月出版。

        3.1 教材的章節(jié)內(nèi)容

        本教材的章節(jié)目錄和內(nèi)容見表1。

        與現(xiàn)有教材相比,本教材在結(jié)構(gòu)上有所突破,在內(nèi)容組織上有所創(chuàng)新,精選了例題,并強(qiáng)調(diào)工程化和規(guī)范化的開發(fā),這些在前面都已提到,此處不再重復(fù)。

        表1 教材目錄和章節(jié)內(nèi)容

        3.2 教材的輔助資源

        為了配合這本教材的使用,筆者在書中安排了9個實驗,其中每個實驗包含了若干個實驗項目。每個實驗經(jīng)過精心設(shè)計,題目類型多樣,可以有效地鞏固所學(xué)內(nèi)容。

        另外,為了方便教師教學(xué),教材編寫組精心準(zhǔn)備了前13章的教學(xué)課件,該教學(xué)課件是作者教學(xué)中使用并若干次修改和增補(bǔ)而來,內(nèi)容非常豐富,可以直接用于教學(xué)。

        4 結(jié) 語

        在本教材出版之前,筆者在教學(xué)實踐中一直在思考和嘗試,進(jìn)行了一系列的教學(xué)改革。本教材的出版是筆者的教學(xué)成果之一。跟本教材配套,筆者在教學(xué)方法上進(jìn)行了一系列的調(diào)整,如實施了翻轉(zhuǎn)教學(xué)、加大了實踐訓(xùn)練的力度等。實踐證明,圍繞這一教材展開的教學(xué)改革有明顯成效,學(xué)生的學(xué)習(xí)興趣明顯提升,實踐動手能力有大的改進(jìn)。

        參考文獻(xiàn):

        [1] Wing J M. Computational thinking [J]. Communications of the ACM, 2006, 49(3): 33-35.

        [2] 張俊, 張彥鐸. 模式在程序設(shè)計教學(xué)中的應(yīng)用[J]. 計算機(jī)教育, 2010(3): 108-111.

        [3] 劉喜平, 萬常選, 舒蔚. C程序設(shè)計: 方法與實踐[M]. 北京: 清華大學(xué)出版社, 2017.

        [4] 萬常選, 舒蔚, 駱?biāo)刮? C語言與程序設(shè)計方法[M]. 北京: 科學(xué)出版社, 2005.

        [5] 萬常選, 舒蔚, 駱?biāo)刮? C語言與程序設(shè)計方法[M]. 2版. 北京:科學(xué)出版社, 2009.

        (編輯:孫怡銘)

        猜你喜歡
        程序設(shè)計教材
        教材精讀
        教材精讀
        教材精讀
        教材精讀
        教材精讀
        基于Visual Studio Code的C語言程序設(shè)計實踐教學(xué)探索
        教材精讀
        從細(xì)節(jié)入手,談PLC程序設(shè)計技巧
        電子制作(2019年9期)2019-05-30 09:42:04
        高職高專院校C語言程序設(shè)計教學(xué)改革探索
        OBE理念下基于Greenfoot的Java程序設(shè)計課程教學(xué)改革
        日本少妇被爽到高潮的免费| 国产a v无码专区亚洲av| 亚洲一区二区三区中国| 日本女同性恋一区二区三区网站| 好爽~又到高潮了毛片视频| 亚洲国产美女精品久久| 少妇熟女天堂网av| 中文字幕人妻被公喝醉在线| 日本高清在线播放一区二区三区| 亚洲精品国产美女久久久| 亚洲精品午夜无码电影网| 久久久久88色偷偷| 一区二区视频在线观看地址| 在线观看av不卡 一区二区三区| 免费观看视频在线播放| 国产V日韩V亚洲欧美久久| 亚洲中文字幕无码专区| 亚洲av成人无码精品电影在线| 无套内谢老熟女| 国产一区二区三区三区四区精品| 精品麻豆一区二区三区乱码| 久久少妇呻吟视频久久久| 国产强伦姧在线观看| 美女一级毛片免费观看97| 亚洲网站地址一地址二| 中文字幕日韩一区二区三区不卡| 无码国产精品一区二区免费式直播| 亚洲精品国偷拍自产在线| 美腿丝袜在线一区二区| av天堂一区二区三区| 亚洲AV无码资源在线观看| 朝鲜女人大白屁股ass| 人妻精品在线手机观看| 精选二区在线观看视频| 精品2021露脸国产偷人在视频| 国产成人精品午夜视频| 水蜜桃精品视频在线观看| 水蜜桃一二二视频在线观看免费| 国产成人无码一二三区视频| 少妇厨房愉情理伦bd在线观看| 婷婷综合另类小说色区|