第一篇:關于模塊教學問題
關于模塊化教學問題
一、模塊化教學的內涵及模塊式教學模式
(一)模塊化教學的內涵
模塊化教學是以現(xiàn)場教學為主,以技能培訓為核心的一種教學方法,不但重視知識的傳授、更重視知識的應用,要求教師要精選教學任務,提前做好準備,介紹內容要講究藝術性,評估時尊重學生成果。但教師本身知識水平的高低、實踐能力的強弱、工作量的大小是決定模塊化教學成功的關鍵?!澳K化教學法”是師生通過共同實施一個個完整的“模塊”工作而進行的教學活動。模塊化教學不僅傳授給學生理論知識和操作技能,更重要的是培養(yǎng)他們的操作能力,這里的能力不僅僅是知識能力或專業(yè)能力,而是涵蓋了如何解決問題的能力:方法能力、接納新知識的能力以及與人協(xié)作和進行項目動作的社會能力等幾個方面。
“模塊化教學法”十分注重學生的主體性和生動性,注重在“做”中學,在“做”中積累經驗。通過一個個模塊的完成,學生學會查找資料,嘗試失敗,積累經驗,促使學生學會學習,促使學生從“要我學習”向“我要學習”轉變。模塊化教學法在調動學習積極性和主動性方面有較好的效果。采用以學生為中心的活動,知識是通過模塊的實踐而形成的,學生厭學的現(xiàn)象得到了改善,為了項目的實現(xiàn),學生要制定解決問題的方法,從而培養(yǎng)學生的創(chuàng)新精 1 神、認真負責的工作態(tài)度和一絲不茍的工作作風、小組活動還為團隊精神創(chuàng)造了有利條件。
我國職教界總結出了相對適合我國國情的“寬基礎、活模塊”教育模式。所謂“寬基礎、活模塊”教育模式,就是從以人為本、全面育人的教育理念出發(fā),根據(jù)正規(guī)全日制職業(yè)教育的培養(yǎng)要求,通過模塊課程間靈活合理的搭配,首先培養(yǎng)學生寬泛的基礎人文素質、基礎從業(yè)能力,進而培養(yǎng)其合格的專門職業(yè)能力。
(二)模塊式(Modules)教學模式
模塊式(Modules)教學模式,指以就業(yè)為導向,根據(jù)就業(yè)崗位的任職要求和在職業(yè)領域(生涯)可持續(xù)發(fā)展的要求,解構教學內容,按認知規(guī)律和能力本位導向重構課程,形成模塊化的課程體系,并在教學運行中,對教學方法、師資隊伍建設、實習實訓基地建設、考核考評等方面全面進行改革和創(chuàng)新的一種教學模式。
模塊化教學模式以“MES”和“CBE”兩種流派比較具有代表性。我國對模塊化教學的研究和實踐早于“項目化”教學,大概從上世紀90年代已經開始進行探索。
MES(Modules of Employable Skills,模塊式技能培訓),是20世紀70年代初由國際勞工組織研究開發(fā)出來的以現(xiàn)場教學為主,以技能培訓為核心的一種教學模式。它是以崗位任務為依據(jù)確定模塊,以從事某種職業(yè)的實際崗位工作的完成程序為主線,可稱之為“任務模塊”。CBE(Competency Based Education,能力本位教育),主要以加拿大、美國等為代表。它是以執(zhí)行能力為依據(jù)確定模塊,以從事某種職業(yè)應當具備的認知能力和活動能力為主線,可稱之為“能力模塊”。
兩種流派的共性是都強調實用性和能力化。其區(qū)別是CBE是從職業(yè)普遍規(guī)律和需求出發(fā),側重于職業(yè)基礎通用能力;MES是從職業(yè)具體崗位工作規(guī)范出發(fā),側重于職業(yè)崗位工作能力。
模塊式教學模式的核心是課程的模塊化。課程模塊化包括了四個方面的內容,一是模塊的搭建,課程模塊是一個個項目化的學習單元,它把實踐知識、理論知識與實際運用用情景有機結合起來,是學習領域的具體化,一門模塊課程可以設計為若干個模塊,一個模塊又可以分為若干項目,項目之間,模塊之間,依據(jù)工作邏輯和工作任務的不同而有差異,可以通過多條路徑來選擇,如工作對象、產品、崗位、操作程序、系統(tǒng)和設備的解構等;二是模塊組合,模塊內容通過工作任務引領專業(yè)知識,每個模塊都是一個相對獨立而完整的學習單元和任務的組合,具有明確的學習目標,模塊之間的關系可以是平行的,也可以是遞進的;三是任務要求,主要是針對職業(yè)工作崗位過程所需要的單位任務,對需要采取的動作和行為進行描述,包括了實踐技術知識、技術理論知識及拓展知識的內容;四是技能訓練,明確訓練的項目名稱、工具、材料、場地及操作步驟通過這種動態(tài)學習方式完成階段性學習目標,形成綜合職業(yè)能力。模塊化課程的設計路線主要是對課程的解構和重構。一是基于職業(yè)崗位工作過程的進行課程解構。一方面明確專業(yè)培養(yǎng)目標,這種專業(yè)人才培養(yǎng)目標是具體化的,是有具體職業(yè)崗位或者崗位群的專業(yè)培養(yǎng)目標;另一方面對職業(yè)崗位進行深入的工作分析,確定了從事這個職業(yè)所要求的能力標準。這種課程解構的核心意義就在于它突破了以知識體系為核心的課程標準,建立了以職業(yè)能力為核心的課程標準。二是基于職業(yè)崗位能力導向進行課程重構。首先,對形成職業(yè)崗位能力所需要的知識、能力和素質進行清晰的梳理,確定了專業(yè)教學的基本內容;其次,根據(jù)專項能力來劃分課程模塊;再次,確定每個課程模塊的教學目標、內容體系、基本環(huán)境、教學組織;然后,根據(jù)模塊教學目標的要求設計有效的教學方法、教學過程、教學評價;最后,明確知識、能力、素質之間的關系,重點關注如何運用已有的理論知識、操作技能和素質來完成工作任務,從而形成在復雜工作情景中做出判斷和采取行動的能力。
二、模塊化教學的具體方式
主要有兩種方式。
第一種方式:(主要針對具體教學目標任務)
1、劃分小組。小組人數(shù)以3~6人為宜,推選組長。組與組之間大體上要平衡,控制小組成員的變量很多,如學習者的學習成績、知識結構、認知能力、認知方式等。教師必須對學生做深入細致的調查研究,如學生的思想表現(xiàn)、各科的入學成績:家庭背景、性格 愛好、乃至交朋結友等都應心中有數(shù)。一般采用互補方式,如成績好的學生與成績差的學生相搭配,既有利于差生的轉化,又有利于促進優(yōu)等生的靈活變通,即所謂“教學相長”;不同知識結構的學生相搭配,可以取長補短,相互借鑒;不同認知方式的學生相搭配,在各自發(fā)揮其優(yōu)勢的情況下,相互學習,使認知風格“相互強化”。
2、確定內容。一節(jié)課的教學目標、教學內容,需要通過完成一項或幾項具體的任務融合到教學過程中,從任務中引出教學目標,使學生產生學習知識的興趣.一項好的任務是完成教學目的的關鍵,要把知識、能力和素質三個維度的目標融入任務中,使任務有利于學生個性的發(fā)展.教師要認真研究課程標準,分析教材,確定教學的目標、內容、重點、難點、疑點,找準教學的切入點,要考慮學生的心理特征和興趣愛好,以便確定相應的任務。
3、布置任務。確定要完成的任務后,教師要向學生具體詳細地講清任務,充分調動學生學習的積極性。學生認清了自己要完成的任務后,如果覺得對此力所能及,便自然愿意去完成。
4、學生實施。向學生講明要做什么后,教師不能采取“放鴨式”不管。教學組織者、實施者是教師,教學的指揮、調度仍掌握在教師手中。還要讓學生知道怎么做,指導學生想辦法、找出路,特別是對有困難的學生要給予必要的指導,使每個學生都能順利完成任務。這一階段,教師是“指導者”學習伙伴“導航者”身份較 5 為明顯,學生在親切友好、和諧平等的氣氛中進行知識、技能的意義構建。
5、評價結果。學生完成任務之后,教師要展示其作品,進行討論、總結、評比,使教材內容得到進一步的強化。各小組學生代表要依次對完成的任務發(fā)表見解,其他小組提問或發(fā)表自己的看法,由老師或小組負責人進行總結,最后由老師評價.評價包括學生對知識的掌握程度、運用知識解決新問題的能力以及學生在活動中的表現(xiàn)等,注意多褒獎,少貶低,以激發(fā)學生進行下一輪學習的興趣。
第二種方式:(主要針對理論知識點學習)
1、情景設置。創(chuàng)設學生當前所學習的內容與現(xiàn)實情況基本相接近的情景環(huán)境,也就是說,把學生引入到需要通過某知識點來解決現(xiàn)實問題的情景。
2、操作示范。圍繞當前學習的知識點,以便于學生“知識遷移”的要求,選擇合適的小項目,并示范完成項目的過程。
3、獨立探索。讓學生獨立思考,對知識點進行理解,消化示范項目的解決要點,為解決練習項目打下基礎。
4、確定項目。小組通過社會調查,研究討論,并在教師的指導下確定具體的項目。
5、協(xié)作學習。開展小組交流、討論,組員分工協(xié)作,共同完 6 成工程項目。
6、學習評價。學生學習的效果直接由完成工程項目的情況來衡量,包括教師評價、學習小組評價和自評三部分。
三、模塊化教學法的特點與要求
模塊化教學是以現(xiàn)場教學為主,以技能培訓為核心的一種教學方法,具有靈活性、針對性、現(xiàn)實性、經濟性的特點。模塊化教學不但重視知識的傳授,而且更重視知識的應用。它克服了傳統(tǒng)教學方法中只注重教師講授,學生聽課,單項信息傳遞的教學方法。模塊化教學把學生作為教學的中心,強調學生在教學中的主觀能動作用,注意調動學生的學習自覺性和主動性,教師和學生之間的活動是互動式的。
(一)模塊化教學法的特點
1、以學生為中心的教學活動
模塊化教學中教師只是在開始利用很少的時間對任務的內容要求進行講解,大部分時間學生在教師的指導下完成任務,學生自己寫出任務計劃書,實施過程,檢查評估標準,并親手按計劃實施任務,整個教學過程是圍繞學生展開的,教師對學生搞不懂的地方進行指導。學生通過自身的操作活動,創(chuàng)造性得到充分發(fā)揮。
2、手腦并用獲取知識和技能
學生在操作過程中,遇到不懂的地方,教師講清學生應如何做,為什么這樣做。整個操作完成后,由學生自己總結出這樣做的理論依據(jù),然后對照課本看是否和書本上的結論一致,這樣在教師幫助下和個人探索中獲取理論知識,更能激發(fā)學生的學習動機,大大提高學習效率。
3、實現(xiàn)認知目標和操作目標的雙贏
認知目標的實現(xiàn)固然十分重要,但不是唯一的目標。在生產實踐中往往更加重視操作的熟練程度,因此認知目標、行為操作目標都是重要的學習目標,它們之間既是互相獨立的,彼此之間又保持著重要的聯(lián)系,是一個有機的整體,在具體操作過程中加速認知目標的實現(xiàn),做到認知目標和行為目標的雙贏是模塊化教學的一個重要特點。
4、師生之間實現(xiàn)了雙向信息的傳遞
模塊化教學的信息傳遞是雙向的。教師是講課和指導,學生是聽課和活動,教師可根據(jù)學生活動的成功與否獲得其接受教師信息的多少和深淺。教師還可以對那些掌握信息較少和較淺的學生采取措施,幫助他們補充信息,直至他們獲得完成工作任務所需要的信息。只有雙向傳遞的信息,只有不斷得到反饋的信息,才是真正有效率的信息傳遞。
5、教學過程中加大了學生的參與程度
模塊化教學表現(xiàn)在學生必須獨立地完成一項又一項的工作任務,這些工作任務按由淺到深的順序設計,使學生提高了學習的興趣。學生參與程度的提高,使學生從一開始的要我學逐步變成我要學。
6、最高境界的激勵方法
模塊化教學激勵的手段完全是內在的,而不是外在的,是學生在完成一個任務之后發(fā)自內心的喜悅,是學生從不會到會的心理感受,當學生從不會做一件事到經過努力之后會做一件事,成功的喜悅往往是無法用語言來表達的。再有,任務實施成功與否的評判標準是看任務實施的過程,而不是去看結果,這就完全激發(fā)了學生學習熱情,提高了他們的自信心。
(二)模塊化教學對教師的要求
模塊化教學的實施過程可以說從根本上改變了教師一統(tǒng)課堂的局面,使學生和教師共同參與教學,所以一堂課的成功與否既取決于學生,又取決于教師。模塊化教學的實施需要教師和學生雙方的共同努力。教師從知識的傳授者成為一個咨詢者或者指導者,這樣,對教師的要求反而提高了。
模塊化教學對教師提出了全新的要求。教師并不把知識傳授作為其唯一的任務,而主要是準備教學情境、構筑學習9 氛圍、組織和引導教學過程。這就要求在任務實施的過程中教師做到以下幾點:
1、精選教學任務。一個教學任務就是一節(jié)課或幾節(jié)課的教學目標、教學內容,通過完成一項或幾項具體的任務來完成教學目標,從任務中引出教學目標,使學生產生學習知識的興趣。一項好的任務要把知識、能力與素質三個維度的目標融入任務中,使任務有利于學生個性創(chuàng)新思維能力的發(fā)展。
2、課前熟悉任務內容,對其進行深入研究,并準備好任務討論可能涉及到的有關知識。
3、介紹任務內容要講究藝術性,吸引學生的注意力,激發(fā)學生學習的積極性和討論的熱情。
4、在任務內容討論評估時,教師要尊重學生的成果,切記不要在學生面前評論誰對誰錯,任務實施成功與否應看整個過程的進行情況。當然在學生交流任務實施結果的時候,老師也應該耐心地聽取,不能因為那個學生講得不好而有任何不尊重學生的行為,否則,學生就會失去信心,任務實施就會失敗。
總之,模塊化教學教學目的明確,聽、看、做、思、練五環(huán)相扣,充分調動學生學習的興趣,教學的過程由淺入深,注重學生基本技能和能力培養(yǎng)。知識點集中,內容遵循必需、夠用的原則,積極推行要讓學生懂得做什么、怎么做。作為 教師要積極學習先進的教學理念,更新觀念,積極推行課程改革。
第二篇:有效教學問題
有效教學問題
趙衛(wèi)
“有效教學”是新課改引進的一種現(xiàn)代教學理念。它要求歷史教師以“有效教學”理念為指導,提高課堂教學效益。就調查的結果來看,有效教學的困惑主要表現(xiàn)在以下方面:
一、重教學時間的投入,缺乏效益觀?!坝行Ы虒W”關注教學的效益,學生有沒有收獲。大多數(shù)老師理解為有沒有教完內容或教得是否認真,學生收獲了多少不得而知。所以大多數(shù)老師最大特點是舍不得,一是舍不得老教材知識點,上課不斷的加老教材的知識點,學生專門有一個筆記本拼命的記。如《新中國的成立》一目,新教材只有新政協(xié)的召開和開國大典,以及新中國的歷史意義。老教材中鞏固政權的斗爭略去,但老師舍不得,又按老教材的體系去講解,理由是新教材知識點不足,不足以應付高考。二是新教材的內容舍不得,如,新教材《新民主主義革命崛起》一文,從五四運動到大革命的失敗,跨度之大,內容之多,是要進行重難點的取舍,但有的教師總認為講不透,學生不理解,考試不過關,就《五四運動》一目就講了20多分鐘,顯然完不成教學目標,教師自己也急,一節(jié)課下來學生不停的記筆記,補充舊教材的知識,學得很辛苦。
二、理論性較強,輕視能力,遠離學生生活。歷史教學要貼近學生實際,貼近學生的生活,讓學生能運用歷史知識來解決生活中的有關問題,切身體會到所學知識是有用的,可以激發(fā)學生學習歷史興趣。而在實際的教學中,學生大部分課堂教學都在學習基礎歷史知識,理論性較強,與學生的生活無關,與學生的體驗無關,只與考試有關。忽略了學生情感、態(tài)度、價值觀的培養(yǎng)。高三下來的教師,從高一就進行高考的培養(yǎng),培養(yǎng)名校的學生,追求名利,高一就把高三的一輪復習知識拉入高一教學的內容,學生有專門記筆記的本子,都是高考的大問題,學生記得滿滿的。高二分文理科,在特尖班還會出現(xiàn)文科教師和理科教師搶奪尖子生的問題,理科教師勸全班倒數(shù)十五名的學生去讀文科,成績好學生都上理科,文科老師勸好學生上理科,這關系到一個教師,尤其是班主任的名譽。
三、“雙主教學”的疑惑?!墩n程標準》要求:“學習應激發(fā)學生的學習興趣,注重培養(yǎng)學生自主學習的意識和習慣,為學生創(chuàng)設良好的自主學習情境,尊重學生的個體差異,鼓勵學生選擇適合自己的學習方式。”(《課程標準》)但在實際的教學中卻出現(xiàn)了理解偏差,以學生為主體,就是教師不講課,學生自己學。結果是學生非常的忙碌,有自主無探究,有小組無合作,有討論無思考,最后課堂亂成一鍋粥。所以,學生往往拿不出什么結果或結論,感到非常茫然。如,老師在組織學生討論抗日戰(zhàn)爭勝利的原因時,學生剛討論了一會兒,就要求學生停止討論,還未深入開展,教師就草草收場。因此,放棄教師的主導地位,課堂教學就會流于形式。
四、集體備課形式化,教案與教學相脫節(jié)
集體備課即大家統(tǒng)一制定教學目標。實際上集體備課中只是幾個老師在查資料,做課件,整理學案,大多數(shù)老師是“拿來主義”,集體備課形式化現(xiàn)象嚴重。教師對于設計好的教學設計,走上課堂卻都拋在了腦后,教師一味強調知識的傳授,強調高考的考點,忽視過程與方法、能力的培養(yǎng),受教學經驗的支配,出現(xiàn)很大的隨意性。如某位教師在講授《抗日戰(zhàn)爭》時,教案目標有一條是這么設計的:探討抗日戰(zhàn)爭在世界史的地位,體會中國為反法西斯戰(zhàn)爭做出的貢獻。但一節(jié)課老師都在講日本的罪行和中國的抗戰(zhàn),絲毫沒有提及到這個教學目標。
第五,教學手段現(xiàn)代化,教學內容“換湯不換藥”。
歷史學科不是對死尸的臨摹,而是對生命力的鑒賞。現(xiàn)代科技手段,更好的賦予歷史學科新的生命力。它能協(xié)助歷史教師在課堂內外取得最佳的教學效果,但畢竟只是教學的輔助手段。因此,不能過分依賴現(xiàn)代教學設備,課一上完,學生由于缺少了動手寫、動腦想這一重要過程,因而課堂授課效果會大大削弱。在調查中發(fā)現(xiàn),教師制作的課件存在許多問題,主要是:資料過多,企圖用課件包辦一切的現(xiàn)象,缺少精心的取舍,學生一節(jié)課都在看,感覺疲勞;制作課件的技術過于簡單,課件枯燥無味,難以調動學生的積極性,反而成為學生睡覺的借口——眼睛疲勞;課件的教學內容不是過于簡單就是過于復雜,這兩種極端的傾向都不利于教學。科科用課件,節(jié)節(jié)課用課件,一天八節(jié)課,學生疲憊不堪。
第六,課堂評價單一化。
新課改實行學分制,對學生而言,平時的40分是課堂評價的有利的工具。教師從上課的提問情況,考勤,交作業(yè)的情況,違紀情況等都有嚴格規(guī)定,動不動就是“我扣你一分”,這也成為教師約束學生學習的法寶,因為新疆學生的特點就是自主性極差?!胺址址謱W生的命根”,如此實行,出現(xiàn)了兩極現(xiàn)象,學生要么重視,要么置之不理。在給學分時,等級的劃分仍是以成績?yōu)橹?。平時的40分的考核只是參考用以決定這個學生的去留。對教師而言,追求分數(shù)是與新課改相違背的;不追求分數(shù),學生成績不理想,領導、家長就會對教師質疑,因而讓歷史教師陷入尷尬的兩難處境。成也分數(shù),敗也分數(shù),歷史教師感到極度迷惘。究竟作業(yè)分配這40分,才能使分數(shù)真正體現(xiàn)學生的真實水平?這是個問題。
第七、強調“基礎知識”,創(chuàng)新談何而來 教學目標分為知識與能力、過程與方法、情感態(tài)度與價值觀三大領域,但教師似乎只對認知領域情有獨鐘。有些教師認為只要有高考存在,沒有基礎知識充實的課程只是一具骷髏,一切以考試為中心。創(chuàng)新,更是紙上談兵。吳永軍教授在《我們究竟需要什么樣的基礎》一文中指出:“當前各科教學中要培養(yǎng)學生的創(chuàng)新精神和實踐能力,必須堅決摒棄過去那種死記硬背、機械訓練而得到的僵硬的毫無價值的基礎。”所以,基礎知識是創(chuàng)新的前提和基礎,沒有基礎講創(chuàng)新無異于緣木求魚,基礎教育課堂教學是學生學會學習的主戰(zhàn)場,教師要通過課堂教學這個主要渠道,教學生學會學習,使學生的創(chuàng)新能力得到明顯的提升。
第八、自主學習不實際,學生學習方式難轉變。新課改為學生提供了自主學習的空間,由學生自己選擇學習的目標、內容、方式,教師只給予必要的指導,而不包攬學生的一切。但多數(shù)學生“懶得問”“不敢問” “不質疑”,就等老師解決一切問題,“啟而不發(fā)”、“啟而亂發(fā)”,自己“不走路”,依賴心理強。教師不僅要教學生“學會”,更要教學生“會學”。如,上課一提問,只要是書上找不到,學生要么就靜靜坐著不思考,要么就是胡亂說一通;讓學生合作探究問題,學生象征性的翻翻書,然后學生就會把書拋到腦后,相互閑聊—“情人節(jié)你收到幾朵玫瑰花”等,回答問題也是照書念;學生不關注教學。激發(fā)學生勤于思考,善于思考的能力,讓學生充分發(fā)揮自己的創(chuàng)造力成為一大難題。
第三篇:教學計劃編制問題
目 錄 課題需求描述..........................................2 1.1 教學計劃編制問題..................................2 1.2 進制轉換..........................................2 2 總體功能與數(shù)據(jù)結構設計.................................3 2.1 總體功能結構......................................3 2.2 數(shù)據(jù)結構設計......................................4 3 算法設計和程序設計....................................6 3.1 教學計劃編制問題..................................6 3.2 進制轉換問題......................................9 4 調試與測試...........................................23 4.1 教學計劃編制問題調試結果.........................23 4.2 進制轉換問題調試結果.............................25 5 設計總結.............................................27 6 程序代碼.............................................29 課題需求描述
1.1 教學計劃編制問題
大學的每個專業(yè)都要制訂教學計劃。假設任何專業(yè)都有固定的學習年限,每學年含兩學期,每學期的時間長度和學分上限均相等。每個專業(yè)開設的課程都是確定的,而且課程在開設時間的安排必須滿足先修關系。每門課程有哪些先修課程是確定的,可以有任意多門,也可以沒有。每門課恰好占一個學期。在這樣的前提下設計一個教學計劃編制程序。通過輸入實際的課程及先后關系。結合每學期的學分及課程數(shù),制定好學習計劃。在輸入相關數(shù)據(jù)后,程序會安排好每學期的課程。
1.2 進制轉換
進制數(shù)制是人們利用符號進行計數(shù)的科學方法。數(shù)制有很多種,在計算機中常用的數(shù)制有:十進制,二進制,八進制和十六進制。十六進制數(shù)有兩個基本特點:它由十六個字符0~9以及A,B,C,D,E,F組成(它們分別表示十進制0~15),十六進制數(shù)運算規(guī)律逢十六進一。
要求:(1)輸入一個十進制數(shù)N,將它轉換成R進制數(shù)輸出,并可以進行你轉換。
(2)輸入數(shù)據(jù)包含多個測試實例,每個測試實例包含兩個整數(shù)N(32位整數(shù))和R(2<=R<=16)。
(3)為每個測試實例輸出轉換后的數(shù),每個輸出占一行。如果R大于10,則對應的數(shù)字規(guī)則參考16進制(比如,10用A表示,等等)??傮w功能與數(shù)據(jù)結構設計
1.教學計劃編制問題
根據(jù)問題描述及要求,可知設計中需要定義先修關系的AOV網圖中的頂點及弧邊的結構體,在運行結果中將圖的信息顯示出來,利用先修關系將課程排序,最后解決問題——輸出每學期的課程。
2.進制轉換問題
由于計算機只能識別二進制,所以當我們從鍵盤輸入其他進制數(shù)的時候,計算機內部的系統(tǒng)會利用自帶的程序代碼自動轉換成二進制,我們是學計算機的,所以我們需要弄懂這種機制轉換的原理并且能計算出來。
2.1 總體功能結構
2.1.1 教學計劃編制問題
教學計劃是學校保證教學質量和人才培養(yǎng)的關鍵,也是組織教學過程、安排教學過程、安排教學任務、確定教學編制的基本依據(jù)和課程安排的具體形式。是穩(wěn)定教學秩序、提高教學質量的重要保證。從教學計劃的設計、實施等方面,闡明了如何搞好教學管理,從而為提高教學質量提供保證。隨著教育改革的不斷深入和社會發(fā)展的需要,原舊的教學計劃在定位上的方向性偏差,已經不再適應社會的需求。因此,應重視教學計劃的改革和修訂工作,以確保教育教學質量,提高教育教學水平。教學計劃編制中的思路:一是明確培養(yǎng)目標;二是注重學科設置的整體性、統(tǒng)一性和靈活性、全面性;三是與學分制改革有機結合.教學計劃是高校實施常規(guī)教學活動的基本管理文檔,由于傳統(tǒng)的手工編制方式存在諸多弊端,開發(fā)基于Web應用程序形式的教學計劃編制系統(tǒng)具有很好的應用價值。使用C程序設計語言,研究開發(fā)教學計劃編制系統(tǒng)Web應用系統(tǒng)。
2.1.2 進制轉換問題
1.十進制數(shù)與非十進制數(shù)之間的轉換
(1)十進制數(shù)轉換成非十進制數(shù) 把一個十進制數(shù)轉換成非十進制數(shù)(基數(shù)記作R)分成兩步.整數(shù)部分轉換時采用“除R取余法”;小數(shù)部分轉換時采用“乘R取整法”。
(2)非十進制數(shù)轉換成十進制數(shù) 非十進制數(shù)(基數(shù)記作R,第j個數(shù)位的位權記作Rj)轉換成十進制數(shù)的方法:按權展開求其和。
2.非十進制數(shù)之間的轉換
(1)二進制數(shù)與八進制數(shù)之間的轉換 ①二進制數(shù)轉換成八進制數(shù)的方法.以小數(shù)點分界,整數(shù)部分自右向左、小數(shù)部分自左向右,每三位一組,不足三位時,整數(shù)部分在高位左邊補0,小數(shù)部分在低位右邊補0,然后寫出對應的八進制數(shù)碼。②八進制數(shù)轉換成二進制數(shù)的方法:用八進制數(shù)碼對應的三位二進制數(shù)代替八進制數(shù)碼本身即可。
(2)二進制數(shù)與十六進制數(shù)之間的轉換 ①二進制數(shù)轉換成十六進制數(shù)的方法:以小數(shù)點分界,整數(shù)部分自右向左、小數(shù)部分自左向右,每四位一組,不足四位時,整數(shù)部分在高位左邊補0,小數(shù)部分在低位右邊補0,然后寫出對應的十六進制數(shù)碼。②十六進制數(shù)轉換成二進制數(shù)的方法:用十六進制數(shù)碼對應的四位二進制數(shù)代替十六進制數(shù)碼本身即可。
2.2 數(shù)據(jù)結構設計
2.2.1 教學計劃編制問題
LocateVex():圖的鄰接表存儲的基本操作 CreateGraph():構造生成樹 Display():輸出圖的鄰接矩陣 FindInDegree():求頂點的入度 InitStack():構造一個空棧
ClearStack():清空棧 StackEmpty():判斷是否為空棧 Pop():出棧 Push():入棧
TopologicalSort():輸出G頂點的拓撲排序結果 2.2.2 進制轉換問題
void D_B(): 十進制轉換為二進制 void D_O(): 十進制轉換為八進制 void D_X(): 十進制轉換為十六進制 void B_D(): 二進制轉換為十進制 void B_O(): 二進制轉換為八進制 void B_X(): 二進制轉換為十六進制 void O_B(): 八進制轉換為二進制 void O_D(): 八進制轉換為十進制 void O_X(): 八進制轉換為十六進制 void X_B(): 十六進制轉換為二進制 void X_D(): 十六進制轉換為十進制 void X_O(): 十六進制轉換為八進制 算法設計和程序設計
3.1 教學計劃編制問題
3.1.1采用C語言定義相關的數(shù)據(jù)類型。
其中包括字符常量,整型,字符型,字符串型,typedef 定義的類型,結構體型,單鏈表節(jié)點類型,結構體數(shù)組。
3.1.2主要函數(shù)的流程圖
1.LocateVex():圖的鄰接表存儲的基本操作。由初始條件G存在,u和G中頂點有相同特征轉而進行判斷,若G中存在頂點u,則返回該頂點在圖中位置;否則返回-1。
2.CreateGraph():構造生成圖。采用鄰接表存儲結構,構造沒有相關信息的圖G(用一個函數(shù)構造種圖)。
3.Display():輸出圖的鄰接矩陣。采用循環(huán)設置輸出圖的鄰接矩陣。4.FindInDegree():求頂點的入度。
5.InitStack():構造一個空棧。6.ClearStack():清空棧。
7.StackEmpty():判斷棧是否為空。若棧S為空棧,則返回TRUE,否則返回FALSE。
8.Pop():出棧。若棧不空,則刪除S的棧頂元素,用e返回其值,并返回OK;否則返回ERROR。
9.Push():入棧。插入元素e為新的棧頂元素。
10.TopologicalSort():輸出G頂點的拓撲排序結果。有向圖G采用鄰接表存儲結構。若G無回路,則輸出G的頂點的一個拓撲序列并返回OK, 否則返回ERROR。
3.2 進制轉換問題
主要流程圖:
進制轉換菜單:
1.void D_B(): 十進制轉換為二進制
for(j=0;a!=0;j++){ p[j]=a%2;a=a/2;} printf(“n轉換后的數(shù)為:”);for(k=j-1;k>=0;k--){printf(“%d”,p[k]);} printf(“n”);
2.void D_O(): 十進制轉換為八進制
for(j=0;a!=0;j++){ p[j]=a%8;a=a/8;} printf(“n轉換后的數(shù)為:”);for(k=j-1;k>=0;k--){printf(“%d”,p[k]);} printf(“n”);
3.void D_X(): 十進制轉換為十六進制
for(j=0;a!=0;j++){p[j]=a%16;a=a/16;if(p[j]<10)p[j]+=48;else { switch(p[j]){ case 10: p[j]='A';break;case 11: p[j]='B';break;case 12: p[j]='C';break;case 13: p[j]='D';break;case 14: p[j]='E';break;case 15: p[j]='F';break;} }
十進制轉換為任意進制:
4.void B_D(): 二進制轉換為十進制
for(i=1;a!=0;i*=2){
if(a%10>1)
{s=1;break;}
else
{result+=(a%10)*i;a=a/10;} } if(s==1)
printf(“您的輸入有誤!請重新輸入n”);else printf(“n轉換后的數(shù)為:%dn”,result);5.void O_D(): 八進制轉換為十進制
for(i=1;a!=0;i*=8){ if(a%10>7){ s=1;break;} else {result+=(a%10)*i;a=a/10;} } if(s==1)printf(“您的輸入有誤!請重新輸入n”);else { printf(“n轉換后的數(shù)為:%dn”,result);}
任意進制轉換為十進制:
6.void B_O(): 二進制轉換為八進制
for(i=1;a!=0;i*=2){if(a%10>1){s=1;break;}
else{result+=(a%10)*i;a=a/10;} } for(j=0;result!=0;j++){p[j]=result%8;result=result/8;} if(s==1)
printf(“您的輸入有誤!請重新輸入n”);else
{printf(“n轉換后的數(shù)為:”);
for(k=j-1;k>=0;k--)
{printf(“%d”,p[k]);}
printf(“n”);}
7.void B_X(): 二進制轉換為十六進制
for(i=1;a!=0;i*=2){if(a%10>1){s=1;break;} else{result+=(a%10)*i;a=a/10;} } for(j=0;result!=0;j++){p[j]=result%16;result=result/16;if(p[j]>10){switch(p[j]){ case 10: p[j]='A';break;case 11: p[j]='B';break;case 12: p[j]='C';break;
case 13: p[j]='D';break;case 14: p[j]='E';break;case 15: p[j]='F';break;} } else p[j]+=48;} if(s==1)printf(“您的輸入有誤!請重新輸入n”);else { printf(“n轉換后的數(shù)為:”);for(k=j-1;k>=0;k--){printf(“%c”,p[k]);} printf(“n”);}
8.void O_B(): 八進制轉換為二進制
for(i=1;a!=0;i*=8){if(a%10>7){ s=1;break;} else {result+=(a%10)*i;a=a/10;} } for(j=0;result!=0;j++){p[j]=result%2;result=result/2;} if(s==1)printf(“您的輸入有誤!請重新輸入n”);
else {printf(“n轉換后的數(shù)為:”);for(k=j-1;k>=0;k--){printf(“%d”,p[k]);} printf(“n”);}
9.void O_D(): 八進制轉換為十進制
for(i=1;a!=0;i*=8){ if(a%10>7){ s=1;break;} else {result+=(a%10)*i;a=a/10;} } if(s==1)printf(“您的輸入有誤!請重新輸入n”);else { printf(“n轉換后的數(shù)為:%dn”,result);}
10.void X_D(): 十六進制轉換為十進制
for(i=0;i
case 'A': b[i]=10;break;case 'B': b[i]=11;break;case 'C': b[i]=12;break;case 'D': b[i]=13;break;case 'E': b[i]=14;break;case 'F': b[i]=15;break;case 'a': b[i]=10;break;case 'b': b[i]=11;break;case 'c': b[i]=12;break;case 'd': b[i]=13;break;case 'e': b[i]=14;break;case 'f': b[i]=15;break;default: s=1;} }
11.void O_X(): 八進制轉換為十六進制
for(i=1;a!=0;i*=8){if(a%10>7){s=1;break;} else{result+=(a%10)*i;a=a/10;} } for(j=0;result!=0;j++){p[j]=result%16;result=result/16;if(p[j]<10)p[j]+=48;else { switch(p[j]){
case 10: p[j]='A';break;case 11: p[j]='B';break;case 12: p[j]='C';break;case 13: p[j]='D';break;case 14: p[j]='E';break;case 15: p[j]='F';break;} }
12.void X_B(): 十六進制轉換為二進制
for(i=0;i
default: s=1;} }
13.void X_D(): 十六進制轉換為十進制
for(i=0;i
14.void X_O(): 十六進制轉換為八進制
for(i=0;i
其他進制間的轉換: 調試與測試
4.1 教學計劃編制問題調試結果
輸入學期總數(shù),輸入學期學分的上限,輸入教學計劃的課程數(shù),輸入先修關系的邊數(shù),輸入課程的代表值,輸入課程的學分值(如圖)
輸入每條弧的弧尾和弧頭(如圖):
顯示的課程計劃如下:
4.2 進制轉換問題調試結果
進入系統(tǒng)時的界面:
二進制轉換為八進制:
十進制轉換為十六進制:
十六進制轉換為十進制: 設計總結 我的收獲
雖然在高中我們已經學了C語言,大一我們已經學習了C++語言,但是,直到本期我們才開設了數(shù)據(jù)結構這一門課程。這門課程讓我們對程序的原理有了系統(tǒng)的認識。對以往模糊的經驗,起了總結提升的作用。在學習了這門課程后,我們進行了一個星期的課程設計,以實踐我們的學習內容。
在這次課程設計中,我被分配到了教學計劃課程編制問題,開始感覺很難,因為我從未編寫過如此復雜的程序。在多方查找資料并參考類似程序后,我大體將程序的構架描繪好了。一邊對照著網上的資料,一邊對程序進行修改補充,然后根據(jù)擬好的大綱進行編制。期間,我與其它同學進行了討論和探究,對程序的細節(jié)問題和應用方面進行了探索,并解決了主要的問題,于是便著手寫具體的程序。
由于老師要求我們編寫600多行的代碼,但是教學計劃課程編制問題的代碼不足,所以我又選擇了一個課題——進制轉換問題,我會選擇這個課題是因為我覺得作為學計算機的我,應該要能更好的了解關于計算機方面的知識。
這次實驗,我進行了大量的資料查閱,對所學知識進行復習。通過這些努力,我對算法有了更深入的理解,對編程的步驟,有了具體的體會。通過和同學的廣泛交流,我體會到了合作的必要性及合作的優(yōu)勢。更重要的是,這個課題完全脫胎于實際問題,讓我對計算機行業(yè),充滿了信心和自豪。
以往我們學的計算機知識一般停留在理論上,這讓我們不太理解計算機的應用和前景,而較少注重我們對算法的實踐鍛煉。而這一次的實習既需要我們去聯(lián)系理論,又需要我們去實踐方法,很多東西看上去都學過,但是和實際聯(lián)系才知道變通的艱難。紙上得來終覺淺,這是我這次實習的最大收獲。這次的實驗讓我們知道該如何跨過實際和理論之間的鴻溝。
存在的問題
由于程序十分的復雜,遇到了很多常見的語法錯誤,及邏輯錯誤。這需要我們不斷的調試分析。符號的格式之類,指針的用法,判斷輸入輸出的條件都是十分容易出錯的地方。在逐條排除,程序終于得以完成。這讓我明白了,解決問題,要細心認真,集思廣益,這樣才能把問題解決。
雖然程序變出來了,但是我大量借鑒了別人的程序,中間有很多的程序段都是一知半解,雖然查閱了資料,但是畢竟不是自己思考出來的程序,又無法當面詢問寫出編程的人,所以對部分程序還存在問題,我會繼續(xù)查詢資料將目前不懂的內容弄清楚。
參考資料:數(shù)據(jù)結構(C++語言描述)吉根林 陳波主編 C++語言教材 程序代碼
教學計劃編制問題:
#include // exit()#include #define MAX_VERTEX_NUM 100 typedef enum{DG}GraphKind;/* {有向圖,有向網,無向圖,無向網} */ typedef struct ArcNode { int adjvex;/* 該弧所指向的頂點的位置*/ struct ArcNode *nextarc;/* 指向下一條弧的指針*/ InfoType *info;/* 網的權值指針)*/ }ArcNode;/* 表結點*/ typedef struct { VertexType data;/* 頂點信息*/ ArcNode *firstarc;/* 第一個表結點的地址,指向第一條依附該頂點的弧的指針*/ }VNode,AdjList[MAX_VERTEX_NUM];/* 頭結點*/ typedef struct { AdjList vertices,verticestwo;int vexnum,arcnum;/* 圖的當前頂點數(shù)和弧數(shù)*/ int kind;/* 圖的種類標志*/ }ALGraph;/* 圖的鄰接表存儲的基本操作*/ int LocateVex(ALGraph G,VertexType u){ /* 初始條件: 圖G存在,u和G中頂點有相同特征*/ /* 操作結果: 若G中存在頂點u,則返回該頂點在圖中位置;否則返回-1 */ int i;for(i=0;i { /* 采用鄰接表存儲結構,構造沒有相關信息的圖G(用一個函數(shù)構造種圖)*/ int i,j,k;VertexType va,vb;ArcNode *p;printf(“請輸入教學計劃的課程數(shù): ”);scanf(“%d”,&(*G).vexnum);printf(“請輸入拓撲排序所形成的課程先修關系的邊數(shù): ”);scanf(“%d”,&(*G).arcnum);printf(“請輸入%d個課程的代表值(<%d個字符):n”,(*G).vexnum,MAX_NAME);for(i=0;i<(*G).vexnum;++i)/* 構造頂點向量*/ { } printf(“請輸入%d個課程的學分值(<%d個字符):n”,(*G).vexnum,MAX_NAME);for(i=0;i<(*G).vexnum;++i)/* 構造頂點向量*/ { } printf(“請順序輸入每條弧(邊)的弧尾和弧頭(以空格作為間隔):n”);for(k=0;k<(*G).arcnum;++k)/* 構造表結點鏈表*/ { } scanf(“%s”,(*G).vertices[i].data);(*G).vertices[i].firstarc=NULL;scanf(“%s”,(*G).verticestwo[i].data);scanf(“%s%s”,va,vb);i=LocateVex(*G,va);/* 弧尾*/ j=LocateVex(*G,vb);/* 弧頭*/ p=(ArcNode*)malloc(sizeof(ArcNode));p->adjvex=j;p->info=NULL;/* 圖*/ p->nextarc=(*G).vertices[i].firstarc;/* 插在表頭*/(*G).vertices[i].firstarc=p; return OK;} void Display(ALGraph G){ /* 輸出圖的鄰接矩陣G */ int i;ArcNode *p;switch(G.kind){ case DG: printf(“有向圖n”);} printf(“%d個頂點:n”,G.vexnum);for(i=0;i } printf(“n”);} } void FindInDegree(ALGraph G,int indegree[]){ /* 求頂點的入度,算法調用*/ int i;ArcNode *p;for(i=0;i printf(“%s→%s ”,G.vertices[i].data,G.vertices[p->adjvex].data);p=p->nextarc; indegree[i]=0;/* 賦初值*/ for(i=0;i } } } typedef int SElemType;/* 棧類型*/ /*棧的順序存儲表示*/ #define STACK_INIT_SIZE 10 /* 存儲空間初始分配量*/ #define STACKINCREMENT 2 /* 存儲空間分配增量*/ typedef struct SqStack { SElemType *base;/* 在棧構造之前和銷毀之后,base的值為NULL */ SElemType *top;/* 棧頂指針*/ int stacksize;/* 當前已分配的存儲空間,以元素為單位*/ }SqStack;/* 順序棧*/ /* 順序棧的基本操作*/ Status InitStack(SqStack *S){ /* 構造一個空棧S */(*S).base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));if(!(*S).base)exit(OVERFLOW);/* 存儲分配失敗*/(*S).top=(*S).base;(*S).stacksize=STACK_INIT_SIZE; indegree[p->adjvex]++;p=p->nextarc; return OK;} void ClearStack(SqStack *S)//清空棧的操作 { S->top=S->base;} Status StackEmpty(SqStack S){ /* 若棧S為空棧,則返回TRUE,否則返回FALSE */ } Status Pop(SqStack *S,SElemType *e){ /* 若棧不空,則刪除S的棧頂元素,用e返回其值,并返回OK;否則返回ERROR */ if((*S).top==(*S).base)return ERROR;if(S.top==S.base)else return FALSE;return TRUE;*e=*--(*S).top;return OK;} Status Push(SqStack *S,SElemType e){ /* 插入元素e為新的棧頂元素*/ if((*S).top-(*S).base>=(*S).stacksize)/* 棧滿,追加存儲空間*/ {(*S).base=(SElemType*)realloc((*S).base,((*S).stacksize+STACKINCREMENT)*sizeof(SElemType));if(!(*S).base)exit(OVERFLOW);/* 存儲分配失敗*/(*S).top=(*S).base+(*S).stacksize;(*S).stacksize+=STACKINCREMENT; } *((*S).top)++=e;return OK;} typedef int pathone[MAXCLASS];typedef int pathtwo[MAXCLASS];Status TopologicalSort(ALGraph G){ /* 有向圖G采用鄰接表存儲結構。若G無回路,則輸出G的頂點的一個拓撲序列并返回OK, */ /* 否則返回ERROR。*/ int i,k,j=0,count,indegree[MAX_VERTEX_NUM];bool has=false;SqStack S;pathone a;pathtwo b;ArcNode *p;FindInDegree(G,indegree);/* 對各頂點求入度indegree[0..vernum-1] */ InitStack(&S);/* 初始化棧*/ for(i=0;i Pop(&S,&i);a[i]=*G.vertices[i].data; b[i]=*G.verticestwo[i].data;printf(“課程%s→學分%s ”,G.vertices[i].data,G.verticestwo[i].data);/* 輸出i號頂點并計數(shù)*/ ++count;for(p=G.vertices[i].firstarc;p;p=p->nextarc){ /* 對i號頂點的每個鄰接點的入度減*/ k=p->adjvex;if(!(--indegree[k]))/* 若入度減為,則入棧*/ { Push(&S,k);//cout<<*G.vertices[i].data< 課 程 計 劃===============================”< 如 下 while(qq<=xqzs){ int result[20];int rtop=0;int nn=0;//int ccount=0;// 學期學分計算 xxf=0;for(i=0;i } if(0==indegree[i]){ } Push(&S,i);while(!StackEmpty(S)){ int bb;Pop(&S,&i);bb=atoi(G.verticestwo[i].data);xxf=xxf+bb;if(xxf>xfsx){ } indegree[i]--;for(p=G.vertices[i].firstarc;p;p=p->nextarc){ /* 對i號頂點的每個鄰接點的入度減*/ k=p->adjvex;indegree[k]--; break; /* if(!(--indegree[k]))若入度減為,則入棧 { Push(&S,k);}*/ } result[rtop]=i;rtop++;} cout<<“第”< } cout<<“課程”< ALGraph f;printf(“以下為教學計劃編制問題的求解過程:n”);printf(“請輸入學期總數(shù):”);scanf(“%d”,&xqzs);printf(“請輸入學期的學分上限:”);scanf(“%d”,&xfsx);CreateGraph(&f);Display(f);TopologicalSort(f); 進制轉換問題: #include printf(“+===============+n”);printf(“| 歡 迎 使 用 進 制 轉 換 程 序 |n”); printf(“+===============+n”); printf(“ 本 版 本 只 做 正 整 數(shù) 的 進 制 轉 換!”);do { q=0;//fflush(stdin);printf(“n請選擇需要被轉換的進制:n1、二進制n2、八進制n3、十進制n4、十六進制n0、退出n”);printf(“請輸入0~4:”);scanf(“%d”,&i);switch(i){ case 1: printf(“n請選擇轉換后的進制:n1、二進制n2、八進制n3、十進制n4、十六進制n0、退出n”);printf(“請輸入0~4:”);scanf(“%d”,&j);switch(j){ case 1: printf(“n同進制之間不用轉化!n”);q=1;break;case 2: printf(“n請輸入您想要轉化的數(shù):”);scanf(“%d”,&k);B_O(k);q=1;break;case 3: printf(“n請輸入您想要轉化的數(shù):”);scanf(“%d”,&k);B_D(k);q=1;break;case 4: printf(“n請輸入您想要轉化的數(shù):”);scanf(“%d”,&k);B_X(k);q=1;break;case 0: printf(“謝謝使用!”);} break;case 2: printf(“n請選擇轉換后的進制:n1、二進制n2、八進制n3、十進制n4、十六進制n0、退出n”);printf(“請輸入0~4:”);scanf(“%d”,&j);switch(j){ case 2: printf(“n同進制之間不用轉化!n”);q=1;break;case 1: printf(“n請輸入您想要轉化的數(shù):”);scanf(“%d”,&k);O_B(k);q=1;break;case 3: printf(“n請輸入您想要轉化的數(shù):”);scanf(“%d”,&k);O_D(k);q=1;break;case 4: printf(“n請輸入您想要轉化的數(shù):”);scanf(“%d”,&k);O_X(k);q=1;break;case 0: printf(“謝謝使用!”);} break;case 3: printf(“n請選擇轉換后的進制:n1、二進制n2、八進制n3、十進制n4、十六進制n0、退出n”);printf(“請輸入0~4:”);scanf(“%d”,&j);switch(j){ case 3: printf(“n同進制之間不用轉化!n”);q=1;break;case 1: printf(“n請輸入您想要轉化的數(shù):”);scanf(“%d”,&k);D_B(k);q=1;break; case 2: printf(“n請輸入您想要轉化的數(shù):”);scanf(“%d”,&k);D_O(k);q=1;break;case 4: printf(“n請輸入您想要轉化的數(shù):”);scanf(“%d”,&k);D_X(k);q=1;break;case 0: printf(“謝謝使用!”);} break;case 4: printf(“n請選擇轉換后的進制:n1、二進制n2、八進制n3、十進制n4、十六進制n0、退出n”);printf(“請輸入0~4:”);scanf(“%d”,&j);switch(j){ case 4: printf(“n同進制之間不用轉化!n”);q=1;break;case 1: printf(“n請輸入您想要轉化的數(shù):”);fflush(stdin);gets(r);for(k=0;;k++){if(r[k]=='