• 
    

    
    

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

      ?

      基于案例的C語言數(shù)組教學

      2017-09-30 03:01:54熊啟軍谷瓊屈俊峰
      現(xiàn)代計算機 2017年24期
      關鍵詞:數(shù)組賦值個數(shù)

      熊啟軍,谷瓊,屈俊峰

      基于案例的C語言數(shù)組教學

      熊啟軍,谷瓊,屈俊峰

      (湖北文理學院數(shù)學與計算機科學學院,襄陽 441035)

      針對數(shù)組在《C語言程序設計》課程教學中承上啟下的重要作用,圍繞數(shù)組的概念、基本操作、應用和拓展、以及教學方法等方面,通過實例對易犯錯誤、注意事項、算法及其技巧等展開討論,目的是為了更好地促進和啟發(fā)教學,提高教學效率。

      C語言;數(shù)組;算法;教學方法

      0 引言

      程序設計課程群貫穿于計算機類專業(yè)的整個學習階段,而《C語言程序設計》則是它們的基礎,學生對該課程的掌握程度直接決定其學習興趣、專業(yè)發(fā)展、就業(yè)方向等。因此,對《C語言程序設計》的教學研究層出不窮、經(jīng)久不衰。在該課程中,循環(huán)結構是重點、數(shù)組和函數(shù)是升華、指針和結構體是難點,且數(shù)組和函數(shù)承擔著承上啟下的作用,凸顯了這兩章的重要性。文章將采用案例,圍繞數(shù)組的概念、聲明和定義、操作以及應用中的易犯錯誤、重點、難點等問題,綜合運用多種教學方法展開探討。

      1 數(shù)組的概念

      數(shù)組的概念是一組類型相同的數(shù)據(jù)組成的一個序列。短短的一句話,表達出了三個意思:一是數(shù)組中數(shù)據(jù)的個數(shù)是多個(即數(shù)組的容量或實際元素個數(shù)),二是數(shù)組中的數(shù)據(jù)都是同一種類型的(即數(shù)據(jù)元素的類型),三是數(shù)組中的數(shù)據(jù)是有次序的(即元素的值)。這三個方面再加上數(shù)組名(即代表數(shù)組的標識符)一起構成了數(shù)組的四要素,且這四要素在數(shù)組的基本操作、數(shù)組的應用等方面都必須完整地體現(xiàn)出來[1]。這是學習者必須深刻理解和領會的。

      2 數(shù)組的聲明和定義

      如何聲明或定義一個數(shù)組、如何訪問數(shù)組、如何輸入輸出數(shù)組元素的值,這些屬于概念性的內(nèi)容,必須記憶和理解。下面以使用最頻繁的一維數(shù)組為例進行討論。

      2.1 數(shù)組的聲明

      數(shù)組的聲明必須體現(xiàn)出數(shù)組四要素中的三個,它們是數(shù)組元素的類型、數(shù)組的名稱、數(shù)組的元素個數(shù)。假定要聲明一個類型為整型、容量為100、名稱是arra?yA的一維數(shù)組,通常使用下述兩種方式:

      int arrayA[100];

      或者

      #define maxSize 100

      int arrayA[maxSize];

      這兩種聲明數(shù)組的方式都只表達出了數(shù)組的三個要素:即數(shù)組的類型、數(shù)組的名稱、數(shù)組的容量。由于所有元素沒有值,所以不能參與運算。數(shù)組元素沒有值就去參與運算,這是學習者常犯的錯誤之一。

      在聲明數(shù)組時,數(shù)組名后方括號中的數(shù)據(jù)只能是一個正整數(shù)或者結果是正整數(shù)的常量表達式,絕對不能含有變量、也不能空缺。因為這個正整數(shù)固定了該數(shù)組的最大容量。方括號中使用變量或者空缺,是學習者常犯的錯誤之二。

      2.2 數(shù)組的定義

      一般,把在聲明數(shù)組的同時給數(shù)組的所有元素整體賦值稱為數(shù)組的定義。即將數(shù)組的聲明、賦初值放在一起一步完成。即數(shù)組的定義是將數(shù)組的四要素一并完整地展現(xiàn)出來了。若將聲明和賦值分開,則不能稱之為數(shù)組的定義,且以后只能給數(shù)組的元素一個一個地單獨進行賦值。

      一維數(shù)組的定義通常使用下述幾種方式(以一維整型數(shù)組為例):

      (1)同時指定數(shù)組的容量和所有元素的值。

      例如:

      int arrayA[10]={1,3,5,7,9,0,2,4,6,8};

      這個定義表明:數(shù)組的容量是10(實際元素的個數(shù)也是10)、每個元素都指定了確定的值。

      但是,

      int arrayB[5]={1,3,5,7,9,0,2,4,6,8};

      則是錯誤的。因為數(shù)組的容量不能小于元素的個數(shù)。

      (2)同時指定數(shù)組的容量和前部分元素的值。

      例如:

      int arrayC[10]={1,3,5};

      數(shù)組的容量是10(實際元素的個數(shù)是10)、前3個元素指定了確定的值、后7個元素取缺省值0。

      或者

      int arrayD[10]={};

      表示數(shù)組的容量是10(實際元素的個數(shù)是10)、所有元素都取缺省值0。

      這種方式要求缺失的、取缺省值的只能是后部分的元素,不能是前面的、中間的元素。譬如:

      int arrayE[10]={1,3,5,,8,6};

      這個定義就是錯誤的。

      (3)指定數(shù)組所有元素的值、同時省略數(shù)組的容量。因為根據(jù)元素值的個數(shù),可以反推數(shù)組的容量。譬如:

      int arrayF[]={1,3,5,7,9,0,2,4,6,8};

      指定的值有10個,數(shù)組的容量也就是10。

      當然,

      int arrayG[]={};

      則是錯誤的。因為無法確定數(shù)組的容量。以上幾種定義數(shù)組的方式,都是把數(shù)組的聲明和賦值合二為一了。即只有在定義數(shù)組時才能對數(shù)組進行整體賦值;否則,對數(shù)組元素的賦值只能一個一個地進行。

      例如:下面的賦值都是錯誤的。

      int arrayH[10];

      arrayH={1,3,5,7,9,0,2,4,6,8};

      或者

      int arrayJ[10];

      arrayJ={1,3,5};

      這表明:聲明數(shù)組、賦值分成兩步進行的話,是不能對數(shù)組名賦值的。

      3 數(shù)組的簡單操作

      數(shù)組的簡單操作包括數(shù)組元素的輸入輸出和訪問。一般情況下,對數(shù)組元素只能一個一個地進行相關操作,且常與循環(huán)配合來完成。數(shù)組元素的輸入輸出和引用,這三種基本操作都涉及到數(shù)組元素的表示,而數(shù)組元素的表示則通過數(shù)組名和下標來完成的,數(shù)組的最小下標是0,最大下標是數(shù)組的容量減1。初學者常犯的錯誤是數(shù)組的下標越界,但這種非法引用,程序編譯時并不會報告語法錯誤、程序運行時也不會報告運行錯誤[2]。

      4 數(shù)組的應用

      上述三個方面的知識,都屬于概念性和識記性的。數(shù)組的應用必然會涉及到上面的基本知識,但關鍵在于算法設計。

      例如:求一個正整數(shù)n的所有因子。

      求解這個問題的算法采取了枚舉法。算法的基本思路是:用i=1~x之間的整數(shù)依次整除x,將能整除的i存儲于指定的數(shù)組之中。難點在于定義數(shù)組的適當容量和計數(shù)因子的個數(shù)(即數(shù)組中實際元素的個數(shù)),且后者更重要。因為因子的個數(shù)事先是未知的、只能在試探的過程中根據(jù)模運算的狀態(tài)來遞增,且只能在試探完畢才能最終確定實際因子的個數(shù)(即需要一個計數(shù)器)和各個因子的值。

      從“求一個正整數(shù)的所有因子”拓展到“求解一個正整數(shù)的所有質(zhì)因子”,若不使用素數(shù)判斷的功能代碼(或函數(shù)),這個問題該如何解答呢?問題的關鍵仍在于算法。該算法難度增大了;涉及的知識點也增多了,包括質(zhì)因子的概念、模運算、判斷因子是否重復、計數(shù)器以及技巧等。算法的基本思想是:以i=2作為最小的除數(shù)開始進行模運算,若能整除,則繼續(xù)以i為除數(shù)進行模運算,直到被除數(shù)不含i的倍數(shù)為止,且僅保留一份這時的除數(shù)i;若不能整除,則除數(shù)i自增1,再用新的i重復前面的步驟,直到可用來進行模運算的i都試探過為止。

      按照上述算法思想,下面是第一種實現(xiàn)方法:

      第二種方法是“不存儲1這個虛假的質(zhì)因子”,對上述代碼做幾處修改即可:

      將①修改成 int x,result[100],len=0;

      將②修改成if(len==0||result[len-1]!=i)

      將⑤修改成 for(i=0;i<len;i++)

      上面的if語句中,邏輯表達式的次序不能顛倒,因為存在短路現(xiàn)象;否則,算法就存在Bug了。

      第三種方法則是使用標記來判斷質(zhì)因子是否重復,與方法一對照的話,需作如下修改:

      將①修改成 int x,result[100],len=0,flag=0;

      將②修改成if(flag==0||result[len-1]!=i)

      將③修改成 { result[len++]=i;flag=1;}

      將④修改成 { i++;flag=0; }

      將⑤修改成 for(i=0;i<len;i++)

      上面②處的if語句中的邏輯表達式的次序也不能顛倒,原理上與第二種方法一致。

      上述三種解答,雖然使用的具體語句有一些差別,但本質(zhì)是一致的。都緊緊地抓住了數(shù)組概念的四要素,特別是數(shù)組實際元素的個數(shù),但最重要的仍是算法。因此,只有抓住事物的本質(zhì),才能真正理解、才會運用、才有拓展和創(chuàng)新。

      最后,特別強調(diào)的是:閱讀代碼或檢驗代碼的正確性,必須實踐“三動”——動手、動腦、動眼的學習方法[3]。

      5 結語

      在教學中,必然會綜合使用多種教學方法,如案例法、演示法、類比法、啟發(fā)法、拓展法……以及師生交互手段等。教學時經(jīng)常強調(diào):一道題,如果你能講出令人信服的道理,那么你的解答思路就是正確的,在排除一些意外的情況下,你給出的答案應該是正確的。因此,在解題過程中,概念的嚴謹性、完整性必然會得到清晰的展現(xiàn),同時,追求嚴謹、認真的態(tài)度是綜合素質(zhì)培養(yǎng)的重要目標之一。

      [1]熊啟軍,孫文鶴,方磊.C語言程序設計[M].北京:中國鐵道出版社,2015:97-100.

      [2]李文明,陳哲,李緒蓉,黃志球.C程序數(shù)組越界的運行時驗證技術研究與實現(xiàn)[J].計算機工程與應用,2015(11):190-192.

      [3]熊啟軍,袁磊,谷瓊.基于“四期六段”模式的C語言教學[M].現(xiàn)代計算機(專業(yè)版),2012(14):42.

      Case Teaching for C Language's Array

      XIONG Qi-jun,GU Qiong,QU Jun-feng
      (College of Mathematics&Computer Science,Hubei University of Arts and Science,Xiangyang 441053)

      In the teaching of C Language Programming,array is in an important position.Discusses the concept,basic operation,application,develop?ment and teaching method,and makes some suggestions on how to make mistakes,precautions,algorithms and techniques.These can play a role for teaching in promote and inspire,so as to improve the learning efficiency and teaching quality.

      C Language;Array;Algorithm;Teaching Method

      湖北省高等學校省級教學研究項目(No.2016388)、湖北文理學院計算機科學與技術省級重點學科開放基金資助項目(No.2017009)

      1007-1423(2017)24-0043-04

      10.3969/j.issn.1007-1423.2017.24.010

      熊啟軍(1971-),男,湖北仙桃人,研究方向為軟件工程

      2017-05-23

      2017-08-10

      猜你喜歡
      數(shù)組賦值個數(shù)
      關于1 1/2 … 1/n的一類初等對稱函數(shù)的2-adic賦值
      L-代數(shù)上的賦值
      JAVA稀疏矩陣算法
      電腦報(2022年13期)2022-04-12 00:32:38
      怎樣數(shù)出小正方體的個數(shù)
      JAVA玩轉數(shù)學之二維數(shù)組排序
      電腦報(2020年24期)2020-07-15 06:12:41
      等腰三角形個數(shù)探索
      怎樣數(shù)出小木塊的個數(shù)
      怎樣數(shù)出小正方體的個數(shù)
      強賦值幺半群上的加權Mealy機與加權Moore機的關系*
      利用賦值法解決抽象函數(shù)相關問題オ
      盐池县| 安溪县| 永宁县| 科尔| 衡阳县| 山丹县| 德昌县| 内丘县| 漯河市| 如皋市| 东乡| 揭西县| 平遥县| 专栏| 鲁山县| 宝鸡市| 南平市| 清镇市| 宣化县| 淮阳县| 青海省| 桐乡市| 札达县| 西青区| 砀山县| 双峰县| 镇远县| 玉林市| 石阡县| 吐鲁番市| 浮梁县| 葫芦岛市| 宜章县| 富顺县| 泸定县| 罗平县| 称多县| 江津市| 常宁市| 邯郸县| 凤翔县|