時間:2023-11-25 09:29:48
序論:好文章的創(chuàng)作是一個不斷探索和完善的過程,我們?yōu)槟扑]十篇程序設(shè)計的基本結(jié)構(gòu)范例,希望它們能助您一臂之力,提升您的閱讀品質(zhì),帶來更深刻的閱讀感受。
計算機科學(xué)是一種創(chuàng)造性思維活動,其教育必須面向設(shè)計。計算機的本質(zhì)是“程序的機器”, 只有懂得程序設(shè)計,才能懂得計算機,真正了解計算機是怎樣工作的。培養(yǎng)學(xué)生程序設(shè)計能力對計算機專業(yè)的學(xué)生來說不僅是培養(yǎng)職業(yè)技能的需要,也是培養(yǎng)大學(xué)生創(chuàng)造性思維的重要途徑。學(xué)習(xí)程序設(shè)計語言可以培養(yǎng)學(xué)生運用算法來解決實際問題的能力,這種解決問題的方式是計算機所獨有的,也只有通過對計算機的程序設(shè)計語言和程序設(shè)計方法的學(xué)習(xí)才有可能獲得這種解決問題的能力。
1 程序設(shè)計在計算機學(xué)科中的地位
程序設(shè)計是利用某種計算機語言,編制完成某一特定功能的程序的過程,是涉及描述、開發(fā)及有效實現(xiàn)求解的一系列活動,是利用計算機實現(xiàn)自動化的重要手段。
計算機學(xué)科主要是系統(tǒng)地研究信息描述和變換的算法過程,包括它們的理論、分析、設(shè)計、效率、實現(xiàn)和應(yīng)用。可以這樣說,一切算法的基本問題是“什么能被自動化”以及“如何有效地自動化”。這個自動化的過程就是程序設(shè)計的過程。
程序設(shè)計語言是人們學(xué)習(xí)計算機的最基本的工具,也是人們學(xué)習(xí)計算機基礎(chǔ)與應(yīng)用知識的基本課程。通過學(xué)習(xí),使學(xué)生掌握程序設(shè)計的基本概念、基本知識和基本方法,養(yǎng)成良好的程序設(shè)計風(fēng)格,得到一定的程序設(shè)計訓(xùn)練,具備初步編寫程序解決實際問題的能力。程序設(shè)計也正是有形表達(dá)抽象思維的方法,在程序設(shè)計過程中貫穿閱讀判斷、分析思考、工具利用、抽象表達(dá)、綜合創(chuàng)造等多項技能,是理論、抽象、設(shè)計和應(yīng)用的綜合能力培養(yǎng)過程。因此程序設(shè)計是計算機學(xué)科教學(xué)的重要內(nèi)容之一,對計算機專業(yè)人才素質(zhì)的培養(yǎng)至關(guān)重要。
2 程序設(shè)計的知識和能力構(gòu)成
根據(jù)循序漸進(jìn)的原則,與程序設(shè)計有關(guān)的教學(xué)內(nèi)容主要有:計算機基礎(chǔ)知識和操作、程序設(shè)計語言和基本的程序設(shè)計方法、最基本的數(shù)據(jù)結(jié)構(gòu)及其基本算法、常用的算法設(shè)計方法等。在學(xué)習(xí)這些知識的同時,必須與能力的訓(xùn)練有機地結(jié)合起來。程序設(shè)計能力表現(xiàn)在以下幾個方面:
1)自然語言能力。要有較強的運用自然語言描述現(xiàn)實事物的能力,只有運用背景知識正確且清晰地陳述問題及其求解目標(biāo),才能確定程序的功能。
2)數(shù)學(xué)描述能力。程序設(shè)計是為了告訴計算機做什么和如何做。這就需要利用定義、定理、公式、函數(shù)等數(shù)學(xué)工具把問題形式化,建立數(shù)學(xué)模型。
3)數(shù)據(jù)結(jié)構(gòu)設(shè)計能力。選擇合理的存儲結(jié)構(gòu),在計算機中表示數(shù)學(xué)模型,是程序設(shè)計的一個重要方面。
4)算法構(gòu)造能力。好的程序由精心構(gòu)造的、好的算法構(gòu)成。給出問題求解的離散化計算過程,是程序設(shè)計中最具有創(chuàng)造性的工作。
5)程序編碼能力。用某種程序設(shè)計語言表達(dá)算法,盡管這種能力往往被認(rèn)為技術(shù)含量不高,但也需要對程序設(shè)計語言的熟練掌握和對算法設(shè)計的深刻理解。
6)程序調(diào)試能力。程序調(diào)試能力是一種專業(yè)綜合技能,需要對程序設(shè)計語言和程序結(jié)構(gòu)有深刻的理解,需要熟練的操作技能,需要會設(shè)置測試數(shù)據(jù)和設(shè)置程序斷點,這些都有待于學(xué)生在實踐中逐步積累經(jīng)驗。
可以說,程序設(shè)計能力的高低很大程度上反映在駕馭自然語言、數(shù)學(xué)語言和計算機語言的能力上。這3種語言是人們畢生有用的3種通用智能工具。前兩者是后者的基礎(chǔ),良好的英語和數(shù)學(xué)訓(xùn)練是學(xué)好程序設(shè)計語言和培養(yǎng)程序設(shè)計能力的重要基礎(chǔ)。
3 培養(yǎng)程序設(shè)計能力的有效策略
知識的價值在于運用,知識的運用需要技能,而技能的形成則依賴訓(xùn)練。程序設(shè)計知識的學(xué)習(xí)和能力的培養(yǎng)需要各方面的知識基礎(chǔ),它是一個系統(tǒng)的教育訓(xùn)練過程,需要多個教學(xué)環(huán)節(jié)的緊密配合才能完成。
1)明確教學(xué)要求
程序設(shè)計語言課程一般是為應(yīng)用性教學(xué)而設(shè)置的,因此,課程的教學(xué)不僅僅是傳授知識,而且應(yīng)該強調(diào)應(yīng)用性,應(yīng)該以培養(yǎng)學(xué)生的能力為主。程序設(shè)計語言的內(nèi)容比較豐富,在教學(xué)中如果面面俱到,必會耗費較多課時,而且教學(xué)效果不一定好。因為過分強調(diào)程序設(shè)計語言的系統(tǒng)性和完整性就可能會轉(zhuǎn)移學(xué)生對課程重點的注意力,關(guān)鍵在于教會學(xué)生如何正確運用程序設(shè)計語言編寫程序,訓(xùn)練實用編程能力。所以必須突出重點,突出應(yīng)用性,側(cè)重教思想,即把程序設(shè)計語言的基本思想、基本環(huán)境、基本概念、基本知識和基本方法教給學(xué)生,使他們在學(xué)習(xí)中對硬件、軟件環(huán)境、程序設(shè)計的基本思想和基本技巧,所學(xué)程序設(shè)計語言的基本概念和使用方法以及編程技術(shù)有一個比較全面的感性認(rèn)識,從而提高解決實際問題的能力。
2)打好數(shù)學(xué)基礎(chǔ)。嚴(yán)格的數(shù)學(xué)訓(xùn)練是程序設(shè)計能力的基礎(chǔ),學(xué)習(xí)和加強排列與組合、數(shù)列、數(shù)學(xué)歸納法等離散系統(tǒng)的數(shù)學(xué)方法對提高程序設(shè)計能力尤為重要。問題描述和建立數(shù)學(xué)模型是程序設(shè)計的前奏,數(shù)學(xué)歸納法、窮舉法、構(gòu)造證明法等證明技巧是算法設(shè)計方法的基礎(chǔ)。
3)強化英語水平。程序設(shè)計語言的符號系統(tǒng)以英語為基礎(chǔ),程序設(shè)計文檔語言首選英語。英文資料是計算機最新和最大的技術(shù)資料來源,英語水平是我國軟件產(chǎn)業(yè)發(fā)展和參與國際競爭的制約因素。
4)重視閱讀訓(xùn)練。從某種意義上來說,程序設(shè)計是用程序設(shè)計語言和方法進(jìn)行的一種寫作。可以想象,如果學(xué)生沒有閱讀過一份完整、規(guī)范、有實用價值的標(biāo)準(zhǔn)程序,即使記住了有關(guān)語言的語法規(guī)則,也不可能寫出像樣的程序。所以,大量閱讀、分析、修改和擴充典型的算法和程序,是提高程序?qū)懽髂芰Φ挠行緩健6@個重要學(xué)習(xí)環(huán)節(jié)往往未得到應(yīng)有的重視,缺乏配套的程序設(shè)計閱讀分析教材。教師應(yīng)經(jīng)常指導(dǎo)學(xué)生閱讀程序,理解程序,提高學(xué)生分析程序的能力。
5)注重算法設(shè)計,突出數(shù)據(jù)結(jié)構(gòu)內(nèi)容。瑞士科學(xué)家、PASCAL語言和MODULA-2語言的發(fā)明者沃思(Wirth)教授提出了著名的公式:程序=算法+數(shù)據(jù)結(jié)構(gòu)。這個公式表達(dá)了程序的實質(zhì),說明對于一個程序設(shè)計問題來講,算法與程序設(shè)計是緊密聯(lián)系的,絕不能脫離數(shù)據(jù)結(jié)構(gòu)去講解算法設(shè)計。程序設(shè)計語言的教學(xué)應(yīng)該結(jié)合數(shù)據(jù)結(jié)構(gòu)的基本內(nèi)容。對于同一個計算問題,選用不同的數(shù)據(jù)結(jié)構(gòu),其算法大不一樣,算法的優(yōu)劣程度也不同。因此,要教會學(xué)生對不同的問題選擇合適的數(shù)據(jù)結(jié)構(gòu)。在整個程序設(shè)計課程中,必須強調(diào)算法設(shè)計方法,通過不斷的算法設(shè)計訓(xùn)練,使學(xué)生切實掌握迭代、枚舉、遞歸、分類等常用算法設(shè)計方法。
6)更新教學(xué)內(nèi)容。計算機學(xué)科是一門綜合性學(xué)科,而且程序設(shè)計語言的應(yīng)用領(lǐng)域在不斷擴大和發(fā)展。因此,在教學(xué)中應(yīng)結(jié)合專業(yè)的特點和教學(xué)的要求,將軟件工程的思想方法貫穿于整個教學(xué)過程,介紹程序設(shè)計語言的最新發(fā)展和應(yīng)用,重視面向?qū)ο蟪绦蛟O(shè)計方法的引入,搞好教材內(nèi)容的更新。如圖形程序設(shè)計、下拉式或彈出式菜單、計算機病毒防治等等。這樣不僅能把最新的知識和最新發(fā)展動態(tài)充實到教學(xué)上來,大大豐富了教學(xué)內(nèi)容,而且使學(xué)生加深對程序設(shè)計語言的理解和掌握,保持對信息技術(shù)和專業(yè)的興趣,及時跟上信息技術(shù)日新月異的發(fā)展趨勢,在今后工作中保持領(lǐng)先地位。
7)采用先進(jìn)教學(xué)手段。用傳統(tǒng)的課堂教學(xué)方法講授動態(tài)的算法和數(shù)據(jù)結(jié)構(gòu)是十分低效的,像排序、遞歸等抽象動態(tài)的內(nèi)容講解就常常是費力不討好。應(yīng)該根據(jù)課程特點,采用先進(jìn)的現(xiàn)代教學(xué)方法,如直觀教學(xué)方法:利用掛圖、教具等講解,以及計算機輔助教學(xué)(CAI)和計算機輔助學(xué)習(xí)(Computer Aided Learning,簡稱CAL)進(jìn)行教學(xué),通常開發(fā)利用與課程內(nèi)容與教學(xué)特點相適應(yīng)的多媒體課件進(jìn)行教學(xué)。它們是講解算法和進(jìn)行程序設(shè)計訓(xùn)練的最佳教學(xué)平臺,既能增加學(xué)習(xí)的趣味性,又可利用圖形的直觀性幫助抽象和動態(tài)過程的理解。
8)加強實踐環(huán)節(jié),強化創(chuàng)造性思維能力培養(yǎng)。在教學(xué)中,常常聽到學(xué)生提出這樣的問題:“程序設(shè)計語言有什么用?”,有的學(xué)生還反映:“程序設(shè)計語言并不難學(xué),就是不知道如何應(yīng)用?”一些學(xué)生學(xué)到了一定的科學(xué)知識,但上機動手水平低。這種現(xiàn)象與普遍忽視實踐環(huán)節(jié)有關(guān)。為了扭轉(zhuǎn)這一局面,在整個教學(xué)過程中,必須強調(diào)實踐環(huán)節(jié)的重要性,充分安排上機實踐時間,加強系統(tǒng)訓(xùn)練和實踐能力的培養(yǎng),強化創(chuàng)造性思維能力培養(yǎng)。根據(jù)課程特點,在教學(xué)中,采用案例驅(qū)動教學(xué),進(jìn)行興趣引導(dǎo);在實踐中,可以精心組織一系列由易到難、由淺入深、配套銜接、結(jié)合學(xué)科學(xué)習(xí)、有一定設(shè)計技巧的程序設(shè)計作業(yè),最后再安排一次綜合性強、有一定難度的課程設(shè)計實踐,對學(xué)生進(jìn)行項目訓(xùn)練,提高學(xué)生應(yīng)用能力。通過上機作業(yè)和課程設(shè)計的完成,使學(xué)生獨立思考,各顯才干,總結(jié)經(jīng)驗,培養(yǎng)他們的動手能力和編程能力,以及分析問題和解決問題的能力。
4 結(jié)論
總之,培養(yǎng)學(xué)生計算機程序設(shè)計能力的方法和途徑很多,但是編程序不難,編好程序不易。作為教師,必須從培養(yǎng)學(xué)生編程思維的角度出發(fā),按照以上策略認(rèn)真進(jìn)行編程知識的教學(xué)和技能的培養(yǎng),加強實踐,提高學(xué)生科學(xué)思維的能力,真正學(xué)會程序設(shè)計的真本領(lǐng)。
參考文獻(xiàn):
[1] ,王楠.淺談程序設(shè)計語言課程教學(xué)方法[J].吉林大學(xué)學(xué)報(信息科學(xué)版),2005(S2).
[2] 徐進(jìn)華.提高學(xué)生程序設(shè)計能力的幾個措施[J].計算機時代,2005(11).
關(guān)鍵詞:C語言;程序設(shè)計;教學(xué)內(nèi)容;教學(xué)角度
中圖分類號:G64 文獻(xiàn)標(biāo)識碼:A
1教學(xué)現(xiàn)狀
在高等學(xué)校的本科教育中,“C語言程序設(shè)計”幾乎成了所有專業(yè)的必開課程,從計算機科學(xué)與技術(shù)、軟件工程、網(wǎng)絡(luò)工程等相關(guān)專業(yè),到電子信息類理工科各專業(yè),乃至理工科院校的所有非計算機專業(yè),有的是專業(yè)基礎(chǔ)課,有的是公共必修基礎(chǔ)課,有的是“非計算機專業(yè)的計算機基礎(chǔ)課”。只是課程名稍有差異,常見的有“C語言程序設(shè)計”、“高級語言程序設(shè)計”、“C語言”、“C程序設(shè)計”、“結(jié)構(gòu)化程序設(shè)計”等。無論叫什么樣的課程名,也無論是哪類專業(yè),其課程的教學(xué)要求和教材選用卻無太大差別,只是課時分配差異較大。
從網(wǎng)絡(luò)調(diào)查的16所不同類型高校的“C語言程序設(shè)計”教學(xué)大綱看,普遍都包含“通過本課程的學(xué)習(xí),使學(xué)生了解有關(guān)程序設(shè)計的基本概念、術(shù)語及C語言的特點,掌握C語言基本數(shù)據(jù)類型、語法規(guī)則、程序控制結(jié)構(gòu)、常用的標(biāo)準(zhǔn)庫函數(shù),培養(yǎng)學(xué)生的程序設(shè)計技能,初步積累編程經(jīng)驗”的教學(xué)基本要求;約百分之八十左右的“C語言程序設(shè)計”課程都選用由譚浩強主編、清華大學(xué)出版社出版的“C程序設(shè)計”作為主教材;課時分配從30~108課時不等,其中80課時以上的多為應(yīng)用型本科院校的計算機相關(guān)專業(yè)以及綜合性大學(xué)的非計算機專業(yè),理論課時與實驗課時的比例一般為1:1到1:1.2。與此同時,其他專業(yè)基礎(chǔ)課(如計算機組成原理、操作系統(tǒng)、數(shù)據(jù)結(jié)構(gòu)等)的課時一般為54課時,最多不超過72學(xué)時。相比之下,“C語言程序設(shè)計”所占課時是其他專業(yè)基礎(chǔ)課的1.5倍至2倍。
從教學(xué)目的看,非計算機專業(yè)的“C語言程序設(shè)計”課程主要目的是“掌握語法規(guī)則和程序結(jié)構(gòu),具備一定的程序設(shè)計能力”,而計算機相關(guān)專業(yè)的“C語言程序設(shè)計”課的教學(xué)目的則要分為三個層次,一是使學(xué)生全面理解計算機程序設(shè)計語言的基本內(nèi)容和結(jié)構(gòu);二是通過算法掌握程序設(shè)計的基本方法和步驟,并具備一定的程序設(shè)計能力;三是為后續(xù)課程的算法描述和其他程序設(shè)計語言的學(xué)習(xí)奠定基礎(chǔ)。
2教學(xué)誤區(qū)
從以上的教學(xué)現(xiàn)狀(特別是課時分配)看,長期以來,“C語言程序設(shè)計”的課程教學(xué)存在“教學(xué)內(nèi)容背離教學(xué)要求和教學(xué)目的”的誤區(qū),主要表現(xiàn)在教材誤區(qū)、講授誤區(qū)和考核誤區(qū)三個方面。
2.1教材誤區(qū)
國內(nèi)高校的“C語言程序設(shè)計”課大多選用譚浩強主編、清華大學(xué)出版社出版的“C程序設(shè)計”[1]為主教材,目前使用的是2005年7月修訂出版的第三版,教材共363頁,主體內(nèi)容分為14章,其中,第3章的數(shù)據(jù)類型與表達(dá)式占用30頁,第4章的格式輸入輸出占用12頁,前9章共占用218頁,后5章共占用145頁。占用如此大篇幅的原因是教材中除了介紹相關(guān)語法格式外,還增加了相當(dāng)多“特殊格式”和“特殊情況”的解釋和說明,因此,該教材的最大優(yōu)點就是“內(nèi)容詳盡、解釋清晰”。然而,對于初學(xué)者來說,學(xué)習(xí)計算機程序設(shè)計語言就是為了“為計算機描述求解問題的過程”,過于詳細(xì)但又遠(yuǎn)離現(xiàn)實問題的“特殊格式”和“特殊情況”的解釋,使得學(xué)習(xí)內(nèi)容復(fù)雜化,增加了程序設(shè)計語言學(xué)習(xí)的難度,誤導(dǎo)了學(xué)習(xí)者的學(xué)習(xí)重點,由此也賦予了該教材無法掩飾的缺點,那就是教材編寫的指導(dǎo)思想和教材內(nèi)容的組織脫離了高校各專業(yè)“C語言程序設(shè)計”課程的教學(xué)目標(biāo),過分強調(diào)語法細(xì)節(jié)而忽略了程序設(shè)計語言的“正向表達(dá)能力”的應(yīng)用,過分強調(diào)“語言的靈活性”而導(dǎo)致教材主體內(nèi)容的“復(fù)雜化”,從而誤導(dǎo)“C語言程序設(shè)計”課程的教學(xué)內(nèi)容朝著“重語法學(xué)習(xí)、輕算法描述”的“語言研究”方向發(fā)展。
2.2講授誤區(qū)
由于教材內(nèi)容的“復(fù)雜”,課堂講授自然需要較多課時,教學(xué)重點當(dāng)然也放在了“語法研究”上。從網(wǎng)上下載的“C程序設(shè)計(第三版)”的配套教學(xué)課件以及有關(guān)院校的“C語言程序設(shè)計”教學(xué)課件的內(nèi)容組織上可以清楚的給出以上判斷?!罢Z法研究”型的課堂講授,更加放大了教材對“C語言程序設(shè)計”課程內(nèi)容的“扭曲”程度,給學(xué)生提供了錯誤的程序設(shè)計語言學(xué)習(xí)方法,把簡單問題復(fù)雜化,更為嚴(yán)重的是,挫傷了學(xué)生學(xué)習(xí)計算機程序設(shè)計語言的興趣和積極性,把本應(yīng)“主動學(xué)習(xí)”的課程成引入了“被動學(xué)習(xí)”的歧途,直接導(dǎo)致“懂語法、會做題,但不會編程序”的教學(xué)后果。
2.3考核誤區(qū)
多年來,“C語言程序設(shè)計”的主體考試內(nèi)容就是“語法”,無論是選擇題、填空題還是程序閱讀題,大多都無法逃脫“語法”的束縛??荚嚪绞揭怨P試為主。這在某種程度上肯定了“語言研究”的教學(xué)角度,促使“C語言程序設(shè)計”的教學(xué)重點更向“語法研究”的方向傾斜,最終誤入“增加課時,強化語法,還是不會編程序”的怪圈。
3應(yīng)有的教學(xué)角度
按照網(wǎng)上調(diào)查的各專業(yè)教學(xué)大綱中“培養(yǎng)具有一定程序設(shè)計能力”的教學(xué)目的,“C語言程序設(shè)計”課程的教學(xué)落腳點應(yīng)該更確切的理解為培養(yǎng)“能用程序設(shè)計語言描述求解問題過程”的一般程序設(shè)計者,而不是造就“全面掌握程序設(shè)計語言語法、能設(shè)計高效、難懂程序”的程序設(shè)計語言方面的“作家”。因此,“C語言程序設(shè)計”課程教學(xué)相當(dāng)于自然語言中的“基本語言能力”教學(xué),而不是“語言研究”或“高級寫作”能力培養(yǎng)。
3.1自然語言與計算機程序設(shè)計語言
計算機程序設(shè)計語言是用人和計算機都能識別的方式描述計算機求解問題過程的過程描述語言,它具有和人所使用的自然語言相同或相似的組成和結(jié)構(gòu)特點,對于已經(jīng)掌握了至少一門自然語言(比如漢語或英語)并具備一定文化程度的人來說,學(xué)習(xí)一種計算機程序設(shè)計語言并非難事。自然語言的基本組成包括符號集合、字、詞、句、數(shù)據(jù)及其運算規(guī)則等基本要素,學(xué)習(xí)過程包括認(rèn)識符號、發(fā)音、識字、組詞、學(xué)語法并造句、學(xué)文法并寫短文、練習(xí)寫文章等基本階段,在具備了基本的語言能力之后,擴充詞匯量和提高寫作能力將成為終身學(xué)習(xí)的基本內(nèi)容。按照自然語言的基本組成和學(xué)習(xí)過程,也可將計算機程序設(shè)計語言的基本組成歸納為字符集、標(biāo)識符(常量、變量、保留字等)、數(shù)據(jù)類型、運算符、表達(dá)式、語句、程序格式等基本要素,其中,字符集和數(shù)據(jù)類型是定義程序設(shè)計語言的基礎(chǔ),字符按一定規(guī)則組成標(biāo)識符,用來充當(dāng)常量名、變量名或其他標(biāo)識,在自然語言中被人們公認(rèn)的特殊標(biāo)識符被賦予特定的語言含義,專門為語言系統(tǒng)所用(用戶不得再次定義其意義),稱為保留字;字符集中的特殊符號(如+、-、*、/)被賦予特定的運算意義(如加、減、乘、除)稱為運算符;不同數(shù)據(jù)類型的常量、變量用運算符按一定規(guī)則連接起來組成的式子就構(gòu)成表達(dá)式;將特定的保留字與表達(dá)式等語言要素按照語法規(guī)則組合起來就形成相應(yīng)的語句;將語句按照要描述的求解問題的邏輯順序排列起來,就構(gòu)成了某種程序設(shè)計語言求解特定問題的一段程序。
3.2C語言的特殊性
一方面,C語言是程序設(shè)計語言的一種,具備一般程序設(shè)計語言的基本組成要素和結(jié)構(gòu)特點。另一方面,C語言能成為面向過程的結(jié)構(gòu)化程序設(shè)計語言的代表,也有其自身的特殊性。首先,C語言的數(shù)據(jù)類型極為豐富。除了基本數(shù)據(jù)類型外,還有構(gòu)造類型、指針類型、空類型和用戶自定義類型,其中,構(gòu)造類型包括數(shù)組、結(jié)構(gòu)體(struct)、共用體(union)和枚舉類型(enum)等四種數(shù)據(jù)結(jié)構(gòu)。其次,C語言具有位操作能力。除了能夠?qū)Ω黝愖兞窟M(jìn)行操作外,C語言還具備“按位”進(jìn)行邏輯“與”、“或”、“非”、“異或”運算和“左”、“右”移位運算,這使得C語言具備了更強的系統(tǒng)開發(fā)能力。第三,C語言具有顯著的結(jié)構(gòu)化程序設(shè)計能力,并通過完整的函數(shù)定義來實現(xiàn)。第四,C語言的最大特點就是“語法限制不嚴(yán),解釋靈活”。第五,C語言允許直接訪問物理地址,可直接對硬件端口進(jìn)行操作。第六,C語言沒有輸入/輸出語句,信息輸入/輸出功能由標(biāo)準(zhǔn)函數(shù)庫中相應(yīng)的I/O函數(shù)來完成。
C語言的這些特殊性,決定了C語言的教、學(xué)過程不同于其他程序設(shè)計語言的教學(xué)過程。
3.3C語言的教學(xué)角度
根據(jù)一般程序設(shè)計語言的基本組成與結(jié)構(gòu)特點,結(jié)合C語言的特殊性,“C語言程序設(shè)計”課程的教學(xué)角度應(yīng)該是:從介紹程序設(shè)計語言的基本概念入手,重點介紹語言的“正
向”設(shè)計功能而非“特殊格式”或“特殊語法”說明,側(cè)重學(xué)生的程序閱讀和程序設(shè)計能力培養(yǎng),從教學(xué)內(nèi)容的廣度和深度兩個方面,恰當(dāng)把握教學(xué)角度。
“C語言程序設(shè)計”課程的內(nèi)容可分為三個基本模塊,教學(xué)過程從第一個模塊切入,逐漸擴展到第二和第三個模塊。第一個模塊可稱為“程序設(shè)計語言公共模塊”,主要包括程序設(shè)計語言的基本概念、程序設(shè)計語言的基本要素(字符集、標(biāo)識符、常量變量以及保留字、基本數(shù)據(jù)類型、運算符、表達(dá)式、語句與控制結(jié)構(gòu)、程序結(jié)構(gòu)以及程序書寫規(guī)范等)以及輸入/輸出格式等內(nèi)容;第二個模塊是C語言的主體,主要包括函數(shù)、數(shù)組、指針、文件等;第三個模塊是高級編程內(nèi)容,主要包括結(jié)構(gòu)體(struct)、共用體(union)、枚舉類型(enum)以及用戶自定義類型等。
在教學(xué)深度方面,各模塊的教學(xué)重點應(yīng)放在“規(guī)范的語法描述和直觀易懂而且正確的語義表述上”,避免涉及各種過細(xì)的“不符合人類閱讀習(xí)慣”的語義描述,暫時避開“特殊格式”或“特殊情況”的糾纏,擺脫“研究語法”的錯誤向?qū)?。在此基礎(chǔ)上,第一模塊的教學(xué)可與自然語言相比對,通過學(xué)生已有的自然語言學(xué)習(xí)經(jīng)驗和語言要素,使學(xué)生快速建立程序設(shè)計語言的基本概念,正確理解程序設(shè)計語言的基本要素及其關(guān)系,掌握基本語法和程序基本控制結(jié)構(gòu)(順序、選擇、循環(huán)),并通過算法歸納求解問題的過程,正確理解算法不同描述方式(自然語言、傳統(tǒng)流程圖、N-S流程圖、偽代碼、程序設(shè)計語言)的作用和差異,特別是從“問題”到“程序”的漸進(jìn)轉(zhuǎn)化過程,從而培養(yǎng)學(xué)生的基本程序設(shè)計能力。通過第二模塊的教學(xué),使學(xué)生明確函數(shù)、數(shù)組、指針、文件等概念和作用,掌握它們的定義和引用方法,能進(jìn)行相應(yīng)數(shù)據(jù)類型的編程,進(jìn)而掌握用函數(shù)定義的結(jié)構(gòu)化模塊程序設(shè)計的方法;通過第三個模塊的教學(xué),將程序的數(shù)據(jù)處理能力擴展到結(jié)構(gòu)體、共用體、枚舉類型以及用戶自定義類型等復(fù)雜數(shù)據(jù)類型的處理上來,通過恰當(dāng)?shù)睦討?yīng)用這些數(shù)據(jù)類型,向?qū)W生展示C語言強有力的數(shù)據(jù)表示和處理能力。
另外,可以將C語言中的“語法靈活性”和不同部分的各種“特殊情況”分類總結(jié),歸納整理成“語言參考手冊”等形式,以附錄的形式提供給學(xué)生,以便需要時“備查”。這樣既可節(jié)省教學(xué)課時,又可向?qū)W生提供學(xué)習(xí)語言的主動權(quán)。
3.4教學(xué)策略和方法
“C語言程序設(shè)計”屬語言類課程,教學(xué)過程充滿了逐步完善和熟練的基本特點,因此,從教學(xué)安排的策略上要分重點、分階段逐步進(jìn)行,每個階段的教學(xué)方法應(yīng)該采用建立在一定基礎(chǔ)上的有重點的“部分教學(xué)法”,以核心內(nèi)容為基礎(chǔ),向外逐漸延伸,部分學(xué)習(xí),漸進(jìn)掌握。盡可能避免不分主次、不論難易、不顧急緩,盲目一次性掃清各類知識點的“地毯式”教授方法或?qū)W習(xí)方法,同時強調(diào)自學(xué)和上機驗證,強化在特定環(huán)境下(如Turbo C++ 3.0)的程序設(shè)計訓(xùn)練,做到“精講多練[2]”,從小程序練起,逐漸過渡到求解較大或?qū)嶋H問題的程序設(shè)計上來。
4結(jié)束語
從目前的教學(xué)現(xiàn)狀看,無論是計算機相關(guān)專業(yè),還是理工科的電子信息類專業(yè),乃至綜合性大學(xué)的非計算機專業(yè),“C語言程序設(shè)計”的課程教學(xué)均占有重要的教學(xué)地位,在全面提高教學(xué)質(zhì)量和教學(xué)效率的今天,不同類型專業(yè)結(jié)合自身優(yōu)勢和程序設(shè)計語言類課程的特點,選擇合適的角度組織和實施“C語言程序設(shè)計”課程的教學(xué)活動非常重要,而且很有必要。筆者的教學(xué)實踐證明,避開“語法研究”的程序設(shè)計教學(xué)不僅可減少課時,更可提高學(xué)生利用程序設(shè)計語言“表述求解問題過程”的能力。
當(dāng)前,計算機技術(shù)飛速發(fā)展,程序設(shè)計技術(shù)已從結(jié)構(gòu)化程序設(shè)計技術(shù)向面向?qū)ο蟪绦蛟O(shè)計技術(shù)過渡,對一個規(guī)模較大的應(yīng)用程序,總體框架是由面向?qū)ο蟪绦蛟O(shè)計構(gòu)搭而成,而在局部實現(xiàn)時仍需采用結(jié)構(gòu)化程序設(shè)計技術(shù)。C語言是一種很好的結(jié)構(gòu)化程序設(shè)計語言,因此,筆者論述了C中的的結(jié)構(gòu)化程序設(shè)計的方法。
結(jié)構(gòu)化程序設(shè)計(STRUCTURED PROGRAMING,簡稱SP)的概念是由荷蘭學(xué)者E·W.DUKSTRA等人在20世紀(jì)60年代后期提出的,是以模塊化設(shè)計為中心,將原來較為復(fù)雜的問題化簡為一系列簡單模塊的設(shè)計,也就是將—個大的計算任務(wù)劃分為一個個比較小的任務(wù),這些小任務(wù)均由函數(shù)來完成。而函數(shù)既可以是C的標(biāo)準(zhǔn)庫函數(shù)。也可以是自定義函數(shù)。在C中,一個具備一定規(guī)模的C程序往往是由多個函數(shù)組成,其中必有一個名為main的主函數(shù),由main來調(diào)用其他函數(shù),必要的話,其他函數(shù)還可以調(diào)用另外的函數(shù)。同一函數(shù)可以被一個或多個函數(shù)調(diào)用一次或多次。模塊的獨立性還為擴充已有的系統(tǒng)、建立新系統(tǒng)帶來了不少的方便,因為我們可以充分利用現(xiàn)有的模塊作積木式的擴展。
結(jié)構(gòu)化程序設(shè)計的思想是一個程序的任何邏輯問題,均可用順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)這3種基本結(jié)構(gòu)來描述。順序結(jié)構(gòu)的程序流程是按語句的書寫順序依次執(zhí)行;選擇結(jié)構(gòu)是對給定條件進(jìn)行判斷,根據(jù)判斷結(jié)果決定執(zhí)行兩分支中的一個分支或多分支中的一個分支;循環(huán)結(jié)構(gòu)是在給定條件成立的情況下,反復(fù)執(zhí)行某個程序段。實現(xiàn)這些程序流程的語句都是流程控制語句。流程控制語句在程序設(shè)計中起著重要的作用,通過3種基本控制結(jié)構(gòu)使結(jié)構(gòu)化程序具有唯一的人口和出口,沒有死循環(huán),而且程序的靜態(tài)形式與動態(tài)執(zhí)行形式之間具有良好的對應(yīng)關(guān)系。在C語言中,有4種語句是順序執(zhí)行的:①空語句,光有一個分號“;”作為語句結(jié)束符,它表示什么也不做。②表達(dá)式語句,表達(dá)式后面加一個分號,表達(dá)式語句主要有賦值語句、自加減運算符構(gòu)成的語句和逗號表達(dá)式語句。③函數(shù)調(diào)用語句,它是由一個函數(shù)調(diào)用加上一個分號組成的。④復(fù)合語句,由“{”和“}”把一些變量說明和語句組合放在一起,又稱為語句塊。選擇語句有if語句和switch語句。循環(huán)語句有for,while和do-while語句以及一些輔助流程轉(zhuǎn)向語句如continue,break,goto等。順序結(jié)構(gòu),選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)共同作為各種復(fù)雜程序的基本構(gòu)造單元,由這3種結(jié)構(gòu)經(jīng)過反復(fù)嵌套構(gòu)成的程序稱為結(jié)構(gòu)化程序,也就是說,結(jié)構(gòu)化程序是由上述3種基本結(jié)構(gòu)組成的。但如果在編程過程中無限制地使用轉(zhuǎn)移語句(-goto),會使程序的控制流程強制性地向前或向后跳轉(zhuǎn)而導(dǎo)致程序的流程無序可循,結(jié)構(gòu)雜亂無章。結(jié)構(gòu)化構(gòu)造減少了程序的復(fù)雜性,提高了可靠性、可測試性和可維護(hù)性,使用少數(shù)的基本結(jié)構(gòu),就可使程序邏輯結(jié)構(gòu)清晰,易讀易懂,并且容易驗證程序的正確性。對—個初學(xué)計算機語言的人來說。最重要的就是要有正確的程序流程概念,不僅要懂得而且要靈活應(yīng)用。由此可見,用結(jié)構(gòu)化方法設(shè)計的結(jié)構(gòu)是清晰的,有利于編寫出結(jié)構(gòu)良好的程序。因此。結(jié)構(gòu)化程序設(shè)計方法的主要原則可以概括為自頂向下,逐步求精,模塊化,限制使用goto語句。
中圖分類號:TP311.12-4
《高級語言程序設(shè)計》是計算機相關(guān)專業(yè)必修的一門專業(yè)課[1],在這門課程中,掌握順序、選擇、循環(huán)三大結(jié)構(gòu)是學(xué)好程序設(shè)計的基礎(chǔ),在大多數(shù)程序中都會包含選擇結(jié)構(gòu),C語言主要有if和switch兩種選擇語句[2],其中,if語句的應(yīng)用更為常見一些,它分為簡單分支、雙分支和復(fù)雜分支。if語句的用法對于有程序設(shè)計經(jīng)驗的學(xué)生來講輕而易舉,但是對于那些沒有編程經(jīng)驗的新生來講,卻很難掌握,因此,在學(xué)習(xí)語法的同時更要注重學(xué)生編程能力的培養(yǎng)。筆者從初學(xué)者角度,用案例分析法對if語句進(jìn)行教學(xué)探討,以便提高教學(xué)質(zhì)量。
1 案例分析法
案例分析法是通過一個具體的教育情景描述,引導(dǎo)學(xué)生對這些特殊情景進(jìn)行討論的一種教學(xué)方法,用于提高學(xué)生解決和分析實際問題的能力。
2 案例分析法在教學(xué)中的應(yīng)用舉例
2.1 案例選擇
用if語句評定和輸出某個或多個學(xué)生的成績等級,是選擇結(jié)構(gòu)的典型應(yīng)用之一。對于這一類型的題目,解題的關(guān)鍵在于讓學(xué)生用一個嵌套的if語句來表示一個分段函數(shù)。
若用Xi表示凱里學(xué)院信12計專班中第i個學(xué)生ai的數(shù)據(jù)結(jié)構(gòu)考試成績,用Y表示其等級,第i個學(xué)生ai的成績Xi與等級Y之間存在下面的數(shù)學(xué)關(guān)系[3]:
3 結(jié)束語
針對上面案例中出現(xiàn)的情況,筆者運用事前分析估算的方法來提高程序的執(zhí)行效率,這是編程者需要考慮的問題,也是程序設(shè)計的基本要求,教學(xué)時教師可提醒學(xué)生檢驗一下是否依據(jù)最好的策略進(jìn)行編程,使學(xué)生更加透徹地理解和掌握程序設(shè)計中的基本思想,領(lǐng)會程序設(shè)計的精髓,教師在授課過程中要注意向?qū)W生灌輸這種思想,為后續(xù)課程的進(jìn)一步學(xué)習(xí)和高級編程打基礎(chǔ)。
參考文獻(xiàn):
[1]蔣然.高職院?!禖語言程序設(shè)計》教學(xué)改革探討[J].福建電腦,2010(10):206.
[2]譚浩強.C語言程序設(shè)計(第四版)[M].北京:清華大學(xué)出版社,2010.
[3]宋蘭霞.《數(shù)據(jù)結(jié)構(gòu)》教學(xué)方法探討[J].電腦知識與技術(shù),2013(14).
中圖分類號:G642 文獻(xiàn)標(biāo)識碼:A 文章編號:1672-3791(2012)02(c)-0000-00
1 概述
計算機程序設(shè)計語言,通常簡稱為編程語言,是一組用來定義計算機程序的語法規(guī)則。它是一種被標(biāo)準(zhǔn)化的交流技巧,用來向計算機發(fā)出指令。
當(dāng)今計算機程序設(shè)計語言種類繁多、共性大、更新速度快,同時軟件工程和項目管理的蓬勃發(fā)展使得計算機軟件開發(fā)從業(yè)人員的職業(yè)分工更為明確。從人力資源與社會保障部頒布的“計算機程序設(shè)計員國家職業(yè)標(biāo)準(zhǔn)”上看,除了要求從業(yè)者必須要有扎實的基本功外,還要具備解決問題的綜合能力。因此計算機程序設(shè)計員專業(yè)的學(xué)生在計算機程序設(shè)計語言的知識和技能的學(xué)習(xí)中,不能再僅僅孤立地教授幾門編程語言、幾門相關(guān)的專業(yè)課程而已,而是要教會學(xué)生掌握通過計算機程序設(shè)計來解決實際問題的知識和技能,成為一名合格的“軟件藍(lán)領(lǐng)”。這就要求我們不能延續(xù)傳統(tǒng)的學(xué)歷教育方法,計算機程序設(shè)計語言教學(xué)需要改革,需要一種全新的教學(xué)理念和模式。
當(dāng)前的教學(xué)改革更多的體現(xiàn)在教學(xué)方法和內(nèi)容上,“學(xué)習(xí)領(lǐng)域”、“任務(wù)驅(qū)動”、“職業(yè)崗位導(dǎo)向”、“面向工作”等各種課程設(shè)計方法層出不窮。然而,縱觀大部分課程改革,我們發(fā)現(xiàn)其教學(xué)改革更多體現(xiàn)在獨立的課程中,并沒有在課程與課程的銜接上下功夫。大部分院校均先后開設(shè)VB、C、C++、JAVA等多門程序設(shè)計語言和數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)庫管理系統(tǒng)等專業(yè)課程,學(xué)生雖然學(xué)習(xí)了多門程序設(shè)計語言,然而每一門語言都只學(xué)了皮毛,每一門課程都學(xué)了基礎(chǔ),只能完成課堂和課后的作業(yè)和練習(xí),而對于能解決什么問題,怎么解決問題,如何綜合解決問題一籌莫展,碰到問題時往往覺得無從下手。
2 程序設(shè)計語言教學(xué)探索與改革:C語言學(xué)習(xí)三部曲
C語言是一種計算機程序設(shè)計語言。它既有高級語言的特點,又具有匯編語言的特點,同時很多新型的語言都是衍生自C語言,,掌握了C語言,經(jīng)過簡單的再學(xué)習(xí),就可以用其他新型的語言去進(jìn)行程序開發(fā)了。因此,在計算機專業(yè)的課程中,只要把C語言學(xué)扎實了、學(xué)透了,就可以說掌握了計算機程序設(shè)計語言的精粹。在課程設(shè)計中,我們以C語言為主線,以一脈相承的C語言、C++語言、C#語言為基本知識內(nèi)容,配合上數(shù)據(jù)結(jié)構(gòu)、UML、數(shù)據(jù)庫等相關(guān)知識點,提出語言知識入門、語言能力提高、語言技能應(yīng)用三個階段和應(yīng)用層次的“C語言學(xué)習(xí)三部曲”的課程改革方案。
第一階段:語言知識入門――C語言與數(shù)據(jù)結(jié)構(gòu)整合
1、課程知識要求:
1) 掌握C語言的基本語法,如數(shù)據(jù)類型,3種語句結(jié)構(gòu),數(shù)組,指針等。
2) 掌握數(shù)據(jù)基本結(jié)構(gòu)形式和操作,如線性結(jié)構(gòu),樹形結(jié)構(gòu),圖形結(jié)構(gòu),以及數(shù)據(jù)結(jié)點的查找、添加、刪除、排序等操作。
3) 掌握“自頂先下、逐步細(xì)化”的結(jié)構(gòu)化程序設(shè)計方法。
2、課程技能要求:
掌握如何用計算機解決日常問題,特別是數(shù)據(jù)的表現(xiàn)形式和動作行為的表現(xiàn)形式。
3、課程設(shè)計要點:
將C語言和數(shù)據(jù)結(jié)構(gòu)進(jìn)行有機整合,特別是在講解C語言的數(shù)據(jù)類型時溶入數(shù)據(jù)結(jié)構(gòu)知識,在講解C語言的語法結(jié)構(gòu)時溶入數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)操作知識。
4、課程目的:
通過該課程的學(xué)習(xí),要求學(xué)生掌握基本程序設(shè)計思想和理論,學(xué)會數(shù)據(jù)及數(shù)據(jù)處理由現(xiàn)實世界向計算機世界的轉(zhuǎn)換方法和過程,學(xué)會用計算機程序設(shè)計語言描述和解決日常生活中問題。
第二階段:語言能力提高――C++語言與UML工具整合
1、課程知識要求:
1) 掌握C++語言的高級語法知識以及面向?qū)ο蟮母拍詈托问?,如面向?qū)ο蟮娜筇卣鳎悍庋b、繼承、多態(tài),以及模板等概念。
2) 掌握UML知識,掌握利用UML工具(如ROSE)來進(jìn)行面向?qū)ο蟮姆治龊徒5姆椒ê瓦^程。
3) 掌握以“抽象與分類”為關(guān)鍵的面向?qū)ο蟮某绦蛟O(shè)計方法。
2、課程技能要求:
掌握如何用計算機解決日常問題,特別是以面向?qū)ο蟮姆椒▉矸治龊徒鉀Q問題。該課程要求學(xué)生在第一階段掌握了結(jié)構(gòu)化的設(shè)計方法后,進(jìn)一步了解面向?qū)ο蟪绦蛟O(shè)計方法。
3、課程設(shè)計要點:
把C++語言和UML進(jìn)行有機的整合。將UML作為面向?qū)ο蟪绦蛟O(shè)計的分析和設(shè)計的工具,而將C++語言作為進(jìn)行面向?qū)ο蟪绦蛟O(shè)計的編程和實現(xiàn)工具。
4、課程目的:
通過該課程的學(xué)習(xí),要求學(xué)生掌握面向?qū)ο罄碚?,學(xué)會面向?qū)ο蠓治觯∣OA)、面向?qū)ο笤O(shè)計(OOD)和面向?qū)ο缶幊蹋∣OP)方法和工具。
第三階段:語言技能應(yīng)用――C#語言與數(shù)據(jù)庫操作整合
1、課程知識要求:
1) 掌握C#語言的高級語法知識和軟件架構(gòu)知識,如集合、委托、托管、、C/S與B/S架構(gòu)開發(fā)方法等。
2) 掌握數(shù)據(jù)庫操作知識,如SQL語法、、XML等。
2、課程技能要求:
掌握多層架構(gòu)的數(shù)據(jù)庫應(yīng)用系統(tǒng)開發(fā)方法。,該課程要求學(xué)生在復(fù)習(xí)第二階段的面向?qū)ο蟮脑O(shè)計方法后,掌握開發(fā).Net應(yīng)用系統(tǒng)的方法,掌握將數(shù)據(jù)存儲在數(shù)據(jù)庫中的方法,以及掌握對數(shù)據(jù)庫進(jìn)行查詢、添加、刪除等操作的方法和步驟。
3、課程設(shè)計要點:
將C#語言與數(shù)據(jù)庫操作知識進(jìn)行有機整合,在講解用C#語言開發(fā)基于.Net的多層架構(gòu)應(yīng)用系統(tǒng)中,通過講解與LINQ將SQL溶入C#語言。
4、課程目的:
通過該課程的學(xué)習(xí),要求學(xué)生掌握C#語言和數(shù)據(jù)庫操作,掌握通用的企業(yè)級應(yīng)用系統(tǒng)的開發(fā)方法和過程。
3 結(jié)語
教育部部長周濟(jì)在2008年度職業(yè)教育會議上說到:“以改革創(chuàng)新為強大動力,推動職業(yè)教育又好又快發(fā)展”。職業(yè)教育的生存和發(fā)展,離不開教學(xué)改革和創(chuàng)新。在進(jìn)行計算機程序設(shè)計語言教學(xué)探索與研究中,我們通過走進(jìn)企業(yè),與企業(yè)軟件開發(fā)人員的進(jìn)行密切聯(lián)系與溝通,了解市場發(fā)展與需求等一系列調(diào)研后,提出了改革方案并付諸實施。實踐證明我們的改革思路是正確的,課程改革是卓有成效的。
參考文獻(xiàn)
引言
全國計算機等級考試(National Computer Rank Examination,簡稱NCRE),1994年由教育部考試中心開始主辦,至今已有20多年,是最早面向全社會的國家級計算機應(yīng)用能力考試機制,是經(jīng)國家教育部批準(zhǔn),面向全國的非學(xué)歷教育的證書考試,專門用于考查應(yīng)試人員的計算機應(yīng)用理論知識水平及實際操作能力。以應(yīng)用能力為主,并進(jìn)行等級劃分,分類別、級別進(jìn)行考核,可提供最具權(quán)威性的資質(zhì)證明。由于它具有客觀、公平、公正的考核標(biāo)準(zhǔn),因此現(xiàn)已成為全國最具權(quán)威性和影響力的一種證書,在全社會得到廣泛認(rèn)同。
目前,全國各高校理工科新生的計算機課程,基本上第一期是計算機基礎(chǔ),第二期是C語言程序設(shè)計。很多普通高校要求理工科學(xué)生參加全國計算機二級考試,并將計算機二級證、英語四級證與學(xué)位證掛鉤,像我校理工科學(xué)生如果沒有獲得計算機二級和英語四級這兩個證,畢業(yè)時就很難獲得學(xué)位證,所以計算機二級考試對理工科學(xué)生來說是一門重要的考試,所有理工科學(xué)生都要重視。從2013年下半年起,二級C采用無紙化考試,時量120分鐘,考試內(nèi)容除了C語言知識外,還包括計算機公共基礎(chǔ)知識,其中公共基礎(chǔ)知識又包含基本數(shù)據(jù)結(jié)構(gòu)與算法、程序設(shè)計基礎(chǔ)、軟件工程基礎(chǔ)、數(shù)據(jù)庫設(shè)計基礎(chǔ)等四方面內(nèi)容。考試內(nèi)容以選擇題形式出現(xiàn),共10分,占10%。雖然只有10分,但對于那些想考高分(90分以上優(yōu)秀)的同學(xué)來說,這些內(nèi)容是非常重要的。由于內(nèi)容繁多,課時有限,有必要嚴(yán)格按照考試大綱進(jìn)行相應(yīng)的教學(xué)改革。
1.基本數(shù)據(jù)結(jié)構(gòu)與算法部分教學(xué)分析
基本要求:掌握算法的基本概念、基本數(shù)據(jù)結(jié)構(gòu)及操作、基本排序與查找算法等。
算法部分教學(xué)重點主要在于使學(xué)生了解算法的基本概念。首先介紹算法是解決某個特定問題的有限步驟的描述;介紹算法的控制結(jié)構(gòu)可分為順序、選擇和重復(fù)三種;采用用程序流程圖形式、N-S結(jié)構(gòu)化流程圖及算法描述語言等其他描述方式進(jìn)行描述;向?qū)W生講解流程圖時穿插算法的特性介紹;說明即使是同一個問題,由于算法不同,效率可能有很大區(qū)別,從而進(jìn)一步引出算法時間、空間復(fù)雜度。對于數(shù)據(jù)結(jié)構(gòu),教學(xué)重點是讓學(xué)生掌握數(shù)據(jù)的邏輯結(jié)構(gòu)、存儲結(jié)構(gòu)及數(shù)據(jù)運算。掌握像線性表、堆棧和隊列等線性邏輯結(jié)構(gòu)及樹、圖非線性邏輯結(jié)構(gòu);掌握數(shù)據(jù)的順序存儲結(jié)構(gòu)與鏈?zhǔn)酱鎯Y(jié)構(gòu)的優(yōu)缺點。展示其在不同存儲方式下進(jìn)行查找、排序、插入與刪除操作的靈活性,從而使學(xué)生掌握這兩種不同存儲方式的區(qū)別,了解二叉樹的不同遍歷方式。通過歷年試題分析,算法與數(shù)據(jù)結(jié)構(gòu)部分在等級考試公共基礎(chǔ)知識考題中約占50%,因此,教師應(yīng)側(cè)重對這部分內(nèi)容進(jìn)行詳細(xì)講解。
2.程序設(shè)計基礎(chǔ)部分教學(xué)分析
基本要求:掌握逐步求精的結(jié)構(gòu)化程序設(shè)計方法,了解面向?qū)ο蟪绦蛟O(shè)計中的對象、方法、屬性等概念。
程序設(shè)計方法是程序設(shè)計基礎(chǔ)部分的重點,概念是該部分考核的主要內(nèi)容,考點份額較小。相對于專業(yè)學(xué)生,非計算機專業(yè)的學(xué)生完全理解面向?qū)ο蟪绦蛟O(shè)計方法中的很多概念比較困難,因而,對這些知識只能要求學(xué)生加強記憶。教師只需對所有概念進(jìn)行相應(yīng)總結(jié)和歸納,無需過多深入探討,以免學(xué)生愈加迷惑,效果反而適得其反。結(jié)構(gòu)化程序設(shè)計中的三種基本程序結(jié)構(gòu)(順序、選擇、循環(huán))和程序設(shè)計基本原則(自頂向下、逐步求精、模塊化、限制使用goto語句);模塊化程序設(shè)計原則(高內(nèi)聚、低耦合);面向?qū)ο蟪绦蛟O(shè)計方法中的基本概念(如:對象、屬性、類、方法、封裝、繼承、多態(tài)性)等在考試中經(jīng)常出現(xiàn),教師在講解時應(yīng)強調(diào)概念。
3.軟件工程基礎(chǔ)部分教學(xué)分析
基本要求:了解軟件工程的基本方法,具有初步應(yīng)用相關(guān)技術(shù)進(jìn)行軟件開發(fā)的能力。
該部分內(nèi)容相對抽象,考點比較多,因此歷年考試中多是考生失分較多的地方??键c主要包括:軟件工程的基本概念和目的;軟件工程的三個要素(包括方法、工具和過程);軟件生命周期階段(包括可行性研究、需求分析、軟件設(shè)計、編碼、測試、運行維護(hù))及各個階段的目標(biāo)及文檔設(shè)計、工具、方法(例如:軟件測試方法包括白盒測試和黑盒測試)和步驟(例如:軟件測試步驟為單元測試、組裝測試、確認(rèn)測試和系統(tǒng)測試等)。根據(jù)計算機等級考試題庫統(tǒng)計,以上知識點在考試中的出現(xiàn)頻率較高,所以教師應(yīng)重點講解。
4.數(shù)據(jù)庫設(shè)計基礎(chǔ)部分教學(xué)
基本要求:掌握數(shù)據(jù)庫基本知識,了解關(guān)系數(shù)據(jù)庫的設(shè)計。
1. 前言
順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)是結(jié)構(gòu)化程序設(shè)計的三種基本結(jié)構(gòu),一個程序的任何邏輯問題均可用這三種基本結(jié)構(gòu)來描述。所以在高級語言程序設(shè)計課程中,掌握這三種結(jié)構(gòu)是學(xué)好程序設(shè)計的基礎(chǔ)。而循環(huán)結(jié)構(gòu)是這三者中最復(fù)雜的一種結(jié)構(gòu),幾乎所有的程序都離不開循環(huán)結(jié)構(gòu)。在C語言中,循環(huán)結(jié)構(gòu)主要包括for、while和do-while三種語句,其中for語句的應(yīng)用更為普遍一些。循環(huán)語句的用法對于有程序設(shè)計經(jīng)驗的學(xué)生來說輕而易舉,但是對于那些沒有經(jīng)驗的初學(xué)者來說,難度卻不小。本文從初學(xué)者的角度,闡述了C語言中如何建立循環(huán)的思想。
2. 如何設(shè)計引例
英文原版教材,循環(huán)是這樣描述的:repeatation,重復(fù)?!掇o海》上說循環(huán)是指事物周而復(fù)始的運動或變化。由這兩個定義可以看出,循環(huán)重在強調(diào)重復(fù)。
2.1 運用實例解釋循環(huán)思想
在一堂課的設(shè)計過程中,引例的作用至關(guān)重要。一個好的引例能把抽象問題簡單化、具體化,有利于學(xué)生理解掌握。在學(xué)習(xí)循環(huán)結(jié)構(gòu)時可先利用現(xiàn)實生活中的一些具體實例來說明什么是循環(huán)以及為什么要研究循環(huán)。例如:春夏秋冬四季的更替,汽車內(nèi)燃機的作功過程:進(jìn)氣——壓縮——燃燒——排氣,叉車裝貨、運貨、卸貨的過程。3個例子的共性在于,它們都是周而復(fù)始的、重復(fù)的運動,為了研究問題本質(zhì),只要找出規(guī)律,將重復(fù)頻率高的相同部分作為重點進(jìn)行突破,可以為我們的研究節(jié)省時間,提高工作效率。
比如,我們要提高發(fā)動機效率,并不需要要研究千次、萬次的燃燒過程,只要從研究一次進(jìn)氣、壓縮、燃燒、排氣一個周期入手;
再如運輸問題,我們可以通過一次往返運輸過程的研究,明確該從哪些環(huán)節(jié)下手實現(xiàn)安全、快捷、節(jié)能等問題。
2.2 編程中的循環(huán)問題
現(xiàn)在我們可以提出一個問題:在計算機程序設(shè)計的世界里是否也有類似的這種相同操作重復(fù)出現(xiàn)的問題呢?我們又當(dāng)如何提高程序設(shè)計的工作效率呢?
利用最簡單累加求和的例子。
例:求1+2+3+4+5+…+10的和。
利用所學(xué)知識學(xué)生很快能寫出這個問題的程序:
#include<stdio.h>
main()
{int s;
s=1+2+3+4+5+6+7+8+9+10;
printf(〝%d〞,s);}
接下來把題目改成:求1+2+3+4+5+…+100的和。
同樣學(xué)生可以利用上面的方法實現(xiàn):
#include<stdio.h>
main()
{int s;
s=1+2+3+4+5+6+7+8+9+10;
printf(〝%d〞,s);}
在編寫的過程中學(xué)生會發(fā)現(xiàn)此種方法雖然可行,可是寫起來麻煩費時。我們?nèi)绾螌ζ溥M(jìn)行改進(jìn)呢?
首先,復(fù)雜操作簡單化——將一個復(fù)雜操作化為多個簡單操作;
#include<stdio.h>
main()
{int s=0;
s=s+1;
s=s+2;
s=s+3;
s=s+4;
………
………
………
s=s+100;
printf(〝%d〞,s);}
經(jīng)過改進(jìn)之后會發(fā)現(xiàn),雖然每一行變簡單了,但是行數(shù)卻增加了,在工作量上并沒有減少。經(jīng)過觀察可以發(fā)現(xiàn),被框起來的部分雖然不同但已經(jīng)十分相似。下面引導(dǎo)學(xué)生如何利用常量與變量的關(guān)系把不同的行變成相同的,也就是第二步變化。
接下來,簡單操作相同化——多個簡單操作整理成相同操作;#include<stdio.h>
main()
{int s=0,i=0;
i=i+1; s=s+i;
i=i+1; s= s+i;
i=i+1; s= s+i;
i=i+1; s= s+i;
………
………
………
i=i+1; s= s+i;
printf(〝%d〞,s);}
經(jīng)過第二步之后會發(fā)現(xiàn)原本不同的語句變成了相同的語句,我們在整個過程中都做著重復(fù)的、相同的事情,也就是前面所說的循環(huán)。下面就可以引出本節(jié)課的重點循環(huán)結(jié)構(gòu)。
最后,相同操作重復(fù)化——設(shè)計控制相同操作執(zhí)行多次。
#include<stdio.h>
main()
{int s=0,i=0;
i=i+1; s=s+i;
i=i+1; s= s+i;
i=i+1; s= s+i;
i=i+1; s= s+i;
………
………
………
i=i+1; s= s+i;
printf(〝%d〞,s);}
通過實例總結(jié),循環(huán)結(jié)構(gòu)程序設(shè)計的思想:
①復(fù)雜操作簡單化——復(fù)雜操作化為多個簡單操作;
②簡單操作相同化——多個簡單操作整理相同操作;
③相同操作重復(fù)化——循環(huán)控制相同操作重復(fù)執(zhí)行
經(jīng)過這幾步變化可以將循環(huán)的思想簡單明了的呈現(xiàn)在學(xué)生眼前,學(xué)生只有真正理解掌握了循環(huán)的本質(zhì),才能在以后的學(xué)習(xí)過程中很好的去運用。這種方法在日常教學(xué)中得到了很好的效果,也得到了學(xué)生的認(rèn)可。
3. 循環(huán)本質(zhì)
循環(huán)結(jié)構(gòu)程序設(shè)計的任務(wù)就是設(shè)計一種能讓計算機周而復(fù)始地重復(fù)地執(zhí)行某些相同代碼的程序。換句話說就是:相同語句程序員只編寫一次代碼、并讓計算機多次重復(fù)執(zhí)行。將程序員從大量重復(fù)編寫相同代碼的工作中解放出來,計算機的工作量并沒有減少。
利用循環(huán)的好處是:節(jié)省編程的書寫時間,減少程序源代碼的存儲空間,減少代碼的錯誤,提高程序的質(zhì)量。
這就是程序設(shè)計過程中循環(huán)的本質(zhì)。
了解掌握了循環(huán)的本質(zhì)接下來講解循環(huán)的三要素、三種循環(huán)語句的結(jié)構(gòu)及執(zhí)行過程就很容易被學(xué)生接受了。
4. 結(jié)束語
此方法較以前的教學(xué)學(xué)法有了很好的改進(jìn),對于循環(huán)問題學(xué)生不再有畏懼感,也為以后數(shù)組及其他知識的學(xué)生打下了基礎(chǔ)。
如何讓一名初學(xué)者盡快擺脫日常的思維定式,更加透徹地理解和掌握程序設(shè)計中的基本思想,領(lǐng)會程序設(shè)計的精髓,總結(jié)出程序設(shè)計中每一種程序設(shè)計結(jié)構(gòu)的本質(zhì)及適合解決的問題,是高級語言程序設(shè)計這門課程在講授過程中,應(yīng)該時刻注意的問題。
參考文獻(xiàn):
中圖分類號:TP312.1-4
《C語言程序設(shè)計》是計算機專業(yè)的一門核心專業(yè)基礎(chǔ)課程,是專升本、考研和等級水平考試的必考科目,也是學(xué)生學(xué)習(xí)中感到比較吃力的一門課。那么,如何學(xué)習(xí)《C語言程序設(shè)計》這門課程呢?現(xiàn)根據(jù)自己多年在教學(xué)中的體會,談一些粗淺的認(rèn)識。
1 為什么要學(xué)習(xí)《C語言程序設(shè)計》
《C語言程序設(shè)計》是用C語言來編寫程序的,每個程序員在他們的編程生涯中都應(yīng)該學(xué)習(xí)C語言,因為它有太多難以忽視的好處了。除了它會給你提供更多的工作機會之外,C語言還會教給你更多的關(guān)于計算機的知識。它的好處如下:
1.1 C語言是一種計算機程序設(shè)計語言
它既具有高級語言的特點,又具有匯編語言的特點,既可以用來編寫系統(tǒng)軟件,又可以用來編寫應(yīng)用軟件。它不僅具有繪圖能力強,還具備很強的數(shù)據(jù)處理能力,因此也適于編寫三維,二維圖形和動畫。
1.2 C語言具有功能強大、使用靈活、豐富的數(shù)據(jù)類型和運算符、結(jié)構(gòu)化的控制語句、目標(biāo)代碼運行效率高、適用范圍大、可移植性好等優(yōu)點。
1.3 C語言是各大操作系統(tǒng)的基礎(chǔ),Unix、Linux、Windows其內(nèi)核都清一色是C語言開發(fā)的,(某些地方是和匯編語言混合開發(fā)的),還有各種語言的編譯器,包括java虛擬機,各種嵌入式設(shè)備,如手機、PDA等都是C語言開發(fā)的。
1.4 C語言是基礎(chǔ),如果你學(xué)習(xí)過C語言,你就能學(xué)習(xí)現(xiàn)在任何的高級編程語言
因為所有的高級語言都是以C語言為基礎(chǔ)的(像JAVA,C++,C#等等)。C語言學(xué)好了,將來想學(xué)其他的語言,就比較好入門了。
2 如何學(xué)習(xí)《C語言程序設(shè)計》
2.1 克服畏難心理,充滿自信的學(xué)習(xí)《C語言程序設(shè)計》
大多數(shù)學(xué)生一看到《C語言程序設(shè)計》課程的教材,就有畏難的情緒,覺得C語言難學(xué),學(xué)不會,因為他們對計算機語言不了解,另外有些英語差的同學(xué),看到計算機編程是用英語編寫的,就未學(xué)先棄了。其實學(xué)習(xí)語言并沒有他們想象的那么難,英語差也對學(xué)習(xí)計算機語言影響不大,比如學(xué)C語言,真正要記的關(guān)鍵字不多,語法也不復(fù)雜,只要大家不帶著畏難的心理,充滿自信,一定能學(xué)好的。
2.2 要明確《C語言程序設(shè)計》的學(xué)習(xí)目的
通過《C語言程序設(shè)計》課程的學(xué)習(xí),掌握C語言基本知識,掌握程序設(shè)計的基本方法并逐步形成正確的程序設(shè)計思想,能夠熟練運用基本程序結(jié)構(gòu)解決簡單問題,理解模塊化程序設(shè)計原則并能熟練使用C語言進(jìn)行程序設(shè)計,具備調(diào)試程序的能力,為后繼課程及其他程序設(shè)計課程的學(xué)習(xí)和應(yīng)用打下基礎(chǔ)。
2.3 要明白《C語言程序設(shè)計》與一般的計算機操作課程有所不同
《C語言程序設(shè)計》是計算機的一門軟件編程課程,是用C語言來編寫程序的,它具有難度性、抽象性、連續(xù)性和邏輯嚴(yán)密性。如果你第一次課來聽了,第二次課沒來,第三次課很可能就聽不懂了。比如,第一次課講的是數(shù)字1,2,3,4……,第二次課講的是運算符號+,-,*,/,第三次課老師讓你算1+2=?,如果你前兩次課都來聽了,那么你就能算出它的結(jié)果,否則你就算不出它的結(jié)果。因此,如果要想學(xué)好《C語言程序設(shè)計》,必須堅持每次課都來,如果那天確實不能來,就應(yīng)在家自學(xué),不懂的地方應(yīng)及時向老師請教,一定不能落課。
2.4 要整體把握《C語言程序設(shè)計》
C語言是一種通用的程序設(shè)計語言,在開發(fā)系統(tǒng)軟件和應(yīng)用軟件中得到廣泛的應(yīng)用,已成為當(dāng)今計算機世界最流行的語言之一。C語言是一個整體,各個方面是有機聯(lián)系的,要從總體上把握它,不要把它割裂成互不關(guān)聯(lián)的部件。它包括C語言概述、數(shù)據(jù)類型(整型、實型、字符型、數(shù)組類型、指針類型、結(jié)構(gòu)體類型、共用體類型等)、運算符和表達(dá)式、流程控制語句、函數(shù)、數(shù)組、字符與字符串、指針、結(jié)構(gòu)體、文件等。通過《C語言程序設(shè)計》的學(xué)習(xí),掌握程序設(shè)計的基本概念、基本思想、基本方法和基本技能,進(jìn)而學(xué)會利用C語言解決實際問題,培養(yǎng)計算機程序設(shè)計的能力和素質(zhì),以及思維方法,為以后學(xué)習(xí)其它計算機程序語言和后續(xù)的專業(yè)課程打下基礎(chǔ)。
簡單的C程序是由主函數(shù)和函數(shù)體兩大部分組成。它的基本框架如下:
main()
{
}
其中main表示“主函數(shù)”。每一個C程序都必須有一個main函數(shù),而且只能有一個main函數(shù),它表示程序從這里開始執(zhí)行。由花括號“{ }”括起的部分是函數(shù)體。其中函數(shù)體又包括定義變量、變量賦值、函數(shù)調(diào)用、輸出打印等。
例:一個簡單的求和程序
main() /*主函數(shù)*/
{
int a,b,sum; /*定義變量*/
a=123;b=456; /*變量賦值*/
sum=a+b; /*求兩數(shù)之和*/
printf(“sum is %d\n”,sum); /*輸出和值*/
}
這是一個簡單的求和程序。/*...*/表示注釋部分,只給人看的,對編譯和運行不起作用。第3行是聲明部分,定義變量a、b、sum,指定a、b、sum為整型(int)變量。第4行是兩個賦值語句,使a和b的值分別為123和456。第5行使sum的值為a+b,第6行中“%d”是輸入輸出的“格式字符串”,用來指定輸入輸出時的數(shù)據(jù)類型和格式,“%d”表示“以十進(jìn)制整數(shù)形式輸出”。Printf函數(shù)中括弧內(nèi)最右端sum是要輸出的變量,現(xiàn)在它的值為579(即123+456之值)。因此輸出一行信息為:
sum is 579
從這個例子可以看出,想要把《C語言程序設(shè)計》這門課學(xué)好,不僅要知道《C語言程序設(shè)計》的基本框架,還要學(xué)好函數(shù)體中的內(nèi)容(變量類型、定義變量、變量賦值、輸入輸出格式字符串、輸入輸出函數(shù)格式、調(diào)用函數(shù)等)。另外還要學(xué)好C語言的運算符、運算順序 、四種程序結(jié)構(gòu)(順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)、模塊化程序結(jié)構(gòu) )、掌握一些簡單的算法等。
2.5 熟練C程序的上機步驟
在編好一個C源程序后,如何上機運行呢?要經(jīng)過編輯、編譯、連接和運行四個步驟。
(1)編輯源文件。在編輯(Edit)狀態(tài)下輸入或修改源程序。
(2)編譯源程序。選擇“C編譯”菜單并選擇“編譯到OBJ”,進(jìn)行編譯,得到一個后綴為.obj的目標(biāo)程序。
(3)然后再選擇菜單“L連接EXE文件”,進(jìn)行連接操作,可得到一個后綴為.exe的可執(zhí)行文件。
(4) 運行程序。在“RUN”菜單中選擇“R運行程序”項,或直接按Ctr+F9鍵,系統(tǒng)就會運行已編譯好的可執(zhí)行目標(biāo)文件。此時,TC集成環(huán)境窗口消失,屏幕上顯示出程序運行的結(jié)果。如果程序需要輸入數(shù)據(jù),則應(yīng)在此時,從鍵盤輸入所需數(shù)據(jù),然后程序會接著執(zhí)行,輸出結(jié)果。
2.6 要加強編程訓(xùn)練
《C語言程序設(shè)計》是實踐性非常強的課程,要求學(xué)員要理論聯(lián)系實際,在掌握C語言的基本語法和基本知識后,重點應(yīng)放在提高編程能力的訓(xùn)練上。根據(jù)學(xué)生學(xué)習(xí)的認(rèn)知特點,我認(rèn)為主要應(yīng)從以下幾個方面進(jìn)行強化訓(xùn)練:
(1)吃透課本例子。每學(xué)完一次新課,讓學(xué)生對課本例子先分析任務(wù)、再仔細(xì)閱讀程序,然后按書上的源代碼敲出來,編譯執(zhí)行輸出結(jié)果,如果結(jié)果跟書上一致就算完成,如果不一致,就要仔細(xì)找原因。再后不看書自己編寫代碼與課本對照,找出自己的不足,然后改進(jìn)。最后在此例的基礎(chǔ)上自己加以改造,舉一反三,變?yōu)槠渌睦?,如此反?fù)練習(xí),不僅培養(yǎng)了學(xué)生動腦思考的習(xí)慣,而且養(yǎng)成了遇事三思、認(rèn)真、周密的作風(fēng)。
(2)精選上機題目,要求調(diào)試通過。每章找出一個或兩個綜合性的具有代表性的應(yīng)用題目,如編寫一個程序,計算一個整數(shù)的名位數(shù)字之和;用選擇法對數(shù)組中10個整數(shù),按由小到大的順序進(jìn)行排序等,要求用C語言編寫可執(zhí)行的源程序,上機調(diào)試。這樣不僅鍛煉了學(xué)生解決實際問題的能力,更重要的是激發(fā)了學(xué)生學(xué)習(xí)課程的興趣,抽象變具體 ,理論變實踐,對這門課有了更深的認(rèn)識。
(3)閱讀填空法。找一些經(jīng)典程序,配上必要的說明,適當(dāng)去掉語句或表達(dá)式,讓學(xué)生通過閱讀填補空白,訓(xùn)練學(xué)生的程序設(shè)計能力。例編寫一個程序,輸入月份號,輸出月的英文月名,還有求和、排序、報號等。
(4)準(zhǔn)備一個經(jīng)驗本,記下C語言重要的語法和知識點,還有自己出錯的解決方法及老師講解的其他同學(xué)出現(xiàn)的常見錯誤,抽空常翻看,逐步積累經(jīng)驗,加深印象,使以后避免。
(5)帶著作業(yè)去上機。每次理論課結(jié)束后,老師都會給學(xué)生布置一些作業(yè)(如習(xí)題)讓學(xué)生做,那么學(xué)生一定要認(rèn)認(rèn)真真的把作業(yè)完成好,先把程序編寫在作業(yè)本上,上機時再把這些程序敲到計算機上,進(jìn)行修改、調(diào)試、運行,最后輸出結(jié)果。如果學(xué)生不帶作業(yè)去上機,第一次老師警告下次一定帶作業(yè)上機,如果第二次還沒帶作業(yè),不準(zhǔn)學(xué)生進(jìn)機房,讓學(xué)生到教室把作業(yè)做完后再到機房上機調(diào)試。有人說學(xué)生可以直接在機器上編寫程序,固然沒錯,但對于初學(xué)者來說,如果在機器上邊思考邊編寫,也就是說想一句編一句,再想一句再編一句,這樣太浪費時間,一節(jié)課說不定連一個程序都編不好,所以老師一定要求學(xué)生在課下把程序編好,上機只需把程序敲出來進(jìn)行修改、調(diào)試、運行,這樣能節(jié)約大量的時間,學(xué)生上機時間本身都是有限的。
上述方法在教學(xué)實踐中證明是行之有效的,學(xué)生對問題分析、程序設(shè)計的自覺性和能動性得到提高,動手能力加強,對后繼課如《C++》、《面向?qū)ο蟪绦蛟O(shè)計》等,學(xué)習(xí)起來倍感輕松,較好地完成了該門課程的學(xué)習(xí)目標(biāo)。總之,實踐出真知,多學(xué)、多練、多思、多交流,勤奮好學(xué)才能學(xué)成。
參考文獻(xiàn):
[1]嚴(yán)桂蘭.C語言程序設(shè)計與應(yīng)用教程[M].福建:廈門大學(xué)出版社,2001.
[2]譚浩強.C程序設(shè)計(第三版)[M].北京:清華大學(xué)出版社,2005.
[3]陳東.計算機多媒體教學(xué)改革的一些嘗試[J].福建師范大學(xué)學(xué)報(自然版),2004,20(3):98.
【關(guān)鍵詞】
數(shù)據(jù)結(jié)構(gòu);ACM;編寫程序
1 ACM競賽的概述及意義
1.1 ACM競賽的概述
ACM是由美國計算機協(xié)會舉辦的國際大學(xué)生程序設(shè)計競賽,ACM被認(rèn)為是水平最高、規(guī)模最大的國際大學(xué)生程序設(shè)計競賽。ACM為大學(xué)生提供了一個展示自身分析解決問題能力的平臺,大學(xué)生通過所學(xué)的計算機程序設(shè)計理論知識來解決問題,其理論知識主要包括數(shù)據(jù)結(jié)構(gòu)、程序設(shè)計語言、物理數(shù)學(xué)模型、算法分析等。ACM在競賽過程中為選手規(guī)定了比賽時間,在規(guī)定時間內(nèi),根據(jù)參賽者所作比賽題目的數(shù)量和準(zhǔn)確度和做題時間長短來進(jìn)行名次評判。ACM是計算機類最具影響力的國際級競賽,受到世界各知名大學(xué)和各著名TI企業(yè)的關(guān)注。通過ACM競賽可以在競賽壓力環(huán)境中培養(yǎng)參賽著在軟件程序開發(fā)過程中的團(tuán)隊合作精神和自主創(chuàng)新能力、理性實踐的能力。我國ACM競賽起步較晚,從1996年開始舉辦時至今日已經(jīng)成功舉辦了七屆,這一針對高校大學(xué)生而舉辦的競賽得到了國內(nèi)眾多知名高校的積極響應(yīng),其發(fā)展趨勢迅速,取得了卓越的科技成果。
1.2 ACM競賽的意義
程序設(shè)計類課程是高校計算機相關(guān)專業(yè)課程中的重要組成部分,所占比重較大,這類課程對實踐性要求很高,這類課程旨在培養(yǎng)學(xué)生具有一定的程序設(shè)計能力。通過ACM競賽可以全面考察學(xué)生程序設(shè)計語言和算法的學(xué)習(xí)使用情況,ACM這一競賽平臺將程序設(shè)計類課程的理論與實踐完美的結(jié)合起來,以此來提高學(xué)生程序的設(shè)計能力。
2 ACM評側(cè)系統(tǒng)的設(shè)計
ACM評測系統(tǒng)集在線程序設(shè)計、算法設(shè)計練習(xí)、競賽于一身。該系統(tǒng)中存儲有大量的競賽試題,學(xué)生可以根據(jù)自身需要進(jìn)行自主練習(xí)或競賽,學(xué)生在該系統(tǒng)上在線編寫相關(guān)競賽試題的程序代碼,編寫完成后提交程序代碼,系統(tǒng)可以自動進(jìn)行編譯,從而生成可執(zhí)行文件,并對程序執(zhí)行測試,最終輸出測試結(jié)果??梢詫CM模式推廣到數(shù)據(jù)結(jié)構(gòu)、C/C++、EDA等與程序設(shè)計相關(guān)的課程中進(jìn)行實踐教學(xué),該系統(tǒng)的主要功能包括以下幾部分內(nèi)容:(1)規(guī)定代碼的通過標(biāo)準(zhǔn),從程序耗費總內(nèi)存、運行時間等多個方面審查提交代碼,并輸出評測結(jié)果。(2)支持JAVA、C++、C、PASCAL等程序語言的編譯,制定了具有可擴展性的編輯器擴充規(guī)則,以此來支持其他程序語言的編譯。(3)設(shè)計的系統(tǒng)具有支持集體或個人申請競賽,并提供相應(yīng)的競賽環(huán)境的功能。(4)系統(tǒng)以RSS聚合方式匯總競賽報告,通過RSS閱讀器即使不訪問站點也可以自動獲得競賽報告的更新。(5)系統(tǒng)可以自動監(jiān)管各個數(shù)據(jù)庫的連接狀態(tài),以此來調(diào)控系統(tǒng)的性能。(6)系統(tǒng)定義了自動約束規(guī)則,具有系統(tǒng)在線配置的自我調(diào)節(jié)能力。ACM評測系統(tǒng)在運行速度、系統(tǒng)穩(wěn)定性和程序負(fù)荷能力上均具有良好的性能,為各類編程課程提供了一個良好的實驗環(huán)境。
3 ACM數(shù)據(jù)結(jié)構(gòu)實驗教學(xué)體系設(shè)計
數(shù)據(jù)結(jié)構(gòu)相關(guān)內(nèi)容的課程是計算機專業(yè)的重要課程之一,數(shù)據(jù)結(jié)構(gòu)這門課主要側(cè)重于軟件設(shè)計中所涉及到的各種存儲結(jié)構(gòu)、數(shù)據(jù)結(jié)構(gòu)、基本運算、程序性能、以及算法實現(xiàn)等基本技術(shù)。學(xué)生在遇到實際問題時可以通過學(xué)習(xí)的理論知識選擇合理的數(shù)據(jù)結(jié)構(gòu),并設(shè)計出符合實際情況的優(yōu)良算法,以此來提高學(xué)生軟件開發(fā)的實踐能力。學(xué)生軟件實踐能力的培養(yǎng)可以通過開設(shè)數(shù)據(jù)結(jié)構(gòu)相關(guān)類實驗課程來實現(xiàn),這種實驗類課程將理論與實踐相結(jié)合,將學(xué)生在書本、課堂中學(xué)到的理論知識用于解決實際問題,有效地培養(yǎng)學(xué)生的創(chuàng)造性思維,并提高學(xué)生分析、解決問題的能力,為從事計算機類相關(guān)工作的學(xué)生奠定堅實的實踐基礎(chǔ)。傳統(tǒng)的實驗類課程不能充分發(fā)揮其根本作用,只能培養(yǎng)學(xué)生掌握基本知識的能力,并且實驗類課程課時較短,在短暫的實驗課程中無法真正鍛煉學(xué)生分析解決實際問題的能力,學(xué)生在課余時間也無法找到正確的渠道進(jìn)行練習(xí)學(xué)習(xí),也沒有專業(yè)人士給與指導(dǎo)建議。ACM競賽經(jīng)過長時間的探索已經(jīng)日趨成熟,將ACM模式應(yīng)用于數(shù)據(jù)結(jié)構(gòu)等計算機類實驗教學(xué)中,將大大提高教學(xué)效果。
3.1 ACM模式教學(xué)優(yōu)勢
基于ACM模式的數(shù)據(jù)結(jié)構(gòu)等程序設(shè)計類課程的實驗教學(xué)系統(tǒng)是通過網(wǎng)絡(luò)進(jìn)行的,這種教學(xué)模式不受時間、空間的局限。學(xué)生在課程學(xué)習(xí)中難以將實際問題中客觀事物與數(shù)據(jù)結(jié)構(gòu)中的理論數(shù)據(jù)很好地銜接在一起,缺乏系統(tǒng)解決問題的能力和方法,通過ACM模式的實驗教學(xué)恰好可以很好地解決這一問題。學(xué)生在ACM模式教學(xué)下進(jìn)行實踐學(xué)習(xí),豐富了自身計算機理論知識儲備并提高了實踐能力,將所學(xué)理論知識應(yīng)用于實際問題中,通過一系列實踐訓(xùn)練真正掌握數(shù)據(jù)結(jié)構(gòu)的精髓。ACM競賽為學(xué)生提供了一個學(xué)術(shù)交流平臺,通過ACM組隊形式的競賽培養(yǎng)學(xué)生團(tuán)結(jié)合作的精神,為以后軟件項目團(tuán)隊化的合作奠定堅實基礎(chǔ)。
3.2ACM模式教學(xué)設(shè)計
將基于ACM模式的計算機程序設(shè)計類課程實驗教學(xué)體系分為以下三個層面:基礎(chǔ)知識訓(xùn)練型實驗、實際問題設(shè)計型實驗和創(chuàng)新型實驗。
(1)基礎(chǔ)知識訓(xùn)練型實驗。學(xué)生通過基礎(chǔ)知識訓(xùn)練型實驗的練習(xí)可以鞏固并深入理解所學(xué)的知識。基礎(chǔ)知識訓(xùn)練型實驗主要涉及有線性表、隊列、棧、順序折半查找、廣義表、圖、樹、內(nèi)部排序等多種內(nèi)容。這一環(huán)節(jié)要求學(xué)生掌握基本的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)方法,并且要求學(xué)生具有較強的問題分析能力和任務(wù)定義能力。
(2)實際問題設(shè)計型實驗。通過實際問題設(shè)計型實驗可以充分挖掘?qū)W生自身的創(chuàng)造力,將所學(xué)理論知識運用于實際問題的解決中。實際問題設(shè)計型實驗主要涉及停車場車輛管理、電話號碼及歸屬地查詢、哈夫曼碼編碼器等內(nèi)容。這一實驗環(huán)節(jié)要求學(xué)生用所學(xué)的數(shù)據(jù)結(jié)構(gòu)知識設(shè)計出復(fù)雜的軟件系統(tǒng),主要檢測了學(xué)生掌握算法設(shè)計和分析、遞歸思想和方法等方面的能力。
(3)創(chuàng)新型實驗。創(chuàng)新型實驗與各種各種比賽、課外科技活動、科研項目等相結(jié)合,增加學(xué)生軟件開發(fā)、設(shè)計的能力。這一實驗環(huán)節(jié)要求學(xué)生掌握面向過程的設(shè)計方法、面向?qū)ο蟮脑O(shè)計方法、基本的軟件重用方法等內(nèi)容。
4 總結(jié)
通過ACM教學(xué)模式可以培養(yǎng)學(xué)生解決實際問題的能力,而且不受解題方法的限制,學(xué)生通過ACM這一學(xué)術(shù)交流平臺在展示自己能力的同時可以學(xué)到很多東西,激發(fā)了學(xué)生的學(xué)習(xí)熱情和潛力。
【參考文獻(xiàn)】
一、面向?qū)ο笤O(shè)計方法
軟件設(shè)計有兩種主流設(shè)計方法:以結(jié)構(gòu)化程序設(shè)計為基礎(chǔ)的結(jié)構(gòu)化軟件設(shè)計和由面向?qū)ο笤O(shè)計方法導(dǎo)出的面向?qū)ο蟮能浖O(shè)計, 20世紀(jì)70年代末到80年代初的結(jié)構(gòu)化設(shè)計方法即傳統(tǒng)設(shè)計方法,以區(qū)別于后來興起的面向?qū)ο蟮脑O(shè)計方法。在軟件設(shè)計周期中,面向?qū)ο笤O(shè)計方法是一種全新的設(shè)計和構(gòu)造軟件的方法,它使計算機解決問題的方式更符合人類的解決問題的思維方式,更能直接的描述客觀世界,同時也可以增加的代碼的可重用性,是目前和未來軟件開發(fā)的方向[1]。
面向?qū)ο笤O(shè)計在整個軟件設(shè)計中占據(jù)著非常重要的部分,面向?qū)ο笤O(shè)計也是將分析階段所建立的分析模型轉(zhuǎn)變?yōu)檐浖O(shè)計模型,但是面向?qū)ο蠓治龊兔嫦驅(qū)ο笤O(shè)計之間沒有明顯的界限,面向?qū)ο蟮姆椒ㄊ腔诔橄?、信息隱藏、功能獨立和模塊化等重要軟件設(shè)計概念基礎(chǔ)上的,現(xiàn)階段的軟件設(shè)計基本上都運用了面向?qū)ο蟮脑O(shè)計方法[2]。面向?qū)ο蟮拈_發(fā)支持鼓勵軟件實踐中的信息隱藏,數(shù)據(jù)抽象和封裝,可以對單獨對一個對象內(nèi)部進(jìn)行隔離修改,那么就使得運用面向?qū)ο箝_發(fā)的軟件更容易修改、擴充和維護(hù)[1]。
對象和類是面向?qū)ο蟪绦蛟O(shè)計的基石,其基本的機制便是方法和消息。消息是要求某個對象執(zhí)行類中某個操作的規(guī)格說明;方法就是對象執(zhí)行的操作。面向?qū)ο蟪绦蛟O(shè)計三個重要特征:封裝性,繼承性和多態(tài)性。
(一)對象(Object)和類(Clasess)
對象即指現(xiàn)實生活中無所不在、各種各樣的實體,它可以使具體的事物,也可以是抽象的實體[2]。從對象的構(gòu)成和內(nèi)容來看,設(shè)計程序時使用對象有以下優(yōu)點:對象是對物體的直接抽象,這種抽象簡化了實際物體的模型,同時以一種可以操作的形式將實體表達(dá)出來。進(jìn)行了數(shù)據(jù)的封裝后,掩蔽了實現(xiàn)的復(fù)雜性,對于用戶使用起來就更加方便。
在現(xiàn)實生活中,具有相似性質(zhì),執(zhí)行相同操作的對象,稱為同一類對象,即類是同一種對象的集合與抽象[2]。例如,在Visual Basic中窗體都是Form類的實體,一個單獨的窗體也是一個類。
(二)數(shù)據(jù)封裝(Data Encapsulation)
數(shù)據(jù)封裝是類的一個重要特性。數(shù)據(jù)封裝是把數(shù)據(jù)和相關(guān)的操作設(shè)在一個包中,那么程序不能直接訪問對象中的變量,只有通過對象的方法才能作用于數(shù)據(jù)。
(三)繼承(Inheritance)
我們首先在對象的基礎(chǔ)上創(chuàng)建對象,新的對象就會繼承原先對象的所有屬性和特點,同時根據(jù)實際情況也可以選擇和修改父對象的屬性和功能,這就叫做繼承。利用這點,可以將舊的程序擴充為當(dāng)前所需要的,也可以從已知的類中派生出新的類來。
(四)多態(tài)性(Polymorphism)
多態(tài)性就是多種表現(xiàn)形式,不同事物具有不同表現(xiàn)形式的能力,具體來說,可以用“一個對外接口,多個內(nèi)在實現(xiàn)方法”表示。多態(tài)機制使具有不同內(nèi)部結(jié)構(gòu)的對象可以共享相同的外部接口,通過這種方式減少代碼的復(fù)雜度。
二、結(jié)構(gòu)化程序設(shè)計與面向?qū)ο蟪绦蛟O(shè)計
結(jié)構(gòu)化程序設(shè)計是由算法和數(shù)據(jù)結(jié)構(gòu)組成,算法指處理數(shù)據(jù)的特定的方法。結(jié)構(gòu)化程序設(shè)計首要想法是如何處理數(shù)據(jù),然后再選擇最為方便處理的數(shù)據(jù)結(jié)構(gòu),那么重點主要集中在數(shù)據(jù)上了。結(jié)構(gòu)化程序設(shè)計的基本思想是:系統(tǒng)按功能要求分解為若干個子模塊,子模塊再根據(jù)需求進(jìn)一步分解為子模塊,不斷的進(jìn)行分解,從上往下進(jìn)行分解,這樣的形式是自頂向下的“瀑布式”設(shè)計,僅運用了順序、分支和循環(huán)三種結(jié)構(gòu)設(shè)計編碼。
面向?qū)ο蟪绦蛟O(shè)計中,用戶需要做的事向?qū)ο髠魉拖?。編程人員在設(shè)計過程中要做的就是向?qū)ο筇幚磉m當(dāng)?shù)南⒁约八膬?nèi)部數(shù)據(jù),這樣就最大限度了提高了代碼的可重用性,縮短了調(diào)試時間。面向?qū)ο蟪绦蛟O(shè)計與結(jié)構(gòu)化程序設(shè)計是相反的,面向?qū)ο蟮某绦蛟O(shè)計是從下往上的“噴泉式”的設(shè)計,對象是數(shù)據(jù)處理方法緊密結(jié)合的整體。
三、Windows及應(yīng)用程序與面對對象的程序設(shè)計
Windows中的圖形用戶接口包括窗口,下拉式菜單,對話框等各種控件,這就使得Windows應(yīng)用程序非常容易使用。我們用結(jié)構(gòu)化的程序設(shè)計方法開發(fā)Windows應(yīng)用程序非常困難,即使要在屏幕上生成一個簡單的窗口或是一個簡單的下拉式菜單也要編寫幾十條甚至幾百條復(fù)雜的代碼,寫這些代碼的前提必須是我們對Windows具有非常深入的了解。那么在這種情況下,一種開發(fā)時間短、質(zhì)量高、復(fù)用性高等比結(jié)構(gòu)化程序設(shè)計方法優(yōu)良的設(shè)計方法。由于Windows的進(jìn)城的核心也是對消息的處理,因此Windows程序編程是以消息為核心。消息也是面向?qū)ο蟪绦蛟O(shè)計的基本機制,程序的進(jìn)程的核心也是對消息的處理,因此面向?qū)ο蟪绦蛟O(shè)計比結(jié)構(gòu)化程序設(shè)計更適合于開發(fā)Windows應(yīng)用程序。利用面向?qū)ο蟪绦蛟O(shè)計的封裝性可以把Windows應(yīng)用程序的所具有的行為進(jìn)行封裝,形成一個類層次庫,這樣就為Windows應(yīng)用程序提供一個一致、直觀和簡單的與Windows的接口。面向?qū)ο蟪绦蛟O(shè)計具有繼承性這一特性,Windows的應(yīng)用程序可簡單、方便的繼承和選擇性的使用Windows特性而不必重寫這些代碼,同時,編程人員也可以借用其他應(yīng)用程序的功能代碼,或是稍作修改,也不必考慮Windows底層的細(xì)節(jié)。那么這樣看來,類層次庫就大大的降低了Windows程序設(shè)計的復(fù)雜性,編程人員也不必一條一條代碼的編寫,顯著的減少了創(chuàng)建Windows應(yīng)用程序界面所需的源代碼量,因此面向?qū)ο蟮某绦蛟O(shè)計在開發(fā)應(yīng)用程序方面顯示出巨大的優(yōu)越性。
四、結(jié)語
面向?qū)ο蟮某绦蛟O(shè)計方法是當(dāng)前軟件設(shè)計的一個主要潮流,采用這種方法開發(fā)出的軟件具有極大的穩(wěn)定性、可維護(hù)性和可重用性,面向?qū)ο蟪绦蛟O(shè)計方法運用于軟件設(shè)計中極大的提高的功能代碼的復(fù)用性,大大的提高了工作效率。
參考文獻(xiàn):