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