新聞中心
c語言入門教學(xué)
初學(xué)C語言程序設(shè)計(jì)的基本方法和技巧
創(chuàng)新互聯(lián)公司是一家專業(yè)提供卓尼企業(yè)網(wǎng)站建設(shè),專注與成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)、外貿(mào)營銷網(wǎng)站建設(shè)、HTML5建站、小程序制作等業(yè)務(wù)。10年已為卓尼眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進(jìn)行中。
C語言是一門應(yīng)用最廣泛的基礎(chǔ)高級(jí)編程語言,有很多語言都是由它發(fā)展而來的,所以學(xué)習(xí)好C語言之后再學(xué)習(xí)任何一種編程語言都會(huì)輕松上手。
1 熟記基本知識(shí)點(diǎn)
學(xué)習(xí)C語言和學(xué)習(xí)任何一種語言的方法基本一樣。我們嬰兒期間咿呀學(xué)語時(shí),從一個(gè)字開始學(xué),然后兩個(gè),接著更多,最后我們能成句,成段,到出口成章。學(xué)習(xí)C語言的時(shí)候也一樣,有些最基本的內(nèi)容必須要記下來。
1.1 關(guān)鍵字
關(guān)鍵字是由C語言規(guī)定的具有特定意義的字符串。它們是寫C語言的基礎(chǔ),如果關(guān)鍵字不記下來,那編程是寸步難行。
1.2 運(yùn)算符
C語言中的運(yùn)算符和表達(dá)式與我們數(shù)學(xué)上的運(yùn)算符和表達(dá)式有相同的,也有不同的。我們?cè)趯W(xué)習(xí)的時(shí)候就注意記住并弄清楚那些不同的地方。基本的語法表達(dá)式及執(zhí)行過程。選擇結(jié)構(gòu)中的if語句和switch語句。循環(huán)語句中的for語句、while語句和do-while語句。這部分就好比是你會(huì)了許多詞,然后得把這些詞組成一些句子,語法的作用就是告訴你怎樣說好一句話,表達(dá)清楚的意思。
1.3 常用庫函數(shù)
在這里最重要有兩個(gè)函數(shù):輸入函數(shù)scanf()和輸出函數(shù)printf()。一個(gè)程序如果沒有輸入,那無論運(yùn)行多少次結(jié)果都一樣,那也就失去了寫程序的目的了。同樣一個(gè)程序如果沒有輸出,那運(yùn)行程序有什么意義呢?當(dāng)然輸出的形式比較多。在初學(xué)C語言的時(shí)候主要是從屏幕上輸出結(jié)果。所以這兩個(gè)函數(shù)的使用方法也必須要掌握。這兩個(gè)函數(shù)已經(jīng)定義在stdio.h這個(gè)頭文件中,不用我們自己寫,它們不是C語言中的語句,所以在使用這兩個(gè)函數(shù)時(shí)在源程序頂部一定要加上#include 。這是為了讓我們?cè)趫?zhí)行程序的時(shí)候,讓計(jì)算機(jī)知道scanf()和printf()這兩個(gè)函數(shù)怎么用。
掌握上面的必須要記下來的內(nèi)容,相當(dāng)于我們開始學(xué)說話時(shí)先聽別人說,我們自己跟著學(xué)一些最基本的日常語言。這時(shí)我們就可以從一些簡(jiǎn)單的程序開始讀,能把每一個(gè)程序的運(yùn)行結(jié)果能自己讀程序準(zhǔn)確地執(zhí)行出來,那樣我們就可以開始來編寫程序了。
2 掌握程序的基本結(jié)構(gòu)
編寫程序一定要注意程序的結(jié)構(gòu)性。學(xué)習(xí)寫程序,不能開始就寫代碼。許多人在動(dòng)手寫程序的時(shí)候感到無從下筆。原因主要是:看到一個(gè)題目不知道如何去分析,它怎么才能變成一個(gè)程序呢?這是初學(xué)者在編寫程序的主要問題。我在教學(xué)中采用了一種分步式的方法。
2.1 看到一個(gè)題目的時(shí)候先別想著編程序,用一個(gè)具體的實(shí)例想想不用程序你是如何解決這個(gè)問題的
例如輸入三個(gè)數(shù),輸出最小值。我們用3,8,6三個(gè)數(shù)來考慮,我們一看就知道3是最小的??墒俏覀冞@一看中其實(shí)并不簡(jiǎn)單,其中有判斷。我們先看第一個(gè)數(shù)3,然后已經(jīng)記在我們頭腦中了,再看第二個(gè)數(shù)8,3比8小,那我們還是記住3,再比較第3個(gè)數(shù)6,最后確定3是最小的。我們現(xiàn)在就是要把我們頭腦中很快閃過的這些判斷過程想清楚。
2.2 我們要弄清楚一個(gè)程序由哪些部分組成
這就好比我們寫一篇文章也有一些結(jié)構(gòu)。一個(gè)C程序也有其一般結(jié)構(gòu),我把它歸納成下面格式。
#include
main()
{
定義變量;int,float,char,double
輸入數(shù)據(jù);鍵盤輸入scanf();
直接賦值;例如x=3;
處理數(shù)據(jù);if-else;switch;for;while;do-while;
輸入數(shù)據(jù);printf();
}
第一行代碼表示把標(biāo)準(zhǔn)的輸入輸出頭文件包含在這個(gè)程序中。第二行代碼是C程序的主函數(shù),每個(gè)C程序中必須有且僅有一個(gè)main()函數(shù)。然后是函數(shù)的一對(duì)“{}”。
定義變量的意思好比買一塊地,有了這塊地就可以在上面蓋房、種莊稼之類的。但是為了便于統(tǒng)一管理,比如城市已經(jīng)規(guī)劃好了,你在郊區(qū)買的地就只能種莊稼,在市中心買的,就只能蓋房,這就是變量類型的含義了。用上面求最小值的例子。我們?cè)谌齻€(gè)數(shù)中求最小值。這三個(gè)是什么數(shù),是整數(shù)還是小數(shù)?這就必須用變量類型來說明。對(duì)于上例應(yīng)該定義三個(gè)整型變量用來存放三個(gè)整數(shù),還要定義一個(gè)整型變量用來存放最小值。如:int a,b,c,min;這行代碼的作用其實(shí)是要了一塊內(nèi)存,然后在這塊內(nèi)存里存東西。因?yàn)槲倚枰粋€(gè)整數(shù),所以就用int這個(gè)關(guān)鍵字來聲明(相當(dāng)于用這塊地干什么)。那么變量a,b,c是什么呢?你買了一塊地,總要知道這塊地在哪是吧?不然就白買了,變量就是這樣一個(gè)作用。我們需要把數(shù)據(jù)存在計(jì)算機(jī)中,什么樣的數(shù)就定義什么樣的類型,需要存幾個(gè)數(shù)就定義幾個(gè)變量。
輸入數(shù)據(jù)有兩種方法。第一種從鍵盤輸入,就需要用到scanf()這個(gè)函數(shù);第二種是直接賦值。
處理數(shù)據(jù)是對(duì)于初學(xué)者來說最難的一部分,也就是把我們剛才分析過程轉(zhuǎn)換成語句。這需要學(xué)好C語言的三種程序結(jié)構(gòu)。
(1)順序結(jié)構(gòu)
順序結(jié)構(gòu)的程序設(shè)計(jì)是最簡(jiǎn)單的,只要按照解決問題的順序?qū)懗鱿鄳?yīng)的語句就行,它的執(zhí)行順序是自上而下,依次執(zhí)行。順序結(jié)構(gòu)可以獨(dú)立使用構(gòu)成一個(gè)簡(jiǎn)單的完整程序,不過大多數(shù)情況下順序結(jié)構(gòu)都是作為程序的一部分,與其它結(jié)構(gòu)一起構(gòu)成一個(gè)復(fù)雜的程序,例如分支結(jié)構(gòu)中的復(fù)合語句、循環(huán)結(jié)構(gòu)中的循環(huán)體等。
(2)選擇結(jié)構(gòu)
對(duì)于要先做判斷再選擇的問題就要使用分支結(jié)構(gòu)。選擇結(jié)構(gòu)的執(zhí)行是依據(jù)一定的條件選擇執(zhí)行路徑,而不是嚴(yán)格按照語句出現(xiàn)的物理順序。選擇結(jié)構(gòu)的程序設(shè)計(jì)方法的關(guān)鍵在于構(gòu)造合適的分支條件和分析程序流程,根據(jù)條件的結(jié)果選擇對(duì)應(yīng)的分支語句。選擇結(jié)構(gòu)適合于帶有邏輯或關(guān)系比較等條件判斷的計(jì)算,設(shè)計(jì)這類程序時(shí)往往都要先繪制其程序流程圖,然后根據(jù)程序流程寫出源程序,這樣做把程序設(shè)計(jì)分析與語言分開,使得問題簡(jiǎn)單化,易于理解。程序流程圖是根據(jù)解題分析所繪制的程序執(zhí)行流程圖。
例如上例中,把我們頭腦中很快閃過的這些判斷過程畫成流程圖即圖1:
由上面的流程圖再寫出對(duì)應(yīng)的語句就比較容易了。如下所示:
min=a;
if(minb) min=b;
if(minc) min=c;
學(xué)習(xí)分支結(jié)構(gòu)不要被分支嵌套所迷惑,只要正確繪制出流程圖,弄清各分支所要執(zhí)行的部分,嵌套結(jié)構(gòu)也就不難了。嵌套只不過是分支中又包括分支語句而已,不是新知識(shí),只要對(duì)雙分支的理解清楚,分支嵌套是不難的。下面我介紹幾種基本的分支結(jié)構(gòu)。
①if(條件)
{ 分支體
}
這種分支結(jié)構(gòu)中的分支體可以是一條語句,此時(shí)“{ }”可以省略,也可以是多條語句即復(fù)合語句。它有兩條分支路徑可選,一是當(dāng)條件為真,執(zhí)行分支體,否則跳過分支體,這時(shí)分支體就不會(huì)執(zhí)行。如:要計(jì)算x的絕對(duì)值,根據(jù)絕對(duì)值定義,我們知道,當(dāng)x=0時(shí),其絕對(duì)值不變,而x0時(shí)其絕對(duì)值是為x的反號(hào),因此程序段為:if(x0) x=-x;
②if(條件)
{分支1}
else
{分支2}
這是典型的分支結(jié)構(gòu),如果條件成立,執(zhí)行分支1,否則執(zhí)行分支2,分支1和分支2都可以是1條或若干條語句構(gòu)成。如:求某年的年號(hào)是否是閏年。
分析:因?yàn)楫?dāng)某年號(hào)能被4整除但不能被4整除但不能被100整除,則這一年是閏年;或者這一年號(hào)能被400整除也是閏年。即year%4==0year%100!=0||year%400==0
其程序段如下:
if(year%4==0year%100!=0||year%400==0)
printf(“%d is leap year!”,year);
else
printf(“%d is not leap year!”,year);
}
③嵌套分支語句:其語句格式為:
if(條件1) {分支1};
else if(條件2) {分支2}
else if(條件3) {分支3}
……
else if(條件n) {分支n}
else {分支n+1}
嵌套分支語句雖可解決多個(gè)入口和出口的問題,但超過3重嵌套后,語句結(jié)構(gòu)變得非常復(fù)雜,對(duì)于程序的閱讀和理解都極為不便,建議嵌套在3重以內(nèi),超過3重可以用switch語句。
④switch開關(guān)語句:該語句也是多分支選擇語句,到底執(zhí)行哪一塊,取決于開關(guān)設(shè)置,也就是表達(dá)式的值與常量表達(dá)式相匹配的那一路,它不同if…else 語句,它的所有分支都是并列的,程序執(zhí)行時(shí),由第一分支開始查找,如果相匹配,執(zhí)行其后的塊,接著執(zhí)行第2分支,第3分支……的塊,直到遇到break語句;如果不匹配,查找下一個(gè)分支是否匹配。這個(gè)語句在應(yīng)用時(shí)要特別注意開關(guān)條件的合理設(shè)置以及break語句的合理應(yīng)用。
(3)循環(huán)結(jié)構(gòu)
循環(huán)結(jié)構(gòu)可以減少源程序重復(fù)書寫的工作量,用來描述重復(fù)執(zhí)行某段算法的問題,這是程序設(shè)計(jì)中最能發(fā)揮計(jì)算機(jī)特長的程序結(jié)構(gòu),C語言中提供三種循環(huán),即while循環(huán)、do while循環(huán)和for循環(huán)。三種循環(huán)可以用來處理同一問題,一般情況下它們可以互相代替換,另外還有一種goto循環(huán)語句,因?yàn)閺?qiáng)制改變程序的順序經(jīng)常會(huì)給程序的運(yùn)行帶來不可預(yù)料的錯(cuò)誤,所以不提倡使用。
常用的三種循環(huán)結(jié)構(gòu)學(xué)習(xí)的重點(diǎn)在于弄清它們相同與不同之處,以便在不同場(chǎng)合下使用,這就要清楚三種循環(huán)的格式和執(zhí)行順序,將每種循環(huán)的流程圖理解透徹后就會(huì)明白如何替換使用,就能更好地理解它們的作用。在分析循環(huán)結(jié)構(gòu)的語句時(shí)要開清楚,什么時(shí)候開始循環(huán)(即循環(huán)的初始值);什么時(shí)候結(jié)束循環(huán)(即循環(huán)的終止條件);循環(huán)的時(shí)候都做哪些操作(即循環(huán)體的執(zhí)行部分);特別要注意在循環(huán)體內(nèi)應(yīng)包含趨于結(jié)束的語句(即循環(huán)變量值的改變),否則就可能成了一個(gè)死循環(huán),這是初學(xué)者的一個(gè)常見錯(cuò)誤。
在學(xué)完這三個(gè)循環(huán)后,應(yīng)明確它們的異同點(diǎn):用while和do…while循環(huán)時(shí),循環(huán)變量的初始化的操作應(yīng)在循環(huán)體之前,而for循環(huán)一般在語句1中進(jìn)行的;while 循環(huán)和for循環(huán)都是先判斷表達(dá)式,后執(zhí)行循環(huán)體,而do…while循環(huán)是先執(zhí)行循環(huán)體后判斷表達(dá)式,也就是說do…while的循環(huán)體最少被執(zhí)行一次,而while 循環(huán)和for就可能一次都不執(zhí)行。
順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)并不彼此孤立的,在循環(huán)中可以有分支、順序結(jié)構(gòu),分支中也可以有循環(huán)、順序結(jié)構(gòu),其實(shí)不管哪種結(jié)構(gòu),我們均可廣義的把它們看成一個(gè)語句。在實(shí)際編程過程中常將這三種結(jié)構(gòu)相互結(jié)合以實(shí)現(xiàn)各種算法,設(shè)計(jì)出相應(yīng)程序,但是要編程的問題較大,編寫出的程序就往往很長、結(jié)構(gòu)重復(fù)多,造成可讀性差,難以理解,解決這個(gè)問題的方法是將C程序設(shè)計(jì)成模塊化結(jié)構(gòu)。輸出數(shù)據(jù)是每一個(gè)程序必須包含的部分。在C程序中的輸出通常是從顯示屏上輸出最后的結(jié)果,使用printf()這個(gè)函數(shù)。
3 掌握一些簡(jiǎn)單常用的算法
編程其實(shí)一大部分工作就是分析問題,找到解決問題的方法,再以相應(yīng)的編程語言寫出代碼。這就好比我們學(xué)習(xí)寫作文段落的時(shí)候都有一些經(jīng)典的好詞好句,可以使文章添彩。同樣程序雖然可以實(shí)現(xiàn)各種功能,但最基本的一些算法并不是特別多,我們掌握一些簡(jiǎn)單的算法,在掌握這些基本算法后,根據(jù)不同的問題,再靈活應(yīng)用。如百錢買百雞的問題,就是用100元錢買100只雞,公雞5元一只,母雞3元一只,小雞1元三只。這種問題用數(shù)學(xué)方法可以列出方程:
x+y+z=100
5*x+3*y+z/3=100
按數(shù)學(xué)方法三個(gè)未知數(shù)兩個(gè)方程無解,實(shí)際上是可以解的,如果把公雞,母雞和小雞可能的只數(shù)全部代入到方程中檢驗(yàn)就可以得到最后結(jié)果。這種方法叫窮舉法。如果我們用手算那可能要花上半天的功夫,但讓計(jì)算機(jī)來算就只需要1秒種。使用算法后分析和處理問題都會(huì)簡(jiǎn)單很多。當(dāng)我們能熟練地掌握了簡(jiǎn)單算法后就能實(shí)現(xiàn)一些比較復(fù)雜的編程問題了。
任何程序只要有思維,有想法,那么實(shí)現(xiàn)程序時(shí)就不會(huì)覺得無從下手。而要學(xué)習(xí)這種思維方法就是多做題,多讀程序,學(xué)習(xí)別人好的思維方法,多想想一個(gè)程序還可不可以有另外一種方法來實(shí)現(xiàn)它。這樣久而久之,自然會(huì)形成一種自己的思維方法。因此我認(rèn)為不管學(xué)什么語言都是這樣。
4 培養(yǎng)良好的編程習(xí)慣
培養(yǎng)良好的編程習(xí)慣要從第一行代碼開始,這也是學(xué)好C語言的重要因素。例如編寫程序時(shí)用縮進(jìn)的方式、寫注釋、程序?qū)懙揭欢ǖ碾A段時(shí)要做一下測(cè)試等。這些工作可以幫我們?cè)谡{(diào)試程序時(shí)有很大的幫助。程序代碼實(shí)現(xiàn)后,錯(cuò)誤是難免的,所以也要鍛煉自己的調(diào)試查錯(cuò)能力,而良好的編程習(xí)慣可以使我們?cè)谡{(diào)試時(shí)減小工作量和提高調(diào)試效率,也有助于形成自己的編程風(fēng)格。
C語言教學(xué)探討
注重編程細(xì)節(jié),培養(yǎng)編程技巧
C語言的規(guī)則頗多,編寫C程序得嚴(yán)格按照其規(guī)則進(jìn)行程序設(shè)計(jì),對(duì)初學(xué)者而言,常常馬虎大意,所編寫的程序不能正常編譯和執(zhí)行結(jié)果,從而打消學(xué)生的學(xué)習(xí)積極性。因此在教學(xué)初期,教師必須強(qiáng)調(diào)C的許多細(xì)節(jié)問題,讓學(xué)生的這種不良習(xí)慣扼殺于“萌芽”狀態(tài)。如學(xué)生常常在寫程序時(shí)出現(xiàn)以下問題:
3.1 字母大小寫問題
C語言程序嚴(yán)格區(qū)分字母的大、小寫,此規(guī)則一定給學(xué)生講清楚,讓其記住那些特例。如用科學(xué)計(jì)數(shù)法表示浮點(diǎn)數(shù)中的“E”,弄清該計(jì)數(shù)法的規(guī)則,其中的字母“E”可以不區(qū)分大、小寫;再如表示16進(jìn)制數(shù)的符號(hào)“0x”,其中字母“x”也可不區(qū)分大、小寫等等,在教學(xué)過程中,對(duì)該類問題進(jìn)行總結(jié)、歸納讓學(xué)生一次就掌握并記住。
3.2 標(biāo)點(diǎn)符號(hào)問題
學(xué)生在錄入程序時(shí),往往忽略標(biāo)點(diǎn)符號(hào)。問題主要表現(xiàn)在:
(1)忘記錄入標(biāo)點(diǎn),C語言中,一條語句的結(jié)束需要用符號(hào)“;”與另一語句隔開,對(duì)初學(xué)的學(xué)生,他們通常會(huì)忽略掉這個(gè)細(xì)節(jié)問題,這需要教師在講授中明確地指出,讓學(xué)生弄清楚。另外,強(qiáng)調(diào)不同標(biāo)點(diǎn)符號(hào)的作用和區(qū)別,如“;”和“,”等等。
(2)標(biāo)點(diǎn)錄入錯(cuò)誤,在錄入程序時(shí),很多學(xué)生錄入的標(biāo)點(diǎn)是不正確的。如分號(hào)“;”和“;”是有區(qū)別的,前者為中文下的標(biāo)點(diǎn)符號(hào),而后者才是程序中需要的。必須給學(xué)生強(qiáng)調(diào)程序中所需要的標(biāo)點(diǎn)符號(hào)都應(yīng)該是英文狀態(tài)下的。
3.3 容易混淆的符號(hào)
字母符號(hào)“o”,“O”與數(shù)字符號(hào)“0”;字母符號(hào)“l(fā)”與數(shù)字符號(hào)“1”;字母符號(hào)“z”與數(shù)字符號(hào)“2”的區(qū)別等等。
對(duì)于少數(shù)學(xué)生,教師雖然強(qiáng)調(diào)了很多的細(xì)節(jié),但還是不能接受,這便通過程序的調(diào)試來讓他們明白問題的嚴(yán)重性,通過他們自己對(duì)程序的調(diào)試來糾正問題的所在,這需要教師耐心地為學(xué)生指導(dǎo)。如程序xx.c:
#include stdio.h
void main()
{
int a=10
printf("a=%d\n",a);
}
編譯時(shí)出現(xiàn)以下問題:xx.c(5) : error C2146: syntax error : missing ';' before identifier 'printf',給學(xué)生講解提示,讓學(xué)生通過提示明白問題所在,即該程序第5行的printf語句前缺少“;”,這是學(xué)生自己通過實(shí)踐證明了問題的所在,使之深受體會(huì)。通過程序調(diào)試的方法不僅可以為學(xué)生解決錯(cuò)誤,同時(shí)也增強(qiáng)了學(xué)生調(diào)試程序的能力,從而提高編程的經(jīng)驗(yàn)和技巧。
4 明確教學(xué)目標(biāo),任務(wù)驅(qū)動(dòng)學(xué)習(xí)
教師深入分析教學(xué)大綱, 在全面了解學(xué)生的數(shù)學(xué)基礎(chǔ)知識(shí)狀況的前提下, 根據(jù)大綱制定好教學(xué)計(jì)劃,做好每次教學(xué)任務(wù)計(jì)劃,明確教學(xué)目標(biāo),選擇適當(dāng)?shù)木毩?xí)作業(yè),督促學(xué)生不斷深入學(xué)習(xí)。
在制定計(jì)劃的過程中要針對(duì)學(xué)生的數(shù)學(xué)知識(shí)基礎(chǔ), 將教材中涉及到的學(xué)生未掌握的數(shù)學(xué)知識(shí)類例題進(jìn)行更換, 避免因數(shù)學(xué)的方面的問題形成教學(xué)障礙, 在課時(shí)允許的條件下也可在教學(xué)前為學(xué)生補(bǔ)充一定的數(shù)學(xué)方面相關(guān)知識(shí)。
設(shè)計(jì)“循環(huán)”語句教案時(shí),可以先給學(xué)生講清楚學(xué)習(xí)循環(huán)語句的用處及優(yōu)點(diǎn),介紹學(xué)習(xí)重點(diǎn)、難點(diǎn),要求掌握一些程序設(shè)計(jì)的算法,讓他們明確該語句的重要性。如實(shí)現(xiàn)求等差數(shù)列s=1+2+3+…+n的和時(shí),主要介紹使用循環(huán)語句求解,并要求學(xué)生掌握其求解方法,并按照此方法推廣,以掌握算法思想,然后再通過作業(yè)的任務(wù)編寫壘加算法的相關(guān)程序,如求s=1!+2!+3!+…+n!等,學(xué)生通過自己的練習(xí)不斷總結(jié)編寫循環(huán)程序的經(jīng)驗(yàn),體會(huì)循環(huán)的思想,使得他們對(duì)循環(huán)語句有更深的理解和認(rèn)識(shí),從而達(dá)到較好的教學(xué)效果。
5 改進(jìn)教學(xué)方法,實(shí)現(xiàn)教學(xué)相長
傳統(tǒng)教學(xué)模式的教學(xué)方式是:用大量的時(shí)間講定義、語法、概念、語句,對(duì)學(xué)生的要求是注重接受、理解、記憶,講課方式是老師講、學(xué)生聽。學(xué)生掌握的知識(shí)比較抽象、機(jī)械、靜止、片面和孤立,他們不知道如何靈活地綜合運(yùn)用這些知識(shí)去解決實(shí)際問題?;A(chǔ)知識(shí)固然重要,但利用基礎(chǔ)知識(shí)解決實(shí)際問題能力的培養(yǎng)是高等教育更為重要的目的。如何使當(dāng)前的大學(xué)生具備扎實(shí)基礎(chǔ)知識(shí)的同時(shí),又具備解決實(shí)際問題、批判性思維和創(chuàng)造性思維,發(fā)展合作能力與自主學(xué)習(xí)能力,是目前急待解決的問題,也是人們進(jìn)行教學(xué)改革的思路。
注重問題求解方法,掌握算法思想。如實(shí)現(xiàn)求等差數(shù)列s=1+2+3+…+n的和時(shí),該數(shù)列的求解方法有多種。除了使用循環(huán)語句求解外,還可以通過公式s=(1+n)*n/2進(jìn)行求,也可以使用函數(shù)的遞歸調(diào)用進(jìn)行求解。通過多種方法的介紹,不僅可以鞏固學(xué)生的基礎(chǔ)知識(shí),又能培養(yǎng)學(xué)生的創(chuàng)造性思維。
在教學(xué)中一定要做到培養(yǎng)學(xué)生學(xué)習(xí)興趣,讓學(xué)生體驗(yàn)成功樂趣,改變學(xué)習(xí)方式,促進(jìn)教學(xué)互動(dòng)。
6 知識(shí)轉(zhuǎn)變能力培養(yǎng),注重實(shí)踐課教學(xué)
計(jì)算機(jī)科學(xué)是一門經(jīng)驗(yàn)學(xué)科與理論學(xué)科相結(jié)合的課程,在學(xué)習(xí)時(shí),不僅要掌握理論知識(shí),而且實(shí)踐操作的經(jīng)驗(yàn)的積累也非常重要。C語言變成實(shí)踐經(jīng)驗(yàn)的積累是不斷從編寫程序、調(diào)試程序和運(yùn)行程序結(jié)果的過程中總結(jié)得出,由此,教師在講授C語言課程時(shí),不能忽視實(shí)踐課的教學(xué),尤其是學(xué)生上機(jī)輔導(dǎo)課的教學(xué)。
往往,很多教師認(rèn)為,上機(jī)輔導(dǎo)課就是讓學(xué)生自由練習(xí),及時(shí)為有疑問的學(xué)生解決問題。實(shí)際上這種教學(xué)輔導(dǎo)方式是不合理的,應(yīng)該在以下方面進(jìn)行改進(jìn):
1)學(xué)生上機(jī)應(yīng)有明確的練習(xí)目標(biāo),提高編程效率
在每學(xué)期的教學(xué)調(diào)查中,同學(xué)們總會(huì)提到這樣的問題:上機(jī)課不知道該干什么;寫程序無從下手;編程很難等。這就要求我們教師在上機(jī)課程中要有目的有意識(shí)的給同學(xué)安排上機(jī)的任務(wù)。應(yīng)該從以下幾點(diǎn)來進(jìn)行上機(jī)課程:
(1)結(jié)合上課的理論知識(shí),確定上機(jī)課要完成的目標(biāo)。
(2)引入相關(guān)的程序?qū)嵗?,逐步分析解決該程序的思路和相關(guān)的程序代碼。讓學(xué)生了解如何下手去編寫程序。
(3)根據(jù)引入的程序?qū)嵗贁U(kuò)展開,讓同學(xué)們自己動(dòng)手完成相關(guān)的程序代碼。
(4)評(píng)講相關(guān)的程序代碼,并引出新的程序,讓學(xué)生自己獨(dú)立的完成。
(5)課程隨時(shí)的課堂答疑。
2)激發(fā)學(xué)生的學(xué)習(xí)興趣
學(xué)生學(xué)習(xí)的最關(guān)鍵的因素是興趣,一定要注意提高學(xué)生學(xué)習(xí)的興趣,如何提高是一個(gè)很關(guān)鍵的問題。首先要充分的肯定學(xué)生,即便是一點(diǎn)點(diǎn)值得肯定的地方也要肯定。其次多評(píng)價(jià)學(xué)生做的作業(yè),讓學(xué)生有一定的滿足感。最后多讓枯燥的程序與實(shí)際的生活聯(lián)系起來。這樣就可以大大的提高學(xué)生的學(xué)習(xí)興趣。
7 小結(jié)
以上就是在學(xué)習(xí)和教授過程中,對(duì)C語言程序設(shè)計(jì)教學(xué)課程的心得體會(huì),希望對(duì)廣大的同仁能有一定的參考價(jià)值
C語言快速學(xué)習(xí)技巧(原創(chuàng))默認(rèn)分類 2010-03-14 12:09:53 閱讀46 評(píng)論0 字號(hào):大中小
從最基本的流程學(xué)起,從最基本的語句學(xué)起。在學(xué)習(xí)的過程中,特別注意每個(gè)函數(shù)的作用,多想想這個(gè)函數(shù)能怎樣用,用在哪里,能起到什么另外的效果!要學(xué)會(huì)活用!程序,對(duì)數(shù)學(xué),特別是邏輯的要求把比較高。寫好程序,首先對(duì)整個(gè)程序的流程有縝密的思考,要求周到,準(zhǔn)確,先思考,不要急著寫程序?。∵@一點(diǎn)請(qǐng)注意!也就是說先算法,先研究程序的結(jié)構(gòu),是用什么來實(shí)現(xiàn)的,循環(huán)?分支?等等。然后再用語言來實(shí)現(xiàn)!語言只是編寫程序的工具。所以學(xué)語言,先學(xué)會(huì)程序化的思想。在將算法翻譯成語言的時(shí)候,再結(jié)合實(shí)際情況,逐步求精,有目的的修改,達(dá)到最優(yōu)化。我們學(xué)院的C語言,很有特色,英文版,考試也是。我想說的就是,外文版的這本書,它在引領(lǐng)一個(gè)不懂編程的人,逐步養(yǎng)成程序、流程、邏輯的思想,是非常優(yōu)秀的一本書。如果能字字句句閱讀,將會(huì)很清楚領(lǐng)會(huì)到程序的思想。然而,書太厚,生詞太多,時(shí)間太短。我的建議是,看某一本中文版的書,一本不夠,看兩本。先盡快學(xué)會(huì)程序的思想,也就是用程序來想問題,這樣,就會(huì)編程了。然后,考試前幾周,背一背生詞、關(guān)鍵詞,就可以考試了。如果你堅(jiān)持要讀外文版,可以,但要跳讀!然后,還要看你是想只是應(yīng)付期末考試,還是想學(xué)好編程。應(yīng)付期末考,需要注意書中的重點(diǎn),也就是考點(diǎn),這樣就夠了。比如說字符型變量加指針,這樣就夠了,不需要更高級(jí)的指針的知識(shí)。而你如果想真正學(xué)好程序(我不說C語言是因?yàn)槲艺f過C語言只是編寫程序的工具之一),肯定是要打好基礎(chǔ)的!任何一個(gè)細(xì)節(jié),都是不能放過的!而且,這樣的人往往會(huì)很郁悶~因?yàn)槲覀兂绦蛘嬲蟮?,考試一般不?huì)涉及到,因?yàn)楸容^難?。ú粫?huì)指針的人,永遠(yuǎn)不要說他會(huì)C語言!)而考試的內(nèi)容,恰恰是最無聊的東西,比如格式化輸出printf函數(shù)的第一個(gè)參數(shù),太繁了,記都記不住。如果學(xué)的深的話,只需要知道有這么一個(gè)函數(shù),有這么一個(gè)功能。而要用的時(shí)候,查書就行??墒菍?duì)考試來說,顯然不行。所以要看看你是哪一種~掌握一些簡(jiǎn)單的算法 編程其實(shí)一大部分工作就是分析問題,找到解決問題的方法,再以相應(yīng)的編程語言寫出代碼。這就要求掌握算法,根據(jù)我們的《C程序設(shè)計(jì)》教學(xué)大綱中,只要求我們掌握一些簡(jiǎn)單的算法,在掌握這些基本算法后,要完成對(duì)問題的分析就容易了。如兩個(gè)數(shù)的交換、三個(gè)數(shù)的比較、選擇法排序和冒泡法排序,這就要求我們要清楚這些算法的內(nèi)在含義,其中選擇法排序和冒泡法排序稍難,但只要明白排序的具體過程,對(duì)代碼的理解就不難了。如用選擇法對(duì)10個(gè)不同整數(shù)排序(從小到大),選擇法排序思路:設(shè)有10個(gè)元素a[1]~a[10],將a[1]與a[2]~a[10]比較,若a[1]比a[2]~a[10]都小,則不進(jìn)行交換,即無任何操作;若a[2]~a[10] 中有一個(gè)比a[1]小,則將其中最大的一個(gè)(假設(shè)為a[i])與a[1]交換,此時(shí)a[1]中存放了10個(gè)中最小的數(shù)。第二輪將a[2]與a[3]~a[10]比較,將剩下9個(gè)數(shù)中的最小者a[i]與a[2]交換,此時(shí)a[2] 中存放的10個(gè)數(shù)中第2小的數(shù);依此類推,共進(jìn)行9輪比較,a[1]到a[10]就已按從小到大的順序存放。即每一輪都找出剩下數(shù)中的最小一個(gè),代碼如下: for(i=1;i=9;i++) for(j=i+1;j=10;j++) if(a[i]a[j] {temp=a[i]; a[i]=a[j]; a[j]=temp; } 結(jié)語:當(dāng)我們把握好上述幾方面后,只要同學(xué)們能克服畏難、厭學(xué)、上課能專心聽講,做好練習(xí)與上機(jī)調(diào)試,其實(shí)C語言并不難學(xué).
c語言程序設(shè)計(jì) 第八章 函數(shù)
#includestdio.h
#define N 3
void convert(int array[3][3])
{
int i,j,t;
for(i=0;iN;i++)
for(j=i+1;jN;j++)
{
t=array[i][j];
array[i][j]=array[j][i];
array[j][i]=t;
}
}
void main()
{
int i,j,a[3][3];
for(i=0;iN;i++)
for(j=0;jN;j++)
scanf("%d",a[i][j]);
convert(a);
for(i=0;iN;i++)
{
for(j=0;jN;j++)
printf("%5d",a[i][j]);
printf("\n");
}
}
c語言程序設(shè)計(jì)
//?1
#include?stdio.h
#define?FRATIOBASE (100)
#define?DRATIOBASE (40)
float?score(int?fgrade,?int?dgrade);
float?score(int?fgrade,?int?ngrade)
{
float?result;
if?(fgrade?=?60)
return?fgrade;
result?=?(float)fgrade?*?60.0?/?(float)?FRATIOBASE?+?(float)ngrade?*?40.0?/?(float)DRATIOBASE;
return?result;
}
int?main()
{
int?s,?n;
float?t;
printf("請(qǐng)出入期末成績(jī):?");
scanf("%d",?s);
printf("請(qǐng)輸入平時(shí)成績(jī):?");
scanf("%d",?n);
t?=?score(s,?n);
printf("總評(píng)成績(jī)?yōu)??%.2f",?t);
return?0;
}
//?2.
#include?stdio.h
int?isfourbit(int?n);
int?isfourbit(int?n)
{
if?(n??999??n??10000)
{
printf("%d?is?a?four?bit?integer.\n",?n);
return?1;
}
printf("%d?is?not?a?four?bit?integer.\n",?n);
return?0;
}
int?main()
{
int?n;
printf("請(qǐng)輸入一個(gè)數(shù):?");
scanf("%d",?n);
isfourbit(n);
return?0;
}
//?3.
#include?stdio.h
int?scroe(int?self,?int?other);
int?scroe(int?self,?int?other)
{
if?(self??other)
return?3;
else?if?(self?==?other)
return?1;
else
return?0;
}
int?main()
{
int?n,?m;
printf("請(qǐng)輸入本隊(duì)的進(jìn)球數(shù):?");
scanf("%d",?n);
printf("請(qǐng)輸入對(duì)陣方的進(jìn)球數(shù):?");
scanf("%d",?m);
printf("本隊(duì)的積分是?%d.\n",?scroe(n,?m));
return?0;
}
//?4.
#include?stdio.h
float?salary(float?s);
float?salary(float?s)
{
float?m;
if?(s??11000)
m?=?s?*?0.06;
else
m?=?660?+?(s?-?11000)?*?0.09;
return?m;
}
int?main()
{
int?i;
float?sum?=?0;
float?n;
for?(i?=?0;?i??5;?i++)
{
printf("please?input?%dst?month?of?the?sller:?",?i?+?1);
scanf("%f",?n);
sum?+=?salary(n);
}
printf("total?of?five?month?the?seller's?salary?is:?%.2f\n",?sum);
return?0;
}
//?5.
#include?stdio.h
float?salary(float?s);
float?salary(float?s)
{
float?m;
if?(s??11000)
m?=?s?*?0.06;
else
m?=?660?+?(s?-?11000)?*?0.09;
return?m;
}
int?main()
{
int?i;
float?salesarray[6];
float?salaryarray[6];
float?averagesalary?=?0;
for?(i?=?0;?i??6;?i++)
{
printf("please?input?%dst?seller's?sales:?",?i?+?1);
scanf("%f",?salesarray[i]);
salaryarray[i]?=?salary(salesarray[i]);
}
for?(i?=?0;?i??6;?i++)
averagesalary?+=?salaryarray[i];
averagesalary?/=?6.0;
printf("these?six?sellers's?average?salary?is:?%.2f\n",?averagesalary);
return?0;
}
本文名稱:c語言程序設(shè)計(jì)函數(shù)教案 C語言程序設(shè)計(jì)教學(xué)
當(dāng)前網(wǎng)址:http://fisionsoft.com.cn/article/docsegs.html