第一篇:C語(yǔ)言程序設(shè)計(jì)教學(xué)研究論文
1以問題為導(dǎo)向的《C語(yǔ)言程序設(shè)計(jì)》的教學(xué)設(shè)計(jì)
(一《)C語(yǔ)言程序設(shè)計(jì)》的教學(xué)目標(biāo)
社會(huì)對(duì)于人才的需要,并不是要求他們只要學(xué)會(huì)理論知識(shí)就可以,各個(gè)單位對(duì)人才的要求更看重于他們的實(shí)踐能力,要求他們能夠把所學(xué)習(xí)過的知識(shí)轉(zhuǎn)化為動(dòng)手能力與實(shí)際解決問題的能力。因此,對(duì)于學(xué)生的《C語(yǔ)言程序設(shè)計(jì)》課程的教學(xué)只是進(jìn)行理論知識(shí)的教育是遠(yuǎn)遠(yuǎn)不夠的,還有提升學(xué)生的綜合能力。學(xué)生要達(dá)到的認(rèn)知類目標(biāo)包括:掌握C語(yǔ)言程序設(shè)計(jì)課程相關(guān)的基本概念;理解解決問題的基本技巧;理解標(biāo)記控制循環(huán)與計(jì)數(shù)控制循環(huán);把握程序性的知識(shí),并學(xué)會(huì)如何應(yīng)用。學(xué)生要達(dá)到的能力類的目標(biāo)包括:掌握C語(yǔ)言程序設(shè)計(jì)的基本技能,進(jìn)行程序計(jì)算;熟練運(yùn)用與、或、否命題,以此來解決實(shí)際中的程序問題;熟練運(yùn)用一些基本的邏輯運(yùn)算符;能夠使用break和continue程序控制語(yǔ)句;學(xué)會(huì)編寫基本字符模式下的簡(jiǎn)單程序;另外還有培養(yǎng)學(xué)生動(dòng)手實(shí)踐能力和與他人合作的能力。除此之外,還有培養(yǎng)學(xué)生學(xué)習(xí)C語(yǔ)言程序設(shè)計(jì)的興趣,養(yǎng)成學(xué)習(xí)工作中嚴(yán)謹(jǐn)、務(wù)真求實(shí)的良好態(tài)度,培養(yǎng)解決程序問題的開放性思維。
(二《)C語(yǔ)言程序設(shè)計(jì)》教學(xué)策略設(shè)計(jì)
對(duì)學(xué)生進(jìn)行C語(yǔ)言程序設(shè)計(jì)的教育,其最終目的就是要讓學(xué)生掌握這門課程,并且運(yùn)用到實(shí)際工作中,而教學(xué)策略的設(shè)計(jì),就是為了在最短的時(shí)間內(nèi),讓學(xué)生掌握更多的知識(shí),并且將其轉(zhuǎn)化為自身的實(shí)踐能力。(1《)C語(yǔ)言程序設(shè)計(jì)》的教學(xué)方法教學(xué)方法多種多樣,其中講授法、談話法、演示法、實(shí)踐法等最為常見。教師在選擇教學(xué)方法的時(shí)候,要充分考慮教學(xué)大綱的要求和教材中的內(nèi)容,還要考慮學(xué)生的學(xué)習(xí)情況與學(xué)習(xí)能力,以及現(xiàn)有的教學(xué)條件,從而選擇最適合教學(xué)工作的一種方法。同樣的教學(xué)方法,對(duì)于某一個(gè)班級(jí)的學(xué)生合適,對(duì)于另外一個(gè)班級(jí)也許就不適用,因?yàn)槊總€(gè)班的學(xué)習(xí)氛圍不同,同理,對(duì)于某一位學(xué)生教學(xué)方法很恰當(dāng),而對(duì)另外一個(gè)學(xué)生來說,可能就是阻礙學(xué)習(xí)的因素。因此,教師在教學(xué)過程中要對(duì)各個(gè)方面影響教學(xué)效果的因素進(jìn)行充分的考慮。對(duì)學(xué)生的教學(xué)工作,可以采取分組教學(xué)的形式,這種方法不但可以讓教師能夠更大程度上關(guān)注到每一位學(xué)生的學(xué)習(xí)情況,還能夠通過小組間學(xué)生相互幫助,分享交流學(xué)習(xí)經(jīng)驗(yàn),從而獲得更多提高成績(jī)的機(jī)會(huì)。另外,學(xué)生之間的交流要比學(xué)生與教師之間的交流更為順利,學(xué)生之間相互學(xué)習(xí)更容易發(fā)現(xiàn)自身的優(yōu)勢(shì)與不足之處,從而把自己的學(xué)習(xí)經(jīng)驗(yàn)分享給其他人,同時(shí)向其他同學(xué)學(xué)習(xí)自己沒有掌握的知識(shí)。小組教學(xué)還能夠增強(qiáng)學(xué)生的交流能力,加強(qiáng)學(xué)生之間的人際關(guān)系,培養(yǎng)學(xué)生的團(tuán)隊(duì)合作能力,從而提升學(xué)生的綜合素質(zhì)。(2《)C語(yǔ)言程序設(shè)計(jì)》的學(xué)習(xí)組織形式學(xué)習(xí)組織能力是指學(xué)生在學(xué)習(xí)的過程中,師生的共同活動(dòng)在程序、人員、時(shí)空關(guān)系上的組合形式。運(yùn)用適合學(xué)生的學(xué)習(xí)組織形式,有助于學(xué)生提高C語(yǔ)言程序設(shè)計(jì)學(xué)習(xí)的效率,同時(shí),還可以將一些高效率的學(xué)習(xí)方法、學(xué)習(xí)敬仰在學(xué)習(xí)組織形式中進(jìn)行運(yùn)用,由于《C語(yǔ)言程序設(shè)計(jì)》教學(xué)分為基礎(chǔ)知識(shí)與課程設(shè)計(jì)兩種基本形式,我們把以問題為導(dǎo)向的《C語(yǔ)言程序設(shè)計(jì)》教學(xué)模式下的學(xué)習(xí)組織形式也分為兩種類型。一種是課堂小組合作學(xué)習(xí)。在《C語(yǔ)言程序設(shè)計(jì)》所有課時(shí)中,基礎(chǔ)知識(shí)的課程占據(jù)了絕大多數(shù),教學(xué)地點(diǎn)可以選為網(wǎng)絡(luò)機(jī)房,以問題為導(dǎo)向的《C語(yǔ)言程序設(shè)計(jì)》有利于學(xué)生培養(yǎng)團(tuán)隊(duì)合作精神,提高彼此之間的交流能力,鼓勵(lì)學(xué)生在學(xué)習(xí)的過程中勇敢地提出問題回答問題,為學(xué)生營(yíng)造一種良好的學(xué)習(xí)氛圍。教師充分發(fā)揮自身的引導(dǎo)與輔助的作用,幫助學(xué)生發(fā)現(xiàn)問題,解決問題。另一種類型是課程設(shè)計(jì)探究學(xué)習(xí)。課程設(shè)計(jì)的時(shí)間一般比較短,在此期間,教師要通過合理的課程設(shè)計(jì)來為學(xué)生創(chuàng)造一個(gè)和諧的學(xué)習(xí)氛圍,師生之間、學(xué)生之間進(jìn)行交流,分享學(xué)習(xí)經(jīng)驗(yàn)與解決問題的方法,一方面可以增加學(xué)生彼此學(xué)習(xí)的機(jī)會(huì),另一方面也可以監(jiān)督學(xué)生完成自己的學(xué)習(xí)任務(wù)。(3)網(wǎng)絡(luò)環(huán)境下的問題導(dǎo)向教學(xué)模式網(wǎng)絡(luò)環(huán)境下的以問題為導(dǎo)向的《C語(yǔ)言程序設(shè)計(jì)》課程教學(xué)模式,則是利用網(wǎng)絡(luò)科技來輔助教師的教學(xué)活動(dòng),在這個(gè)教學(xué)過程中,教師是教學(xué)活動(dòng)中的引導(dǎo)者與輔助者,而學(xué)生才是學(xué)習(xí)的主體。教師為學(xué)生設(shè)計(jì)好學(xué)習(xí)任務(wù),明確每一位學(xué)生所要解決的問題,再對(duì)學(xué)生進(jìn)行合理的分組,讓學(xué)生充分利用網(wǎng)絡(luò)資源,收集對(duì)自己有利的信息,并且對(duì)信息進(jìn)行有效的篩選與整合。學(xué)生在尋求解決問題的過程中,能夠充分利用網(wǎng)絡(luò)環(huán)境的優(yōu)勢(shì),推動(dòng)以問題為導(dǎo)向的教學(xué)模式的實(shí)施,實(shí)現(xiàn)學(xué)生的自主學(xué)習(xí)、互動(dòng)合作、自覺約束自己的學(xué)習(xí)活動(dòng)。這樣,學(xué)生在整個(gè)學(xué)習(xí)過程中,不僅解決了教師提出的問題,還掌握了搜集、處理信息的能力,收獲成功之后的成就感,增強(qiáng)與他人之間的交流,提高自身的創(chuàng)造能力,真正做到增強(qiáng)自身的綜合素質(zhì)。
2以問題為導(dǎo)向的《C語(yǔ)言程序設(shè)計(jì)》的實(shí)踐
在《C語(yǔ)言程序設(shè)計(jì)》課程教學(xué)過程中,教師的教學(xué)工作與學(xué)生的學(xué)習(xí)活動(dòng)總是會(huì)暴露一些問題,如教師講解不到位,學(xué)生不能理解理論知識(shí),教師講課難以吸引學(xué)生的學(xué)習(xí)興趣,學(xué)生學(xué)習(xí)效率低下等問題。而以問題為導(dǎo)向的《C語(yǔ)言程序設(shè)計(jì)》教學(xué)模式,要如何進(jìn)行具體的實(shí)施,才能夠幫助學(xué)生掌握解決問題的技巧,加深對(duì)理論知識(shí)的理解呢?
(一)以問題為導(dǎo)向的教學(xué)模式中的課程設(shè)計(jì)
在《C語(yǔ)言程序設(shè)計(jì)》教學(xué)過程中,使用以問題為導(dǎo)向的教學(xué)模式,要明確本次課程的教學(xué)目標(biāo)是什么,所有的課程設(shè)計(jì)的大方向要以教學(xué)目標(biāo)為準(zhǔn)則,教學(xué)中要以人為本,以學(xué)生為中心,站在學(xué)生的立場(chǎng)上,充分考慮到學(xué)生的接受知識(shí)的能力與完成任務(wù)的可能性。另外還有考慮哪些教學(xué)設(shè)備可以供學(xué)生使用,做到最大程度利用現(xiàn)有的資源,幫助學(xué)生掌握更多的知識(shí)。同時(shí),對(duì)于學(xué)生的要求要合理,要求過高,學(xué)生難以完成目標(biāo),將會(huì)打擊學(xué)生的參與教學(xué)的積極性與信心,要求過低,將會(huì)浪費(fèi)時(shí)間,學(xué)生的實(shí)際能力達(dá)不到質(zhì)的飛躍。因此,課程的設(shè)計(jì)要實(shí)事求是,一切從實(shí)際出發(fā)。
(二)以問題為導(dǎo)向的教學(xué)模式實(shí)施的原則
1.遵循現(xiàn)代社會(huì)教育事業(yè)的發(fā)展規(guī)律,尊重學(xué)生的認(rèn)知規(guī)律,鼓勵(lì)學(xué)生運(yùn)用自己的優(yōu)勢(shì)進(jìn)行創(chuàng)新性的學(xué)習(xí)。2.堅(jiān)持以學(xué)生為主體、以學(xué)生為中心的原則,讓學(xué)生出于教學(xué)中的主體地位。營(yíng)造輕松的學(xué)習(xí)氛圍,讓每一位學(xué)生都積極大膽地參與到其中,敢于提出自己的疑問,敢于回答教師與其他學(xué)生提出的問題,積極參與具有挑戰(zhàn)性的任務(wù)。3.教師發(fā)揮自身的引導(dǎo)與輔助的作用,引導(dǎo)學(xué)生進(jìn)行有利于提高自身能力的學(xué)習(xí)活動(dòng),幫助學(xué)生解決難度較大的問題,并且監(jiān)督學(xué)生對(duì)問題作出總結(jié),從完成任務(wù)的過程中學(xué)到更多的知識(shí)。
(三)以問題為導(dǎo)向的教學(xué)模式應(yīng)當(dāng)注意的問題
1.教師要注意因材施教,每一位學(xué)生的學(xué)習(xí)能力不同,不能一概而論。針對(duì)不同學(xué)生提出不同要求,有助于學(xué)生揚(yáng)長(zhǎng)避短,提高學(xué)生的整體素質(zhì)。2.對(duì)學(xué)生的學(xué)習(xí)結(jié)果給予客觀公正的評(píng)價(jià),參與教學(xué)活動(dòng)積極性高及表現(xiàn)突出的學(xué)生要給予表?yè)P(yáng),進(jìn)一步調(diào)動(dòng)學(xué)生參與的積極性。3.注意課堂中的氣氛,輕松的學(xué)習(xí)氛圍不代表可以隨意討論與課程學(xué)習(xí)無關(guān)的內(nèi)容,教師要保證學(xué)生將時(shí)間都應(yīng)用到學(xué)習(xí)中來。
第二篇:程序設(shè)計(jì)課程教學(xué)研究
程序設(shè)計(jì)課程教學(xué)研究
摘要 學(xué)習(xí)計(jì)算機(jī)語(yǔ)言并進(jìn)行編程訓(xùn)練,是學(xué)生深入理解計(jì)算機(jī)的一個(gè)突破口,是熟悉計(jì)算機(jī)思維的一個(gè)重要途徑。但如何讓學(xué)生掌握程序設(shè)計(jì)的基本概念和基本方法,并能用一種程序設(shè)計(jì)語(yǔ)言編寫計(jì)算機(jī)程序,難度很大。同時(shí)也是計(jì)算機(jī)教學(xué)人員需要進(jìn)行教學(xué)研究的一個(gè)主要方面。
關(guān)鍵詞 教學(xué)模式;教師;學(xué)生;教學(xué)并重
中圖分類號(hào) G642 文獻(xiàn)標(biāo)識(shí)碼 A 文章編號(hào) 1671-489X(2008)016-0042-02 學(xué)生編程能力較差的原因
對(duì)于一些非計(jì)算機(jī)專業(yè)的學(xué)生,他們主觀上會(huì)認(rèn)為,將來不會(huì)從事編寫程序的工作,學(xué)習(xí)編程對(duì)他們沒用。計(jì)算機(jī)學(xué)科概念的基本術(shù)語(yǔ)比較抽象,程序設(shè)計(jì)語(yǔ)言的語(yǔ)法枯燥,編程的算法比較復(fù)雜,由于以上幾方面的原因?qū)е聦W(xué)生在學(xué)習(xí)過程中沒有學(xué)習(xí)的興趣以及學(xué)習(xí)的主動(dòng)性。在學(xué)習(xí)程序設(shè)計(jì)的過程中,不光需要學(xué)生掌握所學(xué)的程序設(shè)計(jì)語(yǔ)言的基本語(yǔ)法規(guī)則,還要學(xué)會(huì)程序設(shè)計(jì)的思維方法,而前者全是一些嚴(yán)格的規(guī)定,后者卻要求靈活運(yùn)用。學(xué)生在初學(xué)編程時(shí),如果長(zhǎng)時(shí)間調(diào)試一個(gè)程序而總處于不通過的狀態(tài)學(xué)生就會(huì)氣餒,產(chǎn)生一定的厭學(xué)情緒,對(duì)后面內(nèi)容的學(xué)習(xí)會(huì)形成阻礙,以至影響整個(gè)課程的學(xué)習(xí)。
為了讓學(xué)生充分認(rèn)識(shí)到程序設(shè)計(jì)課程的重要性,對(duì)程序設(shè)計(jì)產(chǎn)生興趣,需要任課教師的不斷探索、改進(jìn)教學(xué)方法,改變“以教師為中心”的傳統(tǒng)教學(xué)模式,使學(xué)生從被動(dòng)學(xué)習(xí)變?yōu)橹鲃?dòng)學(xué)習(xí),為學(xué)生自主學(xué)習(xí)提供豐富的學(xué)習(xí)資源,從而取得較好的學(xué)習(xí)成效。這正是現(xiàn)代教學(xué)理論所倡導(dǎo)的。本人結(jié)合自己從事計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言課程教學(xué)的經(jīng)驗(yàn),對(duì)于如何在教學(xué)過程中提高學(xué)生的編程能力做出以下幾方面經(jīng)驗(yàn)總結(jié)。由以教師為中心到以學(xué)生為中心教學(xué)模式的改變[1]
以教師為中心,教師講、學(xué)生聽,主要靠教師向?qū)W生灌輸,作為認(rèn)知主體的學(xué)生在教學(xué)過程中自始至終處于被動(dòng)狀態(tài),其主動(dòng)性、積極性難以發(fā)揮。既不能保證教學(xué)的質(zhì)量與效率,又不利于培養(yǎng)學(xué)生的發(fā)散性思維、批判性思維和創(chuàng)造性思維,即不利于創(chuàng)造型人材的成長(zhǎng)。為了改變這種狀況,國(guó)內(nèi)外的許多教育工作者、教育學(xué)家、教育技術(shù)專家多年來從理論與實(shí)踐兩個(gè)方面作了大量的研究與探索。傳統(tǒng)的教學(xué)模式最后形成的效果就是將知識(shí)從教師頭腦中傳送到學(xué)生的筆記本上,并沒有使學(xué)生真正的掌握所學(xué)的內(nèi)容。
學(xué)生是信息加工的主體,教師是學(xué)生在學(xué)習(xí)過程中的幫助者、促進(jìn)者,而不是知識(shí)灌輸者。以學(xué)生為中心的教學(xué)模式強(qiáng)調(diào)學(xué)生對(duì)知識(shí)的主動(dòng)探索,主動(dòng)發(fā)現(xiàn)的能力。本人認(rèn)為知識(shí)主要不是通過教師傳授得到,而是學(xué)生在一定的情景及社會(huì)文化背景下,借助他人(包括教師和學(xué)習(xí)伙伴)的幫助,利用必要的學(xué)習(xí)資源而獲得的。所以我們?cè)诮虒W(xué)的過程中應(yīng)以學(xué)生為中心,在整個(gè)教學(xué)過程中由教師起組織者、指導(dǎo)者、幫助者和促進(jìn)者的作用,利用情境、協(xié)作、會(huì)話等學(xué)習(xí)環(huán)境要素充分發(fā)揮學(xué)生的主動(dòng)性、積極性和首創(chuàng)精神,最終達(dá)到使學(xué)生有效地實(shí)現(xiàn)對(duì)當(dāng)前所學(xué)知識(shí)的意義建構(gòu)的目的。教學(xué)方法的更新[2]
在傳統(tǒng)的程序設(shè)計(jì)語(yǔ)言課程中我們教師經(jīng)常在理論課教學(xué)中介紹語(yǔ)法,在實(shí)踐教學(xué)(上機(jī))中讓學(xué)生調(diào)試程序。這樣的教學(xué)模式的缺點(diǎn)是:枯燥的語(yǔ)法知識(shí)介紹往往提不起學(xué)生學(xué)習(xí)的興趣,而簡(jiǎn)單的驗(yàn)證性的上機(jī),使學(xué)生的上機(jī)實(shí)踐可以草草了事,這就是許多專家和教育工作者都已經(jīng)指出的目前(特別是計(jì)算機(jī)專業(yè)學(xué)生)程序設(shè)計(jì)水平不高的重要原因。
筆者認(rèn)為可以在課堂上講授算法,上機(jī)學(xué)習(xí)程序的測(cè)試、調(diào)試和語(yǔ)法知識(shí)。這種教學(xué)方法非常符合程序設(shè)計(jì)及其語(yǔ)言的學(xué)習(xí)規(guī)律。我們自己的學(xué)習(xí)經(jīng)驗(yàn)也表明,學(xué)習(xí)語(yǔ)法知識(shí)最好的辦法是設(shè)計(jì)一些典型用法上機(jī)去試。而學(xué)習(xí)算法不一定必須在計(jì)算機(jī)上進(jìn)行。因此,計(jì)算機(jī)程序設(shè)計(jì)的教學(xué)應(yīng)當(dāng)是三個(gè)環(huán)節(jié):以系統(tǒng)學(xué)習(xí)算法為主的課堂教學(xué)、以舉一反三為主的課后程序設(shè)計(jì)作業(yè)和以測(cè)試、調(diào)試程序和語(yǔ)法驗(yàn)證學(xué)習(xí)為主的上機(jī)。多媒體教學(xué)環(huán)境的應(yīng)用
以計(jì)算機(jī)多媒體技術(shù)及其網(wǎng)絡(luò)技術(shù)為核心的現(xiàn)代教育技術(shù)是最理想的教學(xué)環(huán)境。多媒體技術(shù)能夠提供外部刺激的多樣性, 有利于知識(shí)的獲取,能為學(xué)習(xí)者提供多種感官的綜合刺激,這對(duì)于知識(shí)的獲取和保持,都是非常重要的。多媒體技術(shù)既能讓學(xué)習(xí)者看得見,也能讓其聽得見,還能讓學(xué)習(xí)者用手操作。這樣通過多種感官的刺激所獲取的信息量,比單一地聽老師講課多得多。學(xué)生在學(xué)習(xí)過程中,如果既能聽到又能看到所學(xué)內(nèi)容,再通過討論、交流,用自己的語(yǔ)言或文字表達(dá)出來,其知識(shí)的保持將大大優(yōu)于傳統(tǒng)教學(xué)的效果。這說明多媒體應(yīng)用于教學(xué)過程不僅非常有利于知識(shí)的獲取,而且非常有利于知識(shí)的保持。
同時(shí)多媒體技術(shù)有利于因材施教。因材施教是優(yōu)化教學(xué)過程、提高教學(xué)質(zhì)量的重要教學(xué)原則之一。如今,各高校不斷擴(kuò)招,生源復(fù)雜,學(xué)生個(gè)體之間差異很大,要在傳統(tǒng)教材中同時(shí)滿足基礎(chǔ)較差學(xué)生、一般學(xué)生和優(yōu)秀學(xué)生對(duì)教學(xué)內(nèi)容的不同需求是很難做到的。而利用多媒體技術(shù),按學(xué)生的知識(shí)基礎(chǔ)與水平,很容易把相關(guān)學(xué)科的預(yù)備知識(shí)、相應(yīng)的演示實(shí)驗(yàn)、練習(xí)題、測(cè)驗(yàn)題及其解答等,與教學(xué)內(nèi)容相關(guān)而與學(xué)習(xí)特征不同的教學(xué)資料組成一個(gè)有機(jī)的整體,供不同類型的學(xué)生使用。程序設(shè)計(jì)基礎(chǔ)教學(xué)環(huán)境的設(shè)計(jì)
C語(yǔ)言程序設(shè)計(jì)課程是一門公共必修課,一般來說是學(xué)生在大學(xué)時(shí)期所學(xué)的第一門計(jì)算機(jī)編程課。該課的特點(diǎn)是:語(yǔ)言規(guī)則枯燥、難記;數(shù)組、函數(shù)、指針等概念比較抽象,不易理解;需掌握的常用算法較多;程序設(shè)計(jì)的思維方法較難掌握;編寫的程序需要上機(jī)檢驗(yàn)、調(diào)試。本人主要從以下幾方面對(duì)于程序設(shè)計(jì)基礎(chǔ)教學(xué)環(huán)境的設(shè)計(jì)加以闡述。
5.1 編程情景的創(chuàng)設(shè)創(chuàng)設(shè)與當(dāng)前學(xué)習(xí)主題相關(guān)的、盡可能真實(shí)的情景。程序設(shè)計(jì)課程的一個(gè)顯著特點(diǎn)是每學(xué)習(xí)到一個(gè)主題,都可以在計(jì)算機(jī)上直接編寫程序、調(diào)試程序、運(yùn)行程序、查看運(yùn)行結(jié)果,從上機(jī)編程的操作上來講,學(xué)生體驗(yàn)到的是真實(shí)情景。另一方面,對(duì)于C語(yǔ)言程序中所涉及的概念、算法的學(xué)習(xí),要為學(xué)生創(chuàng)設(shè)資源豐富的學(xué)習(xí)環(huán)境,其中應(yīng)包括實(shí)例案例、相關(guān)學(xué)習(xí)資料,使得學(xué)習(xí)者可以根據(jù)自己的學(xué)習(xí)需要、學(xué)習(xí)興趣去主動(dòng)發(fā)現(xiàn)、主動(dòng)探索要掌握的知識(shí)。
5.2 教學(xué)資源的豐富我們?nèi)握n教師應(yīng)該為學(xué)生提供本課程所涉及到的具有不同作用的信息資源如:教材和課件;課程教學(xué)網(wǎng)站上的學(xué)習(xí)指導(dǎo)、常見問題解答,以及學(xué)習(xí)參考資料、參考習(xí)題和解答,用于學(xué)生閱讀或查閱的學(xué)習(xí)內(nèi)容;而課程教學(xué)網(wǎng)站上的自測(cè)練習(xí)系統(tǒng)、作業(yè)系統(tǒng)、答疑系統(tǒng)可用于學(xué)生自測(cè)、自我反饋。
5.3 挖掘?qū)W生自主學(xué)習(xí)的意識(shí)在教學(xué)過程中,充分發(fā)揮學(xué)生的主動(dòng)性,使學(xué)生主動(dòng)探究問題。為學(xué)生設(shè)計(jì)不同的情景去應(yīng)用他所學(xué)的知識(shí),并讓學(xué)生能根據(jù)自身行動(dòng)的反饋信息來形成對(duì)客觀事物的認(rèn)識(shí)和解決實(shí)際問題的方案,從而實(shí)現(xiàn)自我反饋。
5.4 學(xué)習(xí)氣氛的創(chuàng)設(shè)在程序設(shè)計(jì)課程教學(xué)中,應(yīng)經(jīng)常由教師精心設(shè)計(jì)問題,引導(dǎo)學(xué)生開展小組討論、協(xié)商,最后教師對(duì)學(xué)生的表現(xiàn)進(jìn)行恰當(dāng)?shù)脑u(píng)價(jià)。這樣既增加了學(xué)生學(xué)習(xí)的熱情,又使學(xué)生掌握了所學(xué)的內(nèi)容。
5.5 學(xué)習(xí)效果的檢測(cè)我們可以在必要的時(shí)候?qū)W(xué)生所學(xué)的內(nèi)容進(jìn)行階段性的檢測(cè),這樣教師可以使學(xué)生對(duì)于知識(shí)的掌握情況有所了解,教師可以根據(jù)評(píng)價(jià)的結(jié)果,為每個(gè)學(xué)生設(shè)計(jì)出一套強(qiáng)化練習(xí)方案,指出其知識(shí)薄弱點(diǎn),并設(shè)計(jì)有針對(duì)性的學(xué)習(xí)材料和練習(xí)題,以便通過強(qiáng)化練習(xí)糾正原有的錯(cuò)誤理解或片面認(rèn)識(shí)。
通過以上幾方面的分析可知,現(xiàn)代的教學(xué)系統(tǒng)由教師、學(xué)生、教材和教學(xué)媒體4個(gè)要素構(gòu)成。這4個(gè)要素不是孤立地、簡(jiǎn)單地組合在一起的,而是相互聯(lián)系、相互作用的有機(jī)整體。在傳統(tǒng)教學(xué)模式中教師是主動(dòng)的施教者,具有絕對(duì)的權(quán)威,教師通過媒體把知識(shí)傳遞給學(xué)生,學(xué)生在整個(gè)教學(xué)過程中處于被動(dòng)接受狀態(tài),媒體在教學(xué)過程中輔助教師教學(xué),教材是教師講授的藍(lán)本。此時(shí),學(xué)生只是被動(dòng)地接受現(xiàn)成的結(jié)論,缺乏對(duì)問題的分析,其思維能力得不到很好的發(fā)展,學(xué)生的批判性和獨(dú)立性受到壓制,求知欲被消磨。學(xué)生厭學(xué),或掌握的知識(shí)存在一些弊端,如不完整,過于空泛,無法在需要的時(shí)候及時(shí)運(yùn)用,不靈活,無法在新的或類似的情境中遷移應(yīng)用。
為了解決上述問題,必須正確認(rèn)識(shí)教學(xué)過程的本質(zhì),在先進(jìn)的教育理論指導(dǎo)下,深化課堂教學(xué)改革,改變傳統(tǒng)的以教師為中心的教學(xué)結(jié)構(gòu),創(chuàng)建既能發(fā)揮教師主導(dǎo)作用,又能發(fā)揮學(xué)生對(duì)學(xué)習(xí)的興趣繼而提高學(xué)生的編程能力,從而真正地做到“教學(xué)并重”的教學(xué)模式。這既是高校深化學(xué)科教學(xué)改革的主要目標(biāo),同時(shí)也是我們教學(xué)工作者需要研究的主要課題。
參考文獻(xiàn)
[1]裘迅.計(jì)算機(jī)程序設(shè)計(jì)課程教學(xué)模式研究[J].蘇州市職業(yè)大學(xué)學(xué)報(bào),2003(04)
[2]張敏霞.程序設(shè)計(jì)語(yǔ)言課程教學(xué)方法改革的探索與實(shí)踐[J].中國(guó)高教研究,2004(02)
第三篇:c語(yǔ)言程序設(shè)計(jì)論文
C語(yǔ)言程序設(shè)計(jì)論文
摘要
該程序編譯的是通訊錄,可以實(shí)現(xiàn)一般主要功能有:有建立通訊錄的個(gè)人信息功能,如記錄該人姓名信息,地址信息,出生日期信息,所在城市信息,以及其城市的郵編信息等,刪除個(gè)人信息,通訊錄個(gè)人的信息列表,個(gè)人的信息查詢,個(gè)人的信息保存,以及個(gè)人的信息提取的功能,最后可以直接退出通訊錄。
當(dāng)然實(shí)行不同的功能需要定義不同的功能函數(shù),在記錄個(gè)人信息定義不同的結(jié)構(gòu)體,每一個(gè)成員的信息可以是一個(gè)基本類型或者是一個(gè)夠造類型,對(duì)結(jié)構(gòu)體變量的應(yīng)用,其中包括賦值,輸入,輸出,運(yùn)算等方式來實(shí)現(xiàn)結(jié)構(gòu)變量的成員。
當(dāng)然也可以執(zhí)行該程序應(yīng)用了函數(shù)的調(diào)用,自定義函數(shù)以及文件的存儲(chǔ)與調(diào)用等。個(gè)人的信息保存在這個(gè)問題上,這信息可以動(dòng)態(tài)的分配到內(nèi)存空間,每一次分配一塊空間用來存放一個(gè)人的個(gè)人信息的數(shù)據(jù),定義兩個(gè)域,一個(gè)是數(shù)據(jù)域,用來存放各種實(shí)際的數(shù)據(jù),如個(gè)人姓名信息,個(gè)人地址信息,出生日期等等數(shù)據(jù)。在編輯程序,用到了基本的循環(huán)、選擇、排序的算法,使用數(shù)組或數(shù)組元素的指針和指針變量,對(duì)結(jié)構(gòu)體及其元素用指針或指針變量來指向。并且使用多種預(yù)處理功能,如宏定義、文件包含、條件編譯等。來進(jìn)行程序的修改、閱讀、移植和調(diào)試,也有利于實(shí)現(xiàn)模塊化程序設(shè)計(jì)。程序員在程序中用預(yù)處理命令來調(diào)用這些功能。
通訊錄的個(gè)人信息數(shù)據(jù)的編輯、存儲(chǔ)、列表、刪除、查詢、提取等實(shí)行運(yùn)用,在程序中存儲(chǔ)二百人的個(gè)人信息空間,日期不能超過兩個(gè)字符。在運(yùn)行后,程序自動(dòng)給出提示選擇,給出你所需要執(zhí)行的功能,在選擇后會(huì)給出相應(yīng)的顯示和下一步的提示,在編輯個(gè)人信息時(shí)必須有姓名,否者會(huì)返回上一選擇菜單,有部分信息可以不填。在編輯完后,就可以實(shí)行其他功能,將給出其他選擇,如將個(gè)人信息刪除、將個(gè)人信息列表、保存?zhèn)€人信息、提取個(gè)人信息等等的功能。最后在執(zhí)行完后就可直接根據(jù)提示選擇退出。就實(shí)現(xiàn)了整個(gè)通訊錄的流程。
關(guān)鍵詞:通訊錄、列表、函數(shù)、編譯
C語(yǔ)言程序設(shè)計(jì)論文
目錄
? 題目?jī)?nèi)容及其功能..........................2 ? 算法原理..................................2 ? 算法流程圖................................8 ? 源程序...................................14 ? 運(yùn)用結(jié)果及分析...........................20 ? 設(shè)計(jì)心得.................................22 ? 參考文獻(xiàn).................................23
C語(yǔ)言程序設(shè)計(jì)論文
題目?jī)?nèi)容及其功能
該通訊錄主要功能有:有建立通訊錄的個(gè)人信息,如姓名,地址,出生日期,城市,郵編等。也可以執(zhí)行刪除個(gè)人信息,通訊錄信息列表,信息查詢,信息保存,以及信息提取的功能,最后可以退出通訊錄。該程序應(yīng)用了函數(shù)的調(diào)用,自定義函數(shù)以及文件的存儲(chǔ)與調(diào)用等,使用數(shù)組或數(shù)組元素的指針和指針變量,對(duì)結(jié)構(gòu)體及其元素用指針或指針變量來指向。
算法原理
(1)通過選擇來實(shí)現(xiàn)程序的功能: int main(void){ start=last=NULL;for(;;){
switch(menu_select())
{
case 1:enter();
break;
case 2:mldelete(&start,&last);
break;
case 3:list();
break;
case 4:search();
break;
case 5:save();
break;
case 6:load();
break;
case 7:exit(0);
} 輸出運(yùn)行結(jié)果并且給出選擇: int menu_select(void){ char s[80];int c;printf(“******tongxunlu*******n”);printf(“*1.Enter a name
*n”);printf(“*2.delete a name
*n”);printf(“*3.list the file
*n”);printf(“*4.search
*n”);
printf(“*5.save the file
*n”);printf(“*6.load the file
*n”);printf(“*7.Quit
*n”);
C語(yǔ)言程序設(shè)計(jì)論文
printf(“**********************n”);do {
printf(“nplease enter your choice:”);
gets(s);
c=atoi(s);}while(c<0||c>7);return c;}
(2)輸入個(gè)人信息:名字,地址,日期,郵政編碼 void enter(void){ struct address *info;for(;;){
info=(struct address *)malloc(sizeof(struct address));
if(!info)
{
printf(“nout of memory”);
return;
}
inputs(“please enter name:”,info->name,30);
if(!info->name[0])break;/*stop entering*/
inputs(“please enter street:”,info->street,40);
inputs(“please enter city:”,info->city,20);
inputs(“please enter state:”,info->state,3);
inputs(“please enter zip:”,info->zip,10);
dls_store(info,&start,&last);}/*entry loop*/ } 如果超過給定內(nèi)存,將給出提示,輸入太長(zhǎng): void inputs(char *prompt,char *s,int count){ char p[225];do {
printf(prompt);
fgets(p,254,stdin);
if(strlen(p)>count)
printf(“nToo Longn”);} while(strlen(p)>count);p[strlen(p)-1]=0;/* remove newline character */ strcpy(s,p);}(3)制作列表,對(duì)輸入的個(gè)人信息進(jìn)行存儲(chǔ)與排列 void dls_store(C語(yǔ)言程序設(shè)計(jì)論文
struct address *i,/*new element*/ struct address **start,/*first element in list*/ struct address **last/*last element in list*/){ struct address *old,*p;if(*last==NULL){/*first element in list*/
i->next=NULL;
i->prior=NULL;
*last=i;
*start=i;
return;} p=*start;/*start at top of list*/ old=NULL;while(p){
if(strcmp(p->name,i->name)<0){
old=p;
p=p->next;
}
else{
if(p->prior)
{
p->prior->next=i;
i->next=p;
i->prior=p->prior;
p->prior=i;
return;
}
i->next=p;/*new first element*/
i->prior=NULL;
p->prior=i;
*start=i;
return;
} } old->next=i;/*put on end*/ i->next=NULL;i->prior=old;*last=i;}(4)將通訊錄中的信息,先進(jìn)行查找,然后刪除個(gè)人信息 void mldelete(struct address **start,struct address **last)
C語(yǔ)言程序設(shè)計(jì)論文
{ struct address *info;char s[80];
inputs(“Enter name:”,s,30);info=find(s);if(info){
if(*start==info){
*start=info->next;
if(*start)(*start)->prior=NULL;
else *last=NULL;
}
else{
info->prior->next=info->next;
if(info!=*last)
info->next->prior=info->prior;
else
*last=info->prior;
}
free(info);/*return memory to system*/ } }(5)從其內(nèi)存中查找某個(gè)名字,并進(jìn)行輸出,如果沒有就輸出沒有發(fā)現(xiàn)名字 struct address *find(char *name){ struct address *info;info=start;while(info){
if(!strcmp(name,info->name))return info;
info = info->next;/* get next address */ } printf(“Name not found.n”);return NULL;/*not found*/ }(6)將通訊錄中所有個(gè)人信息分別列出 void list(void){ struct address *info;info=start;while(info){
display(info);
info = info->next;/* get next address */
C語(yǔ)言程序設(shè)計(jì)論文
} printf(“nn”);}(7)分別輸出個(gè)人信息
void display(struct address *info){ printf(“%sn”,info->name);printf(“%sn”,info->street);printf(“%sn”,info->city);printf(“%sn”,info->state);printf(“%sn”,info->zip);printf(“nn”);}(8)根據(jù)其個(gè)人信息的存儲(chǔ)地址來查找個(gè)人名字信息 void search(void){ char name[40];struct address *info;printf(“Enter name to find:”);gets(name);info = find(name);if(!info)
printf(“Not Foundn”);else display(info);}(9)保存輸入的個(gè)人信息 void save(void){ struct address *info;FILE *fp;fp = fopen(“mlist”,“wb”);if(!fp){
printf(“Cannot open file.n”);
exit(1);} printf(“nSaving Filen”);info = start;while(info){
fwrite(info,sizeof(struct address),1,fp);
info = info->next;/* get next address */ } fclose(fp);
C語(yǔ)言程序設(shè)計(jì)論文
}(10)查找并提取已輸入的個(gè)人信息 void load(){ struct address *info;FILE *fp;fp=fopen(“mlist”,“rb”);if(!fp){
printf(“Cannot open file.n”);
exit(1);} 釋放內(nèi)存空間:
while(start){
info=start->next;
free(info);
start=info;fclose(fp);}
C語(yǔ)言程序設(shè)計(jì)論文
算法流程圖
圖1-1制作列表流程圖
C語(yǔ)言程序設(shè)計(jì)論文
圖1-2刪除個(gè)人信息流程圖
C語(yǔ)言程序設(shè)計(jì)論文
圖1-3個(gè)人信息-名字的查找流程圖
C語(yǔ)言程序設(shè)計(jì)論文
圖1-4查找到個(gè)人信息流程圖
C語(yǔ)言程序設(shè)計(jì)論文
圖1-5保存?zhèn)€人信息流程圖
C語(yǔ)言程序設(shè)計(jì)論文
圖1-6提取下載個(gè)人信息流程圖
C語(yǔ)言程序設(shè)計(jì)論文
源程序
#include“stdio.h” #include“stdlib.h” #include“string.h” struct address{ char name[30];char street[40];char city[20];char state[3];char zip[11];struct address *next;struct address *prior;};struct address *start;struct address *last;struct address *find(char *);
void enter(void),search(void),save(void);void load(void),list(void);void mldelete(struct address **,struct address **);void dls_store(struct address *i,struct address **start,struct address **last);void inputs(char *,char*,int),display(struct address *);int menu_select(void);
int main(void){ start=last=NULL;for(;;){
switch(menu_select())
{
case 1:enter();
break;
case 2:mldelete(&start,&last);
break;
case 3:list();
break;
case 4:search();
break;
case 5:save();
break;
case 6:load();
break;
C語(yǔ)言程序設(shè)計(jì)論文
case 7:exit(0);
} }return 0;}
int menu_select(void){ char s[80];int c;printf(“******tongxunlu*******n”);printf(“*1.Enter a name
*n”);printf(“*2.delete a name
*n”);printf(“*3.list the file
*n”);printf(“*4.search
*n”);
printf(“*5.save the file
*n”);printf(“*6.load the file
*n”);printf(“*7.Quit
*n”);
printf(“**********************n”);do {
printf(“nplease enter your choice:”);
gets(s);
c=atoi(s);}while(c<0||c>7);return c;}
/*Enter names and address.*/ void enter(void){ struct address *info;for(;;){
info=(struct address *)malloc(sizeof(struct address));
if(!info)
{
printf(“nout of memory”);
return;
}
inputs(“please enter name:”,info->name,30);
if(!info->name[0])break;/*stop entering*/
inputs(“please enter street:”,info->street,40);
inputs(“please enter city:”,info->city,20);
inputs(“please enter state:”,info->state,3);
inputs(“please enter zip:”,info->zip,10);
dls_store(info,&start,&last);
C語(yǔ)言程序設(shè)計(jì)論文
}/*entry loop*/ } /*******************************************/ void inputs(char *prompt,char *s,int count){ char p[225];do {
printf(prompt);
fgets(p,254,stdin);
if(strlen(p)>count)
printf(“nToo Longn”);} while(strlen(p)>count);p[strlen(p)-1]=0;/* remove newline character */ strcpy(s,p);} /*Create a doubly linked list in sorted order */ void dls_store(struct address *i,/*new element*/ struct address **start,/*first element in list*/ struct address **last/*last element in list*/){ struct address *old,*p;if(*last==NULL){/*first element in list*/
i->next=NULL;
i->prior=NULL;
*last=i;
*start=i;
return;} p=*start;/*start at top of list*/ old=NULL;while(p){
if(strcmp(p->name,i->name)<0){
old=p;
p=p->next;
}
else{
if(p->prior)
{
p->prior->next=i;
i->next=p;
i->prior=p->prior;
C語(yǔ)言程序設(shè)計(jì)論文
p->prior=i;
return;
}
i->next=p;/*new first element*/
i->prior=NULL;
p->prior=i;
*start=i;
return;
} } old->next=i;/*put on end*/ i->next=NULL;i->prior=old;*last=i;} /*Remove an element from the list*/ void mldelete(struct address **start,struct address **last){ struct address *info;char s[80];
inputs(“Enter name:”,s,30);info=find(s);if(info){
if(*start==info){
*start=info->next;
if(*start)(*start)->prior=NULL;
else *last=NULL;
}
else{
info->prior->next=info->next;
if(info!=*last)
info->next->prior=info->prior;
else
*last=info->prior;
}
free(info);/*return memory to system*/ } }
/*Find an address.*/
struct address *find(char *name){
C語(yǔ)言程序設(shè)計(jì)論文
struct address *info;info=start;while(info){
if(!strcmp(name,info->name))return info;
info = info->next;/* get next address */ } printf(“Name not found.n”);return NULL;/*not found*/ } /* Display the entire list */ void list(void){ struct address *info;info=start;while(info){
display(info);
info = info->next;/* get next address */ } printf(“nn”);} /* this function actually prints the fields in each address.*/ void display(struct address *info){ printf(“%sn”,info->name);printf(“%sn”,info->street);printf(“%sn”,info->city);printf(“%sn”,info->state);printf(“%sn”,info->zip);printf(“nn”);} /* Look for a name in the list */ void search(void){ char name[40];struct address *info;printf(“Enter name to find:”);gets(name);info = find(name);if(!info)
printf(“Not Foundn”);else display(info);}
C語(yǔ)言程序設(shè)計(jì)論文
/* Save the file to disk */ void save(void){ struct address *info;FILE *fp;fp = fopen(“mlist”,“wb”);if(!fp){
printf(“Cannot open file.n”);
exit(1);} printf(“nSaving Filen”);info = start;while(info){
fwrite(info,sizeof(struct address),1,fp);
info = info->next;/* get next address */ } fclose(fp);} /*
Load the address file.*/ void load(){ struct address *info;FILE *fp;fp=fopen(“mlist”,“rb”);if(!fp){
printf(“Cannot open file.n”);
exit(1);} /* free any previously allocated memory */ while(start){
info=start->next;
free(info);
start=info;} /*
reset top and bottom pointers
*/ start=last=NULL;printf(“nLoading Filen”);while(!feof(fp)){
info=(struct address *)malloc(sizeof(struct address));
C語(yǔ)言程序設(shè)計(jì)論文
} if(!info){
printf(“Out of Memory”);
return;} if(1!=fread(info,sizeof(struct address),1,fp))break;dls_store(info,&start,&last);}
fclose(fp);運(yùn)用結(jié)果及分析
圖1-1 運(yùn)行結(jié)果并且給出選擇
圖1-2輸入個(gè)人信息
C語(yǔ)言程序設(shè)計(jì)論文
圖1-3刪除個(gè)人信息
1-4列出個(gè)人信息
C語(yǔ)言程序設(shè)計(jì)論文 1-5查找個(gè)人信息
圖1-6保存?zhèn)€人信息
C語(yǔ)言程序設(shè)計(jì)論文
設(shè)計(jì)心得
通過進(jìn)行C語(yǔ)言程序設(shè)計(jì),我更加懂得C語(yǔ)言設(shè)計(jì)不僅僅需要邏輯思維地緊密,更加需要細(xì)心,通過兩個(gè)星期的折騰,總算把課程設(shè)計(jì)給完成了,這是一個(gè)堅(jiān)苦而又漫長(zhǎng)的過程。讀了那么多年的書,課程設(shè)計(jì)可是第一次。看著勞動(dòng)成果,很欣慰!
剛開始,可以說是沒有頭緒,于是就去圖書館找資料,找到了一些關(guān)于畫圖方面的,可是這點(diǎn)小進(jìn)展遠(yuǎn)遠(yuǎn)不夠,這只是一個(gè)小小的開始。下一步是上網(wǎng)查,找到了些與我們題目相似的,那時(shí)我很高興,完成了這個(gè)程序。
雖然對(duì)著電腦做程序,有點(diǎn)累有點(diǎn)熱,可是當(dāng)看到勞動(dòng)成果時(shí),真是別有一番滋味在心頭啊!世上無難事,只怕有心人,的確如此。
做完這個(gè)課程設(shè)計(jì),我的自信一下子提高了,我也會(huì)寫程序了;盡管對(duì)于有些人這種程序會(huì)很簡(jiǎn)單,可對(duì)我們C語(yǔ)言初學(xué)者來說,已經(jīng)很不容易了。這次體驗(yàn)為以后的學(xué)習(xí)計(jì)算機(jī)的我們?cè)鰪?qiáng)了信心。享受勞動(dòng)成果的滋味實(shí)在很美妙啊!
程序設(shè)計(jì)過程有如解決一實(shí)際問題,從解決實(shí)際問題的角度,我們可以這樣來看:首先要了解這個(gè)問題的基本要求,即輸入、輸出、完成從輸入到輸出的要求是什么;其次,從問題的要害入手,從前到后的解決問題的每個(gè)方面,即從輸入開始入手,著重考慮如何從輸入導(dǎo)出輸出,在這個(gè)過程中,可確定所需的變量、數(shù)組、函數(shù),然后確定處理過程--算法。可得最后結(jié)論。
一個(gè)多禮拜的掙扎,絞盡腦汁終于帶著麻木的手指和大腦脫出那堆“泥潭”。現(xiàn)在的心情是如魚得水,干澀的眼睛前方是萬(wàn)里晴空。終于,所有的努力即將化成了一個(gè)個(gè)鉛字,打印機(jī)“滋滋”的聲音仿佛已經(jīng)宛如天籟般悅耳地在耳畔響起。此時(shí)此刻,真想把一切拋上天空。高呼:“出來了!我的成果即將出來了!”,心里也在默默的感慨著:“有志者,事竟成,破釜沉舟,百二秦關(guān)終歸楚。苦心人,天不負(fù),臥薪嘗膽,三千越甲可吞吳。”
當(dāng)然這次程序設(shè)計(jì)也讓我看到了自己基礎(chǔ)的薄弱。古人有詩(shī)云:“路漫漫其修遠(yuǎn)兮,吾將上下而求索”。從今天起我將不斷繼續(xù)求索,學(xué)習(xí)之路也好,人生之路也罷。
總之我受益匪淺。
C語(yǔ)言程序設(shè)計(jì)論文
參考文獻(xiàn)
《C程序設(shè)計(jì)》??譚浩強(qiáng) 著??清華大學(xué)出版社?2005.7 《C語(yǔ)言程序設(shè)計(jì)》??(美)郝伯特.希爾特 著 ??電子工業(yè)出版社
第四篇:C語(yǔ)言程序設(shè)計(jì)教學(xué)探究論文
[摘要]文章主要針對(duì)高職高專院校中《C語(yǔ)言程序設(shè)計(jì)》教學(xué)中出現(xiàn)的聽得懂、編不出的現(xiàn)象,分析問題存在的原因,從教學(xué)的課程目標(biāo)定位、教學(xué)內(nèi)容和方法改革方面進(jìn)行了探討,提出只有教師的教學(xué)內(nèi)容和教學(xué)方法進(jìn)行合理的組合,提高學(xué)生的學(xué)習(xí)興趣才能達(dá)到良好的教學(xué)效果。
[關(guān)鍵詞]教學(xué)方法 案例教學(xué) 教學(xué)效果
《C語(yǔ)言程序設(shè)計(jì)》作為計(jì)算機(jī)專業(yè)的基礎(chǔ)課,已經(jīng)成為一門必修的課程,在整個(gè)課程體系中占有重要地位。在C語(yǔ)言教學(xué)過程中,從客觀上講,教師的教法和學(xué)生的學(xué)法的差異,對(duì)教學(xué)效果都會(huì)產(chǎn)生直接的影響。針對(duì)學(xué)生學(xué)習(xí)語(yǔ)言類課程的一般思維規(guī)律和思維模式,筆者結(jié)合多年來的教學(xué)經(jīng)驗(yàn)和教學(xué)體會(huì),把一些經(jīng)驗(yàn)和方法總結(jié)出來,希望能對(duì)C語(yǔ)言教學(xué)有所幫助。
一、教學(xué)中存在的問題
《C語(yǔ)言程序設(shè)計(jì)》是一個(gè)邏輯性很強(qiáng)的課程。學(xué)生在畢業(yè)設(shè)計(jì)時(shí)會(huì)面臨具體的設(shè)計(jì)要求的問題,它與任何一本教材中的內(nèi)容相距甚遠(yuǎn),這使大多數(shù)同學(xué)感到無從下手。這其中的原因可以分成兩類:一方面目前高校使用的教材中,絕大多數(shù)結(jié)構(gòu)都基本相同。在每一章介紹完了概念之后,提供一些例題解釋相關(guān)概念的使用方法,并在章節(jié)結(jié)束后針對(duì)本章中出現(xiàn)的內(nèi)容提供一些練習(xí)題。考試普遍采用單選、判斷及簡(jiǎn)答等方式測(cè)試學(xué)生對(duì)于教材內(nèi)容的掌握程度。從實(shí)際效果分析,實(shí)際上是測(cè)試學(xué)生對(duì)各章節(jié)中的基本概念記憶程度而不是理解程度。另一方面是在考試壓力下,特別是目前的應(yīng)試考試方式中,學(xué)生更多注意的是教材中的典型例題與老師指定的重點(diǎn)內(nèi)容,對(duì)于程序的系統(tǒng)概念沒有真正理解,特別是沒有整體設(shè)計(jì)的概念。通過對(duì)各類考試結(jié)果的分析,可以注意到一個(gè)現(xiàn)象,在考試中涉及的綜合編程部分,學(xué)生的得分率很低。為了確保學(xué)生的課程通過率,在考試時(shí)盡可能將綜合測(cè)試部分的比例壓低或提供學(xué)生統(tǒng)一復(fù)習(xí)提綱,這樣做的結(jié)果就是學(xué)生在學(xué)習(xí)時(shí)一切圍繞任課老師講課的內(nèi)容,特別是老師講授的例題。學(xué)生在學(xué)習(xí)的過程中,沒有注意如何綜合運(yùn)用相關(guān)內(nèi)容解決具體問題,導(dǎo)致學(xué)生在學(xué)完程序設(shè)計(jì)課程進(jìn)入應(yīng)用階段時(shí),面對(duì)具體的專業(yè)設(shè)計(jì)要求無從下手。
二、提高程序設(shè)計(jì)課程教學(xué)效果的途徑
1.明確課程目標(biāo)
通過學(xué)習(xí),學(xué)生應(yīng)能正確理解語(yǔ)言的基本概念、語(yǔ)法、語(yǔ)義并得到充分的程序設(shè)計(jì)訓(xùn)練。C語(yǔ)言課程一般是為應(yīng)用性教學(xué)而設(shè)置的,因此,強(qiáng)調(diào)實(shí)踐性是計(jì)算機(jī)語(yǔ)言課程教學(xué)中特別要注意的問題。對(duì)于計(jì)算機(jī)語(yǔ)言課程的教授不應(yīng)僅僅是傳授知識(shí),應(yīng)該以培訓(xùn)能力為主。過分強(qiáng)調(diào)該語(yǔ)言的系統(tǒng)性和完整性可能會(huì)轉(zhuǎn)移學(xué)生對(duì)課程重點(diǎn)的注意力。C語(yǔ)言的內(nèi)容繁多,在有限的課時(shí)內(nèi)不可能也不必要面面俱到,所以必須突出重點(diǎn),突出實(shí)用性,關(guān)鍵在于教會(huì)學(xué)生正確運(yùn)用C語(yǔ)言編寫程序,一些細(xì)節(jié)、具體規(guī)則和進(jìn)一步的知識(shí)可以讓學(xué)生在今后的應(yīng)用中查閱有關(guān)書籍。教師應(yīng)始終堅(jiān)持以應(yīng)用為中心,以算法為基礎(chǔ),以培養(yǎng)學(xué)生的實(shí)踐能力為核心,突出技術(shù)實(shí)用性和再學(xué)習(xí)能力的培養(yǎng)。
2.進(jìn)行教學(xué)改革
(1)教學(xué)內(nèi)容改革
程序設(shè)計(jì)課程具有很強(qiáng)的實(shí)踐性,要以社會(huì)對(duì)編程能力的需求和技術(shù)發(fā)展為依據(jù),調(diào)整教學(xué)大綱和教學(xué)內(nèi)容,以適應(yīng)技術(shù)崗位能力要求,設(shè)計(jì)模塊化課程體系。在課程設(shè)置與建設(shè)中,要充分體現(xiàn)教學(xué)內(nèi)容在訓(xùn)練和提高學(xué)生培養(yǎng)學(xué)生實(shí)踐能力方面的要求。適當(dāng)增加實(shí)訓(xùn)教學(xué)內(nèi)容,以強(qiáng)化學(xué)生的實(shí)際開發(fā)和應(yīng)用能力,實(shí)現(xiàn)“零距離就業(yè)”。
(2)改變教學(xué)思想
①由整體到具體,培養(yǎng)學(xué)生對(duì)C語(yǔ)言的興趣及正確的思維模式。《C語(yǔ)言程序設(shè)計(jì)》注重由設(shè)計(jì)算法到書寫程序并進(jìn)行調(diào)試的整個(gè)過程,顯得抽象、復(fù)雜,這也是大多數(shù)學(xué)生抱怨程序設(shè)計(jì)太難、太深?yuàn)W、不好學(xué)的主要原因。在教學(xué)過程中,應(yīng)該先介紹一個(gè)較完整的程序例子,該例子包含了該語(yǔ)言中的主要語(yǔ)句,目的是使學(xué)生先對(duì)程序有個(gè)初步的印象,再簡(jiǎn)單介紹該例子中用到的語(yǔ)句,讓學(xué)生對(duì)該語(yǔ)言的學(xué)習(xí)有一個(gè)大概的了解,避免學(xué)生對(duì)學(xué)習(xí)語(yǔ)言望而生畏。整個(gè)教學(xué)過程中應(yīng)該把“解題思路、方法和步驟”當(dāng)作授課的重點(diǎn),從而讓學(xué)生明白如何分析、解決實(shí)際問題,逐漸培養(yǎng)學(xué)生進(jìn)行程序設(shè)計(jì)的正確思維模式。
②一題多解,注重算法是程序設(shè)計(jì)的靈魂,是教學(xué)重點(diǎn),也是教學(xué)難點(diǎn),而語(yǔ)言只是表示形式。沒有正確的算法,計(jì)算機(jī)將解決不了任何問題。對(duì)于C語(yǔ)言所涉及到的算法,應(yīng)進(jìn)行部分精講多練。
(3)教學(xué)方法改革
①案例分析教學(xué)。通過案例分析,重點(diǎn)講解程序設(shè)計(jì)的思想和方法,輔以語(yǔ)言知識(shí)的介紹,將課程內(nèi)容分為若干個(gè)主題,以程序設(shè)計(jì)做為貫穿各主題的主線。每個(gè)主題的教學(xué)過程由“要點(diǎn)講解”、“練習(xí)/上機(jī)實(shí)踐”和“疑難解答”三個(gè)階段組成。
②基于問題的教學(xué)。提出問題,以學(xué)生獨(dú)立完成為主,教師只提供必要的輔導(dǎo),培養(yǎng)學(xué)生探索問題和解決問題的能力,更有利于創(chuàng)新能力的培養(yǎng)。
③“項(xiàng)目驅(qū)動(dòng)”教學(xué)。在理論教學(xué)中采用“項(xiàng)目驅(qū)動(dòng)”教學(xué)法,整個(gè)課程教學(xué)圍繞一個(gè)“工程項(xiàng)目”進(jìn)行,通過逐步拓展的實(shí)訓(xùn)項(xiàng)目和設(shè)計(jì),將每一階段的學(xué)習(xí)進(jìn)行小結(jié)性的貫穿與能力提高。將C 的知識(shí)點(diǎn)都溶化到一個(gè)個(gè)實(shí)訓(xùn)項(xiàng)目的程序編寫中。在課程初期,主要是進(jìn)行單項(xiàng)的編程練習(xí),重在掌握C 語(yǔ)言的基本語(yǔ)句、數(shù)據(jù)類型與程序結(jié)構(gòu)等。在進(jìn)入數(shù)組、函數(shù)、結(jié)構(gòu)、指針和文件內(nèi)容教學(xué)時(shí),開始實(shí)訓(xùn)項(xiàng)目的編程實(shí)踐,逐步組建“教師管理系統(tǒng)”,并且添加文本菜單,整合擴(kuò)展記錄添加、排序、查詢、統(tǒng)計(jì)和記錄瀏覽等內(nèi)容形成課程設(shè)計(jì)。
(4)課程考核方式改革
①平時(shí)上機(jī)訓(xùn)練時(shí)給學(xué)生留一些編程習(xí)題,每次根據(jù)學(xué)生編寫情況進(jìn)行測(cè)評(píng)并占據(jù)期末總成績(jī)30%。
②期末前,給學(xué)生留一個(gè)綜合實(shí)訓(xùn)題考核學(xué)生綜合解決問題的能力,要求同學(xué)們?cè)谝恢軆?nèi)完成,占據(jù)期末總成績(jī)30%。
③期末進(jìn)行理論考試,占期末總成績(jī)的40%。
3.展示學(xué)生作品,激發(fā)學(xué)生的學(xué)習(xí)欲望
計(jì)算機(jī)軟件課程具有多樣性、復(fù)雜性和求異性特點(diǎn),我們要針對(duì)每個(gè)學(xué)生任務(wù)完成的情況,讓同學(xué)們展示自己的勞動(dòng)成果,及時(shí)肯定學(xué)生的成績(jī),這樣會(huì)有利于激發(fā)學(xué)生們的學(xué)習(xí)熱情,保持濃厚的學(xué)習(xí)興趣,對(duì)學(xué)生的后續(xù)學(xué)習(xí)將產(chǎn)生強(qiáng)大的動(dòng)力和自信心,也可以對(duì)每次任務(wù)的完成情況進(jìn)行積分制度,算入期末成績(jī)中,以激發(fā)學(xué)生們的興趣。
4.自始至終培養(yǎng)學(xué)生的自學(xué)能力
學(xué)生學(xué)習(xí)軟件的最終目的是編寫滿足需求的程序,所以我們?cè)诮虒W(xué)中教授的不僅僅是具體語(yǔ)言的語(yǔ)法知識(shí),更重要的是通過這門語(yǔ)言學(xué)習(xí),培養(yǎng)學(xué)生遇到實(shí)際問題自己分析問題、解決問題的能力。我們可以通過給學(xué)生布置作業(yè)的形式讓同學(xué)們自學(xué),初始階段往往會(huì)遇到因?yàn)閷W(xué)生自學(xué)能力差而帶來的困難,所以在學(xué)生完成任務(wù)時(shí),老師既要要求學(xué)生獨(dú)立思考、自主學(xué)習(xí),又要鼓勵(lì)學(xué)生間進(jìn)行協(xié)作學(xué)習(xí)。教師可以分配一些比較復(fù)雜的問題,由幾個(gè)學(xué)生組成一個(gè)小組合作解決,這樣同學(xué)們可以互相探討學(xué)習(xí)方法,協(xié)作解決一些遇到的問題,通過解決問題,鍛煉學(xué)生綜合應(yīng)用知識(shí)的能力、培養(yǎng)其創(chuàng)造性和合作精神。
參考文獻(xiàn):
[1]郭芹.對(duì)高職高專計(jì)算機(jī)專業(yè)程序設(shè)計(jì)教學(xué)的思考.中國(guó)科技信息,2008(1).[2]于麗杰,王育平,董楠萍等.面向?qū)ο癯绦蛟O(shè)計(jì)綜合實(shí)踐課程教學(xué)模式的探索[J].高教論壇,2007.01.
第五篇:C語(yǔ)言程序設(shè)計(jì)
1.Problem A: Hello world!Description Xiao_ming有兩個(gè)哥哥,大哥叫Da_min,二哥叫Er_min。三兄弟放學(xué)回家,父母分別跟他們打招呼。
Input 無
Output 請(qǐng)輸出: Hello Da_min, Hello Er_min, Hello Xiao_ming!
Sample Input Sample Output Hello Da_min, Hello Er_min, Hello Xiao_ming!
HINT 請(qǐng)注意換行符
Append Code #include
printf(“Hello Da_min,n”);
printf(“Hello Er_min,n”);
printf(“Hello Xiao_ming!n”);} 2.Problem B: 求圓的面積和周長(zhǎng) Description 從鍵盤輸入圓的半徑,求圓的面積和周長(zhǎng),圓周率取3.14。
Input 輸入一個(gè)浮點(diǎn)型數(shù)據(jù),有效數(shù)字不會(huì)超過十進(jìn)制的6位。
Output 輸出為兩行。
第一行為圓的面積,第二行為圓的周長(zhǎng),格式見sample。
Sample Input 3
Sample Output Area: 28.260000 Perimeter: 18.840000
HINT 了解浮點(diǎn)類型的輸入、輸出和算術(shù)運(yùn)算符
Append Code 法一
#include
#include
double r;
scanf(“%d”,&r);
printf(“Area: %lfn”,pi*r*r);
printf(“Perimeter: %lfn”,2*pi*r);
}
3.Problem C:平均值 Description 求3個(gè)數(shù)的平均值。
Input 輸入只有一行,為3個(gè)較小的整數(shù)。
Output 輸出為這3個(gè)整數(shù)的平均值,保留3位小數(shù)。
Sample Input 1 2 3 Sample Output 2.000
HINT 注意除法運(yùn)算對(duì)整型數(shù)據(jù)和浮點(diǎn)型數(shù)據(jù)是不一樣的。
Append Code #include
4.Problem D: 求字符的值 Description 從鍵盤輸入3個(gè)字符(不含雙字節(jié)字符),分別輸出每個(gè)字符的十進(jìn)制值(ASCII碼)、八進(jìn)制值和十六進(jìn)制值。
Input 輸入為3個(gè)字符。
Output 輸出為3行。
每一行為每個(gè)字符(對(duì)應(yīng)輸入順序)的十進(jìn)制、八進(jìn)制和十六進(jìn)制值,用空格分隔開。每個(gè)輸出的值占3個(gè)字符,不足3個(gè)字符前面補(bǔ)0。
Sample Input 0 A
Sample Output 048 060 030 032 040 020 065 101 041
HINT 了解字符值的存儲(chǔ)和整型的關(guān)系。
Append Code #include
5.Problem A: 最簡(jiǎn)單的程序 Description 輸出一行“Hello world!”。
Input 無
Output Hello world!
Sample Input Sample Output Hello world!
HINT Append Code #include
printf(“Hello world!”);}
6.Problem B: 算術(shù)基本運(yùn)算 Description 計(jì)算兩整數(shù)x和y(0 Input 輸入只有一行,格式見sample。 Output 輸出為多行,按順序每行輸出x,y的和、差、積、商、余數(shù)、x的平方和y的三次方,格式見sample Sample Input x = 11, y = 3 Sample Output x + y : 14 xy : %dn“,x-y); printf(”x * y : %dn“,x*y); printf(”x / y quotient: %d, remainder: %dn“,x/y,x%y); printf(”x ^ 2 : %dn“,x*x); printf(”y ^ 3 : %dn“,y*y*y);} 7.Problem C: 自增自減運(yùn)算 Description C語(yǔ)言中有自增運(yùn)算++、自減運(yùn)算--,并且可以前置和后置。 編寫一個(gè)程序:對(duì)輸入的一個(gè)整數(shù)a,輸出a++、a--、++a、--a的值。 Input 一個(gè)整數(shù)a,a是很小的整數(shù)。 Output 輸出為5行,第一行為a的值,后面依次為--a、a--、a++、++a的值。 5行輸出縱向a要對(duì)齊,“:”對(duì)齊,“:”前后各一個(gè)空格,后面的數(shù)值不用對(duì)齊。每行行尾都有回車。 Sample Input 0 Sample Output a : 0--a :-1 a--: 0 a++ : 0 ++a : 1 HINT Append Code #include : %dn“,a);printf(”--a : %dn“,--a);a=x;printf(” a--: %dn“,a--);a=x;printf(” a++ : %dn“,a++);a=x;printf(”++a : %dn“,++a);} 8.Problem F: 絕對(duì)值 Description 求整型數(shù)據(jù)和浮點(diǎn)型數(shù)據(jù)的絕對(duì)值。 Input 輸入兩個(gè)數(shù),第一個(gè)是整數(shù),第二個(gè)是浮點(diǎn)數(shù)。 Output 輸出為兩行,第一行為整數(shù)的絕對(duì)值,第二行為浮點(diǎn)數(shù)的絕對(duì)值,注意浮點(diǎn)數(shù)的絕對(duì)值不輸出無意義的0。 Sample Input-1 1 Sample Output 1 1 HINT 求絕對(duì)值可以用標(biāo)準(zhǔn)庫(kù)函數(shù)來完成,也可以自己判斷。注意浮點(diǎn)數(shù)的輸出格式。求絕對(duì)值的函數(shù)在哪個(gè)頭文件?貌似很多人會(huì)搞錯(cuò),包括很多編書的人! Append Code #include int n; float m; scanf(”%d%f“,&n,&m); //n=abs(n); //m=fabs(m); if(n<0) { n=-n; } if(m<0) { m=-m; } printf(”%dn“,n); printf(”%g“,m); return 0;} 9.Problem A: 奇數(shù)還是偶數(shù)? Description 輸入一個(gè)整數(shù),判讀它是奇數(shù)還是偶數(shù)。 Input 輸入只有一行,為一個(gè)100以內(nèi)的正整數(shù)。 Output 輸出為一行。 若輸入為偶數(shù)則輸出“even”,奇數(shù)輸出“odd”。Sample Input 30 Sample Output even HINT 用整數(shù)運(yùn)算可以解決,練習(xí)“?:”表達(dá)式。 Append Code #include int n; scanf(”%d“,&n); if(n>=0&&n<=100){ if(n%2==0)printf(”evenn“); else printf(”oddn“); } return 0;} 10.Problem B: 簡(jiǎn)單的打折計(jì)算 Description 商店規(guī)定:消費(fèi)滿n元,可以打八八折。設(shè)某件商品標(biāo)價(jià)m元,輸入購(gòu)買的件數(shù)x,計(jì)算出需要支付的金額(單位:元),精確到分。 Input 輸入只有一行,三個(gè)整數(shù)m、n和x,且0 Sample Input 95 300 4 Sample Output 334.40 HINT 了解浮點(diǎn)型的輸出控制,注意整型和浮點(diǎn)型混合運(yùn)算過程中的數(shù)據(jù)類型轉(zhuǎn)換。 Append Code #include int m,x,n,a; float b; scanf(”%d%d%d“,&m,&n,&x); 0 x m a=m*x; if(a>n) b=0.88*a; else b=a; printf(”%.2fn“,b); } 11.Problem C: 判斷閏年 Description 輸入一個(gè)正整數(shù)的年份,判斷是否為閏年。 Input 輸入只有一行,為一個(gè)10000以內(nèi)的正整數(shù)。 Output 輸出為一行。 若輸入為閏年偶數(shù)則輸出“Yes”,否則輸出“No”。 Sample Input 2010 Sample Output No HINT 了解邏輯運(yùn)算符和關(guān)系運(yùn)算符。 Append Code #include int x; scanf(”%d“,&x); if(x>0&&x<10000) { if(x%4==0&&x%100!=0) printf(”Yesn“); else if(x%400==0) printf(”Yesn“); else printf(”Non“); } else printf(”error“);} 12.Problem D: 水仙花數(shù) Description 如果一個(gè)三位十進(jìn)制數(shù)等于其各位數(shù)字的立方和,則稱這個(gè)數(shù)為水仙花數(shù)。如:13+53+33=153。 Input 一個(gè)整數(shù)x,100<=x<=999。 Output x是水仙花數(shù),則輸出“YES”,否則為“NO”。 Sample Input 153 Sample Output YES HINT Append Code #include int a,b,c,x; scanf(”%d“,&x); a=x/100; b=x/10%10; c=x%10; if(x==a*a*a+b*b*b+c*c*c) printf(”Yes“); else printf(”No“);} 13.Problem E: 三個(gè)數(shù)比較大小 Description 從鍵盤上輸入0~100之間的三個(gè)數(shù),按從小到大的順序輸出。 Input 輸入只有一行,為三個(gè)整數(shù)。 Output 按從小到大輸出這三個(gè)數(shù)。 Sample Input 15 10 20 Sample Output 10 15 20 HINT 用if語(yǔ)句判斷各種情況可以解決這個(gè)問題。 Append Code #include int a,b,c; scanf(”%d%d%d“,&a,&b,&c); if(a>=b) { if(b>=c) printf(”%d %d %dn“,c,b,a); else if(c>=a) printf(”%d %d %dn“,b,a,c); else printf(”%d %d %dn“,b,c,a); } else { if(a>=c) printf(”%d %d %dn“,c,a,b); else if(b>=c) printf(”%d %d %dn“,a,c,b); else printf(”%d %d %dn“,a,b,c); } } 14.Problem F: 奇怪的求和之一 Description 給定3個(gè)正整數(shù)a、b和c,按照如下規(guī)則求和: 如果這個(gè)數(shù)字是偶數(shù),則累加到和中; 如果這個(gè)數(shù)字是奇數(shù),則將大于該數(shù)的最小偶數(shù)累加到和中。 Input 三個(gè)正整數(shù),均在100以內(nèi)。 Output 一個(gè)和。 Sample Input 2 3 5 Sample Output 12 HINT 如果不會(huì)使用分支語(yǔ)句,可使用條件運(yùn)算符判斷到底將哪個(gè)數(shù)累積到和中。 Append Code #include int a,b,c; scanf(”%d%d%d“,&a,&b,&c); if(a%2!=0)a++; if(b%2!=0)b++; if(c%2!=0)c++; printf(”%dn“,a+b+c); } 15.Problem G: 你過線了嗎? Description 經(jīng)過四年的學(xué)習(xí),你決定報(bào)考我國(guó)著名的“285”高校之一的北青大學(xué),經(jīng)過認(rèn)真的復(fù)習(xí),殘酷的考試,終于知曉了自己的考試成績(jī),也知道了北青大學(xué)的錄取分?jǐn)?shù)線,請(qǐng)你編程判斷,自己過線了嗎? Input 輸入有2行,第一行有4個(gè)正整數(shù),分別表示三門課程的分?jǐn)?shù)線以及總分分?jǐn)?shù)線。第二行有3個(gè)非負(fù)整數(shù),分別表示你考的三門課程的成績(jī)。 Output 如果你的三門課程成績(jī)都不低于相應(yīng)課程的分?jǐn)?shù)線,且你的考試總分也不低于北青大學(xué)的總分分?jǐn)?shù)線要求,則輸出“congratulations”,否則輸出“sorry”。 Sample Input 70 80 70 240 80 80 82 Sample Output congratulations HINT 如果你不會(huì)使用分支語(yǔ)句,同樣可以使用條件運(yùn)算符實(shí)現(xiàn)該程序。 Append Code #include int a,b,c,d,e,f,g,h; scanf(”%d %d %d %dn%d %d %d“,&a,&b,&c,&d,&e,&f,&g); h=e+f+g; if(e>=a&&f>=b&&g>=c&&h>=d) printf(”congratulations“); else printf(”sorry“);} 16.Problem I: A+B Problem(II): Input/Output Practice Description 計(jì)算a+b,0<=a,b<1000。 Input 輸入的第一行是一個(gè)整數(shù)N,后面有N對(duì)整數(shù)a和b,每對(duì)a和b占一行,a,b用空格分開。 Output 每行輸出一個(gè)a+b的和,順序與輸入對(duì)應(yīng)。 Sample Input 2 1 2 10 20 Sample Output 3 30 HINT N給出了測(cè)試樣例數(shù),用for循環(huán)處理方便。 Append Code #include int n,a,b,i;Scanf(“%d”,&n);For(i=0;i 17.Problem H: A+B Problem Description 計(jì)算a+b,0<=a,b<1000。 Input 輸入有多對(duì)整數(shù)a和b組成,每對(duì)a和b占一行,a,b用空格分開。 Output 每行輸出一個(gè)a+b的值,順序與輸入對(duì)應(yīng)。 Sample Input 1 2 10 20 Sample Output 3 30 HINT OJ系統(tǒng)上測(cè)試輸入結(jié)束符為EOF(End Of File),其值為-1。用scanf()把文件所有內(nèi)容讀完后,會(huì)讀到EOF,所以可以用來判斷輸入是否完成,測(cè)試時(shí)可以用Ctrl+Z產(chǎn)生EOF。本題解法參看FAQ。Append Code #include int a,b; while(scanf(”%d%d“,&a,&b)!=EOF){ printf(”%dn“,a+b); } return 0;} 18.Problem A: 判斷是否是元音字母 Description 輸入一個(gè)英文字母,判斷是否是元音字母。元音字母是:a,e,i,o u,A,E,I,O,U Input 輸入一個(gè)英文字母 Output 是元音字母,輸出“yes”,否則輸出“no”,行尾沒有回車。 Sample Input A Sample Output yes HINT Append Code #include char ch; scanf(”%c“,&ch); if(ch>='A'&&ch<='Z') ch=ch+32; if(ch=='a') printf(”yes“); else if(ch=='e') printf(”yes“); else if(ch=='i') printf(”yes“); else if(ch=='o') printf(”yes“); else if(ch=='u') printf(”yes“); else printf(”no“); } 19.Problem B: 按順序輸出三個(gè)數(shù) Description 對(duì)于輸入的3個(gè)整數(shù),按照從小到大的順序輸出。 Input 輸入3個(gè)int類型內(nèi)的整數(shù),兩兩之間用一個(gè)空格隔開。 Output 按照從小到大的順序輸出上述三個(gè)數(shù),兩兩之間用一個(gè)空格隔開。 Sample Input 2 1 3 Sample Output 1 2 3 HINT Append Code #include int a,b,c,temp; scanf(”%d%d%d“,&a,&b,&c); if(a { temp=a; a=b; b=temp; } if(a { temp=a; a=c; c=temp; } if(b { temp=b; b=c; c=temp; } printf(”%d %d %dn“,c,b,a);} 20.Problem E: Description 判斷輸入整數(shù)的奇偶性。 判斷奇偶數(shù) Input 輸入為一個(gè)整數(shù)。 Output 輸出只有一行,代表判斷結(jié)果。如果輸入的整數(shù)n是一個(gè)偶數(shù),輸出: n is an even number.否則輸出: n is an odd number.見樣例。 Sample Input 12 Sample Output 12 is an even number.HINT Append Code #include int a; scanf(”%d“,&a); if(a%2==0) printf(”%d is an even number.“,a); else printf(”%d is an odd number.“,a);} 21.Problem A: 判斷兩個(gè)整數(shù)的大小關(guān)系 Description 輸入2個(gè)整數(shù)a和b,如果a>b,則輸出1,否則輸出0。 Input 兩個(gè)整數(shù)a和b,均不超過int類型的表示范圍。 Output 表示a>b的結(jié)果:如果a>b,則輸出1,否則輸出0。 Sample Input 3 4 Sample Output 0 HINT Append Code #include printf(”1“); else printf(”0“);return 0;} 22.Problem D: 成績(jī)的等級(jí) Description 把百分制的考試成績(jī)轉(zhuǎn)換成五級(jí)制的成績(jī): 90~100:Excellent 80~89:Good 70~79:Average 60~69:Pass 0~59:Failing 不在0~100之間的輸入是非法數(shù)據(jù),輸出“Error”。 Input 輸入多行,每行一個(gè)整數(shù)。 Output 輸入所對(duì)應(yīng)的成績(jī)等級(jí)。 Sample Input-1 81 92 35 68 72 100 Sample Output Error Good Excellent Failing Pass Average Excellent HINT 用switch語(yǔ)句解決這個(gè)問題比較方便。 Append Code #include int score; while(scanf(”%d“,&score)!=EOF) { if(score<0||score>100) printf(”Errorn“); else { switch(score/10) { case 0: case 1: case 2: case 3: case 4: case 5:printf(”Failingn“);break; case 6:printf(”Passn“);break; case 7:printf(”Averagen“);break; case 8:printf(”Goodn“);break; case 9: case 10:printf(”Excellentn“);break; } } } return 0;} 23.Problem E: 輸出是m的倍數(shù)或n的倍數(shù)、但不是 m和n的公倍數(shù)的數(shù) Description 輸出1~k之間是m的倍數(shù)或n的倍數(shù)、但不是m和n的公倍數(shù)的數(shù),其中1<=m,n Input 輸入三個(gè)整數(shù),依次為k、m、n。 Output 從小到大輸出符合題意的所有整數(shù),兩數(shù)之間用一個(gè)空格分開。 Sample Input 15 2 3 Sample Output 2 3 4 8 9 10 14 15 HINT 難點(diǎn)在于輸出格式的控制:空格在數(shù)的中間,學(xué)會(huì)用循環(huán)時(shí)邊界情況的特殊處理。 Append Code #include a=m;else a=n;printf(”%d“,a);for(i=a+1;i<=k;i++){ } if((i%m==0&&i%n!=0)||(i%n==0&&i%m!=0)) printf(” %d“,i);} return 0; 24.Problem B: 兩整數(shù)相加減 Description 計(jì)算a+b和a-b。 Input 輸入為一對(duì)整數(shù)a和b。a,b用空格分開。 Output 輸出a+b和a-b的計(jì)算結(jié)果,各占一行。 Sample Input 1 2 Sample Output 3-1 HINT Append Code #include printf(”%dn“,a+b); printf(”%dn“,a-b);} 25 Problem C: 它滿足條件嗎? Description 需要判斷給定的一個(gè)整數(shù)是否同時(shí)滿足如下三個(gè)條件: 1.它是一個(gè)完全平方數(shù)。2.它是一個(gè)偶數(shù)。3.它是一個(gè)正數(shù)。 注:若一個(gè)數(shù)能表示成某個(gè)自然數(shù)的平方的形式,則稱這個(gè)數(shù)為完全平方數(shù)。例如: 0,1,4,9,16,25,36,49,64,81,100,121,144,169,196,225,256,289,324,361,400,441,484,529 Input 一個(gè)int范圍內(nèi)的整數(shù)。 Output 如果輸入的數(shù)字滿足條件,則輸出yes,否則輸出no。 Sample Input 100 Sample Output yes HINT 注意邏輯表達(dá)式判斷三個(gè)條件的順序。如果你不會(huì)使用分支語(yǔ)句,同樣可以使用條件運(yùn)算符實(shí)現(xiàn)該程序。 庫(kù)函數(shù)sqrt()可以用于求一個(gè)數(shù)的平方根。 Append Code #include if(a==sqrt(a)*sqrt(a)&&a%2==0&&a>0) printf(”yes“); else printf(”no“);} 26.Problem F: 多路分支 Description 編寫一個(gè)完整的程序,運(yùn)行時(shí)向用戶提問”你考試考了多少分?(0-100)“接受輸入后判斷其等級(jí)并顯示出來等級(jí): 優(yōu):90<=分?jǐn)?shù)<=100 良:80<=分?jǐn)?shù)<90 中:60<=分?jǐn)?shù)<80 差:0<=分?jǐn)?shù)<60 Input 輸入任意一個(gè)整數(shù)分?jǐn)?shù)值,顯示等級(jí);再輸入任意一個(gè)整數(shù)分?jǐn)?shù)值,顯示等級(jí);....直到測(cè)試數(shù)據(jù)較充分,可輸入-1止。 Output 對(duì)任意輸入的分?jǐn)?shù)值,輸出對(duì)應(yīng)的等級(jí),直到輸入的數(shù)為-1時(shí)才退出運(yùn)行.Sample Input 102 100 90 80 70 60 50 0-80-1 Sample Output grad must between 0 and 100 優(yōu) 優(yōu) 良 中 中 差 差 grad must between 0 and 100 grad must between 0 and 100 HINT Append Code #include int x; while(scanf(”%d“,&x)!=EOF) { if(x<0||x>100) printf(”grad must between 0 and 100n“); else if(x>=90) printf(”優(yōu)n“); else if(x>=80) printf(”良n“); else if(x>=60) printf(”中n“); else if(x>=0) printf(”差n“); } return 0;} Problem D: 有多少人? Description 學(xué)校舉行運(yùn)動(dòng)會(huì),如果全體學(xué)生按照3人一隊(duì)列隊(duì),則多了1個(gè)人;如果按照4人一隊(duì)列隊(duì),則多了2個(gè)人;如果按照5人一隊(duì)排隊(duì),則多了3個(gè)人。請(qǐng)問這個(gè)學(xué)校有多少學(xué)生? Input 一個(gè)int類型的正整數(shù)N,是學(xué)生人數(shù)的上界,即:該校學(xué)生數(shù)不超過N。 Output 所有可能的學(xué)生數(shù),每個(gè)數(shù)占一行。 Sample Input 200 Sample Output 58 118 178 HINT Append Code #include int n,i; scanf(”%d“,&n); for(i==1;i<=n;i++){ if(i%3==1&&i%4==2&&i%5==3) printf(”%dn“,i);} return 0;} Problem C: 正負(fù)數(shù)各有幾個(gè)? Description 輸入若干個(gè)整數(shù),求其中正數(shù)、負(fù)數(shù)的個(gè)數(shù)。 Input 輸入分為2行:第一行是一個(gè)數(shù)字N>0,表示下面有N個(gè)整數(shù)。第2行是N個(gè)整數(shù),都是int類型的。 Output 輸出所輸入的N個(gè)整數(shù)的正數(shù)個(gè)數(shù)和負(fù)數(shù)個(gè)數(shù),并用空格分開2個(gè)輸出。Sample Input 10 2 3 4 5-1-2-3-4-5 Sample Output 5 5 HINT 貌似還有一種叫做0的數(shù)。 Append Code #include int n,a,i,num1=0,num2=0; scanf(”%d“,&n);for(i=0;i { scanf(”%d“,&a); if(a>0) num1++; else if(a<0) num2++; } printf(”%d %dn“,num1,num2); return 0;} Problem A: A+B Problem(III): Input/Output Practice Description 計(jì)算a+b,0<=a,b<1000。 Input 輸入有多對(duì)整數(shù)a和b組成,每對(duì)a和b占一行,a,b用空格分開。當(dāng)測(cè)試樣為0 0時(shí)表示輸入結(jié)束,0 0不參與運(yùn)算。 Output 每行輸出一個(gè)a+b的值,順序與輸入對(duì)應(yīng)。 Sample Input 1 2 10 20 0 0 Sample Output 3 30 HINT 練習(xí)break的使用。 Append Code #include { if(a!=0||b!=0) } printf(”%dn“,a+b); else break; return 0;} 30 Problem B: A+B Problem(IV): Input/Output Practice Description 計(jì)算a+b,0<=a,b<1000。 Input 輸入有多對(duì)整數(shù)a和b組成,每對(duì)a和b占一行,a,b用空格分開。 Output 每行輸出一個(gè)a+b的值,順序與輸入對(duì)應(yīng)。每個(gè)格式樣例之間用一個(gè)空行分隔開。 Sample Input 1 2 10 20 15 35 Sample Output 3 30 50 HINT 由于輸出的和比空行多一個(gè),所以全部計(jì)算放在一個(gè)循環(huán)里是不行的,必須要特殊處理開頭或者結(jié)尾。 Append Code #include n++; if(n==1) printf(”%dn“,a+b); else printf(”n%dn“,a+b); } return 0;} Problem C: n個(gè)數(shù)的最大值和最小值 Description 找出n個(gè)數(shù)中最大的數(shù)和最小的數(shù),并將它們的值輸出出來。 Input 輸入為n+1個(gè)整數(shù),都在int類型范圍內(nèi)。這些數(shù)可能用若干空格或者換行符分隔開。輸入的第1個(gè)數(shù)為n,表示后續(xù)有n個(gè)數(shù)輸入。從輸入的第2個(gè)數(shù)開始,求出直到第n+1個(gè)數(shù)中最大的數(shù)和最小的數(shù)。 Output 輸出為兩行,格式見sample。 Sample Input 3 0 1-1 Sample Output The maximum number is 1.The minimum number is-1.HINT 分隔符是空格還是回車都是空白符,對(duì)scanf(”%d“)來說沒有區(qū)別;先讀入n,然后用for循環(huán)就很容易控制讀入n個(gè)數(shù)的過程。 Append Code #include int n,i,max,min; scanf(”%d“,&n); int a[n];