亚洲欧美另类一区二区三区动漫|国产精品影院xxx|亚洲第一av美国AA片|肏屄视频,日韩无码|国产双飞在线观看|婷婷国产成人精品免费视频|一级夫妻黄色大片|免费的大黄片久艹在线|91麻豆成人视频|一道本高清免费视频

歡迎來到優(yōu)發(fā)表網(wǎng)

購物車(0)

期刊大全 雜志訂閱 SCI期刊 期刊投稿 出版社 精品范文

程序設計的結(jié)構(gòu)范文

時間:2023-08-08 16:46:01

序論:在您撰寫程序設計的結(jié)構(gòu)時,參考他人的優(yōu)秀作品可以開闊視野,小編為您整理的7篇范文,希望這些建議能夠激發(fā)您的創(chuàng)作熱情,引導您走向新的創(chuàng)作高度。

程序設計的結(jié)構(gòu)

第1篇

關鍵詞:VB選擇結(jié)構(gòu);IF語句;評價

Visual Basic(簡稱VB)是面向?qū)ο蟮目梢暬幊陶Z言,它簡單易學的語法深受廣大編程愛好者的青睞,同時也是中職學校計算機專業(yè)學生的一門必修課程。通過學習VB程序設計,培養(yǎng)學生的程序設計能力和開發(fā)軟件的興趣。VB有三種基本的程序控制結(jié)構(gòu):順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。當一個問題涉及到對條件進行分析、比較、判斷,并根據(jù)判斷所得的結(jié)果采取相應的處理方式,這時就要用選擇結(jié)構(gòu)來解決問題。在教學過程中如何突破VB選擇結(jié)構(gòu)教學的重點、難點,如何讓初學者理解選擇結(jié)構(gòu)的執(zhí)行過程,掌握選擇結(jié)構(gòu)的應用,培養(yǎng)他們的邏輯思維能力、實踐操作能力和解決實際問題的能力,這是筆者在教學中一直思考的問題。現(xiàn)就結(jié)合VB選擇結(jié)構(gòu)中IF語句教學的主要環(huán)節(jié)進行探討。

一、實例導入,煥發(fā)熱情

中職學生的知識基礎較差,普遍學習興趣不高。如果在選擇結(jié)構(gòu)教學中按照傳統(tǒng)的先講解IF語句的格式和功能,再進行實踐操作,則未必能取得較好的教學效果。興趣是學習的原動力,這就需要計算機教師暫時拋開晦澀難懂的概念和語法,采用生活化的實例來煥發(fā)學生的學習熱情。

新課之前,首先通過局域網(wǎng)分發(fā)幾個用IF語句編寫的VB可執(zhí)行程序到學生電腦上,如:手機價格競猜游戲,讓學生一開始就動手體驗選擇結(jié)構(gòu)的魅力。學生運行程序的過程仿佛置身于游戲中,他們結(jié)合實際生活經(jīng)驗很輕松便推斷出:如果輸入的價格大于1999,則提示“猜高了”;如果輸入的價格小于1999,則提示“猜低了”;如果輸入的價格等于1999,則提示“恭喜您,猜對了”。學生用自己的語言思路清晰地總結(jié)出競猜過程中的三種情況,教師順勢引出條件判斷這個概念。通過講解這個例子讓學生對價格判斷和提示信息對應起來,理解根據(jù)不同的判斷結(jié)果執(zhí)行不同的語句。通過實例導入,學生對VB編程產(chǎn)生了好奇心,教師結(jié)合實例讓學生理解VB選擇結(jié)構(gòu)的執(zhí)行過程,從而將將學生的被動學習轉(zhuǎn)化為主動學習。

二、加工半成品,突出重點

VB選擇結(jié)構(gòu)教學中,如果給學生一個完整的任務書,那么按照實際的流程,學生在任務前期首先要進行界面設計、屬性設置以及一些順序結(jié)構(gòu)語句的編寫等。由于學生的理解程度不一樣,完成進度也不一樣,有些學生花長時間停留在前期工作中,一節(jié)課下來都沒有進入到選擇結(jié)構(gòu)代碼的編寫,這就影響到了選擇結(jié)構(gòu)學習目標的落實,評價也變的非常困難。針對這一情況,VB選擇結(jié)構(gòu)IF語句教學中采用“半成品”加工策略,給學生一個不完整的任務,僅對IF分支語句環(huán)節(jié)進行“留白”,“留白”部分即教學的重點。學生在“半成品”到“成品”的加工過程中既學到了知識、掌握了重點,又提高了實踐效率、獲得了成功的體驗。

如在IF雙分支語句教學中,采用實例:商城迎新年促銷活動,單價滿200元減40,不滿200元則按原價出售,根據(jù)商品原價求實付金額。教師給出界面和部分代碼, 對代碼中IF雙分支語句部分進行“留白”。教師引導學生自主探究,分析問題,學生由活動規(guī)則總結(jié)出兩種判斷情況(a>=200和a

三、條件遷移,化解難點

多分支IF語句的應用是VB選擇結(jié)構(gòu)IF語句的難點。教學中若采用條件遷移法,即通過在已掌握的雙分支IF語句實例的基礎上對判斷條件進行增加或改變來過渡到新的例題,從而降低多分支語句應用的難度。這樣的方法符合學生的認知規(guī)律和發(fā)展規(guī)律,讓學生對多分支IF語句的認識、理解、運用有一個逐步深入的“螺旋式”上升的過程。

如商城迎新年促銷活動,在原有基礎上增加條件:單價滿1000元的商品在享受滿200減40后再享受9折優(yōu)惠?;趯W生之前已掌握了雙分支IF語句應用,結(jié)合已有的數(shù)學知識,解決問題的方法和步驟便得到了簡化,并能根據(jù)實際情況寫出邏輯表達式和相應的執(zhí)行語句。如對百分制成績進行等級評定,在一開始的雙分支IF語句(及格和不及格)的基礎上通過對百分制成績的分數(shù)段范圍進行逐步細化,對應的評定等級則也有所變化(及格、良好、優(yōu)秀),從而過渡到多分支IF語句。通過簡單的改進實現(xiàn)小小的目標,通過條件遷移法化解多分支IF語句這個教學難點。條件的遷移,就是用一個接一個的問題,牽著學生的思維,讓他們不停的跟著教學內(nèi)容思考并實踐,而不是一味的坐著被“灌”。

四、課堂教學評價

課堂教學評價是促進學生成長、教師專業(yè)發(fā)展和提高課堂教學質(zhì)量的重要手段。在VB選擇結(jié)構(gòu)程序設計的實際教學中采取多向立體式評價方式:教師對學生的學習效果評價、學生對教師的教學滿意度評價、學生的自我評價,這些評價貫穿于整個教學活動中。通過教師對學生的學習效果評價,及時反饋學生對重、難點的掌握情況,幫助學生正確認識自我,樹立不斷進取的信心。通過學生對教師教學滿意度的評價,幫助教師了解自己的課堂教學水平以及不足之處,為優(yōu)化教學過程提供科學依據(jù),有利于教師提高課堂教學質(zhì)量。通過學生自我評價對VB選擇結(jié)構(gòu)IF語句的知識點進行回顧與梳理,將感性知識理性化,并進行學習方法的總結(jié)與交流等。

五、結(jié)束語

基于中職學生的學習特點,我們計算機教師需要用心設計課堂,在教學中努力給學生提供生活化的問題解決環(huán)境,讓學生帶著疑問主動學習。采用適合學生認知規(guī)律和發(fā)展規(guī)律的教學方法突破重點、化解難點。教學中進行有效的課堂教學評價,從而切實有效地提高VB選擇結(jié)構(gòu)程序設計的課堂教學質(zhì)量。

參考文獻:

第2篇

關鍵詞:程序設計基礎;數(shù)據(jù)結(jié)構(gòu);計算思維;教學銜接

0、引言

程序設計基礎與數(shù)據(jù)結(jié)構(gòu)是計算機類專業(yè)的兩門專業(yè)基礎課,在計算機類專業(yè)教學中具有舉足輕重的作用,都旨在培養(yǎng)學生的編程能力和計算思維能力,并為后續(xù)課程打下堅實的專業(yè)基礎,但在這兩門課程的教學過程中,存在一系列問題,嚴重影響課程的教學效果。筆者分析和研究產(chǎn)生這些實際問題的原因,對這兩門課程的知識融合、內(nèi)容銜接以及教學實踐等進行探討,提出切實可行的解決方案,更好地實現(xiàn)兩門課程的教學目標。

1、課程教學內(nèi)容和教學目標

程序設計基礎課程是學生接觸的第一門專業(yè)基礎課,也是進行計算機編程的入門課程。課程的教學目標是使學生掌握程序設計的基本方法,培養(yǎng)其擁有良好的程序設計風格、較強的軟件開發(fā)能力以及一定的計算思維能力,為后續(xù)課程打下良好的基礎。

數(shù)據(jù)結(jié)構(gòu)是繼程序設計基礎課程之后的一門綜合專業(yè)基礎課,是計算機類專業(yè)的核心課程之一,具有舉足輕重的作用。它是程序設計基礎課程所講知識的自然延伸和具體應用。對數(shù)據(jù)結(jié)構(gòu)的理解、掌握和應用拓展,將對學生解決具體實際問題時的數(shù)據(jù)分析、數(shù)據(jù)組織、數(shù)據(jù)處理和編程能力有著深遠的影響。課程的教學目標是培養(yǎng)學生縝密的邏輯思維和數(shù)據(jù)抽象能力以及學生在軟件設計領域中科學的計算思維能力,幫助學生將數(shù)據(jù)結(jié)構(gòu)和算法與具體的編程實現(xiàn)相結(jié)合并靈活地應用到實踐和工程實際中。

2、兩門課程間的關系

從程序與數(shù)據(jù)結(jié)構(gòu)本身的關系來說,一個好的程序離不開合適的數(shù)據(jù)結(jié)構(gòu),而數(shù)據(jù)結(jié)構(gòu)中算法的實現(xiàn)離不開具體的程序設計。在計算機類專業(yè)的課程體系中,數(shù)據(jù)結(jié)構(gòu)和程序設計基礎課程雖然獨立開設,但是它們之間的聯(lián)系是緊密的。在課程設置上,程序設計基礎是數(shù)據(jù)結(jié)構(gòu)的前導課程,兩門課程一脈相承,不可分割。

學生對程序設計基礎課程的掌握程度、具備的計算思維和編程能力,直接關系到以程序設計語言實現(xiàn)算法的數(shù)據(jù)結(jié)構(gòu)課程的教學效果。數(shù)據(jù)結(jié)構(gòu)課程通過創(chuàng)造性思維的訓練,重點突出數(shù)據(jù)抽象與程序抽象能力的培養(yǎng),從而進一步提升學生的計算思維能力和編程能力,但兩門課程在實際教學中存在一些問題,主要原因是課程設置、教學內(nèi)容、教學方法和教學實踐方式等多方面存在缺陷。經(jīng)分析,對程序設計基礎和數(shù)據(jù)結(jié)構(gòu)課程進行知識整合和內(nèi)容銜接,采用適當?shù)慕虒W方式,改進教學實踐是探討和研究的主要內(nèi)容。

3、兩門課程在實際教學中存在的銜接問題

3.1 兩門課程教學內(nèi)容的脫離

目前,在實際教學中,程序設計基礎和數(shù)據(jù)結(jié)構(gòu)課程雖然關系緊密,但是一直被設定為兩門完全獨立的課程,而且教師在制訂教學大綱和教學目標時容易忽視兩門課程問的聯(lián)系,在教學過程中出現(xiàn)一些盲區(qū),要么兩門課程在教學內(nèi)容上出現(xiàn)不同程度的交叉,要么出現(xiàn)知識銜接的斷層,令學生對兩門課程的內(nèi)在聯(lián)系沒有整體概念和認識,從而導致不能深入系統(tǒng)地學習相關知識。尤其是先行課程序設計基礎的教學內(nèi)容和課程案例完全脫離了數(shù)據(jù)結(jié)構(gòu)課程,使數(shù)據(jù)結(jié)構(gòu)中最頻繁使用的知識和內(nèi)容在程序設計基礎課程中甚少提及,不能為數(shù)據(jù)結(jié)構(gòu)課程的講解打下扎實的程序設計基礎。

3.2 程序設計編程語言與數(shù)據(jù)結(jié)構(gòu)實現(xiàn)語言不一致

程序設計基礎課程所教授的編程語言與數(shù)據(jù)結(jié)構(gòu)教材或?qū)嶒炈褂玫膶崿F(xiàn)語言不一致,如將C++語言作為程序設計基礎的教授語言,而在數(shù)據(jù)結(jié)構(gòu)的實現(xiàn)上選擇c語言或Java語言,以至于數(shù)據(jù)結(jié)構(gòu)的理論教學與具體上機編程實現(xiàn)脫節(jié),嚴重影響了上機實驗和課程設計環(huán)節(jié)。

3.3 程序設計方法與數(shù)據(jù)結(jié)構(gòu)實現(xiàn)方法不一致

程序設計基礎課程中或注重面向過程的程序設計方法,或注重面向?qū)ο蟮某绦蛟O計方法,但在數(shù)據(jù)結(jié)構(gòu)課程中卻很難利用前導課程中學到的程序設計方法實現(xiàn)相關的數(shù)據(jù)結(jié)構(gòu)和算法,從而影響了學生對數(shù)據(jù)結(jié)構(gòu)課程知識的應用與實現(xiàn)。另一方面,學生在學習過程中沒有充分理解數(shù)據(jù)結(jié)構(gòu)課程的作用和實際意義,以至于在實際項目和問題中不知使用什么方法(面向過程或面向?qū)ο螅┓治鼋鉀Q問題,不知如何運用數(shù)據(jù)結(jié)構(gòu)知識解決實際問題。

3.4 前導課程對后續(xù)課程實踐環(huán)節(jié)的影響

數(shù)據(jù)結(jié)構(gòu)實驗環(huán)節(jié)相對課堂理論環(huán)節(jié)較薄弱。此問題的存在多半是因為數(shù)據(jù)結(jié)構(gòu)具體實現(xiàn)的關鍵技術在程序設計基礎課中未被講解或強調(diào),在進行數(shù)據(jù)結(jié)構(gòu)算法從理論到偽代碼、再由偽代碼到真代碼轉(zhuǎn)換的過程中難以真正編程實現(xiàn),使學生對數(shù)據(jù)結(jié)構(gòu)的理解和掌握僅停留在抽象層、概念層、理論層,難以上升到實現(xiàn)層,從而影響學生的學習興趣和積極性。同時,課程中的實踐項目過于單一且相對獨立,使實踐環(huán)節(jié)與實際項目的聯(lián)系過于松散,學生運用所學知識解決實際問題的能力和實際工程能力很難得以鍛煉。

3.5 缺少計算思維能力的培養(yǎng),缺乏理論知識與實際應用的聯(lián)系

提高學生計算思維能力是程序設計基礎和數(shù)據(jù)結(jié)構(gòu)課程共同的目標。計算思維是抽象的多個層次上的思維,而抽象是表達實際的方法。然而,現(xiàn)行教學方法過多關注程序設計和數(shù)據(jù)結(jié)構(gòu)知識點的講解,缺乏對學生思維能力的培養(yǎng)。

如果缺乏理論聯(lián)系實際,那么將影響學生計算思維的培養(yǎng)。數(shù)據(jù)結(jié)構(gòu)中的知識又太抽象,如果缺乏相應的實際案例對抽象知識加以應用,那么就會導致學生不知道怎樣將所學的知識應用到實際中,缺乏具體問題具體分析和解決的能力。

3.6 教師本身知識結(jié)構(gòu)欠缺,上機實踐指導教師數(shù)量不足

授課教師知識結(jié)構(gòu)的缺乏將導致一些現(xiàn)實問題:如果程序設計基礎的教師不懂數(shù)據(jù)結(jié)構(gòu),那么其自然不會將相關知識引入課堂,同時也缺乏用所教授的語言具體實現(xiàn)數(shù)據(jù)結(jié)構(gòu)中結(jié)構(gòu)和算法的能力;如果數(shù)據(jù)結(jié)構(gòu)的教師缺乏相關編程語言知識,那么就會給上機輔導帶來困難。同時,兩門課程具有很強的實踐性,若上機實踐輔導教師不足,將不利于學生編程能力的提升以及相關軟件大賽學生的培養(yǎng)和輔導。

針對以上實際教學中存在的問題,可知為提高程序設計基礎與數(shù)據(jù)結(jié)構(gòu)課程的教學效果,根據(jù)計算機類專業(yè)這兩門課程教學內(nèi)容和目標,對兩門課程進行知識整合和內(nèi)容銜接的必要性,對課程銜接的方法和思路等進行探討勢在必行。同時,課程教學不僅要關注知識的傳授,還要培養(yǎng)學生主動獲取知識并綜合已有知識創(chuàng)造新知識的能力。

4、程序設計基礎和數(shù)據(jù)結(jié)構(gòu)課程銜接的新方法和思路

4.1 做好兩門課程教學內(nèi)容的融合和銜接

教師需緊密結(jié)合計算機類專業(yè)的培養(yǎng)目標,精心設計程序設計基礎和數(shù)據(jù)結(jié)構(gòu)課程的教學內(nèi)容,既要滿足課程的專業(yè)基礎性,又要滿足后續(xù)課程學習的需要,嚴密制訂教學大綱,做好程序設計基礎與數(shù)據(jù)結(jié)構(gòu)教學內(nèi)容的銜接以及相關教材的選定。

在程序設計基礎課程教學中,教師需要關注學生計算思維能力的培養(yǎng),將重點放在講解思路上,教學生如何對問題進行抽象,還要介紹一些簡單的基礎算法和數(shù)據(jù)結(jié)構(gòu)。程序設計與數(shù)據(jù)結(jié)構(gòu)的聯(lián)系過程必須做到循序漸進,若引入的數(shù)據(jù)結(jié)構(gòu)相關知識過難,會打擊學生的學習積極性。例如,教師講數(shù)組時可引入幾種數(shù)據(jù)結(jié)構(gòu)中簡單的排序算法冒泡排序、選擇排序等;講完指針和結(jié)構(gòu)體后可引入最基本的數(shù)據(jù)結(jié)構(gòu)――鏈表;講完嵌套函數(shù)調(diào)用后可引入“遞歸”,它是數(shù)據(jù)結(jié)構(gòu)中解決問題的常見思想和算法,可以通過簡單的遞歸函數(shù)幫助學生理解遞歸思想和遞歸調(diào)用過程,這些是理解數(shù)據(jù)結(jié)構(gòu)中復雜遞歸函數(shù)的基礎。在程序設計基礎教學中,只講遞歸函數(shù)的簡單應用,而在數(shù)據(jù)結(jié)構(gòu)教學中,需要介紹遞歸函數(shù)的復雜應用:棧、樹、八皇后問題、N個數(shù)的全排列等。圍繞“遞歸”這一重要知識點,從易到難并結(jié)合課程本身特點進行理論分析,將有益于整合課程教學內(nèi)容,引導學生循序漸進地學習和思考。

針對在程序設計基礎課程中不重要但在數(shù)據(jù)結(jié)構(gòu)及算法中被廣泛使用的知識點,教師需要在講解程序設計課程時將其點出并告訴學生此知識在后續(xù)數(shù)據(jù)結(jié)構(gòu)課中的重要性,引起學生對該知識點的興趣和重視,如指針的靈活使用、結(jié)構(gòu)體類型的復雜應用、類型重命名、類的拷貝構(gòu)造函數(shù)(深拷貝)、函數(shù)模板、類模版等。

同時,教師要對程序設計基礎課程內(nèi)容進行適當補充和擴充,如增加c++函數(shù)模板、類模板的相關知識,為將泛型程序設計、c++的STL引人數(shù)據(jù)結(jié)構(gòu)課程奠定知識基礎,縮小教學知識與實際運用的距離,提高學生的動手編程能力和知識運用能力。

4.2 保證程序設計編程語言與數(shù)據(jù)結(jié)構(gòu)實現(xiàn)語言的一致

程序設計基礎課程所教授的編程語言要與數(shù)據(jù)結(jié)構(gòu)教材或?qū)嶒炈褂玫木幊陶Z言一致,這樣不僅能大大提高學生的編程能力,還有利于數(shù)據(jù)結(jié)構(gòu)課程的上機實現(xiàn)。

4.3 將面向?qū)ο笏枷胍氤绦蛟O計與數(shù)據(jù)結(jié)構(gòu)中

隨著程序設計方法從傳統(tǒng)的結(jié)構(gòu)化程序設計演化到面向?qū)ο蟪绦蛟O計,數(shù)據(jù)結(jié)構(gòu)在面向?qū)ο蟪绦蛟O計中也將成為面向?qū)ο蟮臄?shù)據(jù)結(jié)構(gòu),且將隨著程序設計理論和技術的發(fā)展而不斷變化發(fā)展。在程序設計基礎課程中講授面向?qū)ο蟮木幊陶Z言如c++語言,既可以實現(xiàn)面向過程的數(shù)據(jù)結(jié)構(gòu),又能實現(xiàn)面向?qū)ο蟮臄?shù)據(jù)結(jié)構(gòu)。數(shù)據(jù)結(jié)構(gòu)課程采用面向?qū)ο蟮挠^點講授并以C++語言作為算法的描述工具,從而強化數(shù)據(jù)結(jié)構(gòu)基本知識和面向?qū)ο蟾呒壋绦蛟O計基本能力的雙基訓練以及實際動手能力培養(yǎng)。在設計數(shù)據(jù)結(jié)構(gòu)實踐項目時,將面向?qū)ο蟮某绦蛟O計思想、面向?qū)ο蟮某绦蛟O計語言和數(shù)據(jù)結(jié)構(gòu)課程教學內(nèi)容恰當?shù)厝诤希行д蟽砷T課程中的重疊部分,突出各自的側(cè)重點,符合當前軟件設計思想和軟件開發(fā)趨勢。

4.4 加強課程中計算思維能力的培養(yǎng)

在程序設計和數(shù)據(jù)結(jié)構(gòu)的教學方法上,將面向語法為中心的教學逐漸轉(zhuǎn)變?yōu)槊嫦騿栴}求解的教學,從問題出發(fā)采用適當?shù)臄?shù)據(jù)結(jié)構(gòu),將其抽象成解決問題的算法描述,用程序設計語言實現(xiàn)問題求解,使課程從過去的僅講授孤立的知識點,轉(zhuǎn)變?yōu)橹v授計算思維和問題求解的過程,從而達到突出思維方法訓練的目的。在程序設計基礎和數(shù)據(jù)結(jié)構(gòu)授課時盡量將理論聯(lián)系實際,將知識點解釋和應用為身邊容易理解的真實案例。例如,講“圖”時,可以把現(xiàn)在流行的復雜網(wǎng)絡、社交網(wǎng)絡引入其中;講解“隊列”時,可將春節(jié)買票引入其中,讓學生從身邊的例子理解理論知識的具體應用。對有些案例可以提倡“一題多解”,不局限于一種數(shù)據(jù)結(jié)構(gòu)、解題思路和實現(xiàn)方法,通過一題多問、一題多解帶動學生探索、比較、尋求更好的解決途徑,達到學生分析解決問題能力的提高和計算思維能力的培養(yǎng)。

4.5 提升教師能力,配備充足的上機輔導教師

學校要加強程序設計基礎與數(shù)據(jù)結(jié)構(gòu)課程相關授課教師整體能力的提升。教師不僅要掌握自己所教授課程的知識,還要對該課程的前續(xù)及后續(xù)課程內(nèi)容有所了解,便于維護教學的整體秩序和融合學生的知識體系。同時,教師要積極參與各種軟件大賽和企業(yè)培訓,將教授的理論知識和實際項目相結(jié)合,達到應用知識解決復雜問題的目的。此外,兩門課程的上機實踐環(huán)節(jié)要配備足量的輔導教師,不讓學生輸在編程入門的起跑線上。

4.6 依托程序設計競賽,提高學生的編程能力

依托全國軟件大賽、ACM大賽等程序設計競賽,將競賽題目引入程序設計基礎和數(shù)據(jù)結(jié)構(gòu)課堂中。此類題目強調(diào)考查學生對各種算法的應用能力,綜合性較強,非常適合輔助學生學習和體會數(shù)據(jù)結(jié)構(gòu)的妙用,提升學生分析和解決實際問題的能力,引導學生將所學知識準確而靈活地運用到實際生活中,大大提高學生的實踐動手和程序設計能力,促進其知識的融會貫通。另外,通過競賽等多種活動可以為學生提供展現(xiàn)程序設計能力的舞臺,激發(fā)學生學習的主動性,培養(yǎng)其計算思維能力。

例如,在教授程序設計基礎時,講完邏輯表達式和多重循環(huán)結(jié)構(gòu)后,可以將大賽中的邏輯推理題目引入教學中并引出常見的解題方法和思路一枚舉法,從而加深對枚舉法的認識。通過采用數(shù)據(jù)結(jié)構(gòu)中的雙向鏈表和線性數(shù)組兩種方式實現(xiàn)大賽中常見的約瑟夫環(huán)問題。

4.7 引入OJ平臺。加強課程實踐環(huán)節(jié)

引人在線判題(Online Judge,oJ)系統(tǒng),提高學生的實踐能力。能力需要以豐富的知識作為支撐,而實踐是能力賴以生長的土壤。在OJ系統(tǒng)中,學生可以在線提交程序源代碼,系統(tǒng)對源代碼進行編譯和執(zhí)行并通過預先設計的測試數(shù)據(jù)檢驗程序源代碼的正確性。引入0J系統(tǒng)不僅可以輔助教師批改作業(yè),減輕教師工作壓力,還可以促使學生加強平時上機編程練習,通過編程排名方式提高學生的學習興趣。OJ系統(tǒng)中擁有大量題庫,可以讓學生進行上機實踐,培養(yǎng)自身的計算思維能力,提高編程能力。0J系統(tǒng)不僅可以作為程序設計基礎課程的實踐平臺,還可作為數(shù)據(jù)結(jié)構(gòu)課程的實踐平臺。

第3篇

1.在《C程序設計》與《數(shù)據(jù)結(jié)構(gòu)》教學中對課程整合概念的理解

理論上,課程整合是指對課程設置、各課程教育教學目標、教學設計、評價等諸要素作系統(tǒng)的考察與操作。在實際教學中,課程整合是指考慮到各門相互分裂的課程之間的有機聯(lián)系,將這些課程綜合化。

在傳統(tǒng)的教學模式中,《C程序設計》是先行課程,《數(shù)據(jù)結(jié)構(gòu)》是后續(xù)課程,它們都是學習操作系統(tǒng)、數(shù)據(jù)庫原理和應用、面向?qū)ο蟪绦蛟O計等課程的基礎?!禖語言程序設計》是學生最先接觸的結(jié)構(gòu)化程序設計語言,其教學目的主要是使學生了解結(jié)構(gòu)化程序設計的算法和思路,掌握程序設計和調(diào)試的基本技巧,培養(yǎng)良好的軟件設計基礎。《數(shù)據(jù)結(jié)構(gòu)》主要是研究非數(shù)值應用問題中數(shù)據(jù)之間的邏輯關系和對數(shù)據(jù)的操作,同時還研究如何將具有邏輯關系的數(shù)據(jù)按一定的存儲方式存放在計算機內(nèi)。其教學目的主要是使學生掌握數(shù)據(jù)的邏輯結(jié)構(gòu)、存儲結(jié)構(gòu)及其相應的算法,培養(yǎng)學生解決實際問題的能力,即能夠把現(xiàn)實世界中的客觀問題,變換為在計算機內(nèi)的表示形式,學會組織數(shù)據(jù)、選擇算法、養(yǎng)成良好的程序設計風格。

《數(shù)據(jù)結(jié)構(gòu)》課程中分析數(shù)據(jù)之間的邏輯關系和確定數(shù)據(jù)在計算機內(nèi)的存儲結(jié)構(gòu)是所有程序設計過程中必須完成的兩大任務,且《數(shù)據(jù)結(jié)構(gòu)》中算法描述的語言又多采用C語言,兩門課程之間存在著緊密而內(nèi)在聯(lián)系,為兩門課程的整合提供了可能性。

2.《C程序設計》與《數(shù)據(jù)結(jié)構(gòu)》的教學現(xiàn)狀

在傳統(tǒng)的教學模式中,《C程序設計》是先行課程,《數(shù)據(jù)結(jié)構(gòu)》是后續(xù)課程,將兩門課程分開來教學,人為地割斷了它們之間的內(nèi)在聯(lián)系,導致學生在學習《C程序設計》時,僅局限于C語言的語法層面上,不能把C語言的程序設計思路和語法知識具體運用到數(shù)據(jù)結(jié)構(gòu)的算法中去,使理論知識與實踐運用脫鉤。而在學習《數(shù)據(jù)結(jié)構(gòu)》時,由于教師的更換和教材的多樣化,任課教師又不得不花掉一、兩周的時間來復習C語言的相關知識,造成了課時的浪費和學生反感。在具體運用時,又出現(xiàn)學生能理解數(shù)據(jù)結(jié)構(gòu)中的算法和讀懂算法,卻不能運用C語言去實現(xiàn)算法等程序設計能力較差的現(xiàn)象。筆者長期從事這兩門課程的教學工作,一直在探索如何提高這兩門課程的教學效果,培養(yǎng)學生運用C語言這個工具去解決實際問題的能力。

3.《C程序設計》與《數(shù)據(jù)結(jié)構(gòu)》課程整合的思路

在高職院校計算機應用專業(yè)的課程體系中,實現(xiàn)《C程序設計》和《數(shù)據(jù)結(jié)構(gòu)》這兩門課程的整合,要結(jié)合職業(yè)教育培養(yǎng)實用型人才的目標,根據(jù)后續(xù)專業(yè)課程的需要來確定?!禖程序設計》和《數(shù)據(jù)結(jié)構(gòu)》課程整合化的思路以C語言為工具,以實踐為中心,重視基礎知識,注重能力培養(yǎng),對兩門課程教學內(nèi)容和教學模式進行優(yōu)化和整合。

在實施過程中,將這兩門課程整合為一門課程,課程名稱為《C程序設計與數(shù)據(jù)結(jié)構(gòu)》,在一個學期內(nèi)完成授課內(nèi)容。堅持理論聯(lián)系實踐的教學模式,突出實踐教學的重要性,去掉繁瑣的理論推導,重新設計教學、實訓大綱,處理教材,合理分配學時。在具體教學中,以C語言為主線,將數(shù)據(jù)結(jié)構(gòu)的內(nèi)容溶入到C語言的教學中,對數(shù)據(jù)結(jié)構(gòu)的內(nèi)容以“適度夠用”為原則,適當?shù)剡M行刪減,以滿足高職教育培養(yǎng)應用型人才的教學需要。

4.《C程序設計》與《數(shù)據(jù)結(jié)構(gòu)》課程整合的具體實施

(1)整合后理論課教學的內(nèi)容和學時分配

整合后周學時為6節(jié),總學時為102節(jié)(按17個教學周計),其中理論課時為68節(jié),上機實踐課時為34節(jié)。

(2)課程整合后的實踐教學設計

在實踐教學中,要進一步鞏固對理論知識的理解,提高學生靈活運用數(shù)據(jù)結(jié)構(gòu)和算法的能力,使學生在編程、上機操作、程序調(diào)試與正確性驗證等基本技能方面得到訓練和提高。實驗可分兩部分,一是驗證性實驗,主要結(jié)合課堂理論教學內(nèi)容展開,學生可以對在課堂上學到的基本算法進行驗證;二是運用性實驗,組織學生以小組為單位設計一些實用程序,要求學生從實際出發(fā),在具體、真實的環(huán)境中分析研究數(shù)據(jù)對象的特性,構(gòu)造合理的數(shù)據(jù)結(jié)構(gòu)以及相應的算法。

(3)課程整合后的考試要求

整合后的課程培養(yǎng)目標是提高學生的計算機應用能力,計算機應用能力包括了三個層次:操作使用能力、應用開發(fā)能力和創(chuàng)新能力。因此整合后的課程考核,應采取理論基礎閉卷和上機操作開卷相結(jié)合的方式進行,綜合評價應從以下三個方面來著手。

①筆試。筆試主要是考察學生對理論知識的系統(tǒng)性的理解,可由客觀題型(如選擇、填空題等)和主觀題型組成,客觀題型要立足于基礎知識,小而全,避免死記硬背。主觀題型要靈活多樣,如問題解決分析、程序編寫等。占整個評價的30%。

②上機實踐。上機實踐貫穿于整個教學當中,所以要注重過程考核,結(jié)合實訓計劃,在各單元模塊結(jié)束時,進行隨堂考核,并認真檢查和記錄學生考核情況,作為期末上機實踐成績的一部分。實行各單元過關,有了各單元模塊的考核,到期末上機操作綜合考核時就不成問題了。通過對上機操作實踐的評價,可以考察學生應用計算機解決實際問題的能力。占整個評價的40%。

③學生的平時表現(xiàn)。學生的平時表現(xiàn)是指是否認真上課、聽課,上機練習的任務是否獨立完成,上機設計的任務是否有創(chuàng)意,作業(yè)是否按時上交等等,這些資料的積累,有利于對學生學習情況的全面認識。學生在整個授課過程中的表現(xiàn),占整個評價的30%。

在課程整合中,合理的考核方案能促進學生知識的積累,避免學生考前突擊和死記硬背現(xiàn)象,使學生真正學到知識。

第4篇

關鍵詞:目錄式菜單;C51;結(jié)構(gòu)體;函數(shù)指針

中圖分類號:TP368.12

隨著礦用產(chǎn)品智能化越來越高,人機界面越來越豐富,而在目前礦用產(chǎn)品中,人機界面多基于單片機及按鍵方式實現(xiàn),對于復雜的人機界面程序設計工作量很大,且存在經(jīng)常需要修改的問題。因此設計了運行可靠、修改方便的菜單程序框架可以降低工作量,提高產(chǎn)品開發(fā)效率,且為以后程序設計建立模板。多級菜單程序的設計方法很多,最典型的方法是根據(jù)按鍵動作及顯示界面建立索引關系表,具體實現(xiàn)方法見文獻[1]。該方法基于這個關系表,增加或調(diào)整界面時,對結(jié)構(gòu)表修改較大,特別是在界面很多時不方便,在修改及通用性方面差。作者通過總結(jié)已往的各種菜單設計方法,根據(jù)設計菜單經(jīng)驗,設計了一種基于C51結(jié)構(gòu)體的目錄式菜單,通過目錄查詢和函數(shù)指針調(diào)用,實現(xiàn)菜單各種操作功能。

1 目錄式菜單程序設計

通過對菜單的共性分析,提煉出菜單結(jié)構(gòu)特點,形成菜單條結(jié)構(gòu)體。一般每個菜單項有菜單標簽和子菜單列表;可以通過上下選擇鍵對子菜單項上下選擇;在選擇后進行確認操作,調(diào)用功能函數(shù)執(zhí)行,且可進入下一級子菜單或進入當前菜單的參數(shù)修改;在參數(shù)修改時通過上下選擇鍵修改;取消或返回可通過取消鍵操作。為實現(xiàn)以上功能首先建立菜單條結(jié)構(gòu)體,并根據(jù)菜單功能項目,分級建立菜單結(jié)構(gòu)體,確立菜單的顯示內(nèi)容、菜單條之間關系及執(zhí)行的功能等,然后再設計各功能函數(shù)。因此本設計的關鍵是要定義好菜單的目錄結(jié)構(gòu)體以及菜單的操作及顯示函數(shù)。

2 結(jié)構(gòu)體定義

2.1 菜單條結(jié)構(gòu)體定義

菜單條結(jié)構(gòu)體確立本菜單的顯示內(nèi)容、附加數(shù)據(jù)、結(jié)構(gòu)關系、執(zhí)行功能等屬性,包含內(nèi)容有當前菜單條數(shù)、菜單標簽、菜單條名稱、菜單條數(shù)據(jù)指針、父菜單指針、子菜單指針、執(zhí)行功能函數(shù)等關系,結(jié)構(gòu)體如下定義。

struct MenuItem

{ uchar MenuCount; //當前菜單條數(shù)

char *MenuCaption; //菜單標簽

char *DisplayString; //菜單條名稱

struct MenuData *DisplayData; //菜單條數(shù)據(jù)指針

struct MenuItem *ParentMenus; //父菜單指針

struct MenuItem *ChildrenMenus; //子菜單指針

void (*Subs)(); }; //執(zhí)行功能函數(shù)

2.2 菜單條數(shù)據(jù)結(jié)構(gòu)體定義

為了減少程序量和操作方便,在有些最底層菜單后附帶數(shù)據(jù),而這些數(shù)據(jù)的屬性不同,操作顯示都有區(qū)別,因此根據(jù)他們的共性將數(shù)據(jù)的屬性和操作、顯示等封裝成結(jié)構(gòu)體,包含內(nèi)容有當前數(shù)據(jù)個數(shù)、數(shù)據(jù)名稱、數(shù)據(jù)屬性、修改操作、顯示操作等,結(jié)構(gòu)體如下定義。

struct MenuData

{ uchar Count; //數(shù)據(jù)條數(shù)

char * Name; //數(shù)據(jù)名稱

uchar Attribute; //數(shù)據(jù)屬性,

void (*Set)(); // 設置函數(shù)

void (*Show)(); }; // 顯示函數(shù)

2.3 菜單目錄結(jié)構(gòu)體定義

在菜單條結(jié)構(gòu)體基礎上,根據(jù)每個界面菜單的內(nèi)容填寫菜單目錄結(jié)構(gòu)體,再根據(jù)具體功能寫各功能函數(shù)。菜單目錄結(jié)構(gòu)體示例如下。

struct MenuItem code Menu[]=

{ {3,"-菜單-", "1 菜單1", &MenuData1, ParentMenu, Menu1, Subs1},

{3,"-菜單-", "2 菜單2", &MenuData2, ParentMenu, Menu2, Subs2},

{3,"-菜單-", "3 菜單3", &MenuData3, ParentMenu, Menu3, Subs3},};

3 菜單目錄操作函數(shù)設計

定義好菜單目錄結(jié)構(gòu)體后,關鍵還要實現(xiàn)菜單目錄檢索和顯示,具體由以下兩個功能函數(shù)實現(xiàn)。

3.1 菜單目錄檢索函數(shù)設計

通過菜單檢索函數(shù)建立按鍵操作和菜單目錄的關系,可以在菜單目錄中檢索出當前需要的菜單及其相關的功能。void SearchMenu(void)函數(shù)根據(jù)按鍵狀態(tài),實現(xiàn)菜單上選、下選、返回、執(zhí)行菜單功能函數(shù)等操作功能。

3.2 菜單顯示函數(shù)設計

菜單顯示函數(shù)根據(jù)當前操作狀態(tài)顯示菜單條及相關數(shù)據(jù),以及實現(xiàn)反白顯示等功能。

void ShowMenu(void)函數(shù)實現(xiàn)菜單標簽、子菜單條顯示,并實現(xiàn)多條子菜單條行循環(huán)顯示操作,對選中的菜單條反白顯示等。

3.3 菜單函數(shù)設計

為了使程序結(jié)構(gòu)一體化,將讀鍵、菜單檢索、菜單顯示等函數(shù)封裝到一起,同時還具備對實時數(shù)據(jù)刷新、超時返回默認界面等功能。

4 實例分析

根據(jù)以上的目錄式菜單設計方法,以水泵閥門控制箱顯示單元實例應用進行分析。其硬件環(huán)境如下,CPU選用C8051F340,采用內(nèi)部12MHz頻率運行,使用內(nèi)部4K RAM作為顯存;顯示采用DM160128圖形液晶顯示模塊,不帶字庫,可以顯示16行20列字符或8行10列漢字;輸入采用按鍵和紅外遙控方式,設置有四個功能鍵(上選、下選、確認、取消/返回)。根據(jù)該項目的需要,顯示主菜單分實時數(shù)據(jù)、記錄查詢、參數(shù)設置、系統(tǒng)設置、參數(shù)校準、系統(tǒng)信息等六大項,而每項有多級子項,總共所有菜單條近300條。根據(jù)結(jié)構(gòu)體菜單設計,菜單目錄結(jié)構(gòu)體及數(shù)據(jù)結(jié)構(gòu)體部分示例如下。

4.1 主菜單目錄

struct MenuItem code MainMenu[]=

{ {6,"-主菜單-", "1 實時數(shù)據(jù)", &NullData, RootMenu, ViewMenu, NullSubs},

{0,&Null, "2 記錄查詢", &NullData, RootMenu, FindMenu, NullSubs},

{0,&Null, "3 參數(shù)設置", &NullData, RootMenu, SetupMenu, NullSubs},

{0,&Null, "4 系統(tǒng)設置", &NullData, RootMenu, SystemMenu, NullSubs},

{0,&Null, "5 出廠校準", &NullData, RootMenu, DebugMenu, NullSubs},

{0,&Null, "6 系統(tǒng)信息", &NullData, RootMenu, HelpMenu, NullSubs},

};

4.2 子菜單目錄

struct MenuItem code SystemMenu[]=

{ {3,"-系統(tǒng)設置-","1 通信設置",&NullData,MainMenu,ComSetup, CopyCom},

{0,&Null, "2 時間設置",&NullData, MainMenu, ClockSetup, CopyClock},

{0,&Null, "3 記錄清除",&NullData, MainMenu, ClearSoe, NullSubs},

};

4.3 帶顯示數(shù)據(jù)子菜單目錄

struct MenuItem code ComSetup[]=

{

{ 5, "-通信設置-","1 通信方式:", ComData, SystemMenu, &Null, NullSubs},

{ 0, &Null, "2 通信地址:", ComData, SystemMenu, &Null, NullSubs},

{ 0, &Null, "3 RS485速率:", ComData, SystemMenu, &Null, NullSubs},

{ 0, &Null, "4 CAN速率:", ComData, SystemMenu, &Null, NullSubs},

{ 0, &Null, "5 保存", ComData, SystemMenu, &Null, SaveCom},

};

4.4 菜單數(shù)據(jù)結(jié)構(gòu)體

struct MenuData code ComData[]=

{ { 5, "Mode", 2, SetCom, ShowCom},

{ 0, "Addr", 2, SetCom, ShowCom},

{ 0, "RS485 Buad", 2, SetCom, ShowCom},

{ 0, "CAN Buad ", 2, SetCom, ShowCom},

{ 0, "Save", 1, SetCom, ShowCom},

};

5 目錄式菜單的技術優(yōu)勢

本文提出的菜單設計方法在多個項目的顯示單元中的應用實踐,驗證了該方案顯著優(yōu)點如下:(1)菜單目錄基于C語言結(jié)構(gòu)體定義,菜單內(nèi)容及菜單項之間的關系明確,一目了然,閱讀修改方便;(2)形成菜單目錄后,增加、刪除和修改菜單只需對應的菜單目錄結(jié)構(gòu)體和對應函數(shù)改動,不影響其他部分。(3)菜單條和數(shù)據(jù)融合成一體,顯示豐富,操作簡便;(4)所有功能采用函數(shù)指針調(diào)用,程序代碼緊湊,運行穩(wěn)定可靠;(5)目錄式菜單框架通用性強,可移植性好;(6)根據(jù)設置參數(shù)或程序運行狀態(tài),可以實現(xiàn)動態(tài)變化的菜單。

6 結(jié)束語

本文介紹了基于C51的結(jié)構(gòu)體和函數(shù)指針調(diào)用的特點,設計目錄式菜單程序,并在礦用產(chǎn)品中成功的應用。通過該方法設計的菜單具有結(jié)構(gòu)緊湊、性能穩(wěn)定、功能強、移植性好等優(yōu)點,具有很好的實用價值。

參考文獻:

[1]陸錚,羅嘉.單片機C語言下LCD多級菜單的一種實現(xiàn)方法[J].工礦自動化,2006(01):48-51.

[2]童長飛.C8051F系列單片機開發(fā)與C語言編程[M].北京:北京航空航天大學出版社,2004.

第5篇

關鍵詞:C語言;程序設計;教學;結(jié)構(gòu)體;實驗

中圖分類號:G642 文獻標識碼:A 文章編號:1009-3044(2015)09-0163-02

Abstract: C language programming is a profession course in the computer special field of study, and it is usually the first programming course to the students. So the experiment teaching of the course is too important. It mainly discusses the teaching design of structures in this paper, which can help the students to grasp the basic knowledge about structures, and can solve problems by using arrays of structure and linked lists. It proves that the teaching design can stimulate the students’ study interest.

Key words:C language; programming; teaching; structure; experiment

《C語言程序設計》這門課一般是計算機專業(yè)學生入學時所接觸到的第一門程序設計課程,這門課程需要學生掌握程序設計的方法,用C語言編程解決問題。在現(xiàn)實問題求解時,往往用簡單數(shù)據(jù)類型描述問題對象時可能不是很方便和準確,例如,描述職工信息這樣不同類型的數(shù)據(jù)組合時,這時就需要定義一種構(gòu)造類型的數(shù)據(jù)結(jié)構(gòu)來描述,這就是結(jié)構(gòu)體。而且,本文認為結(jié)構(gòu)體是實現(xiàn)了數(shù)據(jù)的封裝,在一定程度上體現(xiàn)了封裝的特性,對后續(xù)課程的教學有一定的啟發(fā)性。所以,結(jié)構(gòu)體教學是C語言程序設計的一個重要的部分,同樣,在實驗課教學中結(jié)構(gòu)體的實驗教學也是重要的一個環(huán)節(jié),特別是鏈表方面的實驗教學對后續(xù)課程,如《數(shù)據(jù)結(jié)構(gòu)》起著基礎性的作用。本文主要是對結(jié)構(gòu)體的實驗教學的設計進行探討。

1 結(jié)構(gòu)體實驗教學的設計

結(jié)構(gòu)體實驗教學在教學時設計了3個實驗題目,這三個實驗題目的難度由易到難,試圖讓學生掌握結(jié)構(gòu)體變量、結(jié)構(gòu)體數(shù)組和鏈表的使用。

1.1 結(jié)構(gòu)體變量的實驗設計

結(jié)構(gòu)體變量的實驗屬于結(jié)構(gòu)體實驗中比較簡單的實驗,這個實驗就是讓學生練習如何根據(jù)實際問題,用結(jié)構(gòu)體定義自己所需的類型,再使用這種類型定義變量,編寫程序去解決問題。

在實驗教學中,教師要求學生解決如下的問題:要求用戶輸入三個點的坐標,編程判斷這三個點是否可以構(gòu)成一個三角形,如果可以則輸出三角形的類型,即直角三角形、銳角三角形或者鈍角三角形。這個題目在實驗課上是以程序填空題的形式提供,這樣既可以引導學生初次使用結(jié)構(gòu)體進行編程,在填寫缺失的代碼過程中,鍛煉學生的程序閱讀能力。在題目設計中盡可能的考察學生以前的所學知識點,比如,函數(shù)形參、函數(shù)調(diào)用、選擇結(jié)構(gòu)編程等等。

這個程序填空題首先要求完成圖1中所示的點的結(jié)構(gòu)體的設計,從而讓學生掌握如何根據(jù)實際需要來定義結(jié)構(gòu)體這種類型。再要求學生完成圖1中input函數(shù)和len函數(shù)的填寫,讓學生掌握如何使用結(jié)構(gòu)體變量的成員分量,并注意函數(shù)的類型;judgeexist函數(shù)用于判斷三個點能否構(gòu)成三角形,在這個函數(shù)中強調(diào)邏輯運算符的使用,同時讓學生注意函數(shù)的返回值類型,強調(diào)C語言的數(shù)據(jù)類型沒有邏輯型,若想表示真假這樣的邏輯型值可以用1和0這樣的數(shù)值型數(shù)據(jù)來表示。

圖2中的qcos函數(shù)在設計填空時主要考察的是指針的使用,讓學生加深指針作為函數(shù)形參傳遞的是地址值這一個概念的理解。這個函數(shù)在編寫時并不是很難,就是三角形余弦函數(shù)的使用,關鍵在于形參變量中指

針變量的引用,即諸如*cosA的賦值。而圖2中judgetype函數(shù)就是依據(jù)三個角的余弦值來判斷三角形是直角三角形、銳角三角形,還是鈍角三角形。這個函數(shù)在設計填空時,主要是考察學生關系運算符的使用,以及嵌套的選擇if語句的理解和應用。圖3中主函數(shù)的設計填空主要是考察學生是否了解上述用戶自定義函數(shù)的功能,并通過填寫函數(shù)調(diào)用語句能正確的使用這些函數(shù),此外,還考察了switch多分支語句的使用。

這個題目總體來說設計的并不是很難,當學生完成程序填空后,要求學生必須完成4種情況,即無法構(gòu)成三角形、構(gòu)成直角三角形、銳角三角形和鈍角三角形的數(shù)據(jù)測試,通過輸出的結(jié)果與預期結(jié)果作比較,從而檢查程序是否編寫正確。

1.2 結(jié)構(gòu)體數(shù)組的實驗設計

結(jié)構(gòu)體數(shù)組的實驗在結(jié)構(gòu)體實驗中是中等難度的實驗,這個實驗題目的設計主要是讓學生掌握結(jié)構(gòu)體數(shù)組的定義,讓學生了解結(jié)構(gòu)體數(shù)組元素的訪問和其他基本數(shù)據(jù)類型的數(shù)組元素訪問是類似的,如若要訪問某個數(shù)組元素的成員分量時,需要在結(jié)構(gòu)體數(shù)組元素后加上“.成員分量名”。

在實驗課時,布置了如下的實驗題目:輸入職工的職工號、姓名、工資和出生年、月、日,按職工工資由高到低輸出職工的職工號、姓名和周歲年齡。注意:輸入“#”表示輸入結(jié)束,假設最多只處理200個職工記錄。此題在定義職工信息這種數(shù)據(jù)類型時,涉及到了出生年、月、日這種日期類型,而C語言的基本類型中沒有這種類型,因此,教師可以引導學生先寫出如圖4(a)所示的日期類型struct date,再引導學生思考職工類型如何定義,提示學生職工信息包含出生日期這樣的日期型數(shù)據(jù),建議定義出如圖4(b)所示的職工信息類型struct zg。一般地,學生會依據(jù)題目要求定義出struct zg的數(shù)組,其數(shù)組的大小為200。這個題目之所以這樣設計就是希望通過這個練習讓學生了解結(jié)構(gòu)體類型中的成員分量沒有具體類型要求,完全根據(jù)需要而設。

此題的另一個設計要點是排序算法在結(jié)構(gòu)體數(shù)組中的應用,在課堂練習時,有的學生使用的是冒泡排序法,有的則使用選擇排序法,但是在交換兩個struct zg的數(shù)組元素時,有部分學生會注意交換結(jié)構(gòu)體數(shù)組元素的成員分量,那么這時就需要聲明交換結(jié)構(gòu)體數(shù)組元素和交換整型數(shù)組元素的方法類似,將結(jié)構(gòu)體數(shù)組元素看作一個整體。這個設計要點在于復習數(shù)組章節(jié)中所提到的排序算法。

此題最后一個設計要點是由已知的職工出生年、月、日求出該職工的周歲年齡,此處要求學生使用計算機的系統(tǒng)時間計算出職工的周歲年齡。為了能成功獲取計算機的系統(tǒng)時間,則要求學生在幫助菜單或者網(wǎng)上查找C中“time.h”所定義的time_t這個數(shù)據(jù)類型,讓學生了解typedef的用法;了解函數(shù)time()和localtime的用法,并能在程序中正確的使用;了解結(jié)構(gòu)體struct tm,掌握該結(jié)構(gòu)體中關于年、月、日表示的成員分量,讓學生特別注意每個成員分量所表示的意義及其取值的范圍,例如,成員分量tm_year表示的是年份,但是它的取值是從1900開始的一個整數(shù),若想正確獲得當前的年份值,應該是tm_year+1900。當學生能正確地完成獲取系統(tǒng)時間的年、月、日的程序代碼設計后,引導學生思考如何計算周歲年齡,實際上就是用if嵌套語句完成多分支結(jié)構(gòu)的設計。這個設計要點是希望學生了解C程序設計過程中可能會出現(xiàn)書本上所未介紹過的知識,這就需要學生通過其他方式,例如查閱工具書或者上網(wǎng)等手段來獲取所需的知識,同時,也復習了多分支結(jié)構(gòu)的程序設計。

此外,在編程時要求學生盡量不要程序中只有一個main()函數(shù),要盡量根據(jù)需要編寫用戶自定義函數(shù)。

1.3 鏈表的實驗設計

鏈表實驗的題目主要是讓學生熟悉結(jié)構(gòu)體與指針相結(jié)合,對鏈表有個初步認識,了解鏈表中的一些操作。題目與1.2中結(jié)構(gòu)體數(shù)組的題目非常類似,但是要求必須用鏈表來完成,從而讓學生熟悉鏈表這種結(jié)構(gòu)。實驗題目是:輸入學生的學號、姓名和年齡,要求按學號由小到大輸出學生的學號、姓名和年齡,要求輸入“#”表示輸入結(jié)束。這個題目解決的方法很多,因為學生初次接觸鏈表,因此實驗教學時沒有提出任何方法的限制,只是要求學生用單鏈表求解,在求解過程中要求學生注意鏈表的創(chuàng)建算法,鏈表的輸出算法,以及鏈表修改結(jié)點指針的一些操作。

首先,教師要引導學生正確的完成鏈表結(jié)點的定義,即指針與結(jié)構(gòu)體相結(jié)合,學生信息結(jié)點的定義可以如圖5所示。在求解問題時,需要學生注意結(jié)點指針的操作。實驗課上,有的學生在輸入學生信息時,即建鏈表時采用插入排序的思想,將待插入的學生信息的結(jié)點插入到已建好的且有序的鏈表中,用這種方法創(chuàng)建鏈表后,鏈表本身就是有序的,那么只需用循環(huán)結(jié)構(gòu)輸出鏈表就可以完成問題的求解。在實驗課上,會發(fā)現(xiàn)有的學生有了這個想法但是算法編寫有問題,教師在指導的過程中可以建議學生在建鏈表過程中,每插入一個結(jié)點后就完成當前鏈表的輸出,從而有助于發(fā)現(xiàn)算法設計出錯之處。

在實驗課上,有的學生則先是創(chuàng)建鏈表,即將學生信息結(jié)點按輸入的順序插入到鏈表中,此時鏈表中的學生信息結(jié)點是無序的,再采用冒泡排序法或者選擇排序法對鏈表中的結(jié)點調(diào)整順序,最后編寫循環(huán)完成鏈表輸出。在調(diào)整結(jié)點時有的學生會出現(xiàn)算法思路不夠清晰,有點混亂這種現(xiàn)象,這時教師可以建議學生在草稿紙畫出鏈表結(jié)點的調(diào)整草圖,再依據(jù)圖示編寫代碼。在實驗課上,有的學生采用排序算法調(diào)整結(jié)點時直接交換圖5所示結(jié)點的no、name和age值,這種方法很便捷,但是達不到鏈表練習的目的,因此,教師可以鼓勵學生再換一種算法。

2 結(jié)束語

本文給出了結(jié)構(gòu)體實驗教學的三個實驗題目,這三個題目有各自的重點,而且題目有程序填空,也有程序設計,讓學生由淺入深地逐步掌握結(jié)構(gòu)體的定義,使用結(jié)構(gòu)體變量和數(shù)組編程求解實際問題。并且實驗題目中有的內(nèi)容是對課本上的知識進行一定的擴展,力圖培養(yǎng)學生的自學能力,因為在實際解決問題時,有的知識可能是課堂上沒有提到的,因此,學生要學會查閱資料進行自學。

參考文獻:

[1] 胡明, 王紅梅. 程序設計基礎――從問題到程序[M]. 北京: 清華大學出版社, 2011.

[2] 孫燮華. C程序設計導引實驗與習題解答[M]. 北京: 清華大學出版社, 2011.

[3] 羅永龍, 方群. C語言程序設計[M]. 北京: 科學出版社, 2013.

第6篇

全書共20章。1.Python編程101:對使用Python語言編程進行總體介紹,包括創(chuàng)建對象、對象調(diào)用方法、運算符重載、讀取文件方法、XML文件等內(nèi)容;2.計算復雜度:包括計算機體系結(jié)構(gòu)介紹、常見的計算復雜性、攤銷復雜度的方法等;3.遞歸:包括時棧和堆的概念、簡單遞歸函數(shù)的編寫、運行,遞歸計算機圖形學、列表與字符串等;4.排序:包括選擇排序、歸并排序、快速排序、鏈表、棧和隊列等內(nèi)容;5.集合與映射:數(shù)獨游戲介紹、集、散列等相關概念,最后分析規(guī)劃問題;6.樹:抽象語法樹和表達、前綴和后綴表達式、解析前綴表達式、二叉搜索樹等內(nèi)容;7.圖:包括圖的定義及理論、存儲結(jié)構(gòu)及算法實現(xiàn)、Kruskal算法、Dijkstra算法、圖的表示方法等;8.Bloom過濾器、Trie數(shù)據(jù)類型等相關內(nèi)容;9.堆:包括堆的主要思想及其建立、排序算法、與其他算法的比較等;10.平衡二叉搜索樹:二叉搜索樹的概念、存儲結(jié)構(gòu)與性質(zhì)、AVL樹與 Splay樹等具體實例;11.B樹:包括關系型數(shù)據(jù)庫的概念、B樹的組織結(jié)構(gòu)、優(yōu)勢、實現(xiàn)、B樹的插入與刪除等內(nèi)容;12.啟發(fā)式搜索:包括深度優(yōu)先搜索與廣度優(yōu)先搜索、A*搜索、最佳搜索等相關內(nèi)容;13.附錄A:整數(shù)操作符;14.附錄B:浮算子;15.附錄C:字符串運算符和方法;16.附錄D:列表操作符和方法;17.附錄E:字典操作和方法;18.附錄F:Turtle方法;19附錄G:TurtleScreen方法;20.附錄H:完整的程序。

作者Kent D.Lee博士是美國艾奧瓦洲路德學院計算機科學教授,已成功出版兩本著作:Python編程基礎和編程語言基礎。另一作者Steve Hubbard博士是路德學院數(shù)學與計算機科學系教授。

本書介紹了初級與高級的數(shù)據(jù)結(jié)構(gòu)和算法問題,每一章開始提供了學習目標,復習題和編程練習,以及眾多的例證;同時在相關的網(wǎng)站提供可下載的程序和補充文件。本書可以作為計算機學科相關專業(yè)的教材或參考書,同時對計算機科技工作者也有參考價值。

第7篇

關鍵詞:循環(huán)結(jié)構(gòu);C語言程序設計;非計算機專業(yè)

中圖分類號:TP393文獻標識碼:A文章編號:1009-3044(2012)26-6323-05

Discussion on Loop Structure Teaching in C Language Programming of Non-computer Specialty

XIA Yun

(College of Mathematics and Computer Science, Anhui Normal University , Wuhu 241000 , China)

Abstract: The teaching of loop structure is an important component in C language programming. This paper designed 5 teach? ing examples for the students of non-computer specialty. This paper analyzes the teaching progress in detail and emphasizes the teaching points of the loop structure teaching. And it produces a good effect in the actual teaching progress.

Key words: loop structure; C Language programming; non-computer specialty

大學計算機應用基礎作為一門課程大約于20世紀90年代中期開設,現(xiàn)在已成為大學里的計算機學習基礎課程,是所有非計算機專業(yè)大一新生的必修公共基礎課,也是培養(yǎng)學生基本素質(zhì)的一門重要課程[1]。作為大學計算機應用基礎課程,理工類專業(yè)大部分會開設程序設計課程,有部分專業(yè)會開設C程序設計課程。C語言是一種語法靈活、適用范圍廣的高級程序設計語言。結(jié)構(gòu)化程序設計方法有三種基本結(jié)構(gòu):順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。順序結(jié)構(gòu)和分支結(jié)構(gòu)比較簡單,循環(huán)結(jié)構(gòu)從教學上來說是重點也是難點。本文主要對C語言循環(huán)結(jié)構(gòu)教學進行探討。

1教學內(nèi)容的分析

C語言循環(huán)結(jié)構(gòu)編程主要涉及到三種循環(huán)結(jié)構(gòu)語句while、do-while和for。本文作者認為非計算機專業(yè)開設這門課程,主要是講解程序設計的方法,培養(yǎng)學生的編程能力和思維能力,因此,在教學中上述的三種語句可以以while語句為重點,講解循環(huán)結(jié)構(gòu)編程的思想,do-while和for語句可以簡單舉例說明它們的流程。在講解循環(huán)結(jié)構(gòu)編程分析時,可以以流程圖或者用自然語言逐步描述操作步驟的形式,指出循環(huán)結(jié)構(gòu)編程關鍵是找到在什么情況下需要反復執(zhí)行某些操作,并找到這些反復執(zhí)行的操作是什么。

2教學用例的分析

在課程教學過程中,需要用一些例子來配合講解循環(huán)結(jié)構(gòu)的編程。在教學時,選取一些比較合適的例子,可以很好地幫助學生理解所教授的內(nèi)容。教師在教學過程中除了要加強課堂啟發(fā)外,盡可能結(jié)合課程自身的特點,注重學生現(xiàn)場演練,并采用任務驅(qū)動、師生互動、鼓勵學生等教學手段來提高其學習的主動性和積極性[2]。

2.1導入的例子

在教學活動中,講授后面知識內(nèi)容時要與前面知識相互呼應[3],因此,在上課時,可以以這樣的問題開始,例題1:用戶輸入正整數(shù)n值的大小后,要求計算1+2+3+…+n,將所得出的結(jié)果輸出。這個例題主要是復習前面的內(nèi)容,復習輸入、輸出函數(shù)和分支結(jié)構(gòu)的編程。該問題提出后,可以讓同學們思考一下,然后再進行提問,提問時可以讓學生說出編程思路,若課堂時間比較多也可以請學生直接編寫源代碼并運行。

提問時,有的同學可能給出如下的順序結(jié)構(gòu)編程的解答:

步驟1:輸入整數(shù)n

步驟2:求s=(1+n)*n/2

步驟3:輸出s

while (j

{輸出i*j

j++;}

由此,得出在循環(huán)while (i

循環(huán)結(jié)構(gòu)是結(jié)構(gòu)化程序設計的一種重要結(jié)構(gòu),在教學中不僅需要學生掌握這種結(jié)構(gòu)的語法,更重要的是培養(yǎng)學生的設計思維和思考方法,本文主要是從教學的角度,對循環(huán)結(jié)構(gòu)的整個教學過程設計了5個教學用例,并對其進行展開分析,重點是讓學生掌握循環(huán)結(jié)構(gòu)編程的思想,實際上就是在問題分析過程中找循環(huán)條件和循環(huán)操作,在實際教學中取得了較好的效果。

[1]何文海,吳明珠,謝劍剛.情商與智商相結(jié)合的教學模式[J].現(xiàn)代計算機,2007(8):73-75.

[2]郭?;?陳允芳,王健.非計算機專業(yè)中“VB程序設計”教學方法初探[J].計算機教育,2009(18):98-100.