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