c語(yǔ)言程序范文
時(shí)間:2023-03-14 06:54:08
導(dǎo)語(yǔ):如何才能寫好一篇c語(yǔ)言程序,這就需要搜集整理更多的資料和文獻(xiàn),歡迎閱讀由公務(wù)員之家整理的十篇范文,供你借鑒。
篇1
本課介紹c語(yǔ)言程序設(shè)計(jì)的基本方法和基本的程序語(yǔ)句。
從程序流程的角度來(lái)看,程序可以分為三種基本結(jié)構(gòu),即順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)。這三種基本結(jié)構(gòu)可以組成所有的各種復(fù)雜程序。c語(yǔ)言提供了多種語(yǔ)句來(lái)實(shí)現(xiàn)這些程序結(jié)構(gòu)。本章介紹這些基本語(yǔ)句及其應(yīng)用,使讀者對(duì)c程序有一個(gè)初步的認(rèn)識(shí),為后面各章的學(xué)習(xí)打下基礎(chǔ)。
c程序的語(yǔ)句
c程序的執(zhí)行部分是由語(yǔ)句組成的。程序的功能也是由執(zhí)行語(yǔ)句實(shí)現(xiàn)的。
C語(yǔ)句可分為以下五類:
1.表達(dá)式語(yǔ)句
2.函數(shù)調(diào)用語(yǔ)句
3.控制語(yǔ)句
4.復(fù)合語(yǔ)句
5.空語(yǔ)句
1.表達(dá)式語(yǔ)句
表達(dá)式語(yǔ)句由表達(dá)式加上分號(hào)“;”組成。其一般形式為:表達(dá)式;執(zhí)行表達(dá)式語(yǔ)句就是計(jì)算表達(dá)式的值。例如:x=y+z;賦值語(yǔ)句y+z;加法運(yùn)算語(yǔ)句,但計(jì)算結(jié)果不能保留,無(wú)實(shí)際意義i++;自增1語(yǔ)句,i值增1
2.函數(shù)調(diào)用語(yǔ)句
由函數(shù)名、實(shí)際參數(shù)加上分號(hào)“;”組成。其一般形式為:函數(shù)名(實(shí)際參數(shù)表);執(zhí)行函數(shù)語(yǔ)句就是調(diào)用函數(shù)體并把實(shí)際參數(shù)賦予函數(shù)定義中的形式參數(shù),然后執(zhí)行被調(diào)函數(shù)體中的語(yǔ)句,求取函數(shù)值。(在第五章函數(shù)中再詳細(xì)介紹)例如printf("CProgram");調(diào)用庫(kù)函數(shù),輸出字符串。
3.控制語(yǔ)句
控制語(yǔ)句用于控制程序的流程,以實(shí)現(xiàn)程序的各種結(jié)構(gòu)方式。
它們由特定的語(yǔ)句定義符組成。c語(yǔ)言有九種控制語(yǔ)句??煞殖梢韵氯悾?/p>
(1)條件判斷語(yǔ)句
if語(yǔ)句,switch語(yǔ)句
(2)循環(huán)執(zhí)行語(yǔ)句
dowhile語(yǔ)句,while語(yǔ)句,for語(yǔ)句
(3)轉(zhuǎn)向語(yǔ)句
break語(yǔ)句,goto語(yǔ)句,continue語(yǔ)句,return語(yǔ)句
4.復(fù)合語(yǔ)句
把多個(gè)語(yǔ)句用括號(hào){}括起來(lái)組成的一個(gè)語(yǔ)句稱復(fù)合語(yǔ)句。在程序中應(yīng)把復(fù)合語(yǔ)句看成是單條語(yǔ)句,而不是多條語(yǔ)句,例如
{
x=y+z;
a=b+c;
printf(“%d%d”,x,a);
}
是一條復(fù)合語(yǔ)句。復(fù)合語(yǔ)句內(nèi)的各條語(yǔ)句都必須以分號(hào)“;”結(jié)尾,在括號(hào)“}”外不能加分號(hào)。
5.空語(yǔ)句
只有分號(hào)“;”組成的語(yǔ)句稱為空語(yǔ)句。空語(yǔ)句是什么也不執(zhí)行的語(yǔ)句。在程序中空語(yǔ)句可用來(lái)作空循環(huán)體。例如while(getchar()!=''''\n'''');本語(yǔ)句的功能是,只要從鍵盤輸入的字符不是回車則重新輸入。這里的循環(huán)體為空語(yǔ)句。
賦值語(yǔ)句
賦值語(yǔ)句是由賦值表達(dá)式再加上分號(hào)構(gòu)成的表達(dá)式語(yǔ)句。其一般形式為:變量=表達(dá)式;賦值語(yǔ)句的功能和特點(diǎn)都與賦值表達(dá)式相同。它是程序中使用最多的語(yǔ)句之一。在賦值語(yǔ)句的使用中需要注意以下幾點(diǎn):
1.由于在賦值符“=”右邊的表達(dá)式也可以又是一個(gè)賦值表達(dá)式,因此,下述形式變量=(變量=表達(dá)式);是成立的,從而形成嵌套的情形。其展開之后的一般形式為:變量=變量=…=表達(dá)式;
例如:
a=b=c=d=e=5;按照賦值運(yùn)算符的右接合性,因此實(shí)際上等效于:
e=5;
d=e;
c=d;
b=c;
a=b;
2.注意在變量說(shuō)明中給變量賦初值和賦值語(yǔ)句的區(qū)別。給變量賦初值是變量說(shuō)明的一部分,賦初值后的變量與其后的其它同類變量之間仍必須用逗號(hào)間隔,而賦值語(yǔ)句則必須用分號(hào)結(jié)尾。
3.在變量說(shuō)明中,不允許連續(xù)給多個(gè)變量賦初值。如下述說(shuō)明是錯(cuò)誤的:inta=b=c=5必須寫為inta=5,b=5,c=5;而賦值語(yǔ)句允許連續(xù)賦值
4.注意賦值表達(dá)式和賦值語(yǔ)句的區(qū)別。賦值表達(dá)式是一種表達(dá)式,它可以出現(xiàn)在任何允許表達(dá)式出現(xiàn)的地方,而賦值語(yǔ)句則不能。
下述語(yǔ)句是合法的:if((x=y+5)>0)z=x;語(yǔ)句的功能是,若表達(dá)式x=y+5大于0則z=x。下述語(yǔ)句是非法的:if((x=y+5;)>0)z=x;因?yàn)?y+5;是語(yǔ)句,不能出現(xiàn)在表達(dá)式中。
數(shù)據(jù)輸出語(yǔ)句
本小節(jié)介紹的是向標(biāo)準(zhǔn)輸出設(shè)備顯示器輸出數(shù)據(jù)的語(yǔ)句。在c語(yǔ)言中,所有的數(shù)據(jù)輸入/輸出都是由庫(kù)函數(shù)完成的。因此都是函數(shù)語(yǔ)句。本小節(jié)先介紹printf函數(shù)和putchar函數(shù)。printf函數(shù)printf函數(shù)稱為格式輸出函數(shù),其關(guān)鍵字最末一個(gè)字母f即為“格式”(format)之意。其功能是按用戶指定的格式,把指定的數(shù)據(jù)顯示到顯示器屏幕上。在前面的例題中我們已多次使用過(guò)這個(gè)函數(shù)。
一、printf函數(shù)調(diào)用的一般形式
printf函數(shù)是一個(gè)標(biāo)準(zhǔn)庫(kù)函數(shù),它的函數(shù)原型在頭文件“stdio.h”中。但作為一個(gè)特例,不要求在使用printf函數(shù)之前必須包含stdio.h文件。printf函數(shù)調(diào)用的一般形式為:printf(“格式控制字符串”,輸出表列)其中格式控制字符串用于指定輸出格式。格式控制串可由格式字符串和非格式字符串兩種組成。格式字符串是以%開頭的字符串,在%后面跟有各種格式字符,以說(shuō)明輸出數(shù)據(jù)的類型、形式、長(zhǎng)度、小數(shù)位數(shù)等。如“%d”表示按十進(jìn)制整型輸出,“%ld”表示按十進(jìn)制長(zhǎng)整型輸出,“%c”表示按字符型輸出等。后面將專門給予討論。
非格式字符串在輸出時(shí)原樣照印,在顯示中起提示作用。輸出表列中給出了各個(gè)輸出項(xiàng),要求格式字符串和各輸出項(xiàng)在數(shù)量和類型上應(yīng)該一一對(duì)應(yīng)。
voidmain()
{
inta=88,b=89;
printf("%d%d\n",a,b);
printf("%d,%d\n",a,b);
printf("%c,%c\n",a,b);
printf("a=%d,b=%d",a,b);
}
a<--8,b<--89
printf("%d%d\n",a,b);
printf("%d,%d\n",a,b);
printf("%c,%c\n",a,b);
printf("a=%d,b=%d",a,b);
本例中四次輸出了a,b的值,但由于格式控制串不同,輸出的結(jié)果也不相同。第四行的輸出語(yǔ)句格式控制串中,兩格式串%d之間加了一個(gè)空格(非格式字符),所以輸出的a,b值之間有一個(gè)空格。第五行的printf語(yǔ)句格式控制串中加入的是非格式字符逗號(hào),因此輸出的a,b值之間加了一個(gè)逗號(hào)。第六行的格式串要求按字符型輸出a,b值。第七行中為了提示輸出結(jié)果又增加了非格式字符串。
二、格式字符串
在TurboC中格式字符串的一般形式為:[標(biāo)志][輸出最小寬度][.精度][長(zhǎng)度]類型其中方括號(hào)[]中的項(xiàng)為可選項(xiàng)。各項(xiàng)的意義介紹如下:
1.類型類型字符用以表示輸出數(shù)據(jù)的類型,其格式符和意義下表所示:
表示輸出類型的格式字符格式字符意義
d以十進(jìn)制形式輸出帶符號(hào)整數(shù)(正數(shù)不輸出符號(hào))
o以八進(jìn)制形式輸出無(wú)符號(hào)整數(shù)(不輸出前綴O)
x以十六進(jìn)制形式輸出無(wú)符號(hào)整數(shù)(不輸出前綴OX)
u以十進(jìn)制形式輸出無(wú)符號(hào)整數(shù)
f以小數(shù)形式輸出單、雙精度實(shí)數(shù)
e以指數(shù)形式輸出單、雙精度實(shí)數(shù)
g以%f%e中較短的輸出寬度輸出單、雙精度實(shí)數(shù)
c輸出單個(gè)字符
s輸出字符串
2.標(biāo)志
標(biāo)志字符為-、+、#、空格四種,其意義下表所示:
標(biāo)志格式字符標(biāo)志意義
-結(jié)果左對(duì)齊,右邊填空格
+輸出符號(hào)(正號(hào)或負(fù)號(hào))空格輸出值為正時(shí)冠以空格,為負(fù)時(shí)冠以負(fù)號(hào)
#對(duì)c,s,d,u類無(wú)影響;對(duì)o類,在輸出時(shí)加前
綴o對(duì)x類,在輸出時(shí)加前綴0x;對(duì)e,g,f類當(dāng)結(jié)果有小數(shù)時(shí)才給出小數(shù)點(diǎn)
3.輸出最小寬度
用十進(jìn)制整數(shù)來(lái)表示輸出的最少位數(shù)。若實(shí)際位數(shù)多于定義的寬度,則按實(shí)際位數(shù)輸出,若實(shí)際位數(shù)少于定義的寬度則補(bǔ)以空格或0。
4.精度
精度格式符以“.”開頭,后跟十進(jìn)制整數(shù)。本項(xiàng)的意義是:如果輸出數(shù)字,則表示小數(shù)的位數(shù);如果輸出的是字符,則表示輸出字符的個(gè)數(shù);若實(shí)際位數(shù)大于所定義的精度數(shù),則截去超過(guò)的部分。
5.長(zhǎng)度
長(zhǎng)度格式符為h,l兩種,h表示按短整型量輸出,l表示按長(zhǎng)整型量輸出。
voidmain(){
inta=15;
floatb=138.3576278;
doublec=35648256.3645687;
chard=''''p'''';
printf("a=%d,%5d,%o,%x\n",a,a,a,a);
printf("b=%f,%lf,%5.4lf,%e\n",b,b,b,b);
printf("c=%lf,%f,%8.4lf\n",c,c,c);
printf("d=%c,%8c\n",d,d);
}a<--15
b<--138.3576278
c<--35648256.3645687
d<--''''p''''main()
{
inta=29;
floatb=1243.2341;
doublec=24212345.24232;
charc=''''h''''
printf("a=%d,%5d,%o,%x\n",a,a,a,a);
printf("b=%f,%lf,%5.4lf,%e\n",b,b,b,b);
printf("c=%lf,%f,%8.4lf\n",c,c,c);
printf("d=%c,%8c\n",d,d);
}
本例第七行中以四種格式輸出整型變量a的值,其中“%5d”要求輸出寬度為5,而a值為15只有兩位故補(bǔ)三個(gè)空格。第八行中以四種格式輸出實(shí)型量b的值。其中“%f”和“%lf”格式的輸出相同,說(shuō)明“l(fā)”符對(duì)“f”類型無(wú)影響?!?5.4lf”指定輸出寬度為5,精度為4,由于實(shí)際長(zhǎng)度超過(guò)5故應(yīng)該按實(shí)際位數(shù)輸出,小數(shù)位數(shù)超過(guò)4位部分被截去。第九行輸出雙精度實(shí)數(shù),“%8.4lf”由于指定精度為4位故截去了超過(guò)4位的部分。第十行輸出字符量d,其中“%bc”指定輸出寬度為8故在輸出字符p之前補(bǔ)加7個(gè)空格。
使用printf函數(shù)時(shí)還要注意一個(gè)問(wèn)題,那就是輸出表列中的求值順序。不同的編譯系統(tǒng)不一定相同,可以從左到右,也可從右到左。TurboC是按從右到左進(jìn)行的。如把例2.13改寫如下述形式:
voidmain(){
inti=8;
printf("%d\n%d\n%d\n%d\n%d\n%d\n",++i,--i,i--,i++,-i--);
}i<--8
這個(gè)程序與例2.13相比只是把多個(gè)printf語(yǔ)句改一個(gè)printf語(yǔ)句輸出。但從結(jié)果可以看出是不同的。為什么結(jié)果會(huì)不同呢?就是因?yàn)閜rintf函數(shù)對(duì)輸出表中各量求值的順序是自右至左進(jìn)行的。在式中,先對(duì)最后一項(xiàng)“-i--”求值,結(jié)果為-8,然后i自減1后為7。再對(duì)“-i++”項(xiàng)求值得-7,然后i自增1后為8。再對(duì)“i--”項(xiàng)求值得8,然后i再自減1后為7。再求“i++”項(xiàng)得7,然后I再自增1后為8。再求“--i”項(xiàng),i先自減1后輸出,輸出值為7。最后才求輸出表列中的第一項(xiàng)“++i”,此時(shí)i自增1后輸出8。但是必須注意,求值順序雖是自右至左,但是輸出順序還是從左至右,因此得到的結(jié)果是上述輸出結(jié)果。
字符輸出函數(shù)
putchar函數(shù)
putchar函數(shù)是字符輸出函數(shù),其功能是在顯示器上輸出單個(gè)字符。其一般形式為:putchar(字符變量)例如:
putchar(''''A'''');輸出大寫字母A
putchar(x);輸出字符變量x的值
putchar(''''\n'''');換行對(duì)控制字符則執(zhí)行控制功能,不在屏幕上顯示。使用本函數(shù)前必須要用文件包含命令:
#include<stdio.h>
#include<stdio.h>
voidmain(){
chara=''''B'''',b=''''o'''',c=''''k'''';
putchar(a);putchar(b);putchar(b);putchar(c);putchar(''''\t'''');
putchar(a);putchar(b);
putchar(''''\n'''');
putchar(b);putchar(c);
}
數(shù)據(jù)輸入語(yǔ)句
c語(yǔ)言的數(shù)據(jù)輸入也是由函數(shù)語(yǔ)句完成的。本節(jié)介紹從標(biāo)準(zhǔn)輸入設(shè)備—鍵盤上輸入數(shù)據(jù)的函數(shù)scanf和getchar。scanf函數(shù)scanf函數(shù)稱為格式輸入函數(shù),即按用戶指定的格式從鍵盤上把數(shù)據(jù)輸入到指定的變量之中。
一、scanf函數(shù)的一般形式
scanf函數(shù)是一個(gè)標(biāo)準(zhǔn)庫(kù)函數(shù),它的函數(shù)原型在頭文件“stdio.h”中,與printf函數(shù)相同,c語(yǔ)言也允許在使用scanf函數(shù)之前不必包含stdio.h文件。scanf函數(shù)的一般形式為:scanf(“格式控制字符串”,地址表列);其中,格式控制字符串的作用與printf函數(shù)相同,但不能顯示非格式字符串,也就是不能顯示提示字符串。地址表列中給出各變量的地址。地址是由地址運(yùn)算符“&”后跟變量名組成的。例如,&a,&b分別表示變量a和變量b的地址。這個(gè)地址就是編譯系統(tǒng)在內(nèi)存中給a,b變量分配的地址。在c語(yǔ)言中,使用了地址這個(gè)概念,這是與其它語(yǔ)言不同的。應(yīng)該把變量的值和變量的地址這兩個(gè)不同的概念區(qū)別開來(lái)。變量的地址是C編譯系統(tǒng)分配的,用戶不必關(guān)心具體的地址是多少。變量的地址和變量值的關(guān)系如下:&a--->a567a為變量名,567是變量的值,&a是變量a的地址。在賦值表達(dá)式中給變量賦值,如:a=567在賦值號(hào)左邊是變量名,不能寫地址,而scanf函數(shù)在本質(zhì)上也是給變量賦值,但要求寫變量的地址,如&a。這兩者在形式上是不同的。&是一個(gè)取地址運(yùn)算符,&a是一個(gè)表達(dá)式,其功能是求變量的地址。
voidmain(){
inta,b,c;
printf("inputa,b,c\n");
scanf("%d%d%d",&a,&b,&c);
printf("a=%d,b=%d,c=%d",a,b,c);
}
注意&的用法!
在本例中,由于scanf函數(shù)本身不能顯示提示串,故先用printf語(yǔ)句在屏幕上輸出提示,請(qǐng)用戶輸入a、b、c的值。執(zhí)行scanf語(yǔ)句,則退出TC屏幕進(jìn)入用戶屏幕等待用戶輸入。用戶輸入7、8、9后按下回車鍵,此時(shí),系統(tǒng)又將返回TC屏幕。在scanf語(yǔ)句的格式串中由于沒(méi)有非格式字符在“%d%d%d”之間作輸入時(shí)的間隔,因此在輸入時(shí)要用一個(gè)以上的空格或回車鍵作為每?jī)蓚€(gè)輸入數(shù)之間的間隔。
如:789
或
7
8
9
格式字符串
格式字符串的一般形式為:%[*][輸入數(shù)據(jù)寬度][長(zhǎng)度]類型其中有方括號(hào)[]的項(xiàng)為任選項(xiàng)。各項(xiàng)的意義如下:
1.類型
表示輸入數(shù)據(jù)的類型,其格式符和意義下表所示。
格式字符意義
d輸入十進(jìn)制整數(shù)
o輸入八進(jìn)制整數(shù)
x輸入十六進(jìn)制整數(shù)
u輸入無(wú)符號(hào)十進(jìn)制整數(shù)
f或e輸入實(shí)型數(shù)(用小數(shù)形式或指數(shù)形式)
c輸入單個(gè)字符
s輸入字符串
2.“*”符
用以表示該輸入項(xiàng)讀入后不賦予相應(yīng)的變量,即跳過(guò)該輸入值。如scanf("%d%*d%d",&a,&b);當(dāng)輸入為:123時(shí),把1賦予a,2被跳過(guò),3賦予b。
3.寬度
用十進(jìn)制整數(shù)指定輸入的寬度(即字符數(shù))。例如:scanf("%5d",&a);
輸入:
12345678
只把12345賦予變量a,其余部分被截去。又如:scanf("%4d%4d",&a,&b);
輸入:
12345678將把1234賦予a,而把5678賦予b。
4.長(zhǎng)度
長(zhǎng)度格式符為l和h,l表示輸入長(zhǎng)整型數(shù)據(jù)(如%ld)和雙精度浮點(diǎn)數(shù)(如%lf)。h表示輸入短整型數(shù)據(jù)。
使用scanf函數(shù)還必須注意以下幾點(diǎn):
a.scanf函數(shù)中沒(méi)有精度控制,如:scanf("%5.2f",&a);是非法的。不能企圖用此語(yǔ)句輸入小數(shù)為2位的實(shí)數(shù)。
b.scanf中要求給出變量地址,如給出變量名則會(huì)出錯(cuò)。如scanf("%d",a);是非法的,應(yīng)改為scnaf("%d",&a);才是合法的。
c.在輸入多個(gè)數(shù)值數(shù)據(jù)時(shí),若格式控制串中沒(méi)有非格式字符作輸入數(shù)據(jù)之間的間隔則可用空格,TAB或回車作間隔。C編譯在碰到空格,TAB,回車或非法數(shù)據(jù)(如對(duì)“%d”輸入“12A”時(shí),A即為非法數(shù)據(jù))時(shí)即認(rèn)為該數(shù)據(jù)結(jié)束。
d.在輸入字符數(shù)據(jù)時(shí),若格式控制串中無(wú)非格式字符,則認(rèn)為所有輸入的字符均為有效字符。例如:
scanf("%c%c%c",&a,&b,&c);
輸入為:
def
則把''''d''''賦予a,''''f''''賦予b,''''e''''賦予c。只有當(dāng)輸入為:
def
時(shí),才能把''''d''''賦于a,''''e''''賦予b,''''f''''賦予c。如果在格式控制中加入空格作為間隔,如scanf("%c%c%c",&a,&b,&c);則輸入時(shí)各數(shù)據(jù)之間可加空格。
voidmain(){
chara,b;
printf("inputcharactera,b\n");
scanf("%c%c",&a,&b);
printf("%c%c\n",a,b);
}
scanf("''''C14F14%c%c",&a,&b);
printf("%c%c\n",a,b);由于scanf函數(shù)"%c%c"中沒(méi)有空格,輸入MN,結(jié)果輸出只有M。
而輸入改為MN時(shí)則可輸出MN兩字符,見下面的輸入運(yùn)行情況:inputcharactera,b
MN
MN
voidmain(){
chara,b;
printf("inputcharactera,b\n");
scanf("%c%c",&a,&b);
printf("\n%c%c\n",a,b);
}
scanf("%c%c",&a,&b);本例表示scanf格式控制串"%c%c"之間有空格時(shí),輸入的數(shù)據(jù)之間可以有空格間隔。e.如果格式控制串中有非格式字符則輸入時(shí)也要輸入該非格式字符。
例如:
scanf("%d,%d,%d",&a,&b,&c);其中用非格式符“,”作間隔符,故輸入時(shí)應(yīng)為:5,6,7
又如:scanf("a=%d,b=%d,c=%d",&a,&b,&c);
則輸入應(yīng)為
a=5,b=6,c=7g.如輸入的數(shù)據(jù)與輸出的類型不一致時(shí),雖然編譯能夠通過(guò),但結(jié)果將不正確。
voidmain(){
inta;
printf("inputanumber\n");
scanf("%d",&a);
printf("%ld",a);
}
由于輸入數(shù)據(jù)類型為整型,而輸出語(yǔ)句的格式串中說(shuō)明為長(zhǎng)整型,因此輸出結(jié)果和輸入數(shù)據(jù)不符。如改動(dòng)程序如下:
voidmain(){
longa;
printf("inputalonginteger\n");
scanf("%ld",&a);
printf("%ld",a);
}
運(yùn)行結(jié)果為:
inputalonginteger
1234567890
1234567890當(dāng)輸入數(shù)據(jù)改為長(zhǎng)整型后,輸入輸出數(shù)據(jù)相等。
鍵盤輸入函數(shù)
getchar函數(shù)getchar函數(shù)的功能是從鍵盤上輸入一個(gè)字符。其一般形式為:getchar();通常把輸入的字符賦予一個(gè)字符變量,構(gòu)成賦值語(yǔ)句,如:
charc;
c=getchar();#include<stdio.h>
voidmain(){
charc;
printf("inputacharacter\n");
c=getchar();
putchar(c);
}
使用getchar函數(shù)還應(yīng)注意幾個(gè)問(wèn)題:
1.getchar函數(shù)只能接受單個(gè)字符,輸入數(shù)字也按字符處理。輸入多于一個(gè)字符時(shí),只接收第一個(gè)字符。
2.使用本函數(shù)前必須包含文件“stdio.h”。
3.在TC屏幕下運(yùn)行含本函數(shù)程序時(shí),將退出TC屏幕進(jìn)入用戶屏幕等待用戶輸入。輸入完畢再返回TC屏幕。
voidmain(){
chara,b,c;
printf("inputcharactera,b,c\n");
scanf("%c%c%c",&a,&b,&c);
printf("%d,%d,%d\n%c,%c,%c\n",a,b,c,a-32,b-32,c-32);
}
輸入三個(gè)小寫字母
輸出其ASCII碼和對(duì)應(yīng)的大寫字母。
voidmain(){
inta;
longb;
floatf;
doubled;
charc;
printf("%d,%d,%d,%d,%d",sizeof(a),sizeof(b),sizeof(f)
,sizeof(d),sizeof(c));
}
輸出各種數(shù)據(jù)類型的字節(jié)長(zhǎng)度。
分支結(jié)構(gòu)程序
關(guān)系運(yùn)算符和表達(dá)式
在程序中經(jīng)常需要比較兩個(gè)量的大小關(guān)系,以決定程序下一步的工作。比較兩個(gè)量的運(yùn)算符稱為關(guān)系運(yùn)算符。在c語(yǔ)言中有以下關(guān)系運(yùn)算符:
<小于
<=小于或等于
>大于
>=大于或等于
==等于
!=不等于
關(guān)系運(yùn)算符都是雙目運(yùn)算符,其結(jié)合性均為左結(jié)合。關(guān)系運(yùn)算符的優(yōu)先級(jí)低于算術(shù)運(yùn)算符,高于賦值運(yùn)算符。在六個(gè)關(guān)系運(yùn)算符中,<,<=,>,>=的優(yōu)先級(jí)相同,高于==和!=,==和!=的優(yōu)先級(jí)相同。
關(guān)系表達(dá)式
關(guān)系表達(dá)式的一般形式為:表達(dá)式關(guān)系運(yùn)算符表達(dá)式例如:a+b>c-d,x>3/2,''''a''''+1<c,-i-5*j==k+1;都是合法的關(guān)系表達(dá)式。由于表達(dá)式也可以又是關(guān)系表達(dá)式。因此也允許出現(xiàn)嵌套的情況,例如:a>(b>c),a!=(c==d)等。關(guān)系表達(dá)式的值是“真”和“假”,用“1”和“0”表示。
如:5>0的值為“真”,即為1。(a=3)>(b=5)由于3>5不成立,故其值為假,即為0。
voidmain(){
charc=''''k'''';
inti=1,j=2,k=3;
floatx=3e+5,y=0.85;
printf("%d,%d\n",''''a''''+5<c,-i-2*j>=k+1);
printf("%d,%d\n",1<j<5,x-5.25<=x+y);
printf("%d,%d\n",i+j+k==-2*j,k==j==i+5);
}
charc=''''k'''';
inti=1,j=2,k=3;
floatx=3e+5,y=0.85;
printf("%d,%d\n",''''a''''+5<c,-i-2*j>=k+1);
printf("%d,%d\n",1<j<5,x-5.25<=x+y);
printf("%d,%d\n",i+j+k==-2*j,k==j==i+5);
在本例中求出了各種關(guān)系運(yùn)算符的值。字符變量是以它對(duì)應(yīng)的ASCII碼參與運(yùn)算的。對(duì)于含多個(gè)關(guān)系運(yùn)算符的表達(dá)式,如k==j==i+5,根據(jù)運(yùn)算符的左結(jié)合性,先計(jì)算k==j,該式不成立,其值為0,再計(jì)算0==i+5,也不成立,故表達(dá)式值為0。
邏輯運(yùn)算符和表達(dá)式
邏輯運(yùn)算符c語(yǔ)言中提供了三種邏輯運(yùn)算符&&與運(yùn)算||或運(yùn)算!非運(yùn)算與運(yùn)算符&&和或運(yùn)算符||均為雙目運(yùn)算符。具有左結(jié)合性。非
運(yùn)算符!為單目運(yùn)算符,具有右結(jié)合性。邏輯運(yùn)算符和其它運(yùn)算符優(yōu)先級(jí)的關(guān)系可表示如下:
按照運(yùn)算符的優(yōu)先順序可以得出:
a>b&&c>d等價(jià)于(a>b)&&(c>d)
!b==c||d<a等價(jià)于((!b)==c)||(d<a)
a+b>c&&x+y<b等價(jià)于((a+b)>c)&&((x+y)<b)
邏輯運(yùn)算的值
邏輯運(yùn)算的值也為“真”和“假”兩種,用“1”和“0”來(lái)表示。其求值規(guī)則如下:
1.與運(yùn)算&&參與運(yùn)算的兩個(gè)量都為真時(shí),結(jié)果才為真,否則為假。例如,5>0&&4>2,由于5>0為真,4>2也為真,相與的結(jié)果也為真。
2.或運(yùn)算||參與運(yùn)算的兩個(gè)量只要有一個(gè)為真,結(jié)果就為真。兩個(gè)量都為假時(shí),結(jié)果為假。例如:5>0||5>8,由于5>0為真,相或的結(jié)果也就為真
3.非運(yùn)算!參與運(yùn)算量為真時(shí),結(jié)果為假;參與運(yùn)算量為假時(shí),結(jié)果為真。
例如:!(5>0)的結(jié)果為假。
雖然c編譯在給出邏輯運(yùn)算值時(shí),以“1”代表“真”,“0”代表“假”。但反過(guò)來(lái)在判斷一個(gè)量是為“真”還是為“假”時(shí),以“0”代表“假”,以非“0”的數(shù)值作為“真”。例如:由于5和3均為非“0”因此5&&3的值為“真”,即為1。
又如:5||0的值為“真”,即為1。
邏輯表達(dá)式邏輯表達(dá)式的一般形式為:表達(dá)式邏輯運(yùn)算符表達(dá)式其中的表達(dá)式可以又是邏輯表達(dá)式,從而組成了嵌套的情形。例如:(a&&b)&&c根據(jù)邏輯運(yùn)算符的左結(jié)合性,上式也可寫為:a&&b&&c邏輯表達(dá)式的值是式中各種邏輯運(yùn)算的最后值,以“1”和“0”分別代表“真”和“假”。
voidmain(){
charc=''''k'''';
inti=1,j=2,k=3;
floatx=3e+5,y=0.85;
printf("%d,%d\n",!x*!y,!!!x);
printf("%d,%d\n",x||i&&j-3,i<j&&x<y);
printf("%d,%d\n",i==5&&c&&(j=8),x+y||i+j+k);
}charc=''''k'''';
inti=1,j=2,k=3;
floatx=3e+5,y=0.85;
printf("%d,%d\n",!x*!y,!!!x);
printf("%d,%d\n",x||i&&j-3,i<j&&x<y);
printf("%d,%d\n",i==5&&c&&(j=8),x+y||i+j+k);
本例中!x和!y分別為0,!x*!y也為0,故其輸出值為0。由于x為非0,故!!!x的邏輯值為0。對(duì)x||i&&j-3式,先計(jì)算j-3的值為非0,再求i&&j-3的邏輯值為1,故x||i&&j-3的邏輯值為1。對(duì)i<j&&x<y式,由于i<j的值為1,而x<y為0故表達(dá)式的值為1,0相與,最后為0,對(duì)i==5&&c&&(j=8)式,由于i==5為假,即值為0,該表達(dá)式由兩個(gè)與運(yùn)算組成,所以整個(gè)表達(dá)式的值為0。對(duì)于式x+y||i+j+k由于x+y的值為非0,故整個(gè)或表達(dá)式的值為1。
if語(yǔ)句
用if語(yǔ)句可以構(gòu)成分支結(jié)構(gòu)。它根據(jù)給定的條件進(jìn)行判斷,以決定執(zhí)行某個(gè)分支程序段。c語(yǔ)言的if語(yǔ)句有三種基本形式。
1.第一種形式為基本形式if(表達(dá)式)語(yǔ)句;其語(yǔ)義是:如果表達(dá)式的值為真,則執(zhí)行其后的語(yǔ)句,否則不執(zhí)行該語(yǔ)句。其過(guò)程可表示為下圖
voidmain(){
inta,b,max;
printf("\ninputtwonumbers:");
scanf("%d%d",&a,&b);
max=a;
if(max<b)max=b;
printf("max=%d",max);
}
輸入兩個(gè)整數(shù),輸出其中的大數(shù)。
scanf("%d%d",&a,&b);
max=a;
if(max<b)max=b;
printf("max=%d",max);
本例程序中,輸入兩個(gè)數(shù)a,b。把a(bǔ)先賦予變量max,再用if語(yǔ)句判別max和b的大小,如max小于b,則把b賦予max。因此max中總是大數(shù),最后輸出max的值。
2.第二種形式為if-else形式
if(表達(dá)式)
語(yǔ)句1;
else
語(yǔ)句2;
其語(yǔ)義是:如果表達(dá)式的值為真,則執(zhí)行語(yǔ)句1,否則執(zhí)行語(yǔ)句2。
voidmain(){
inta,b;
printf("inputtwonumbers:");
scanf("%d%d",&a,&b);
if(a>b)
printf("max=%d\n",a);
else
printf("max=%d\n",b);
}
輸入兩個(gè)整數(shù),輸出其中的大數(shù)。改用if-else語(yǔ)句判別a,b的大小,若a大,則輸出a,否則輸出b。
3.第三種形式為if-else-if形式
前二種形式的if語(yǔ)句一般都用于兩個(gè)分支的情況。當(dāng)有多個(gè)分支選擇時(shí),可采用if-else-if語(yǔ)句,其一般形式為:
if(表達(dá)式1)
語(yǔ)句1;
elseif(表達(dá)式2)
語(yǔ)句2;
elseif(表達(dá)式3)
語(yǔ)句3;
…
elseif(表達(dá)式m)
語(yǔ)句m;
else
語(yǔ)句n;
其語(yǔ)義是:依次判斷表達(dá)式的值,當(dāng)出現(xiàn)某個(gè)值為真時(shí),則執(zhí)行其對(duì)應(yīng)的語(yǔ)句。然后跳到整個(gè)if語(yǔ)句之外繼續(xù)執(zhí)行程序。如果所有的表達(dá)式均為假,則執(zhí)行語(yǔ)句n。然后繼續(xù)執(zhí)行后續(xù)程序。if-else-if語(yǔ)句的執(zhí)行過(guò)程如圖3—3所示。
#include"stdio.h"
voidmain(){
charc;
printf("inputacharacter:");
c=getchar();
if(c<32)
printf("Thisisacontrolcharacter\n");
elseif(c>=''''0''''&&c<=''''9'''')
printf("Thisisadigit\n");
elseif(c>=''''A''''&&c<=''''Z'''')
printf("Thisisacapitalletter\n");
elseif(c>=''''a''''&&c<=''''z'''')
printf("Thisisasmallletter\n");
else
printf("Thisisanothercharacter\n");
}
if(c<32)
printf("Thisisacontrolcharacter\n");
elseif(c>=''''0''''&&c<=''''9'''')
printf("Thisisadigit\n");
elseif(c>=''''A''''&&c<=''''Z'''')
printf("Thisisacapitalletter\n");
elseif(c>=''''a''''&&c<=''''z'''')
printf("Thisisasmallletter\n");
else
printf("Thisisanothercharacter\n");
本例要求判別鍵盤輸入字符的類別??梢愿鶕?jù)輸入字符的ASCII碼來(lái)判別類型。由ASCII碼表可知ASCII值小于32的為控制字符。在“0”和“9”之間的為數(shù)字,在“A”和“Z”之間為大寫字母,在“a”和“z”之間為小寫字母,其余則為其它字符。這是一個(gè)多分支選擇的問(wèn)題,用if-else-if語(yǔ)句編程,判斷輸入字符ASCII碼所在的范圍,分別給出不同的輸出。例如輸入為“g”,輸出顯示它為小寫字符。
4.在使用if語(yǔ)句中還應(yīng)注意以下問(wèn)題
(1)在三種形式的if語(yǔ)句中,在if關(guān)鍵字之后均為表達(dá)式。該表達(dá)式通常是邏輯表達(dá)式或關(guān)系表達(dá)式,但也可以是其它表達(dá)式,如賦值表達(dá)式等,甚至也可以是一個(gè)變量。例如:if(a=5)語(yǔ)句;if(b)語(yǔ)句;都是允許的。只要表達(dá)式的值為非0,即為“真”。如在if(a=5)…;中表達(dá)式的值永遠(yuǎn)為非0,所以其后的語(yǔ)句總是要執(zhí)行的,當(dāng)然這種情況在程序中不一定會(huì)出現(xiàn),但在語(yǔ)法上是合法的。
又如,有程序段:if(a=b)
printf("%d",a);
else
printf("a=0");本語(yǔ)句的語(yǔ)義是,把b值賦予a,如為非0則輸出該值,否則輸出“a=0”字符串。這種用法在程序中是經(jīng)常出現(xiàn)的。
(2)在if語(yǔ)句中,條件判斷表達(dá)式必須用括號(hào)括起來(lái),在語(yǔ)句之后必須加分號(hào)。
(3)在if語(yǔ)句的三種形式中,所有的語(yǔ)句應(yīng)為單個(gè)語(yǔ)句,如果要想在滿足條件時(shí)執(zhí)行一組(多個(gè))語(yǔ)句,則必須把這一組語(yǔ)句用{}括起來(lái)組成一個(gè)復(fù)合語(yǔ)句。但要注意的是在}之后不能再加分號(hào)。
例如:
if(a>b){
a++;
b++;
}
else{a=0;
b=10;
}
if語(yǔ)句的嵌套
當(dāng)if語(yǔ)句中的執(zhí)行語(yǔ)句又是if語(yǔ)句時(shí),則構(gòu)成了if語(yǔ)句嵌套的情形。其一般形式可表示如下:
if(表達(dá)式)
if語(yǔ)句;
或者為
if(表達(dá)式)
if語(yǔ)句;
else
if語(yǔ)句;
在嵌套內(nèi)的if語(yǔ)句可能又是if-else型的,這將會(huì)出現(xiàn)多個(gè)if和多個(gè)else重疊的情況,這時(shí)要特別注意if和else的配對(duì)問(wèn)題。例如:
if(表達(dá)式1)
if(表達(dá)式2)
語(yǔ)句1;
else
語(yǔ)句2;
其中的else究竟是與哪一個(gè)if配對(duì)呢?
應(yīng)該理解為:還是應(yīng)理解為:
if(表達(dá)式1)if(表達(dá)式1)
if(表達(dá)式2)if(表達(dá)式2)
語(yǔ)句1;語(yǔ)句1;
elseelse
語(yǔ)句2;語(yǔ)句2;
為了避免這種二義性,c語(yǔ)言規(guī)定,else總是與它前面最近的if配對(duì),因此對(duì)上述例子應(yīng)按前一種情況理解。
voidmain(){
inta,b;
printf("pleaseinputA,B:");
scanf("%d%d",&a,&b);
if(a!=b)
if(a>b)printf("A>B\n");
elseprintf("A<B\n");
elseprintf("A=B\n");
}
比較兩個(gè)數(shù)的大小關(guān)系。
printf("pleaseinputA,B:");
scanf("%d%d",&a,&b);
if(a!=b)
if(a>b)printf("A>B\n");
elseprintf("A<B\n");
elseprintf("A=B\n");
本例中用了if語(yǔ)句的嵌套結(jié)構(gòu)。采用嵌套結(jié)構(gòu)實(shí)質(zhì)上是為了進(jìn)行多分支選擇,例3.16實(shí)際上有三種選擇即A>B、A<B或A=B。這種問(wèn)題用if-else-if語(yǔ)句也可以完成。而且程序更加清晰。因此,在一般情況下較少使用if語(yǔ)句的嵌套結(jié)構(gòu)。以使程序更便于閱讀理解。
voidmain(){
inta,b;
printf("pleaseinputA,B:");
scanf("%d%d",&a,&b);
if(a==b)printf("A=B\n");
elseif(a>b)printf("A>B\n");
elseprintf("A<B\n");
}
條件運(yùn)算符和條件表達(dá)式
如果在條件語(yǔ)句中,只執(zhí)行單個(gè)的賦值語(yǔ)句時(shí),常可使用條件表達(dá)式來(lái)實(shí)現(xiàn)。不但使程序簡(jiǎn)潔,也提高了運(yùn)行效率。
條件運(yùn)算符為?和:,它是一個(gè)三目運(yùn)算符,即有三個(gè)參與運(yùn)算的量。由條件運(yùn)算符組成條件表達(dá)式的一般形式為:
表達(dá)式1?表達(dá)式2:表達(dá)式3
其求值規(guī)則為:如果表達(dá)式1的值為真,則以表達(dá)式2的值作為條件表達(dá)式的值,否則以表達(dá)式2的值作為整個(gè)條件表達(dá)式的值。條件表達(dá)式通常用于賦值語(yǔ)句之中。
例如條件語(yǔ)句:
if(a>b)max=a;
elsemax=b;
可用條件表達(dá)式寫為max=(a>b)?a:b;執(zhí)行該語(yǔ)句的語(yǔ)義是:如a>b為真,則把a(bǔ)賦予max,否則把b賦予max。
使用條件表達(dá)式時(shí),還應(yīng)注意以下幾點(diǎn):
1.條件運(yùn)算符的運(yùn)算優(yōu)先級(jí)低于關(guān)系運(yùn)算符和算術(shù)運(yùn)算符,但高于賦值符。因此max=(a>b)?a:b可以去掉括號(hào)而寫為max=a>b?a:b
2.條件運(yùn)算符?和:是一對(duì)運(yùn)算符,不能分開單獨(dú)使用。
3.條件運(yùn)算符的結(jié)合方向是自右至左。
例如:
a>b?a:c>d?c:d應(yīng)理解為
a>b?a:(c>d?c:d)這也就是條件表達(dá)式嵌套的情形,即其中的表達(dá)式3又是一個(gè)條
件表達(dá)式。
voidmain(){
inta,b,max;
printf("\ninputtwonumbers:");
scanf("%d%d",&a,&b);
printf("max=%d",a>b?a:b);
}
用條件表達(dá)式對(duì)上例重新編程,輸出兩個(gè)數(shù)中的大數(shù)。
switch語(yǔ)句
c語(yǔ)言還提供了另一種用于多分支選擇的switch語(yǔ)句,其一般形式為:
switch(表達(dá)式){
case常量表達(dá)式1:語(yǔ)句1;
case常量表達(dá)式2:語(yǔ)句2;
…
case常量表達(dá)式n:語(yǔ)句n;
default:語(yǔ)句n+1;
}
其語(yǔ)義是:計(jì)算表達(dá)式的值。并逐個(gè)與其后的常量表達(dá)式值相比較,當(dāng)表達(dá)式的值與某個(gè)常量表達(dá)式的值相等時(shí),即執(zhí)行其后的語(yǔ)句,然后不再進(jìn)行判斷,繼續(xù)執(zhí)行后面所有case后的語(yǔ)句。如表達(dá)式的值與所有case后的常量表達(dá)式均不相同時(shí),則執(zhí)行default后的語(yǔ)句。
voidmain(){
inta;
printf("inputintegernumber:");
scanf("%d",&a);
switch(a){
case1:printf("Monday\n");
case2:printf("Tuesday\n");
case3:printf("Wednesday\n");
case4:printf("Thursday\n");
case5:printf("Friday\n");
case6:printf("Saturday\n");
case7:printf("Sunday\n");
default:printf("error\n");
}
}
本程序是要求輸入一個(gè)數(shù)字,輸出一個(gè)英文單詞。但是當(dāng)輸入3之后,卻執(zhí)行了case3以及以后的所有語(yǔ)句,輸出了Wednesday及以后的所有單詞。這當(dāng)然是不希望的。為什么會(huì)出現(xiàn)這種情況呢?這恰恰反應(yīng)了switch語(yǔ)句的一個(gè)特點(diǎn)。在switch語(yǔ)句中,“case常量表達(dá)式”只相當(dāng)于一個(gè)語(yǔ)句標(biāo)號(hào),表達(dá)式的值和某標(biāo)號(hào)相等則轉(zhuǎn)向該標(biāo)號(hào)執(zhí)行,但不能在執(zhí)行完該標(biāo)號(hào)的語(yǔ)句后自動(dòng)跳出整個(gè)switch語(yǔ)句,所以出現(xiàn)了繼續(xù)執(zhí)行所有后面case語(yǔ)句的情況。這是與前面介紹的if語(yǔ)句完全不同的,應(yīng)特別注意。為了避免上述情況,c語(yǔ)言還提供了一種break語(yǔ)句,專用于跳出switch語(yǔ)句,break語(yǔ)句只有關(guān)鍵字break,沒(méi)有參數(shù)。在后面還將詳細(xì)介紹。修改例題的程序,在每一case語(yǔ)句之后增加break語(yǔ)句,使每一次執(zhí)行之后均可跳出switch語(yǔ)句,從而避免輸出不應(yīng)有的結(jié)果。
voidmain(){
inta;
printf("inputintegernumber:");
scanf("%d",&a);
switch(a){
case1:printf("Monday\n");break;
case2:printf("Tuesday\n");break;
case3:printf("Wednesday\n");break;
case4:printf("Thursday\n");break;
case5:printf("Friday\n");break;
case6:printf("Saturday\n");break;
case7:printf("Sunday\n");break;
default:printf("error\n");
}
}
在使用switch語(yǔ)句時(shí)還應(yīng)注意以下幾點(diǎn):
1.在case后的各常量表達(dá)式的值不能相同,否則會(huì)出現(xiàn)錯(cuò)誤。
2.在case后,允許有多個(gè)語(yǔ)句,可以不用{}括起來(lái)。
3.各case和default子句的先后順序可以變動(dòng),而不會(huì)影響程序執(zhí)行結(jié)果。
4.default子句可以省略不用。程序舉例
輸入三個(gè)整數(shù),輸出最大數(shù)和最小數(shù)。
voidmain(){
inta,b,c,max,min;
printf("inputthreenumbers:");
scanf("%d%d%d",&a,&b,&c);
if(a>b)
{max=a;min=b;}
else
{max=b;min=a;}
if(max<c)
max=c;
else
if(min>c)
min=c;
printf("max=%d\nmin=%d",max,min);
}
本程序中,首先比較輸入的a,b的大小,并把大數(shù)裝入max,小數(shù)裝入min中,然后再與c比較,若max小于c,則把c賦予max;如果c小于min,則把c賦予min。因此max內(nèi)總是最大數(shù),而min內(nèi)總是最小數(shù)。最后輸出max和min的值即可。計(jì)算器程序。用戶輸入運(yùn)算數(shù)和四則運(yùn)算符,輸出計(jì)算結(jié)果。
voidmain(){
floata,b,s;
charc;
printf("inputexpression:a+(-,*,/)b\n");
scanf("%f%c%f",&a,&c,&b);
switch(c){
case''''+'''':printf("%f\n",a+b);break;
case''''-'''':printf("%f\n",a-b);break;
case''''*'''':printf("%f\n",a*b);break;
case''''/'''':printf("%f\n",a/b);break;
default:printf("inputerror\n");
}
}
floata,b,s;
charc;
printf("inputexpression:a+(-,*,/)b\n");
scanf("%f%c%f",&a,&c,&b);
switch(c){
case''''+'''':printf("%f\n",a+b);break;
case''''-'''':printf("%f\n",a-b);break;
case''''*'''':printf("%f\n",a*b);break;
case''''/'''':printf("%f\n",a/b);break;
default:printf("inputerror\n");
}
本例可用于四則運(yùn)算求值。switch語(yǔ)句用于判斷運(yùn)算符,然后輸出運(yùn)算值。當(dāng)輸入運(yùn)算符不是+,-,*,/時(shí)給出錯(cuò)誤提示。
循環(huán)結(jié)構(gòu)程序
循環(huán)結(jié)構(gòu)是程序中一種很重要的結(jié)構(gòu)。其特點(diǎn)是,在給定條件成立時(shí),反復(fù)執(zhí)行某程序段,直到條件不成立為止。給定的條件稱為循環(huán)條件,反復(fù)執(zhí)行的程序段稱為循環(huán)體。c語(yǔ)言提供了多種循環(huán)語(yǔ)句,可以組成各種不同形式的循環(huán)結(jié)構(gòu)。
while語(yǔ)句
while語(yǔ)句的一般形式為:while(表達(dá)式)語(yǔ)句;其中表達(dá)式是循環(huán)條件,語(yǔ)句為循環(huán)體。
while語(yǔ)句的語(yǔ)義是:計(jì)算表達(dá)式的值,當(dāng)值為真(非0)時(shí),執(zhí)行循環(huán)體語(yǔ)句。其執(zhí)行過(guò)程可用圖3—4表示。統(tǒng)計(jì)從鍵盤輸入一行字符的個(gè)數(shù)。
#include<stdio.h>
voidmain(){
intn=0;
printf("inputastring:\n");
while(getchar()!=''''\n'''')n++;
printf("%d",n);
}intn=0;
printf("inputastring:\n");
while(getchar()!=''''\n'''')
n++;
printf("%d",n);
本例程序中的循環(huán)條件為getchar()!=''''\n'''',其意義是,只要從鍵盤輸入的字符不是回車就繼續(xù)循環(huán)。循環(huán)體n++完成對(duì)輸入字符個(gè)數(shù)計(jì)數(shù)。從而程序?qū)崿F(xiàn)了對(duì)輸入一行字符的字符個(gè)數(shù)計(jì)數(shù)。
使用while語(yǔ)句應(yīng)注意以下幾點(diǎn):
1.while語(yǔ)句中的表達(dá)式一般是關(guān)系表達(dá)或邏輯表達(dá)式,只要表達(dá)式的值為真(非0)即可繼續(xù)循環(huán)。
voidmain(){
inta=0,n;
printf("\ninputn:");
scanf("%d",&n);
while(n--)
printf("%d",a++*2);
}inta=0,n;
printf("\ninputn:");
scanf("%d",&n);
while(n--)
printf("%d",a++*2);
本例程序?qū)?zhí)行n次循環(huán),每執(zhí)行一次,n值減1。循環(huán)體輸出表達(dá)式a++*2的值。該表達(dá)式等效于(a*2;a++)
2.循環(huán)體如包括有一個(gè)以上的語(yǔ)句,則必須用{}括起來(lái),組成復(fù)合語(yǔ)句。
3.應(yīng)注意循環(huán)條件的選擇以避免死循環(huán)。
voidmain(){
inta,n=0;
while(a=5)
printf("%d",n++);
}inta,n=0;
while(a=5)
printf("%d",n++);
本例中while語(yǔ)句的循環(huán)條件為賦值表達(dá)式a=5,因此該表達(dá)式的值永遠(yuǎn)為真,而循環(huán)體中又沒(méi)有其它中止循環(huán)的手段,因此該循環(huán)將無(wú)休止地進(jìn)行下去,形成死循環(huán)。4.允許while語(yǔ)句的循環(huán)體又是while語(yǔ)句,從而形成雙重循環(huán)。
do-while語(yǔ)句
do-while語(yǔ)句的一般形式為:
do
語(yǔ)句;
while(表達(dá)式);
其中語(yǔ)句是循環(huán)體,表達(dá)式是循環(huán)條件。
do-while語(yǔ)句的語(yǔ)義是:
先執(zhí)行循環(huán)體語(yǔ)句一次,再判別表達(dá)式的值,若為真(非0)則繼續(xù)循環(huán),否則終止循環(huán)。
do-while語(yǔ)句和while語(yǔ)句的區(qū)別在于do-while是先執(zhí)行后判斷,因此do-while至少要執(zhí)行一次循環(huán)體。而while是先判斷后執(zhí)行,如果條件不滿足,則一次循環(huán)體語(yǔ)句也不執(zhí)行。
while語(yǔ)句和do-while語(yǔ)句一般都可以相互改寫。
voidmain(){
inta=0,n;
printf("\ninputn:");
scanf("%d",&n);
doprintf("%d",a++*2);
while(--n);
}
inta=0,n;
printf("\ninputn:");
scanf("%d",&n);
doprintf("%d",a++*2);
while(--n);
在本例中,循環(huán)條件改為--n,否則將多執(zhí)行一次循環(huán)。這是由于先執(zhí)行后判斷而造成的。
對(duì)于do-while語(yǔ)句還應(yīng)注意以下幾點(diǎn):
1.在if語(yǔ)句,while語(yǔ)句中,表達(dá)式后面都不能加分號(hào),而在do-while語(yǔ)句的表達(dá)式后面則必須加分號(hào)。
2.do-while語(yǔ)句也可以組成多重循環(huán),而且也可以和while語(yǔ)句相互嵌套。
3.在do和while之間的循環(huán)體由多個(gè)語(yǔ)句組成時(shí),也必須用{}括起來(lái)組成一個(gè)復(fù)合語(yǔ)句。
4.do-while和while語(yǔ)句相互替換時(shí),要注意修改循環(huán)控制條件。
for語(yǔ)句
for語(yǔ)句是c語(yǔ)言所提供的功能更強(qiáng),使用更廣泛的一種循環(huán)語(yǔ)句。其一般形式為:
for(表達(dá)式1;表達(dá)式2;表達(dá)3)
語(yǔ)句;
表達(dá)式1通常用來(lái)給循環(huán)變量賦初值,一般是賦值表達(dá)式。也允許在for語(yǔ)句外給循環(huán)變量賦初值,此時(shí)可以省略該表達(dá)式。
表達(dá)式2通常是循環(huán)條件,一般為關(guān)系表達(dá)式或邏輯表達(dá)式。
表達(dá)式3通常可用來(lái)修改循環(huán)變量的值,一般是賦值語(yǔ)句。
這三個(gè)表達(dá)式都可以是逗號(hào)表達(dá)式,即每個(gè)表達(dá)式都可由多個(gè)表達(dá)式組成。三個(gè)表達(dá)式都是任選項(xiàng),都可以省略。
一般形式中的“語(yǔ)句”即為循環(huán)體語(yǔ)句。for語(yǔ)句的語(yǔ)義是:
1.首先計(jì)算表達(dá)式1的值。
2.再計(jì)算表達(dá)式2的值,若值為真(非0)則執(zhí)行循環(huán)體一次,否則跳出循環(huán)。
3.然后再計(jì)算表達(dá)式3的值,轉(zhuǎn)回第2步重復(fù)執(zhí)行。在整個(gè)for循環(huán)過(guò)程中,表達(dá)式1只計(jì)算一次,表達(dá)式2和表達(dá)式,3則可能計(jì)算多次。循環(huán)體可能多次執(zhí)行,也可能一次都不執(zhí)行。for語(yǔ)句的執(zhí)行過(guò)程如圖所示。
voidmain(){
intn,s=0;
for(n=1;n<=100;n++)
s=s+n;
printf("s=%d\n",s);
}
用for語(yǔ)句計(jì)算s=1+2+3+...+99+100
intn,s=0;
for(n=1;n<=100;n++)
s=s+n;
printf("s=%d\n",s);
本例for語(yǔ)句中的表達(dá)式3為n++,實(shí)際上也是一種賦值語(yǔ)句,相當(dāng)于n=n+1,以改變循環(huán)變量的值。
voidmain(){
inta=0,n;
printf("\ninputn:");
scanf("%d",&n);
for(;n>0;a++,n--)
printf("%d",a*2);
}
用for語(yǔ)句修改例題。從0開始,輸出n個(gè)連續(xù)的偶數(shù)。
inta=0,n;
printf("\ninputn:");
scanf("%d",&n);
for(;n>0;a++,n--)
printf("%d",a*2);
本例的for語(yǔ)句中,表達(dá)式1已省去,循環(huán)變量的初值在for語(yǔ)句之前由scanf語(yǔ)句取得,表達(dá)式3是一個(gè)逗號(hào)表達(dá)式,由a++,n--兩個(gè)表達(dá)式組成。每循環(huán)一次a自增1,n自減1。a的變化使輸出的偶數(shù)遞增,n的變化控制循次數(shù)。
在使用for語(yǔ)句中要注意以下幾點(diǎn)
1.for語(yǔ)句中的各表達(dá)式都可省略,但分號(hào)間隔符不能少。如:for(;表達(dá)式;表達(dá)式)省去了表達(dá)式1。for(表達(dá)式;;表達(dá)式)省去了表達(dá)式2。
for(表達(dá)式;表達(dá)式;)省去了表達(dá)式3。for(;;)省去了全部表達(dá)式。
2.在循環(huán)變量已賦初值時(shí),可省去表達(dá)式1,如例3.27即屬于這種情形。如省去表達(dá)式2或表達(dá)式3則將造成無(wú)限循環(huán),這時(shí)應(yīng)在循環(huán)體內(nèi)設(shè)法結(jié)束循環(huán)。例題即屬于此情況。
voidmain(){
inta=0,n;
printf("\ninputn:");
scanf("%d",&n);
for(;n>0;)
{a++;n--;
printf("%d",a*2);
}
}inta=0,n;
printf("\ninputn:");
scanf("%d",&n);
for(;n>0;)
{a++;n--;
printf("%d",a*2);
}
本例中省略了表達(dá)式1和表達(dá)式3,由循環(huán)體內(nèi)的n--語(yǔ)句進(jìn)行循環(huán)變量n的遞減,以控制循環(huán)次數(shù)。
voidmain(){
inta=0,n;
printf("\ninputn:");
scanf("%d",&n);
for(;;){
a++;n--;
printf("%d",a*2);
if(n==0)break;
}
}
inta=0,n;
printf("\ninputn:");
scanf("%d",&n);
for(;;){
a++;n--;
printf("%d",a*2);
if(n==0)break;
}
本例中for語(yǔ)句的表達(dá)式全部省去。由循環(huán)體中的語(yǔ)句實(shí)現(xiàn)循環(huán)變量的遞減和循環(huán)條件的判斷。當(dāng)n值為0時(shí),由break語(yǔ)句中止循環(huán),轉(zhuǎn)去執(zhí)行for以后的程序。在此情況下,for語(yǔ)句已等效于while(1)語(yǔ)句。如在循環(huán)體中沒(méi)有相應(yīng)的控制手段,則造成死循環(huán)。
3.循環(huán)體可以是空語(yǔ)句。
#include"stdio.h"
voidmain(){
intn=0;
printf("inputastring:\n");
for(;getchar()!=''''\n'''';n++);
printf("%d",n);
}
本例中,省去了for語(yǔ)句的表達(dá)式1,表達(dá)式3也不是用來(lái)修改循環(huán)變量,而是用作輸入字符的計(jì)數(shù)。這樣,就把本應(yīng)在循環(huán)體中完成的計(jì)數(shù)放在表達(dá)式中完成了。因此循環(huán)體是空語(yǔ)句。應(yīng)注意的是,空語(yǔ)句后的分號(hào)不可少,如缺少此分號(hào),則把后面的printf語(yǔ)句當(dāng)成循環(huán)體來(lái)執(zhí)行。反過(guò)來(lái)說(shuō),如循環(huán)體不為空語(yǔ)句時(shí),決不能在表達(dá)式的括號(hào)后加分號(hào),這樣又會(huì)認(rèn)為循環(huán)體是空語(yǔ)句而不能反復(fù)執(zhí)行。這些都是編程中常見的錯(cuò)誤,要十分注意。
4.for語(yǔ)句也可與while,do-while語(yǔ)句相互嵌套,構(gòu)成多重循環(huán)。以下形成都合法的嵌套。
(1)for(){…
while()
{…}
…
}
(2)do{
…
for()
{…}
…
}while();
(3)while(){
…
for()
{…}
…
}
(4)for(){
…
for(){
…
}
}
voidmain(){
inti,j,k;
for(i=1;i<=3;i++)
{for(j=1;j<=3-i+5;j++)
printf("");
for(k=1;k<=2*i-1+5;k++)
{
if(k<=5)printf("");
elseprintf("*");
}
printf("\n");
}
}
轉(zhuǎn)移語(yǔ)句
程序中的語(yǔ)句通??偸前错樞蚍较?,或按語(yǔ)句功能所定義的方向執(zhí)行的。如果需要改變程序的正常流向,可以使用本小節(jié)介紹的轉(zhuǎn)移語(yǔ)句。在c語(yǔ)言中提供了4種轉(zhuǎn)移語(yǔ)句:
goto,break,continue和return。
其中的return語(yǔ)句只能出現(xiàn)在被調(diào)函數(shù)中,用于返回主調(diào)函數(shù),我們將在函數(shù)一章中具體介紹。本小節(jié)介紹前三種轉(zhuǎn)移語(yǔ)句。
1.goto語(yǔ)句
goto語(yǔ)句也稱為無(wú)條件轉(zhuǎn)移語(yǔ)句,其一般格式如下:goto語(yǔ)句標(biāo)號(hào);其中語(yǔ)句標(biāo)號(hào)是按標(biāo)識(shí)符規(guī)定書寫的符號(hào),放在某一語(yǔ)句行的
前面,標(biāo)號(hào)后加冒號(hào)(:)。語(yǔ)句標(biāo)號(hào)起標(biāo)識(shí)語(yǔ)句的作用,與goto語(yǔ)句配合使用。
如:label:i++;
loop:while(x<7);
c語(yǔ)言不限制程序中使用標(biāo)號(hào)的次數(shù),但各標(biāo)號(hào)不得重名。goto語(yǔ)句的語(yǔ)義是改變程序流向,轉(zhuǎn)去執(zhí)行語(yǔ)句標(biāo)號(hào)所標(biāo)識(shí)的語(yǔ)句。
goto語(yǔ)句通常與條件語(yǔ)句配合使用。可用來(lái)實(shí)現(xiàn)條件轉(zhuǎn)移,構(gòu)成循環(huán),跳出循環(huán)體等功能。
但是,在結(jié)構(gòu)化程序設(shè)計(jì)中一般不主張使用goto語(yǔ)句,以免造成程序流程的混亂,使理解和調(diào)試程序都產(chǎn)生困難。
統(tǒng)計(jì)從鍵盤輸入一行字符的個(gè)數(shù)。
#include"stdio.h"
voidmain(){
intn=0;
printf("inputastring\n");
loop:if(getchar()!=''''\n'''')
{n++;
gotoloop;
}
printf("%d",n);
}intn=0;
printf("inputastring\n");
loop:if(getchar()!=''''\n'''')
{n++;
gotoloop;
}
printf("%d",n);
本例用if語(yǔ)句和goto語(yǔ)句構(gòu)成循環(huán)結(jié)構(gòu)。當(dāng)輸入字符不為''''\n''''時(shí)即執(zhí)行n++進(jìn)行計(jì)數(shù),然后轉(zhuǎn)移至if語(yǔ)句循環(huán)執(zhí)行。直至輸入字符為''''\n''''才停止循環(huán)。
break語(yǔ)句
break語(yǔ)句只能用在switch語(yǔ)句或循環(huán)語(yǔ)句中,其作用是跳出switch語(yǔ)句或跳出本層循環(huán),轉(zhuǎn)去執(zhí)行后面的程序。由于break語(yǔ)句的轉(zhuǎn)移方向是明確的,所以不需要語(yǔ)句標(biāo)號(hào)與之配合。break語(yǔ)句的一般形式為:break;上面例題中分別在switch語(yǔ)句和for語(yǔ)句中使用了break語(yǔ)句作為跳轉(zhuǎn)。使用break語(yǔ)句可以使循環(huán)語(yǔ)句有多個(gè)出口,在一些場(chǎng)合下使編程更加靈活、方便。
continue語(yǔ)句
continue語(yǔ)句只能用在循環(huán)體中,其一般格式是:
continue;
其語(yǔ)義是:結(jié)束本次循環(huán),即不再執(zhí)行循環(huán)體中continue語(yǔ)句之后的語(yǔ)句,轉(zhuǎn)入下一次循環(huán)條件的判斷與執(zhí)行。應(yīng)注意的是,本語(yǔ)句只結(jié)束本層本次的循環(huán),并不跳出循環(huán)。
voidmain(){
intn;
for(n=7;n<=100;n++)
{
if(n%7!=0)
continue;
printf("%d",n);
}
}
輸出100以內(nèi)能被7整除的數(shù)。
intn;
for(n=7;n<=100;n++)
{
if(n%7!=0)
continue;
printf("%d",n);
}
本例中,對(duì)7~100的每一個(gè)數(shù)進(jìn)行測(cè)試,如該數(shù)不能被7整除,即模運(yùn)算不為0,則由continus語(yǔ)句轉(zhuǎn)去下一次循環(huán)。只有模運(yùn)算為0時(shí),才能執(zhí)行后面的printf語(yǔ)句,輸出能被7整除的數(shù)。
#include"stdio.h"
voidmain(){
chara,b;
printf("inputastring:\n");
b=getchar();
while((a=getchar())!=''''\n''''){
if(a==b){
printf("samecharacter\n");
break;
}b=a;
}
}
檢查輸入的一行中有無(wú)相鄰兩字符相同。
chara,b;
printf("inputastring:\n");
b=getchar();
while((a=getchar())!=''''\n''''){
if(a==b){
printf("samecharacter\n");
break;
}b=a;
}
本例程序中,把第一個(gè)讀入的字符送入b。然后進(jìn)入循環(huán),把下一字符讀入a,比較a,b是否相等,若相等則輸出提示串并中止循環(huán),若不相等則把a(bǔ)中的字符賦予b,輸入下一次循環(huán)。
輸出100以內(nèi)的素?cái)?shù)。素?cái)?shù)是只能被1和本身整除的數(shù)??捎酶F舉法來(lái)判斷一個(gè)數(shù)是否是素?cái)?shù)。
voidmain(){
intn,i;
for(n=2;n<=100;n++){
for(i=2;i<n;i++)
if(n%i==0)break;
if(i>=n)printf("\t%d",n);
}
}intn,i;
for(n=2;n<=100;n++){
for(i=2;i<n;i++)
if(n%i==0)break;
if(i>=n)printf("\t%d",n);
}
本例程序中,第一層循環(huán)表示對(duì)1~100這100個(gè)數(shù)逐個(gè)判斷是否是素?cái)?shù),共循環(huán)100次,在第二層循環(huán)中則對(duì)數(shù)n用2~n-1逐個(gè)去除,若某次除盡則跳出該層循環(huán),說(shuō)明不是素?cái)?shù)。如果在所有的數(shù)都是未除盡的情況下結(jié)束循環(huán),則為素?cái)?shù),此時(shí)有i>=n,故可經(jīng)此判斷后輸出素?cái)?shù)。然后轉(zhuǎn)入下一次大循環(huán)。實(shí)際上,2以上的所有偶數(shù)均不是素?cái)?shù),因此可以使循環(huán)變量的步長(zhǎng)值改為2,即每次增加2,此外只需對(duì)數(shù)n用2~n去除就可判斷該數(shù)是否素?cái)?shù)。這樣將大大減少循環(huán)次數(shù),減少程序運(yùn)行時(shí)間。
#include"math.h"
voidmain(){
intn,i,k;
for(n=2;n<=100;n+=2){
k=sqrt(n);
for(i=2;i<k;i++)
if(n%i==0)break;
if(i>=k)printf("\t%2d",n);
}
}
小結(jié)
1.從程序執(zhí)行的流程來(lái)看,程序可分為三種最基本的結(jié)構(gòu):順序結(jié)構(gòu),分支結(jié)構(gòu)以及循環(huán)結(jié)構(gòu)
2.程序中執(zhí)行部分最基本的單位是語(yǔ)句。c語(yǔ)言的語(yǔ)句可分為五類:
(1)表達(dá)式語(yǔ)句任何表達(dá)式末尾加上分號(hào)即可構(gòu)成表達(dá)式語(yǔ)句,常用的表達(dá)式語(yǔ)句為賦值語(yǔ)句。
(2)函數(shù)調(diào)用語(yǔ)句由函數(shù)調(diào)用加上分號(hào)即組成函數(shù)調(diào)用語(yǔ)句。
(3)控制語(yǔ)句用于控制程序流程,由專門的語(yǔ)句定義符及所需的表達(dá)式組成。主要有條件判斷執(zhí)行語(yǔ)句,循環(huán)執(zhí)行語(yǔ)句,轉(zhuǎn)向語(yǔ)句等。
(4)復(fù)合語(yǔ)句由{}把多個(gè)語(yǔ)句括起來(lái)組成一個(gè)語(yǔ)句。復(fù)合語(yǔ)句被認(rèn)為是單條語(yǔ)句,它可出現(xiàn)在所有允許出現(xiàn)語(yǔ)句的地方,如循環(huán)體等。
(5)空語(yǔ)句僅由分號(hào)組成,無(wú)實(shí)際功能。
3.c語(yǔ)言中沒(méi)有提供專門的輸入輸出語(yǔ)句,所有的輸入輸出都是由調(diào)用標(biāo)準(zhǔn)庫(kù)函數(shù)中的輸入輸出函數(shù)來(lái)實(shí)現(xiàn)的。
scanf和getchar函數(shù)是輸入函數(shù),接收來(lái)自鍵盤的輸入數(shù)據(jù)。
scanf是格式輸入函數(shù),可按指定的格式輸入任意類型數(shù)據(jù)。
getchar函數(shù)是字符輸入函數(shù),只能接收單個(gè)字符。
printf和putchar函數(shù)是輸出函數(shù),向顯示器屏幕輸出數(shù)據(jù)。
printf是格式輸出函數(shù),可按指定的格式顯示任意類型的數(shù)據(jù)。
putchar是字符顯示函數(shù),只能顯示單個(gè)字符。
4.關(guān)系表達(dá)式和邏輯表達(dá)式是兩種重要的表達(dá)式,主要用于條件執(zhí)行的判斷和循環(huán)執(zhí)行的判斷。
5.c語(yǔ)言提供了多種形式的條件語(yǔ)句以構(gòu)成分支結(jié)構(gòu)。
(1)if語(yǔ)句主要用于單向選擇。
(2)if-else語(yǔ)句主要用于雙向選擇。
(3)if-else-if語(yǔ)和switch語(yǔ)句用于多向選擇。
這幾種形式的條件語(yǔ)句一般來(lái)說(shuō)是可以互相替代的。
6.c語(yǔ)言提供了三種循環(huán)語(yǔ)句。
(1)for語(yǔ)句主要用于給定循環(huán)變量初值,步長(zhǎng)增量以及循環(huán)次數(shù)的循環(huán)結(jié)構(gòu)。
(2)循環(huán)次數(shù)及控制條件要在循環(huán)過(guò)程中才能確定的循環(huán)可用while或do-while語(yǔ)句。
(3)三種循環(huán)語(yǔ)句可以相互嵌套組成多重循環(huán)。循環(huán)之間可以并列但不能交叉。
(4)可用轉(zhuǎn)移語(yǔ)句把流程轉(zhuǎn)出循環(huán)體外,但不能從外面轉(zhuǎn)向循環(huán)體內(nèi)。
(5)在循環(huán)程序中應(yīng)避免出現(xiàn)死循環(huán),即應(yīng)保證循環(huán)變量的值在運(yùn)行過(guò)程中可以得到修改,并使循環(huán)條件逐步變?yōu)榧伲瑥亩Y(jié)束循環(huán)。
7.c語(yǔ)言語(yǔ)句小結(jié)
名稱一般形式
簡(jiǎn)單語(yǔ)句表達(dá)式語(yǔ)句表達(dá)式;
空語(yǔ)句;
復(fù)合語(yǔ)句{語(yǔ)句}
條件語(yǔ)句if(表達(dá)式)語(yǔ)句;
if(表達(dá)式)語(yǔ)句1;else語(yǔ)句2;
if(表達(dá)式1)語(yǔ)句1;elseif(表達(dá)式2)語(yǔ)句2…else語(yǔ)句n;
開關(guān)語(yǔ)句switch(表達(dá)式){case常量表達(dá)式:語(yǔ)句…default:語(yǔ)句;}
循環(huán)語(yǔ)句while語(yǔ)句
while(表達(dá)式)語(yǔ)句;
for語(yǔ)句for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語(yǔ)句;
break語(yǔ)句break;
goto語(yǔ)句goto;
篇2
關(guān)鍵詞:C語(yǔ)言;程序設(shè)計(jì);機(jī)考;分層教學(xué);課程改革
中圖分類號(hào):G642 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2014)34-8225-02
《C語(yǔ)言程序設(shè)計(jì)》課程的授課對(duì)象是計(jì)算機(jī)專業(yè)本科學(xué)生,為專業(yè)基礎(chǔ)(必修)課,是學(xué)好后續(xù)各軟件課程必要的基礎(chǔ)。有別于已經(jīng)掌握的漢語(yǔ)、英語(yǔ)語(yǔ)言,作為人與計(jì)算機(jī)交流的語(yǔ)言,C語(yǔ)言不但概念多、符號(hào)多、語(yǔ)法多、規(guī)則多,而且抽象、難懂,再加上需要有一定的理解力以及解決問(wèn)題的清晰思路,有些學(xué)生在學(xué)習(xí)過(guò)程中會(huì)感覺(jué)到枯燥、繁雜、無(wú)趣。因此培養(yǎng)學(xué)生的學(xué)習(xí)興趣、加強(qiáng)對(duì)課程的重視、提高實(shí)際編程能力、將理論與實(shí)際相結(jié)合,是教師必須解決的問(wèn)題。
為了提高學(xué)習(xí)質(zhì)量,從2010年秋季學(xué)期開始對(duì)《C語(yǔ)言程序設(shè)計(jì)》課程的教學(xué)過(guò)程、成績(jī)考核進(jìn)行了改革,由原來(lái)的紙質(zhì)試卷考試變成全程上機(jī)考試。改革實(shí)施多年來(lái),大部分學(xué)生增加了學(xué)習(xí)興趣,有了編寫程序的主動(dòng)性和積極性,增加了專業(yè)學(xué)習(xí)的信心,提升了程序設(shè)計(jì)的能力。
考慮到學(xué)生在基礎(chǔ)知識(shí)、智力因素、學(xué)習(xí)能力上的差異,為了更有效地實(shí)施“因材施教”,從2013年秋季學(xué)期開始實(shí)施分層教學(xué)。在講完C語(yǔ)言基礎(chǔ)知識(shí)、程序基本設(shè)計(jì)方法之后進(jìn)行分層。通過(guò)考核,外加自愿的原則,將原來(lái)的教學(xué)班打亂,重新組合成兩種班型――高層次、低層次班。分層之后,每個(gè)學(xué)生個(gè)體獲取的知識(shí)趨于最大化,極大地提高了課堂學(xué)習(xí)效率。
1 傳統(tǒng)教學(xué)與紙質(zhì)考試存在的問(wèn)題
傳統(tǒng)的教學(xué)是按照指定教材,在課上將重點(diǎn)內(nèi)容進(jìn)行講解,典型的問(wèn)題、方法在TC/VC環(huán)境中進(jìn)行演示,課后留給學(xué)生一定的紙質(zhì)作業(yè)和上機(jī)編程作業(yè)。同樣的講授,理解力強(qiáng)的學(xué)生一聽就懂;理解力弱的學(xué)生,老師需要講多遍才有可能懂。傳統(tǒng)的教學(xué)中,老師只能顧及大多數(shù)中等學(xué)生,照顧不到特殊的學(xué)生。降低了課堂效率,也可以說(shuō)浪費(fèi)了某一部分學(xué)生的時(shí)間。
由于期末考核采用的是紙質(zhì)考試,只是從紙面上考核學(xué)生對(duì)C語(yǔ)言理論、編程方法的理解、掌握程度,更對(duì)學(xué)生的學(xué)習(xí)產(chǎn)生誤導(dǎo)。部分學(xué)生也只重視理論,不重視實(shí)際動(dòng)手編程。他們只滿足于“紙上談兵”,不考慮結(jié)果。因此,實(shí)際應(yīng)用時(shí),對(duì)上機(jī)環(huán)境不熟悉、編寫的程序不能順利通過(guò),導(dǎo)致很多學(xué)生高分低能,在解決實(shí)際問(wèn)題時(shí),茫然無(wú)措。
2 機(jī)考及分層教學(xué)改革的探索
計(jì)算機(jī)專業(yè)課程的特點(diǎn)是實(shí)踐性強(qiáng),學(xué)生在掌握了基本語(yǔ)法后重點(diǎn)是上機(jī)實(shí)踐,即在計(jì)算機(jī)上解決實(shí)際問(wèn)題,這里包括問(wèn)題的分析與抽象、程序的編寫與調(diào)試。
常言道:“實(shí)踐是檢驗(yàn)真理的標(biāo)準(zhǔn)”。在學(xué)習(xí)C語(yǔ)言過(guò)程中,上機(jī)實(shí)踐是鞏固理論知識(shí)、增加理解力、提升編程能力的重要途徑。為了提高教學(xué)質(zhì)量,讓學(xué)生真正打好專業(yè)基礎(chǔ),授課教師在教學(xué)內(nèi)容、教學(xué)方法、教學(xué)組織、考試方式等多方面上進(jìn)行了調(diào)整。
2.1 教學(xué)方法以及教學(xué)組織上的改革
為了使教學(xué)效果更好,將兩個(gè)自然班作為一個(gè)授課班,教學(xué)內(nèi)容統(tǒng)一要求。講授時(shí),由淺入深、循序漸進(jìn)。在語(yǔ)言的基礎(chǔ)上,重點(diǎn)放在程序設(shè)計(jì)的思想、方法、技巧的講解,結(jié)合典型例題,培養(yǎng)學(xué)生分析、設(shè)計(jì)、解決問(wèn)題的能力。通過(guò)精心設(shè)計(jì)實(shí)驗(yàn)題目、課后作業(yè)、調(diào)整考核比例、增加課后上機(jī)機(jī)時(shí)、多方位提供答疑指導(dǎo)等環(huán)節(jié)培養(yǎng)學(xué)生學(xué)習(xí)興趣,使學(xué)生重視上機(jī)編程。
對(duì)學(xué)生作業(yè)題目進(jìn)行精心設(shè)計(jì),既覆蓋知識(shí)點(diǎn),又有趣味性,每個(gè)題目都像在講一個(gè)故事,把要解決的問(wèn)題融在故事中,學(xué)生在讀故事的同時(shí),不自覺(jué)地就會(huì)去想解決辦法,增加了興趣,提高了自主性,也鍛煉了思維。
調(diào)整平時(shí)考核內(nèi)容。平時(shí)考核的環(huán)節(jié)包括:上機(jī)小測(cè)試、期中機(jī)考、上機(jī)作業(yè)、考勤,每一個(gè)環(huán)節(jié)的成績(jī)都會(huì)反映到平時(shí)成績(jī)中。平時(shí)成績(jī)的取得完全依賴自己的學(xué)習(xí)態(tài)度。
增加課后上機(jī)機(jī)時(shí)。由于考核重點(diǎn)是對(duì)實(shí)際動(dòng)手能力的考核,光靠課內(nèi)安排的上機(jī)時(shí)間顯然不夠,所以需增加學(xué)生課外自主上機(jī)實(shí)驗(yàn)時(shí)間,并配有指定人員輔導(dǎo)。
多方位提供答疑指導(dǎo)。所有任課教師把答疑時(shí)間錯(cuò)開,這樣每周學(xué)生可以有多次答疑時(shí)間,對(duì)比原來(lái)教師只給自己學(xué)生答疑的做法,學(xué)生增加了學(xué)習(xí)解疑的機(jī)會(huì)。
2.2加強(qiáng)上機(jī)實(shí)驗(yàn)過(guò)程控制,促進(jìn)考試改革
借助于“課程自動(dòng)評(píng)測(cè)與抄襲檢測(cè)系統(tǒng)”,老師和學(xué)生有了C語(yǔ)言作業(yè)部署、學(xué)習(xí)、檢測(cè)的平臺(tái)。通過(guò)這個(gè)平臺(tái),老師可以布置上機(jī)實(shí)驗(yàn)、安排考試、檢查學(xué)生提交的作業(yè)。根據(jù)知識(shí)點(diǎn),每章布置4-5道題,限定學(xué)生在規(guī)定時(shí)間內(nèi)獨(dú)立提交。老師可以隨時(shí)查看學(xué)生提交的程序,及時(shí)與學(xué)生溝通、反饋。學(xué)生可以隨時(shí)把自己編寫的程序提交,系統(tǒng)對(duì)提交到服務(wù)器的程序自動(dòng)判斷對(duì)錯(cuò),學(xué)生可以及時(shí)了解自己程序存在的問(wèn)題,不斷進(jìn)行修改,直到能夠順利通過(guò)所有測(cè)試。
這一環(huán)節(jié)起到了鞏固課本知識(shí)、增加獨(dú)立思考、加強(qiáng)動(dòng)手能力的作用。期末就是利用這個(gè)平臺(tái)進(jìn)行全程兩個(gè)小時(shí)的考試,要求學(xué)生既有編程的能力,又有時(shí)間的緊迫感。
加強(qiáng)過(guò)程考核,增加平時(shí)機(jī)考次數(shù)。為了緩解期末機(jī)考時(shí)的緊張情緒,之前會(huì)安排1-2次的上機(jī)考試,成績(jī)記入期評(píng),其中期中考試的考試形式與期末一樣,為全程兩個(gè)小時(shí)的機(jī)考,隨機(jī)組卷。學(xué)生可以盡早了解考試模式,并更加重視對(duì)本門課程實(shí)際動(dòng)手能力的訓(xùn)練,學(xué)會(huì)調(diào)整心態(tài)。
為了滿足不同層次學(xué)生的要求,在平臺(tái)上配備了大量不同難度的習(xí)題,不受提交時(shí)間的限制。學(xué)生可以根據(jù)自身需求,隨時(shí)編程測(cè)試。
2.3分層教學(xué),提升學(xué)習(xí)效率
分層教學(xué)是根據(jù)學(xué)生不同基礎(chǔ)、不同學(xué)習(xí)需求而實(shí)施教學(xué)的一種手段。是在承認(rèn)學(xué)生差異、考慮學(xué)生興趣的前提下,以發(fā)展的眼光看待學(xué)生,給每個(gè)學(xué)生提供符合他們發(fā)展的教學(xué)目標(biāo)與方法,是同時(shí)提高所有學(xué)生能力的理想狀態(tài)。經(jīng)過(guò)調(diào)研,從三個(gè)方面進(jìn)行分層教學(xué)。
1)學(xué)生分層。對(duì)學(xué)生能力考核的一個(gè)重要標(biāo)準(zhǔn)就是學(xué)生的學(xué)習(xí)成績(jī),但是在學(xué)習(xí)這門課之初,沒(méi)有可依據(jù)的成績(jī)。分層安排在講完兩周課,即學(xué)完了簡(jiǎn)單程序設(shè)計(jì)之后進(jìn)行。學(xué)生根據(jù)自己當(dāng)前對(duì)C語(yǔ)言的理解和接受程度,選擇不同層次。在分層教學(xué)的實(shí)施過(guò)程中,這樣的分層是暫時(shí)的、動(dòng)態(tài)的。過(guò)一段時(shí)間,視學(xué)生的后期學(xué)習(xí)成績(jī)、學(xué)生的具體情況,可遞進(jìn)或降層。這樣更有利于學(xué)生個(gè)性化發(fā)展。
2)講課分層。對(duì)不同層次的學(xué)生,采取不同課堂。在講授編程思想、必備知識(shí)基礎(chǔ)上,對(duì)高層次學(xué)生,拓寬和加深問(wèn)題的難度,做到拔尖提高;對(duì)普通學(xué)生,在達(dá)到大綱要求的同時(shí),考慮他們的接受能力,適度增加和加深知識(shí),做到穩(wěn)步推進(jìn)。
3)實(shí)驗(yàn)分層。練習(xí)是對(duì)所學(xué)知識(shí)的鞏固和消化。按照作業(yè)、實(shí)驗(yàn)題目的難易,對(duì)不同層次的學(xué)生提出不同要求。對(duì)普通學(xué)生布置基礎(chǔ)題,進(jìn)行強(qiáng)化訓(xùn)練;對(duì)高層次學(xué)生,以綜合運(yùn)用知識(shí)進(jìn)行練習(xí)。要求學(xué)生多編程解決問(wèn)題,以提高應(yīng)用知識(shí)的能力。這樣使得不同層次的學(xué)生得到不同程度的提高。
3 教學(xué)改革實(shí)踐效果
實(shí)行考試改革后,學(xué)生的學(xué)習(xí)積極性有了明顯提高。由于考試時(shí)間的有限性,增加了學(xué)生的緊迫感、主動(dòng)性,在程序編寫、調(diào)試程序的實(shí)際動(dòng)手能力方面得到了重視并有所提高,為后續(xù)課程學(xué)習(xí)奠定了良好的基礎(chǔ)。經(jīng)過(guò)分層教學(xué),滿足了不同層次學(xué)生學(xué)習(xí)的需要,激勵(lì)了各層次學(xué)生朝著有利于自己的方向努力,有利于學(xué)生個(gè)性能力的張揚(yáng),有利于學(xué)生綜合素質(zhì)的提高,更有利于優(yōu)秀學(xué)生綜合能力的發(fā)揮、較低層次學(xué)生潛在能力的開發(fā)。
3.1帶動(dòng)學(xué)風(fēng),促進(jìn)后續(xù)課程的學(xué)習(xí)
大部分學(xué)生能夠按時(shí)到課,勤于思考,互相研究,答疑的同學(xué)增多了。改變了不良學(xué)風(fēng),營(yíng)造了良好學(xué)習(xí)氛圍。由于課程期間比較重視學(xué)生結(jié)構(gòu)化程序設(shè)計(jì)的方法,要求編寫程序之前理清解題思路、做好算法設(shè)計(jì),經(jīng)過(guò)訓(xùn)練后,在后續(xù)的“程序設(shè)計(jì)專題訓(xùn)練”中,面對(duì)稍難一些的問(wèn)題,學(xué)生也能逐步找到解決辦法,編出程序,順利通過(guò)測(cè)試。在小學(xué)期“學(xué)術(shù)工程實(shí)踐”課程中,要求完成一個(gè)小型管理系統(tǒng),有一定的難度。大部分學(xué)生能夠順利編寫由多個(gè)結(jié)構(gòu)體、多個(gè)文件、幾十個(gè)函數(shù)組成的、2000-4000行代碼的程序,并調(diào)試成功,完成管理。
3.2提升學(xué)生的程序設(shè)計(jì)能力和創(chuàng)新能力
競(jìng)賽是考核學(xué)生全面素質(zhì)的一個(gè)平臺(tái),它要求學(xué)生具有扎實(shí)的理論基礎(chǔ)、清晰的算法設(shè)計(jì)能力、嫻熟的編程能力、良好的心理素質(zhì)和快速的臨場(chǎng)應(yīng)變能力。
隨著知識(shí)的積累,學(xué)生的能力和自信心不斷增強(qiáng)。學(xué)生們更加渴求知識(shí),渴望展示自己,參加競(jìng)賽的積極性提高了,人數(shù)也不斷增多。在大二階段,報(bào)名參加全國(guó)軟件設(shè)計(jì)大賽的人數(shù)由09級(jí)的16人次(占09級(jí)學(xué)生人數(shù)14.04%)、10級(jí)的33人次(占10級(jí)學(xué)生人數(shù)26.19%),增加到11級(jí)的66人次(占11級(jí)學(xué)生人數(shù)51.56%)。全國(guó)獲獎(jiǎng)人數(shù)由09級(jí)的1人次(占09級(jí)學(xué)生人數(shù)0.88%),到10級(jí)的12人次(占10級(jí)學(xué)生人數(shù)9.52%),再到11級(jí)的17人次(占11級(jí)學(xué)生人數(shù)13.28%),獲獎(jiǎng)人數(shù)同比增多。
4 結(jié)論
總之,學(xué)習(xí)“高級(jí)程序設(shè)計(jì)語(yǔ)言”不僅要使得學(xué)生在程序表達(dá)和設(shè)計(jì)上得到培養(yǎng),更重要的是在掌握解決問(wèn)題的思想、方法和手段的同時(shí),實(shí)際動(dòng)手編程能力有所提高,從而增長(zhǎng)設(shè)計(jì)程序的能力。因而,將“C程序設(shè)計(jì)”課程的考試改為上機(jī)考試是很有益的,可以改變不良的學(xué)風(fēng),營(yíng)造良好學(xué)習(xí)氛圍;可以加強(qiáng)學(xué)生對(duì)課程的重視,提高學(xué)生程序編寫、調(diào)試等實(shí)際動(dòng)手能力,提升學(xué)生的程序設(shè)計(jì)能力和創(chuàng)新能力,為后續(xù)課程學(xué)習(xí)、為培養(yǎng)合格的專業(yè)人才奠定良好的基礎(chǔ)。
對(duì)“C程序設(shè)計(jì)”課程實(shí)施分層次教學(xué)也是必要的,可以針對(duì)不同層次學(xué)生的需求給予相應(yīng)的學(xué)習(xí)指導(dǎo),以達(dá)到學(xué)生全面發(fā)展的教學(xué)目標(biāo);可以激發(fā)不同層次學(xué)生學(xué)習(xí)的欲望,向著更高更深的知識(shí)海洋探索;可以鞭策任課教師積極思考、合理取舍,做到充分了解學(xué)生、合理安排進(jìn)度,能夠極大地提升老師的組織與應(yīng)變能力。
參考文獻(xiàn):
[1] 李學(xué)會(huì).C程序設(shè)計(jì)教學(xué)改革與實(shí)踐[J].實(shí)驗(yàn)室科學(xué),2010(4)33-34.
篇3
(中國(guó)礦業(yè)大學(xué)(北京) 機(jī)電與信息工程學(xué)院,北京 100083)
摘要:分析C語(yǔ)言教學(xué)中存在的普遍問(wèn)題,從教學(xué)內(nèi)容組織形式、教學(xué)方法以及考核方式等方面提出一系列有針對(duì)性的教學(xué)方法,指出這種教學(xué)方法能有效地提高學(xué)生的學(xué)習(xí)效率和質(zhì)量。
關(guān)鍵詞 :C語(yǔ)言程序設(shè)計(jì);公共基礎(chǔ)課;教學(xué)方法
基金項(xiàng)目:北京高等學(xué)校青年英才計(jì)劃項(xiàng)目;煤炭資源與安全開采國(guó)家重點(diǎn)實(shí)驗(yàn)室開放課題(SKLCRSM11KFB12)。
作者簡(jiǎn)介:王振武,男,副教授,研究方向?yàn)閿?shù)據(jù)挖掘、圖形圖像處理,wangzhenwu@126.com。
0 引言
為提高大學(xué)生利用計(jì)算機(jī)解決問(wèn)題的能力,全國(guó)高校普遍為理工科專業(yè)的低年級(jí)學(xué)生開設(shè)了C語(yǔ)言程序設(shè)計(jì)這門必修的公共基礎(chǔ)課程。一方面,該課程是學(xué)生接觸的第一門程序設(shè)計(jì)類課程,其編程思維的養(yǎng)成是一個(gè)較長(zhǎng)的過(guò)程;另一方面,該課程具有內(nèi)容繁多、知識(shí)點(diǎn)關(guān)聯(lián)性強(qiáng)、算法抽象、實(shí)踐性要求高等特點(diǎn),學(xué)生在學(xué)習(xí)過(guò)程中易產(chǎn)生畏難心理,進(jìn)而出現(xiàn)學(xué)習(xí)動(dòng)力不足、積極性不高等問(wèn)題。C語(yǔ)言程序設(shè)計(jì)是一門難學(xué)也難教的課程,目前在教學(xué)上普遍存在很多問(wèn)題。文獻(xiàn)[1-4]對(duì)C語(yǔ)言程序設(shè)計(jì)的教學(xué)方法給出了建議,但都不夠系統(tǒng)和全面。
1 C語(yǔ)言程序設(shè)計(jì)教學(xué)方法研究
1.1 理論教學(xué)
對(duì)于大多數(shù)課程而言,從宏觀上將課程知識(shí)點(diǎn)及其關(guān)聯(lián)講授給學(xué)生非常必要,這便于學(xué)生更加系統(tǒng)深刻地理解所學(xué)內(nèi)容。筆者以文獻(xiàn)[5]作為教材講解C語(yǔ)言程序設(shè)計(jì)的知識(shí)點(diǎn)結(jié)構(gòu)。如圖1所示,知識(shí)點(diǎn)之間的關(guān)聯(lián)可以層層細(xì)化,教師首先從宏觀上給學(xué)生介紹C語(yǔ)言程序的整體組成結(jié)構(gòu)(如圖1-(a),然后針對(duì)圖1-(a)中一個(gè)源程序文件的組成成分舉例介紹,如圖1-(b)所示。在圖1-(b)中,教師對(duì)涉及的知識(shí)點(diǎn)進(jìn)行歸類,共包含預(yù)處理命令、數(shù)據(jù)類型、運(yùn)算符、語(yǔ)句和函數(shù)等5部分,然后圖1-(c)至圖1-(i)依次層層展開上述各類知識(shí)點(diǎn)的組成,逐步細(xì)化。
從宏觀上梳理C語(yǔ)言與程序設(shè)計(jì)課程的知識(shí)點(diǎn)是非常必要和重要的,這樣可以避免學(xué)生“只見樹木,不見森林”,最后只學(xué)到一堆零散的知識(shí)點(diǎn),只有從宏觀上把握各個(gè)知識(shí)點(diǎn)在知識(shí)體系中的位置和作用,才能學(xué)得深、記得牢。
對(duì)于程序語(yǔ)言課程,如果僅僅介紹語(yǔ)法的運(yùn)用,學(xué)生往往對(duì)知識(shí)點(diǎn)理解不深刻。我們?cè)诮虒W(xué)實(shí)踐中的體會(huì)是:在講解C語(yǔ)言語(yǔ)法的基礎(chǔ)上,適當(dāng)?shù)仄饰鼍幊陶Z(yǔ)言在計(jì)算機(jī)中的運(yùn)行機(jī)制,會(huì)讓學(xué)生的理解更加透徹。因此,我們的課堂教學(xué)方法分為如下兩部分。
1)課件講解。
課件講解包括兩部分,即知識(shí)點(diǎn)要點(diǎn)總結(jié)和知識(shí)點(diǎn)運(yùn)行機(jī)制剖析。知識(shí)點(diǎn)要點(diǎn)總結(jié)就是告訴學(xué)生該知識(shí)點(diǎn)如何使用;而知識(shí)點(diǎn)運(yùn)行機(jī)制剖析則告訴學(xué)生該程序在計(jì)算機(jī)內(nèi)存中的執(zhí)行過(guò)程。由于絕大部分高校在開設(shè)C語(yǔ)言程序設(shè)計(jì)之前都會(huì)開設(shè)計(jì)算機(jī)文化基礎(chǔ)等課程,因此學(xué)生有足夠的計(jì)算機(jī)基礎(chǔ)知識(shí)來(lái)理解C語(yǔ)言程序的運(yùn)行機(jī)制。
2)實(shí)例演示。
作為一門編程語(yǔ)言,C語(yǔ)言需要在實(shí)踐中理解和掌握,因此,課堂教學(xué)中,在具體的編程環(huán)境(如VC++6.0)下演示十分必要。通過(guò)在具體的軟件環(huán)境下編程,告訴學(xué)生應(yīng)該做什么和不應(yīng)該做什么,并總結(jié)該知識(shí)點(diǎn)的注意事項(xiàng)。相比傳統(tǒng)的脫離編程環(huán)境,只在PPT或黑板上進(jìn)行板書的教學(xué)模式,該方法的教學(xué)效果要好得多。在課堂教學(xué)中,具體的教學(xué)步驟如下:①使用PPT或者板書列出該知識(shí)點(diǎn)的注意要點(diǎn);②在編程環(huán)境(如VC++6.0)下演示該知識(shí)點(diǎn)的用法,給出正確的和錯(cuò)誤的使用方法,并進(jìn)行對(duì)比;③通過(guò)幻燈片動(dòng)畫或flash動(dòng)畫等形式演示程序在計(jì)算機(jī)內(nèi)存中的執(zhí)行過(guò)程,讓學(xué)生更加深刻地理解程序的運(yùn)行機(jī)制。
3)教學(xué)難點(diǎn)與重點(diǎn)——“復(fù)合知識(shí)點(diǎn)”。
從C語(yǔ)言的教學(xué)內(nèi)容來(lái)講,數(shù)組、函數(shù)和指針是教學(xué)的重點(diǎn)章節(jié),這些章節(jié)之間相互關(guān)聯(lián)的部分又是重點(diǎn)中的難點(diǎn),如數(shù)組和函數(shù)結(jié)合,數(shù)組名做函數(shù)參數(shù),數(shù)組和指針結(jié)合,指向數(shù)組的指針變量,函數(shù)和指針結(jié)合,指向函數(shù)的指針變量等。在教學(xué)過(guò)程中要反復(fù)強(qiáng)調(diào)各個(gè)知識(shí)點(diǎn)的注意事項(xiàng),如果基本知識(shí)點(diǎn)能夠理解透徹,上述難點(diǎn)內(nèi)容也就迎刃而解了。
1.2 上機(jī)實(shí)踐教學(xué)
在實(shí)踐教學(xué)中,教師可以通過(guò)實(shí)際教學(xué)案例循序漸進(jìn)地強(qiáng)化學(xué)生對(duì)C語(yǔ)言知識(shí)點(diǎn)的理解。上機(jī)實(shí)踐的教學(xué)內(nèi)容通常分為兩部分:基本知識(shí)點(diǎn)練習(xí)和綜合訓(xùn)練。首先通過(guò)基本知識(shí)點(diǎn)的練習(xí),讓學(xué)生掌握該知識(shí)點(diǎn)的使用,即鞏固課堂所學(xué)內(nèi)容;然后通過(guò)一個(gè)綜合性的大作業(yè),訓(xùn)練學(xué)生綜合應(yīng)用C語(yǔ)言知識(shí)點(diǎn)的能力,例如,通過(guò)編寫“學(xué)生課程成績(jī)統(tǒng)計(jì)系統(tǒng)”考查學(xué)生對(duì)數(shù)組、結(jié)構(gòu)體、指針、函數(shù)、文件等知識(shí)的綜合掌握情況。
對(duì)于初學(xué)編程語(yǔ)言的學(xué)生,往往沒(méi)有養(yǎng)成良好的編程習(xí)慣,出錯(cuò)的可能性較大,而出錯(cuò)之后進(jìn)行調(diào)試又將耗費(fèi)較長(zhǎng)的時(shí)間,這勢(shì)必對(duì)學(xué)生的學(xué)習(xí)熱情產(chǎn)生負(fù)面影響。因此,一開始就給學(xué)生制定科學(xué)的編程步驟和規(guī)范,使學(xué)生養(yǎng)成良好的編程習(xí)慣,將大大減少程序出錯(cuò)的可能。在C語(yǔ)言教學(xué)實(shí)踐中,我們總結(jié)了“五步編程法”:①定義變量,如“int a;”;②對(duì)變量進(jìn)行初始化,如“a=0;”,對(duì)變量進(jìn)行初始化操作是一種良好的編程習(xí)慣,可防止未對(duì)變量賦值而引起的隱性錯(cuò)誤;③通過(guò)scanf語(yǔ)句賦值,如“scanf(“%d”,&a);”;④實(shí)現(xiàn)程序的主要算法,該部分是程序的主體;⑤通過(guò)printf語(yǔ)句將結(jié)果輸出在顯示器上,將結(jié)果輸出在顯示器上便于比較程序運(yùn)行結(jié)果是否正確。
下面是按照上述五步編寫的一個(gè)完整的C語(yǔ)言程序,用來(lái)比較兩個(gè)整數(shù)的大小。按照上述五步進(jìn)行編程,經(jīng)過(guò)一段時(shí)間的訓(xùn)練之后,學(xué)生出現(xiàn)語(yǔ)法錯(cuò)誤的可能性大大降低,此時(shí)學(xué)生更多的精力將集中在程序算法的設(shè)計(jì)和實(shí)現(xiàn)上。
1.3 考試形式
對(duì)于C語(yǔ)言程序設(shè)計(jì)的考核方式,我們采用知識(shí)點(diǎn)考核和編程實(shí)踐相結(jié)合的方式。知識(shí)點(diǎn)考核偏重于C語(yǔ)言基本語(yǔ)法,用于檢驗(yàn)學(xué)生對(duì)知識(shí)點(diǎn)的掌握是否全面,此項(xiàng)考核約占總成績(jī)的40%;編程實(shí)踐考核用于檢驗(yàn)學(xué)生的實(shí)際動(dòng)手能力,學(xué)生將在規(guī)定的時(shí)間內(nèi)根據(jù)題目在機(jī)器上編程,此項(xiàng)考核約占總成績(jī)的60%。為了實(shí)現(xiàn)知識(shí)點(diǎn)的考核,我們將考試與計(jì)算機(jī)二級(jí)C語(yǔ)言上機(jī)考試緊密結(jié)合,采用題庫(kù)平臺(tái)進(jìn)行上機(jī)考試,學(xué)生直接在機(jī)器上答題并提交,知識(shí)點(diǎn)考核多采取客觀題,如填空題、程序修改題以及讀程序題等,編程題在實(shí)戰(zhàn)編程中考核。C語(yǔ)言程序設(shè)計(jì)課程的重要特點(diǎn)就是實(shí)踐性強(qiáng),學(xué)習(xí)該課程的目的就是為了編寫程序。因此從考試的角度講,進(jìn)行編程實(shí)踐是最合適的方式,通過(guò)上機(jī)編程來(lái)考核學(xué)生的學(xué)習(xí)情況也是最公正和客觀的方式。
2 C語(yǔ)言程序設(shè)計(jì)教學(xué)實(shí)踐結(jié)果分析
中國(guó)礦業(yè)大學(xué)(北京)每年都有40多個(gè)班級(jí)同時(shí)開設(shè)C語(yǔ)言程序設(shè)計(jì)課程,因此該課程教學(xué)質(zhì)量的高低將直接影響全校理工科學(xué)生對(duì)C語(yǔ)言的理解和掌握。中國(guó)礦業(yè)大學(xué)(北京)C語(yǔ)言程序設(shè)計(jì)教學(xué)團(tuán)隊(duì)經(jīng)過(guò)長(zhǎng)期的探索總結(jié)出一套行之有效的C語(yǔ)言教學(xué)方法,我們將上述方法在學(xué)校越崎實(shí)驗(yàn)班中進(jìn)行了試點(diǎn)。如圖2所示,采用上述教學(xué)法的越崎實(shí)驗(yàn)班的C語(yǔ)言程序設(shè)計(jì)課程考試成績(jī)要明顯好于其他班級(jí),其中90分以上的學(xué)生占10.7%,80分以上的學(xué)生占總?cè)藬?shù)的53.6%。另外,學(xué)生的學(xué)習(xí)積極性比采用上述方法前得到明顯提高,很多學(xué)生都對(duì)計(jì)算機(jī)編程產(chǎn)生了濃厚興趣,實(shí)踐證明我們提出的上述方法是行之有效的。
3 結(jié)語(yǔ)
中國(guó)礦業(yè)大學(xué)(北京)C語(yǔ)言程序設(shè)計(jì)教學(xué)團(tuán)隊(duì)在長(zhǎng)期的教學(xué)實(shí)踐中探索出的這套教學(xué)方法被證明是行之有效的,它能夠極大地提高學(xué)生的學(xué)習(xí)興趣,不但讓學(xué)生學(xué)得會(huì)、記得牢,而且能夠舉一反三,把該方法應(yīng)用到其他編程語(yǔ)言的學(xué)習(xí)中。長(zhǎng)期的教學(xué)實(shí)踐使我們深刻地認(rèn)識(shí)到,教學(xué)方法的好壞對(duì)提高教學(xué)質(zhì)量有直接和重要的影響。我們團(tuán)隊(duì)提出的這套教學(xué)方法是對(duì)C語(yǔ)言程序設(shè)計(jì)教學(xué)方法的初步嘗試,希望能夠?qū)Ω叩仍盒語(yǔ)言程序設(shè)計(jì)教學(xué)方法的研究起到拋磚引玉的作用。
參考文獻(xiàn):
[1] 謝中科. C語(yǔ)言程序設(shè)計(jì)的教學(xué)改革與實(shí)踐[J]. 理工高教研究, 2004,3(23): 96-97.
[2] 簡(jiǎn)慧云. 提高C語(yǔ)言程序設(shè)計(jì)教學(xué)質(zhì)量的探討[J]. 理工高教研究, 2004, 6(23): 83-85.
[3] 王孝平, 董秀成, 謝維成.提高電器信息類專業(yè)學(xué)生C語(yǔ)言學(xué)習(xí)能力的教學(xué)方法探索[J]. 高等教育研究, 2012, 2(29): 37-40.
[4] 張麗華, 王冬星. 自主學(xué)習(xí)教學(xué)模式在C語(yǔ)言教學(xué)中的運(yùn)用[J]. 黑龍江教育: 高教研究與評(píng)估, 2009(12): 91-92.
篇4
【關(guān)鍵詞】單片機(jī);延時(shí)程序
接觸單片機(jī)有一年之久,從基礎(chǔ)知識(shí)了解開始,到流水燈、數(shù)碼管動(dòng)靜態(tài)顯示,鍵盤到液晶等幾個(gè)基本的模塊,編了一些基本的小程序,發(fā)現(xiàn)其中最常用的延時(shí)程序用C語(yǔ)言編寫也是千變?nèi)f化的,不同的程序,不同的用途,精確度不一樣,延時(shí)程序也需要有改變。下面就對(duì)我所知道的延時(shí)的方法談下自己的見解。
總的延時(shí)方法通常有兩種:一種為軟件延時(shí),通常采用循環(huán)的形式進(jìn)行;另外一種為硬件延時(shí),用到定時(shí)器/計(jì)數(shù)器,這種方法可以提高CPU的工作效率,并且能相對(duì)精確延時(shí)。
一、軟件延時(shí)與時(shí)間計(jì)算
軟件延時(shí)方式精確度不是很高,但是基本時(shí)間可以控制,并且移植性很好。
2.需要多種延時(shí)時(shí)間。還是8個(gè)燈做成流水燈,但是要求第一個(gè)燈亮1S,第2個(gè)燈亮2S,第三個(gè)燈亮3S……最后一個(gè)燈亮8S。
3.時(shí)間的確定。很多朋友看完我上面講個(gè)兩種延時(shí)方法可能會(huì)說(shuō),這樣是方便了,但是上面的時(shí)間如何確定呢?你的時(shí)間確定圖怎么來(lái)的?方法很簡(jiǎn)單,利用keil強(qiáng)大的功能實(shí)現(xiàn)。比如1S延時(shí)
另外還可以用示波器測(cè)試時(shí)間,需要外接示波器,用proteus畫完連接圖,接上示波器,再調(diào)用寫好程序的hex,就可以很清楚的看到延時(shí)時(shí)間。下面為延時(shí)20ms圖。
同時(shí)還可以用反匯編工具計(jì)算延時(shí)時(shí)間,匯編時(shí)間是很精確的,便于計(jì)算的。有興趣的朋友也可以自己上網(wǎng)搜索這兩種方法。對(duì)于初學(xué)的朋友,我建議還是用這種keil本身的工具比較方便。
二、用定時(shí)器/計(jì)數(shù)器實(shí)現(xiàn)精確定時(shí)
在很多情況下,需要我們精確定時(shí),那么我們就不能用前面講的調(diào)用小的延時(shí)子程序delay()來(lái)完成。所以就要考慮用精確的定時(shí)方式:定時(shí)器/計(jì)數(shù)器。
以上我介紹了對(duì)于寫延時(shí)程序自己的一些膚淺的見解,在以后的學(xué)習(xí)中還需要進(jìn)一步提高。粗略延時(shí)用基本的delay(),精確延時(shí)用定時(shí)/計(jì)數(shù)器。
篇5
(一《)C語(yǔ)言程序設(shè)計(jì)》的教學(xué)目標(biāo)
社會(huì)對(duì)于人才的需要,并不是要求他們只要學(xué)會(huì)理論知識(shí)就可以,各個(gè)單位對(duì)人才的要求更看重于他們的實(shí)踐能力,要求他們能夠把所學(xué)習(xí)過(guò)的知識(shí)轉(zhuǎn)化為動(dòng)手能力與實(shí)際解決問(wèn)題的能力。因此,對(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)的基本概念;理解解決問(wè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)用與、或、否命題,以此來(lái)解決實(shí)際中的程序問(wèn)題;熟練運(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)解決程序問(wèn)題的開放性思維。
(二《)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é)生來(lái)說(shuō),可能就是阻礙學(xué)習(xí)的因素。因此,教師在教學(xué)過(guò)程中要對(duì)各個(gè)方面影響教學(xué)效果的因素進(jìn)行充分的考慮。對(duì)學(xué)生的教學(xué)工作,可以采取分組教學(xué)的形式,這種方法不但可以讓教師能夠更大程度上關(guān)注到每一位學(xué)生的學(xué)習(xí)情況,還能夠通過(guò)小組間學(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í)自己沒(méi)有掌握的知識(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í)的過(guò)程中,師生的共同活動(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ì)兩種基本形式,我們把以問(wèn)題為導(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ī)房,以問(wèn)題為導(dǎo)向的《C語(yǔ)言程序設(shè)計(jì)》有利于學(xué)生培養(yǎng)團(tuán)隊(duì)合作精神,提高彼此之間的交流能力,鼓勵(lì)學(xué)生在學(xué)習(xí)的過(guò)程中勇敢地提出問(wèn)題回答問(wèn)題,為學(xué)生營(yíng)造一種良好的學(xué)習(xí)氛圍。教師充分發(fā)揮自身的引導(dǎo)與輔助的作用,幫助學(xué)生發(fā)現(xiàn)問(wèn)題,解決問(wèn)題。另一種類型是課程設(shè)計(jì)探究學(xué)習(xí)。課程設(shè)計(jì)的時(shí)間一般比較短,在此期間,教師要通過(guò)合理的課程設(shè)計(jì)來(lái)為學(xué)生創(chuàng)造一個(gè)和諧的學(xué)習(xí)氛圍,師生之間、學(xué)生之間進(jìn)行交流,分享學(xué)習(xí)經(jīng)驗(yàn)與解決問(wèn)題的方法,一方面可以增加學(xué)生彼此學(xué)習(xí)的機(jī)會(huì),另一方面也可以監(jiān)督學(xué)生完成自己的學(xué)習(xí)任務(wù)。(3)網(wǎng)絡(luò)環(huán)境下的問(wèn)題導(dǎo)向教學(xué)模式網(wǎng)絡(luò)環(huán)境下的以問(wèn)題為導(dǎo)向的《C語(yǔ)言程序設(shè)計(jì)》課程教學(xué)模式,則是利用網(wǎng)絡(luò)科技來(lái)輔助教師的教學(xué)活動(dòng),在這個(gè)教學(xué)過(guò)程中,教師是教學(xué)活動(dòng)中的引導(dǎo)者與輔助者,而學(xué)生才是學(xué)習(xí)的主體。教師為學(xué)生設(shè)計(jì)好學(xué)習(xí)任務(wù),明確每一位學(xué)生所要解決的問(wèn)題,再對(duì)學(xué)生進(jìn)行合理的分組,讓學(xué)生充分利用網(wǎng)絡(luò)資源,收集對(duì)自己有利的信息,并且對(duì)信息進(jìn)行有效的篩選與整合。學(xué)生在尋求解決問(wèn)題的過(guò)程中,能夠充分利用網(wǎng)絡(luò)環(huán)境的優(yōu)勢(shì),推動(dòng)以問(wèn)題為導(dǎo)向的教學(xué)模式的實(shí)施,實(shí)現(xiàn)學(xué)生的自主學(xué)習(xí)、互動(dòng)合作、自覺(jué)約束自己的學(xué)習(xí)活動(dòng)。這樣,學(xué)生在整個(gè)學(xué)習(xí)過(guò)程中,不僅解決了教師提出的問(wèn)題,還掌握了搜集、處理信息的能力,收獲成功之后的成就感,增強(qiáng)與他人之間的交流,提高自身的創(chuàng)造能力,真正做到增強(qiáng)自身的綜合素質(zhì)。
2以問(wèn)題為導(dǎo)向的《C語(yǔ)言程序設(shè)計(jì)》的實(shí)踐
在《C語(yǔ)言程序設(shè)計(jì)》課程教學(xué)過(guò)程中,教師的教學(xué)工作與學(xué)生的學(xué)習(xí)活動(dòng)總是會(huì)暴露一些問(wèn)題,如教師講解不到位,學(xué)生不能理解理論知識(shí),教師講課難以吸引學(xué)生的學(xué)習(xí)興趣,學(xué)生學(xué)習(xí)效率低下等問(wèn)題。而以問(wèn)題為導(dǎo)向的《C語(yǔ)言程序設(shè)計(jì)》教學(xué)模式,要如何進(jìn)行具體的實(shí)施,才能夠幫助學(xué)生掌握解決問(wèn)題的技巧,加深對(duì)理論知識(shí)的理解呢?
(一)以問(wèn)題為導(dǎo)向的教學(xué)模式中的課程設(shè)計(jì)
在《C語(yǔ)言程序設(shè)計(jì)》教學(xué)過(guò)程中,使用以問(wèn)題為導(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é)生的要求要合理,要求過(guò)高,學(xué)生難以完成目標(biāo),將會(huì)打擊學(xué)生的參與教學(xué)的積極性與信心,要求過(guò)低,將會(huì)浪費(fèi)時(shí)間,學(xué)生的實(shí)際能力達(dá)不到質(zhì)的飛躍。因此,課程的設(shè)計(jì)要實(shí)事求是,一切從實(shí)際出發(fā)。
(二)以問(wèn)題為導(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é)生都積極大膽地參與到其中,敢于提出自己的疑問(wèn),敢于回答教師與其他學(xué)生提出的問(wèn)題,積極參與具有挑戰(zhàn)性的任務(wù)。3.教師發(fā)揮自身的引導(dǎo)與輔助的作用,引導(dǎo)學(xué)生進(jìn)行有利于提高自身能力的學(xué)習(xí)活動(dòng),幫助學(xué)生解決難度較大的問(wèn)題,并且監(jiān)督學(xué)生對(duì)問(wèn)題作出總結(jié),從完成任務(wù)的過(guò)程中學(xué)到更多的知識(shí)。
(三)以問(wèn)題為導(dǎo)向的教學(xué)模式應(yīng)當(dāng)注意的問(wèn)題
篇6
[關(guān)鍵詞]C語(yǔ)言 程序設(shè)計(jì) 能力培養(yǎng) 教學(xué)改革
[中圖分類號(hào)]G642 [文獻(xiàn)標(biāo)識(shí)碼]A [文章編號(hào)]1009-5349(2015)12-0232-01
一、當(dāng)今《C語(yǔ)言程序設(shè)計(jì)》課程的教學(xué)現(xiàn)狀
《C語(yǔ)言程序設(shè)計(jì)》這門學(xué)科的教學(xué)內(nèi)容及功能是非常強(qiáng)大的,應(yīng)用范圍也很廣,數(shù)據(jù)結(jié)構(gòu)相對(duì)比較復(fù)雜。該課程的語(yǔ)法檢驗(yàn)結(jié)構(gòu)相對(duì)比較薄弱,相對(duì)沒(méi)有編程基礎(chǔ)的大學(xué)生來(lái)講,要很好地學(xué)習(xí)和理解C語(yǔ)言的知識(shí)和程序設(shè)計(jì)方法,需要熟練各個(gè)知識(shí)點(diǎn)和語(yǔ)法結(jié)構(gòu)。以往《C語(yǔ)言程序設(shè)計(jì)》課程教學(xué)大多主要以C語(yǔ)言的語(yǔ)法為主要講授知識(shí)點(diǎn),將教學(xué)的重點(diǎn)放在語(yǔ)言的語(yǔ)法知識(shí)上,因此,很大一方面就忽視了在解決問(wèn)題和編寫程序語(yǔ)句時(shí)如何能更好地應(yīng)用有效的教學(xué)方法。很多學(xué)生在掌握語(yǔ)法知識(shí)后,不知道如何去編寫程序來(lái)解決實(shí)際問(wèn)題。
二、《C語(yǔ)言程序設(shè)計(jì)》課程改革的幾點(diǎn)想法
(一)對(duì)教學(xué)內(nèi)容進(jìn)行重組
一方面教師要充分考慮到?jīng)]有了解程序語(yǔ)言設(shè)計(jì)和不懂編程經(jīng)驗(yàn)的學(xué)生,要將教學(xué)的重點(diǎn)放到C語(yǔ)言的理論語(yǔ)法知識(shí)上,全面講解《C語(yǔ)言程序設(shè)計(jì)》課程的基本語(yǔ)法知識(shí)。面對(duì)新的教學(xué)內(nèi)容,要避開以往傳統(tǒng)的細(xì)節(jié)語(yǔ)法知識(shí)講解,引入一套新的教學(xué)思路,要以具體的實(shí)例編程去營(yíng)造一個(gè)好的教學(xué)環(huán)境和教學(xué)方式,將學(xué)生引入要讓自己有能力、有想法去判斷和總結(jié)理解掌握C語(yǔ)言的語(yǔ)法知識(shí)以及編程方法。通過(guò)第一階段的理解學(xué)習(xí),很大一部分學(xué)生能夠基本掌握C語(yǔ)言的基礎(chǔ)知識(shí),同時(shí)也具備編寫C語(yǔ)言編寫程序的能力,并可以獨(dú)立編寫較難程序,并能順利通過(guò)程序調(diào)試與程序的測(cè)試。
另一方面要將教學(xué)的主要內(nèi)容放在那些具有掌握一些C語(yǔ)言基礎(chǔ)知識(shí)和編寫程序,了解C語(yǔ)言知識(shí)的學(xué)生上。在這個(gè)階段,課程內(nèi)容要注重培養(yǎng)學(xué)生的較專業(yè)的程序編寫與實(shí)踐。同時(shí),在教學(xué)過(guò)程中注意設(shè)計(jì)教學(xué)環(huán)節(jié),不但要引入項(xiàng)目式驅(qū)動(dòng)教學(xué)法,還要將教學(xué)內(nèi)容化分模塊,把每個(gè)模塊都建立一套綜合案例,把案例內(nèi)容覆蓋C語(yǔ)言程序設(shè)計(jì)課程的所有核心知識(shí)點(diǎn),貫穿整個(gè)教學(xué)過(guò)程。
學(xué)生通過(guò)開發(fā)綜合案例,能夠?qū)⒅R(shí)點(diǎn)融會(huì)貫通,達(dá)到學(xué)以致用的目的。也可以把要處理的問(wèn)題和知識(shí)點(diǎn)做成項(xiàng)目,給學(xué)生分配項(xiàng)目任務(wù),并且為學(xué)生提供可查閱的學(xué)習(xí)資料和設(shè)備。通過(guò)老師的學(xué)習(xí)指導(dǎo),讓學(xué)生自由發(fā)揮,開創(chuàng)思想,并以小組討論的形式進(jìn)行任務(wù)開發(fā),共同完成一個(gè)完整的項(xiàng)目。在這一教學(xué)階段設(shè)計(jì)的目的是要在一個(gè)完整的項(xiàng)目開發(fā)過(guò)程中,使學(xué)生能夠?qū)W習(xí)和了解到一些關(guān)于C語(yǔ)言中不常使用到的關(guān)鍵知識(shí)。也使學(xué)生學(xué)習(xí)和掌握這些知識(shí)的可行性和要重性,在教師的正確引導(dǎo)下將問(wèn)題成功解決,使學(xué)生收獲到知識(shí)。
(二)加強(qiáng)實(shí)踐教學(xué)
《C語(yǔ)言程序設(shè)計(jì)》是一門實(shí)踐性很強(qiáng)的專業(yè)技術(shù)課程。實(shí)踐教學(xué)是《C語(yǔ)言程序設(shè)計(jì)》課程教學(xué)中的主要教學(xué)環(huán)節(jié)。在加大實(shí)踐教學(xué)內(nèi)容的同時(shí),也要改變實(shí)踐教學(xué)內(nèi)容,這也是提高和培養(yǎng)具有創(chuàng)新能力學(xué)生所必經(jīng)的階段。因此,在實(shí)踐教學(xué)上,要專門編寫相關(guān)的資料,方便教學(xué)。在資料中,可以編寫一些具有代表性的上機(jī)練習(xí)程序設(shè)計(jì)題目,使學(xué)生能更好地理解和學(xué)習(xí)C語(yǔ)言的知識(shí)和編程方法。同時(shí)也為學(xué)生提供一些比較綜合的編程題目,讓學(xué)生能在這些問(wèn)題中,找到自己知識(shí)的缺口,然后補(bǔ)充知識(shí),在這些編程題中發(fā)揮自己的優(yōu)點(diǎn)和創(chuàng)新點(diǎn)。同時(shí),要開發(fā)學(xué)生的學(xué)習(xí)思路,培養(yǎng)學(xué)生的自主學(xué)習(xí)能力。
(三)完善網(wǎng)絡(luò)教學(xué)平臺(tái)
當(dāng)今是網(wǎng)絡(luò)遍布的時(shí)代,所以C語(yǔ)言課堂教學(xué)也少不了網(wǎng)絡(luò)。我們要用網(wǎng)絡(luò)教學(xué)平臺(tái)做為輔助教學(xué)手段,合理地為學(xué)生安排布置學(xué)習(xí)內(nèi)容和資料,開展小組式的學(xué)習(xí)方式,以小組方式討論問(wèn)題。課堂的教學(xué)時(shí)間是有限的,對(duì)于這一類的教學(xué)活動(dòng)在課堂上是不能完全實(shí)現(xiàn)的。所以要以開放式的網(wǎng)絡(luò)教學(xué)平臺(tái)為課堂輔助教學(xué)。教學(xué)平臺(tái)主要包括課程學(xué)習(xí)、電子教案、網(wǎng)上答疑、實(shí)驗(yàn)指導(dǎo)等,讓學(xué)生能更好地自主學(xué)習(xí)。
(四)創(chuàng)新考試方式
以往的《C語(yǔ)言程序言設(shè)計(jì)》課程考試大多數(shù)是以筆試為主要內(nèi)容,目的是考查基本的語(yǔ)法知識(shí),該種考核方式使學(xué)生偏重于語(yǔ)法學(xué)習(xí)。為此,改革傳統(tǒng)的考核方式勢(shì)在必行,期末考試采用專門的考試系統(tǒng),將理論題與實(shí)踐題相結(jié)合統(tǒng)一在上機(jī)考試環(huán)節(jié)完成,在限定時(shí)間內(nèi)考核學(xué)生的學(xué)習(xí)效果。即考即出分,減少人工批卷出錯(cuò)的漏洞,減少教師的工作量,改變了傳統(tǒng)的批閱方法,通過(guò)考試的檢驗(yàn)以促進(jìn)學(xué)生平時(shí)學(xué)習(xí)掌握知識(shí)牢固程度,加強(qiáng)上機(jī)實(shí)踐,突出學(xué)生程序編寫能力過(guò)程,將實(shí)踐教學(xué)的重要性展現(xiàn)出來(lái)。
【參考文獻(xiàn)】
篇7
1.明確教學(xué)目標(biāo),精選教學(xué)內(nèi)容,改革教學(xué)方法。傳統(tǒng)C語(yǔ)言教學(xué)的目標(biāo)更多的是教學(xué)生程序設(shè)計(jì)語(yǔ)言,卻非程序設(shè)計(jì),而高職學(xué)生在實(shí)際需求中更注重程序設(shè)計(jì)的能力。因此本課程改革的教學(xué)目標(biāo)是希望學(xué)生掌握簡(jiǎn)單的數(shù)據(jù)抽象問(wèn)題建模和簡(jiǎn)單的算法等基礎(chǔ)知識(shí),養(yǎng)成解決問(wèn)題的能力和程序設(shè)計(jì)的能力,養(yǎng)成自我學(xué)習(xí)專業(yè)知識(shí)的能力,學(xué)會(huì)學(xué)習(xí)一門語(yǔ)言,熟練使用語(yǔ)言及其開發(fā)環(huán)境進(jìn)行程序開發(fā)與測(cè)試的技能。C語(yǔ)言的計(jì)算能力強(qiáng),語(yǔ)法知識(shí)豐富而細(xì)致,上機(jī)調(diào)試容易出錯(cuò),是一門比較難學(xué)的課程,C語(yǔ)言程序設(shè)計(jì)一般安排在大一第一學(xué)期,與它相關(guān)的課程沒(méi)有上,這也增加了學(xué)習(xí)的難度,學(xué)生比較難入門。因此,在開始學(xué)習(xí)的前幾節(jié)課,教師一定要注重激發(fā)學(xué)生學(xué)習(xí)興趣和學(xué)習(xí)主動(dòng)性。提高教師自身素質(zhì),對(duì)所教課程鉆研精通,教學(xué)方法得當(dāng),精選教學(xué)內(nèi)容,精心設(shè)計(jì)課件,課堂演示編程和調(diào)試過(guò)程,提高學(xué)生的學(xué)習(xí)興趣。C語(yǔ)言語(yǔ)法豐富,但是如果過(guò)度強(qiáng)調(diào)語(yǔ)法知識(shí)的細(xì)節(jié)和容易出錯(cuò)的地方,特別容易使學(xué)生陷入過(guò)度關(guān)注細(xì)節(jié),而忽略學(xué)習(xí)C語(yǔ)言的目標(biāo)在于應(yīng)用。在實(shí)際教學(xué)中要重點(diǎn)突出,把不常用的函數(shù)只簡(jiǎn)單介紹,避免展開分析。在每節(jié)課之前,教師要對(duì)本節(jié)內(nèi)容進(jìn)行精心設(shè)計(jì),針對(duì)本小節(jié)的內(nèi)容提出一個(gè)與現(xiàn)實(shí)生活聯(lián)系較緊密且難度適中的問(wèn)題,使用案例式教學(xué)法,分析問(wèn)題,提出解決問(wèn)題的方法,在分析問(wèn)題、解決問(wèn)題的過(guò)程中強(qiáng)化學(xué)生用編程解決實(shí)際問(wèn)題的意識(shí),在學(xué)生對(duì)該問(wèn)題的程序所涉及的知識(shí)點(diǎn)和函數(shù)有了宏觀的認(rèn)識(shí)后,然后講授與此相關(guān)的語(yǔ)法和函數(shù),演示編程和調(diào)試的過(guò)程,最終給出相應(yīng)的程序。另外,在教學(xué)過(guò)程中不應(yīng)過(guò)度依賴PPT等多媒體教學(xué)設(shè)備,也要發(fā)揮傳統(tǒng)教學(xué)媒體的作用,利用黑板對(duì)關(guān)鍵內(nèi)容進(jìn)行板書演示,加強(qiáng)學(xué)生對(duì)主要內(nèi)容的理解和對(duì)知識(shí)點(diǎn)的消化吸收。在課堂上提出問(wèn)題、分析問(wèn)題的過(guò)程符合學(xué)生的思維特點(diǎn),也符合程序設(shè)計(jì)的本質(zhì)要求,編程思想在理論教學(xué)中逐步加強(qiáng),演示編程和調(diào)試過(guò)程,使枯燥的語(yǔ)法在解決實(shí)際問(wèn)題的編程過(guò)程中得到具體應(yīng)用。
2.加強(qiáng)實(shí)踐教學(xué),針對(duì)不同的學(xué)生因材施教。C語(yǔ)言是實(shí)踐性很強(qiáng)的課程,大量的語(yǔ)法和算法應(yīng)該在實(shí)踐教學(xué)中得到應(yīng)用和鞏固,而編程思想也必須在實(shí)踐中逐步形成。在課內(nèi)外,教師要經(jīng)常通過(guò)各種方式與學(xué)生溝通,了解學(xué)生的計(jì)算機(jī)水平、對(duì)本課程的學(xué)習(xí)情況,以及在本課程學(xué)習(xí)中遇到的問(wèn)題,對(duì)不同的學(xué)生實(shí)行因材施教,對(duì)學(xué)生集中反映的問(wèn)題及時(shí)解決。在實(shí)踐教學(xué)過(guò)程中要對(duì)學(xué)生提出具體詳細(xì)的要求,使每個(gè)學(xué)生能夠盡其所能提高自己的實(shí)踐技能,避免學(xué)生在有限的實(shí)踐教學(xué)時(shí)間內(nèi)因?yàn)闆](méi)有具體的實(shí)踐任務(wù)而降低實(shí)踐教學(xué)的效果。我們將實(shí)踐教學(xué)分成入門技能、基本技能和綜合技能三個(gè)階段,在不同的階段對(duì)學(xué)生提出具體的不同要求,并且根據(jù)不同學(xué)生的能力靈活調(diào)整實(shí)踐學(xué)習(xí)的要求。(1)編程入門技能。這一階段主要是練習(xí)C語(yǔ)言基礎(chǔ)知識(shí)、各類運(yùn)算符、表達(dá)式、輸入輸出語(yǔ)句。首先要求學(xué)生能夠看懂課本的例題,在編輯器VC++6.0中輸入例題中的程序,并調(diào)試運(yùn)行出結(jié)果。在學(xué)習(xí)初期,學(xué)生一般會(huì)出現(xiàn)各種語(yǔ)法錯(cuò)誤,在此階段可以強(qiáng)化學(xué)生的語(yǔ)法知識(shí)。一個(gè)好的程序一般是經(jīng)過(guò)多次修改和調(diào)試才能夠很好地實(shí)現(xiàn)它的功能,因此在C語(yǔ)言學(xué)習(xí)過(guò)程中,調(diào)試程序、改錯(cuò)是一個(gè)重要的部分,學(xué)生熟悉課本例題后,教師可以給定一些能夠?qū)崿F(xiàn)特定功能的程序,要求學(xué)生改錯(cuò),直至調(diào)試運(yùn)行出正確結(jié)果。這一階段可以是學(xué)生熟練掌握語(yǔ)法知識(shí),獲得學(xué)習(xí)程序設(shè)計(jì)的成就感,并激發(fā)強(qiáng)烈的學(xué)習(xí)興趣。(2)基本編程技能。本階段教學(xué)內(nèi)容包括函數(shù)、數(shù)組和指針,在實(shí)踐教學(xué)中要求學(xué)生需要完成簡(jiǎn)單的編程任務(wù)。這一階段要求學(xué)生能夠看懂程序的流程圖,給定程序后,學(xué)生應(yīng)該能夠清楚的知道程序的執(zhí)行順序,通過(guò)練習(xí)學(xué)會(huì)使用順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu),改編課本例題、擴(kuò)展原有的程序?qū)崿F(xiàn)更加完善的功能,使用數(shù)組、指針等新技能實(shí)現(xiàn)原有程序,實(shí)現(xiàn)一題多解,擴(kuò)展解決問(wèn)題的思路。教師給定實(shí)際生活中相對(duì)簡(jiǎn)單的問(wèn)題,用編程的思想對(duì)問(wèn)題抽象建模,畫出流程圖,設(shè)計(jì)算法,并寫出相應(yīng)的程序來(lái)實(shí)現(xiàn)。(3)綜合編程技能。程序設(shè)計(jì)不能陷入到單純學(xué)習(xí)語(yǔ)言語(yǔ)法的誤區(qū),程序設(shè)計(jì)的語(yǔ)法是重要的,但是更重要的是用編程來(lái)解決實(shí)際問(wèn)題。綜合編程階段教學(xué)內(nèi)容深入到結(jié)構(gòu)體、共用體和文件,在實(shí)踐教學(xué)過(guò)程中學(xué)生除了練習(xí)本階段編程的基礎(chǔ)知識(shí)外,教師提出實(shí)際問(wèn)題,引導(dǎo)學(xué)生應(yīng)用所學(xué)知識(shí)分工合作解決問(wèn)題,達(dá)到學(xué)習(xí)知識(shí)點(diǎn)、掌握編程技能的效果。教師在布置具體試驗(yàn)任務(wù)時(shí)要考慮問(wèn)題的難易度和趣味性,可以布置難易程度不同的多個(gè)任務(wù),學(xué)生根據(jù)自己的能力選擇不同的任務(wù)來(lái)完成,以充分發(fā)揮學(xué)生的主動(dòng)性,避免能力較強(qiáng)的學(xué)生快速完成后浪費(fèi)時(shí)間,同時(shí)也避免了水平較差的學(xué)生對(duì)實(shí)踐課程喪失信心和興趣,讓學(xué)生在學(xué)習(xí)中獲得成就感,在課堂上發(fā)揮主體作用。
3.改革考核方式。教師在教學(xué)評(píng)價(jià)體系中增加對(duì)學(xué)生動(dòng)手能力的激勵(lì)機(jī)制,能夠有效促進(jìn)學(xué)生的實(shí)際動(dòng)手操作的主動(dòng)性。改變考試方式并不是一個(gè)教師所能進(jìn)行的教學(xué)改革,但教師應(yīng)該在能力范圍之內(nèi)探索教學(xué)改革,增強(qiáng)學(xué)生的學(xué)習(xí)效果。我校的學(xué)生的成績(jī)?cè)u(píng)定中平時(shí)成績(jī)占30%,平時(shí)成績(jī)不應(yīng)該是學(xué)生出勤率的簡(jiǎn)單體現(xiàn),而應(yīng)是多種因素的共同結(jié)果,教師應(yīng)注重對(duì)學(xué)生學(xué)習(xí)過(guò)程的評(píng)價(jià),并將其作為平時(shí)成績(jī)的重要參考。實(shí)踐教學(xué)一般采用驗(yàn)證性實(shí)驗(yàn)和綜合性實(shí)驗(yàn)的方式考核。驗(yàn)證性實(shí)驗(yàn)由學(xué)生獨(dú)立完成,綜合性實(shí)驗(yàn)則分小組進(jìn)行,學(xué)生對(duì)實(shí)驗(yàn)的情況撰寫實(shí)驗(yàn)報(bào)告,描述需求分析、算法設(shè)計(jì)、編寫程序和上機(jī)調(diào)試的過(guò)程,總結(jié)出現(xiàn)的問(wèn)題和解決方法。教師針對(duì)不同學(xué)生的不同設(shè)計(jì)方案和不同問(wèn)題做一些關(guān)鍵性的指導(dǎo),形成一個(gè)以學(xué)生自己動(dòng)手為主,教師引導(dǎo)與點(diǎn)評(píng)相結(jié)合的啟發(fā)式教學(xué)模式。在實(shí)踐教學(xué)時(shí)增加隨堂測(cè)驗(yàn),要求學(xué)生現(xiàn)場(chǎng)完成編寫調(diào)試程序。在評(píng)價(jià)過(guò)程中避免單一考核實(shí)驗(yàn)結(jié)果的正確性,要建立面向過(guò)程,注重實(shí)踐操作能力和創(chuàng)新能力的考核機(jī)制,考核機(jī)制應(yīng)能夠反映學(xué)生實(shí)踐課程的學(xué)習(xí)態(tài)度和實(shí)驗(yàn)任務(wù)的完成情況,鼓勵(lì)學(xué)生主動(dòng)分析問(wèn)題,嘗試用不同的方法完成實(shí)驗(yàn)任務(wù),鍛煉學(xué)生創(chuàng)新能力。
二、結(jié)語(yǔ)
篇8
摘要:本文在分析了C語(yǔ)言程序設(shè)計(jì)課程的教學(xué)現(xiàn)狀和教學(xué)困境的基礎(chǔ)上,對(duì)比自然語(yǔ)言和程序設(shè)計(jì)語(yǔ)言的共性以及C語(yǔ)言的特殊性,提出了“從概念入手,側(cè)重程序閱讀和程序設(shè)計(jì)能力培養(yǎng)”而非“語(yǔ)法研究”的教學(xué)角度。
關(guān)鍵詞:C語(yǔ)言;程序設(shè)計(jì);教學(xué)內(nèi)容;教學(xué)角度
中圖分類號(hào):G64 文獻(xiàn)標(biāo)識(shí)碼:A
1教學(xué)現(xiàn)狀
在高等學(xué)校的本科教育中,“C語(yǔ)言程序設(shè)計(jì)”幾乎成了所有專業(yè)的必開課程,從計(jì)算機(jī)科學(xué)與技術(shù)、軟件工程、網(wǎng)絡(luò)工程等相關(guān)專業(yè),到電子信息類理工科各專業(yè),乃至理工科院校的所有非計(jì)算機(jī)專業(yè),有的是專業(yè)基礎(chǔ)課,有的是公共必修基礎(chǔ)課,有的是“非計(jì)算機(jī)專業(yè)的計(jì)算機(jī)基礎(chǔ)課”。只是課程名稍有差異,常見的有“C語(yǔ)言程序設(shè)計(jì)”、“高級(jí)語(yǔ)言程序設(shè)計(jì)”、“C語(yǔ)言”、“C程序設(shè)計(jì)”、“結(jié)構(gòu)化程序設(shè)計(jì)”等。無(wú)論叫什么樣的課程名,也無(wú)論是哪類專業(yè),其課程的教學(xué)要求和教材選用卻無(wú)太大差別,只是課時(shí)分配差異較大。
從網(wǎng)絡(luò)調(diào)查的16所不同類型高校的“C語(yǔ)言程序設(shè)計(jì)”教學(xué)大綱看,普遍都包含“通過(guò)本課程的學(xué)習(xí),使學(xué)生了解有關(guān)程序設(shè)計(jì)的基本概念、術(shù)語(yǔ)及C語(yǔ)言的特點(diǎn),掌握C語(yǔ)言基本數(shù)據(jù)類型、語(yǔ)法規(guī)則、程序控制結(jié)構(gòu)、常用的標(biāo)準(zhǔn)庫(kù)函數(shù),培養(yǎng)學(xué)生的程序設(shè)計(jì)技能,初步積累編程經(jīng)驗(yàn)”的教學(xué)基本要求;約百分之八十左右的“C語(yǔ)言程序設(shè)計(jì)”課程都選用由譚浩強(qiáng)主編、清華大學(xué)出版社出版的“C程序設(shè)計(jì)”作為主教材;課時(shí)分配從30~108課時(shí)不等,其中80課時(shí)以上的多為應(yīng)用型本科院校的計(jì)算機(jī)相關(guān)專業(yè)以及綜合性大學(xué)的非計(jì)算機(jī)專業(yè),理論課時(shí)與實(shí)驗(yàn)課時(shí)的比例一般為1:1到1:1.2。與此同時(shí),其他專業(yè)基礎(chǔ)課(如計(jì)算機(jī)組成原理、操作系統(tǒng)、數(shù)據(jù)結(jié)構(gòu)等)的課時(shí)一般為54課時(shí),最多不超過(guò)72學(xué)時(shí)。相比之下,“C語(yǔ)言程序設(shè)計(jì)”所占課時(shí)是其他專業(yè)基礎(chǔ)課的1.5倍至2倍。
從教學(xué)目的看,非計(jì)算機(jī)專業(yè)的“C語(yǔ)言程序設(shè)計(jì)”課程主要目的是“掌握語(yǔ)法規(guī)則和程序結(jié)構(gòu),具備一定的程序設(shè)計(jì)能力”,而計(jì)算機(jī)相關(guān)專業(yè)的“C語(yǔ)言程序設(shè)計(jì)”課的教學(xué)目的則要分為三個(gè)層次,一是使學(xué)生全面理解計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言的基本內(nèi)容和結(jié)構(gòu);二是通過(guò)算法掌握程序設(shè)計(jì)的基本方法和步驟,并具備一定的程序設(shè)計(jì)能力;三是為后續(xù)課程的算法描述和其他程序設(shè)計(jì)語(yǔ)言的學(xué)習(xí)奠定基礎(chǔ)。
2教學(xué)誤區(qū)
從以上的教學(xué)現(xiàn)狀(特別是課時(shí)分配)看,長(zhǎng)期以來(lái),“C語(yǔ)言程序設(shè)計(jì)”的課程教學(xué)存在“教學(xué)內(nèi)容背離教學(xué)要求和教學(xué)目的”的誤區(qū),主要表現(xiàn)在教材誤區(qū)、講授誤區(qū)和考核誤區(qū)三個(gè)方面。
2.1教材誤區(qū)
國(guó)內(nèi)高校的“C語(yǔ)言程序設(shè)計(jì)”課大多選用譚浩強(qiáng)主編、清華大學(xué)出版社出版的“C程序設(shè)計(jì)”[1]為主教材,目前使用的是2005年7月修訂出版的第三版,教材共363頁(yè),主體內(nèi)容分為14章,其中,第3章的數(shù)據(jù)類型與表達(dá)式占用30頁(yè),第4章的格式輸入輸出占用12頁(yè),前9章共占用218頁(yè),后5章共占用145頁(yè)。占用如此大篇幅的原因是教材中除了介紹相關(guān)語(yǔ)法格式外,還增加了相當(dāng)多“特殊格式”和“特殊情況”的解釋和說(shuō)明,因此,該教材的最大優(yōu)點(diǎn)就是“內(nèi)容詳盡、解釋清晰”。然而,對(duì)于初學(xué)者來(lái)說(shuō),學(xué)習(xí)計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言就是為了“為計(jì)算機(jī)描述求解問(wèn)題的過(guò)程”,過(guò)于詳細(xì)但又遠(yuǎn)離現(xiàn)實(shí)問(wèn)題的“特殊格式”和“特殊情況”的解釋,使得學(xué)習(xí)內(nèi)容復(fù)雜化,增加了程序設(shè)計(jì)語(yǔ)言學(xué)習(xí)的難度,誤導(dǎo)了學(xué)習(xí)者的學(xué)習(xí)重點(diǎn),由此也賦予了該教材無(wú)法掩飾的缺點(diǎn),那就是教材編寫的指導(dǎo)思想和教材內(nèi)容的組織脫離了高校各專業(yè)“C語(yǔ)言程序設(shè)計(jì)”課程的教學(xué)目標(biāo),過(guò)分強(qiáng)調(diào)語(yǔ)法細(xì)節(jié)而忽略了程序設(shè)計(jì)語(yǔ)言的“正向表達(dá)能力”的應(yīng)用,過(guò)分強(qiáng)調(diào)“語(yǔ)言的靈活性”而導(dǎo)致教材主體內(nèi)容的“復(fù)雜化”,從而誤導(dǎo)“C語(yǔ)言程序設(shè)計(jì)”課程的教學(xué)內(nèi)容朝著“重語(yǔ)法學(xué)習(xí)、輕算法描述”的“語(yǔ)言研究”方向發(fā)展。
2.2講授誤區(qū)
由于教材內(nèi)容的“復(fù)雜”,課堂講授自然需要較多課時(shí),教學(xué)重點(diǎn)當(dāng)然也放在了“語(yǔ)法研究”上。從網(wǎng)上下載的“C程序設(shè)計(jì)(第三版)”的配套教學(xué)課件以及有關(guān)院校的“C語(yǔ)言程序設(shè)計(jì)”教學(xué)課件的內(nèi)容組織上可以清楚的給出以上判斷?!罢Z(yǔ)法研究”型的課堂講授,更加放大了教材對(duì)“C語(yǔ)言程序設(shè)計(jì)”課程內(nèi)容的“扭曲”程度,給學(xué)生提供了錯(cuò)誤的程序設(shè)計(jì)語(yǔ)言學(xué)習(xí)方法,把簡(jiǎn)單問(wèn)題復(fù)雜化,更為嚴(yán)重的是,挫傷了學(xué)生學(xué)習(xí)計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言的興趣和積極性,把本應(yīng)“主動(dòng)學(xué)習(xí)”的課程成引入了“被動(dòng)學(xué)習(xí)”的歧途,直接導(dǎo)致“懂語(yǔ)法、會(huì)做題,但不會(huì)編程序”的教學(xué)后果。
2.3考核誤區(qū)
多年來(lái),“C語(yǔ)言程序設(shè)計(jì)”的主體考試內(nèi)容就是“語(yǔ)法”,無(wú)論是選擇題、填空題還是程序閱讀題,大多都無(wú)法逃脫“語(yǔ)法”的束縛??荚嚪绞揭怨P試為主。這在某種程度上肯定了“語(yǔ)言研究”的教學(xué)角度,促使“C語(yǔ)言程序設(shè)計(jì)”的教學(xué)重點(diǎn)更向“語(yǔ)法研究”的方向傾斜,最終誤入“增加課時(shí),強(qiáng)化語(yǔ)法,還是不會(huì)編程序”的怪圈。
3應(yīng)有的教學(xué)角度
按照網(wǎng)上調(diào)查的各專業(yè)教學(xué)大綱中“培養(yǎng)具有一定程序設(shè)計(jì)能力”的教學(xué)目的,“C語(yǔ)言程序設(shè)計(jì)”課程的教學(xué)落腳點(diǎn)應(yīng)該更確切的理解為培養(yǎng)“能用程序設(shè)計(jì)語(yǔ)言描述求解問(wèn)題過(guò)程”的一般程序設(shè)計(jì)者,而不是造就“全面掌握程序設(shè)計(jì)語(yǔ)言語(yǔ)法、能設(shè)計(jì)高效、難懂程序”的程序設(shè)計(jì)語(yǔ)言方面的“作家”。因此,“C語(yǔ)言程序設(shè)計(jì)”課程教學(xué)相當(dāng)于自然語(yǔ)言中的“基本語(yǔ)言能力”教學(xué),而不是“語(yǔ)言研究”或“高級(jí)寫作”能力培養(yǎng)。
3.1自然語(yǔ)言與計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言
計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言是用人和計(jì)算機(jī)都能識(shí)別的方式描述計(jì)算機(jī)求解問(wèn)題過(guò)程的過(guò)程描述語(yǔ)言,它具有和人所使用的自然語(yǔ)言相同或相似的組成和結(jié)構(gòu)特點(diǎn),對(duì)于已經(jīng)掌握了至少一門自然語(yǔ)言(比如漢語(yǔ)或英語(yǔ))并具備一定文化程度的人來(lái)說(shuō),學(xué)習(xí)一種計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言并非難事。自然語(yǔ)言的基本組成包括符號(hào)集合、字、詞、句、數(shù)據(jù)及其運(yùn)算規(guī)則等基本要素,學(xué)習(xí)過(guò)程包括認(rèn)識(shí)符號(hào)、發(fā)音、識(shí)字、組詞、學(xué)語(yǔ)法并造句、學(xué)文法并寫短文、練習(xí)寫文章等基本階段,在具備了基本的語(yǔ)言能力之后,擴(kuò)充詞匯量和提高寫作能力將成為終身學(xué)習(xí)的基本內(nèi)容。按照自然語(yǔ)言的基本組成和學(xué)習(xí)過(guò)程,也可將計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言的基本組成歸納為字符集、標(biāo)識(shí)符(常量、變量、保留字等)、數(shù)據(jù)類型、運(yùn)算符、表達(dá)式、語(yǔ)句、程序格式等基本要素,其中,字符集和數(shù)據(jù)類型是定義程序設(shè)計(jì)語(yǔ)言的基礎(chǔ),字符按一定規(guī)則組成標(biāo)識(shí)符,用來(lái)充當(dāng)常量名、變量名或其他標(biāo)識(shí),在自然語(yǔ)言中被人們公認(rèn)的特殊標(biāo)識(shí)符被賦予特定的語(yǔ)言含義,專門為語(yǔ)言系統(tǒng)所用(用戶不得再次定義其意義),稱為保留字;字符集中的特殊符號(hào)(如+、-、*、/)被賦予特定的運(yùn)算意義(如加、減、乘、除)稱為運(yùn)算符;不同數(shù)據(jù)類型的常量、變量用運(yùn)算符按一定規(guī)則連接起來(lái)組成的式子就構(gòu)成表達(dá)式;將特定的保留字與表達(dá)式等語(yǔ)言要素按照語(yǔ)法規(guī)則組合起來(lái)就形成相應(yīng)的語(yǔ)句;將語(yǔ)句按照要描述的求解問(wèn)題的邏輯順序排列起來(lái),就構(gòu)成了某種程序設(shè)計(jì)語(yǔ)言求解特定問(wèn)題的一段程序。
3.2C語(yǔ)言的特殊性
一方面,C語(yǔ)言是程序設(shè)計(jì)語(yǔ)言的一種,具備一般程序設(shè)計(jì)語(yǔ)言的基本組成要素和結(jié)構(gòu)特點(diǎn)。另一方面,C語(yǔ)言能成為面向過(guò)程的結(jié)構(gòu)化程序設(shè)計(jì)語(yǔ)言的代表,也有其自身的特殊性。首先,C語(yǔ)言的數(shù)據(jù)類型極為豐富。除了基本數(shù)據(jù)類型外,還有構(gòu)造類型、指針類型、空類型和用戶自定義類型,其中,構(gòu)造類型包括數(shù)組、結(jié)構(gòu)體(struct)、共用體(union)和枚舉類型(enum)等四種數(shù)據(jù)結(jié)構(gòu)。其次,C語(yǔ)言具有位操作能力。除了能夠?qū)Ω黝愖兞窟M(jìn)行操作外,C語(yǔ)言還具備“按位”進(jìn)行邏輯“與”、“或”、“非”、“異或”運(yùn)算和“左”、“右”移位運(yùn)算,這使得C語(yǔ)言具備了更強(qiáng)的系統(tǒng)開發(fā)能力。第三,C語(yǔ)言具有顯著的結(jié)構(gòu)化程序設(shè)計(jì)能力,并通過(guò)完整的函數(shù)定義來(lái)實(shí)現(xiàn)。第四,C語(yǔ)言的最大特點(diǎn)就是“語(yǔ)法限制不嚴(yán),解釋靈活”。第五,C語(yǔ)言允許直接訪問(wèn)物理地址,可直接對(duì)硬件端口進(jìn)行操作。第六,C語(yǔ)言沒(méi)有輸入/輸出語(yǔ)句,信息輸入/輸出功能由標(biāo)準(zhǔn)函數(shù)庫(kù)中相應(yīng)的I/O函數(shù)來(lái)完成。
C語(yǔ)言的這些特殊性,決定了C語(yǔ)言的教、學(xué)過(guò)程不同于其他程序設(shè)計(jì)語(yǔ)言的教學(xué)過(guò)程。
3.3C語(yǔ)言的教學(xué)角度
根據(jù)一般程序設(shè)計(jì)語(yǔ)言的基本組成與結(jié)構(gòu)特點(diǎn),結(jié)合C語(yǔ)言的特殊性,“C語(yǔ)言程序設(shè)計(jì)”課程的教學(xué)角度應(yīng)該是:從介紹程序設(shè)計(jì)語(yǔ)言的基本概念入手,重點(diǎn)介紹語(yǔ)言的“正
向”設(shè)計(jì)功能而非“特殊格式”或“特殊語(yǔ)法”說(shuō)明,側(cè)重學(xué)生的程序閱讀和程序設(shè)計(jì)能力培養(yǎng),從教學(xué)內(nèi)容的廣度和深度兩個(gè)方面,恰當(dāng)把握教學(xué)角度。
“C語(yǔ)言程序設(shè)計(jì)”課程的內(nèi)容可分為三個(gè)基本模塊,教學(xué)過(guò)程從第一個(gè)模塊切入,逐漸擴(kuò)展到第二和第三個(gè)模塊。第一個(gè)模塊可稱為“程序設(shè)計(jì)語(yǔ)言公共模塊”,主要包括程序設(shè)計(jì)語(yǔ)言的基本概念、程序設(shè)計(jì)語(yǔ)言的基本要素(字符集、標(biāo)識(shí)符、常量變量以及保留字、基本數(shù)據(jù)類型、運(yùn)算符、表達(dá)式、語(yǔ)句與控制結(jié)構(gòu)、程序結(jié)構(gòu)以及程序書寫規(guī)范等)以及輸入/輸出格式等內(nèi)容;第二個(gè)模塊是C語(yǔ)言的主體,主要包括函數(shù)、數(shù)組、指針、文件等;第三個(gè)模塊是高級(jí)編程內(nèi)容,主要包括結(jié)構(gòu)體(struct)、共用體(union)、枚舉類型(enum)以及用戶自定義類型等。
在教學(xué)深度方面,各模塊的教學(xué)重點(diǎn)應(yīng)放在“規(guī)范的語(yǔ)法描述和直觀易懂而且正確的語(yǔ)義表述上”,避免涉及各種過(guò)細(xì)的“不符合人類閱讀習(xí)慣”的語(yǔ)義描述,暫時(shí)避開“特殊格式”或“特殊情況”的糾纏,擺脫“研究語(yǔ)法”的錯(cuò)誤向?qū)?。在此基礎(chǔ)上,第一模塊的教學(xué)可與自然語(yǔ)言相比對(duì),通過(guò)學(xué)生已有的自然語(yǔ)言學(xué)習(xí)經(jīng)驗(yàn)和語(yǔ)言要素,使學(xué)生快速建立程序設(shè)計(jì)語(yǔ)言的基本概念,正確理解程序設(shè)計(jì)語(yǔ)言的基本要素及其關(guān)系,掌握基本語(yǔ)法和程序基本控制結(jié)構(gòu)(順序、選擇、循環(huán)),并通過(guò)算法歸納求解問(wèn)題的過(guò)程,正確理解算法不同描述方式(自然語(yǔ)言、傳統(tǒng)流程圖、N-S流程圖、偽代碼、程序設(shè)計(jì)語(yǔ)言)的作用和差異,特別是從“問(wèn)題”到“程序”的漸進(jìn)轉(zhuǎn)化過(guò)程,從而培養(yǎng)學(xué)生的基本程序設(shè)計(jì)能力。通過(guò)第二模塊的教學(xué),使學(xué)生明確函數(shù)、數(shù)組、指針、文件等概念和作用,掌握它們的定義和引用方法,能進(jìn)行相應(yīng)數(shù)據(jù)類型的編程,進(jìn)而掌握用函數(shù)定義的結(jié)構(gòu)化模塊程序設(shè)計(jì)的方法;通過(guò)第三個(gè)模塊的教學(xué),將程序的數(shù)據(jù)處理能力擴(kuò)展到結(jié)構(gòu)體、共用體、枚舉類型以及用戶自定義類型等復(fù)雜數(shù)據(jù)類型的處理上來(lái),通過(guò)恰當(dāng)?shù)睦討?yīng)用這些數(shù)據(jù)類型,向?qū)W生展示C語(yǔ)言強(qiáng)有力的數(shù)據(jù)表示和處理能力。
另外,可以將C語(yǔ)言中的“語(yǔ)法靈活性”和不同部分的各種“特殊情況”分類總結(jié),歸納整理成“語(yǔ)言參考手冊(cè)”等形式,以附錄的形式提供給學(xué)生,以便需要時(shí)“備查”。這樣既可節(jié)省教學(xué)課時(shí),又可向?qū)W生提供學(xué)習(xí)語(yǔ)言的主動(dòng)權(quán)。
3.4教學(xué)策略和方法
“C語(yǔ)言程序設(shè)計(jì)”屬語(yǔ)言類課程,教學(xué)過(guò)程充滿了逐步完善和熟練的基本特點(diǎn),因此,從教學(xué)安排的策略上要分重點(diǎn)、分階段逐步進(jìn)行,每個(gè)階段的教學(xué)方法應(yīng)該采用建立在一定基礎(chǔ)上的有重點(diǎn)的“部分教學(xué)法”,以核心內(nèi)容為基礎(chǔ),向外逐漸延伸,部分學(xué)習(xí),漸進(jìn)掌握。盡可能避免不分主次、不論難易、不顧急緩,盲目一次性掃清各類知識(shí)點(diǎn)的“地毯式”教授方法或?qū)W習(xí)方法,同時(shí)強(qiáng)調(diào)自學(xué)和上機(jī)驗(yàn)證,強(qiáng)化在特定環(huán)境下(如Turbo C++ 3.0)的程序設(shè)計(jì)訓(xùn)練,做到“精講多練[2]”,從小程序練起,逐漸過(guò)渡到求解較大或?qū)嶋H問(wèn)題的程序設(shè)計(jì)上來(lái)。
4結(jié)束語(yǔ)
從目前的教學(xué)現(xiàn)狀看,無(wú)論是計(jì)算機(jī)相關(guān)專業(yè),還是理工科的電子信息類專業(yè),乃至綜合性大學(xué)的非計(jì)算機(jī)專業(yè),“C語(yǔ)言程序設(shè)計(jì)”的課程教學(xué)均占有重要的教學(xué)地位,在全面提高教學(xué)質(zhì)量和教學(xué)效率的今天,不同類型專業(yè)結(jié)合自身優(yōu)勢(shì)和程序設(shè)計(jì)語(yǔ)言類課程的特點(diǎn),選擇合適的角度組織和實(shí)施“C語(yǔ)言程序設(shè)計(jì)”課程的教學(xué)活動(dòng)非常重要,而且很有必要。筆者的教學(xué)實(shí)踐證明,避開“語(yǔ)法研究”的程序設(shè)計(jì)教學(xué)不僅可減少課時(shí),更可提高學(xué)生利用程序設(shè)計(jì)語(yǔ)言“表述求解問(wèn)題過(guò)程”的能力。
參 考 文 獻(xiàn)
篇9
[論文摘要]C程序設(shè)計(jì)語(yǔ)言作為大、中專學(xué)生入學(xué)后的首門計(jì)算機(jī)語(yǔ)言課程,也是重要的程序設(shè)計(jì)課程。對(duì)于學(xué)生來(lái)說(shuō),程序設(shè)計(jì)的思維方式和概念都是全新的,學(xué)生接受起來(lái)很困難,通過(guò)對(duì)C程序設(shè)計(jì)語(yǔ)言教學(xué)方法探討,能收到較好的教學(xué)效果。
一、引言
《C程序設(shè)計(jì)語(yǔ)言》是計(jì)算機(jī)及相關(guān)專業(yè)中一門重要的計(jì)算機(jī)基礎(chǔ)課程,由于其在當(dāng)今系統(tǒng)軟件和部分應(yīng)用軟件的開發(fā)中具有實(shí)用性強(qiáng)的特點(diǎn),又與硬件和程序設(shè)計(jì)環(huán)境底層的聯(lián)系緊密,是當(dāng)今計(jì)算機(jī)軟硬件工程師應(yīng)該掌握的一種基本的、比較實(shí)用的程序設(shè)計(jì)語(yǔ)言。它作為學(xué)生入學(xué)后第一次系統(tǒng)地學(xué)習(xí)與高級(jí)程序設(shè)計(jì)語(yǔ)言和程序設(shè)計(jì)有關(guān)的內(nèi)容的一門新課程,本身就比較難;再加上其內(nèi)容的龐雜、語(yǔ)言描述的靈活,更讓學(xué)生感覺(jué)難上加難。因此對(duì)于擔(dān)任該課程的老師來(lái)說(shuō),如何教好這門課程,培養(yǎng)學(xué)生運(yùn)用C程序設(shè)計(jì)語(yǔ)言分析問(wèn)題、解決問(wèn)題的能力,是這一門課程的目的和宗旨。
二、采用案例教學(xué),培養(yǎng)學(xué)生的興趣和積極性
C程序設(shè)計(jì)是應(yīng)用性很強(qiáng)的一門課程它既有理論又有實(shí)踐,既講方法又講動(dòng)手能力。一般來(lái)說(shuō),教材中前幾章都是先介紹C程序設(shè)計(jì)語(yǔ)言的一些概念和基礎(chǔ)知識(shí),然后才介紹程序的建立和運(yùn)行。這些概念和基礎(chǔ)知識(shí),既枯燥又比較抽象難懂。在教學(xué)中,我們打破課本原有的順序組織課堂教學(xué)的方式的邏輯結(jié)構(gòu)體系,改用從案例入手,通過(guò)給學(xué)生演示、讓學(xué)生模仿,在實(shí)際應(yīng)用中去探究和領(lǐng)悟這些概念,并適時(shí)地加以歸納總結(jié)和概念的延伸,讓學(xué)生在輕松愉快的氣氛中學(xué)習(xí)新知識(shí)。
案例教學(xué)法打破了以教材為中心的傳統(tǒng)教學(xué)模式,不按教材的順序授課,而是以精選出的程序設(shè)計(jì)的案例為中心,把學(xué)習(xí)的重點(diǎn)放在具體案例的講述上,把要學(xué)習(xí)的語(yǔ)法和概念融入到具體案例中來(lái)講解。整個(gè)教學(xué)過(guò)程中強(qiáng)調(diào)在應(yīng)用中學(xué)習(xí),從而避免了枯燥的理論說(shuō)教,不僅能增進(jìn)學(xué)生的學(xué)習(xí)興趣,而且對(duì)提高學(xué)生綜合分析和解決實(shí)際問(wèn)題的能力也大有幫助。那么該如何培養(yǎng)學(xué)生對(duì)C語(yǔ)言課程的興趣呢?案例教學(xué)法是培養(yǎng)學(xué)生學(xué)習(xí)興趣的有效途徑一。
三、運(yùn)用多媒體CAI課件教學(xué),提供交互式學(xué)習(xí)環(huán)境
C語(yǔ)言的內(nèi)容比較繁雜,我們把概念、定義等一些知識(shí)性的東西用幻燈的形式投影出來(lái)就會(huì)使課堂內(nèi)容更加豐富,提高學(xué)生的注意力,節(jié)省老師板書的時(shí)間,讓整堂課的效果改觀。但是課堂上課件的演示也要適當(dāng),避免喧賓奪主,使學(xué)生更多地關(guān)注了形式的變化,而忽略了內(nèi)容本身。相應(yīng)的,課件在其他內(nèi)容的處理上就要慎重了。比如算法、程序的設(shè)計(jì),我們不是只注重給學(xué)生一個(gè)結(jié)果、一個(gè)程序,而更應(yīng)該展示給學(xué)生的是一個(gè)過(guò)程,一個(gè)思想,也就是怎么樣去解決這個(gè)問(wèn)題。我們的重點(diǎn)在于教會(huì)學(xué)生掌握方法,即幫助學(xué)生學(xué)會(huì)自己解決問(wèn)題,而不是幫助學(xué)生解決問(wèn)題。即授人以漁,而非授人以魚。因此在講解這些內(nèi)容的時(shí)候就不能是一張幻燈一個(gè)算法、一個(gè)程序,而應(yīng)該重點(diǎn)介紹方法、思想,根據(jù)題目求解的過(guò)程,一步一步把結(jié)果“ 寫” 出來(lái)。
多媒體CAI課件主要包括課程內(nèi)容、算法演示、在線測(cè)試、在線討論以及資源中心五部分功能。多媒體CAI課件可以提供交互式環(huán)境供學(xué)生學(xué)習(xí),并自動(dòng)根據(jù)操作過(guò)程進(jìn)行實(shí)時(shí)評(píng)價(jià)。將多媒體CAI課件和教師課堂講授有機(jī)地結(jié)合起來(lái),能形成最佳教學(xué)任務(wù)的綜合性手段與教學(xué)方案。
四、把握課堂教學(xué)方法,提高課堂教學(xué)質(zhì)量
(一)注意“互動(dòng)式教學(xué)”,切記不要“自演自說(shuō)”?;?dòng)式教學(xué)就是要改變老師是課堂上唯一主體形式的狀況,讓學(xué)生也作為主體形式參與到課堂上來(lái)?;?dòng)式教學(xué)既可以提高學(xué)生的參與積極性,還可以避免學(xué)生上課疲勞,產(chǎn)生注意力不集中的現(xiàn)象?;?dòng)式教學(xué)在形式上有老師提問(wèn),讓學(xué)生上黑板演算、上教師機(jī)操作,讓學(xué)生討論等,讓學(xué)生進(jìn)行正誤判析,解決普遍性問(wèn)題,或者請(qǐng)有獨(dú)特思路的同學(xué)演示自己的方法或程序,對(duì)比各種方法的優(yōu)缺點(diǎn),鼓勵(lì)大家再提出新方法。實(shí)踐證明,這種教學(xué)方法效果顯著,課堂活躍,學(xué)生的參與程度很高。但是我們?cè)谶M(jìn)行師生互動(dòng)方面也要注意把握一個(gè)度的概念,讓課堂既要有互動(dòng)的活躍氛圍,也要有好的課堂秩序,使得課堂互動(dòng)有序有效進(jìn)行。
(二)培養(yǎng)學(xué)生讀程序的能力。程序是C語(yǔ)言的本質(zhì),讀程序是學(xué)習(xí)C語(yǔ)言入門最快,也是最好的方法。要培養(yǎng)學(xué)生獨(dú)立編程的能力,首先應(yīng)該培養(yǎng)學(xué)生讀程序的能力。學(xué)生讀的程序越多,見識(shí)的編程的思想、方法、技巧也就越多,就能更加擴(kuò)展自己的編程思路,還能在某些時(shí)候把別人的東西拿來(lái)歸為己用。
在培養(yǎng)學(xué)生讀程序方面要注意循序漸進(jìn),先給學(xué)生讀一些簡(jiǎn)單的、只有幾行的程序,然后逐漸增大程序的復(fù)雜度。
(三)采用問(wèn)題驅(qū)動(dòng)法。在C程序設(shè)計(jì)語(yǔ)言課程中,有一些概念之間的差別和程序的設(shè)計(jì)步驟如果只通過(guò)教師講述,學(xué)生在字面上可以接受,但在理解深度上往往難以達(dá)到令人滿意的效果,如果能設(shè)計(jì)出一系列問(wèn)題,讓學(xué)生在實(shí)踐和解決問(wèn)題的過(guò)程中自己去探究和體驗(yàn),情況將完全是另一個(gè)樣子。另外,采用一些有趣的問(wèn)題來(lái)引入對(duì)某些語(yǔ)句結(jié)構(gòu)的學(xué)習(xí)同樣有相同的作用。
采用問(wèn)題驅(qū)動(dòng)法,一切都要求學(xué)生自己動(dòng)手動(dòng)腦設(shè)計(jì),他們?cè)诓僮鬟^(guò)程中探究和解決問(wèn)題的積極性和主動(dòng)性得到
了調(diào)動(dòng),從而達(dá)到了我們的教學(xué)目標(biāo)。
五、加強(qiáng)實(shí)驗(yàn)環(huán)節(jié)的教學(xué)設(shè)計(jì),輔助理論教學(xué)
C程序設(shè)計(jì)語(yǔ)言是實(shí)踐性很強(qiáng)的一門課,培養(yǎng)學(xué)生的實(shí)踐能力是教學(xué)的首要目的。因此,在授課的同時(shí),如何引導(dǎo)學(xué)生利用上機(jī)實(shí)驗(yàn)來(lái)加強(qiáng)實(shí)踐也是教學(xué)中的一個(gè)重要環(huán)節(jié)。C程序設(shè)計(jì)語(yǔ)言實(shí)驗(yàn)教學(xué)的目的應(yīng)是:1. 緊密配合理論教學(xué),通過(guò)相關(guān)實(shí)驗(yàn),幫助和加深對(duì)語(yǔ)句功能的理解;2. 通過(guò)實(shí)驗(yàn)可以將各門課程學(xué)到的知識(shí)融會(huì)貫通,思考利用C程序設(shè)計(jì)語(yǔ)言解決實(shí)際應(yīng)用問(wèn)題的有效方法,從而使學(xué)生分析和解決問(wèn)題的能力得到鍛煉和提高。依據(jù)實(shí)驗(yàn)教學(xué)的目的,考慮學(xué)生的個(gè)體差異,將實(shí)驗(yàn)設(shè)置成不同的類型:必做和選做實(shí)驗(yàn):這兩類實(shí)驗(yàn)都是結(jié)合相關(guān)課程的教學(xué)需要由授課教師設(shè)計(jì)的;前者目的在于幫助學(xué)生掌握基礎(chǔ)知識(shí)和實(shí)驗(yàn)研究方法,后者則在于培養(yǎng)和鼓勵(lì)學(xué)生的學(xué)習(xí)興趣、擴(kuò)大知識(shí)面以及培養(yǎng)學(xué)生的應(yīng)用能力和創(chuàng)新意識(shí)。從而大大激發(fā)了學(xué)生的學(xué)習(xí)熱情,為其今后的學(xué)習(xí)和工作打下良好的基礎(chǔ)。
六、結(jié)束語(yǔ)
要教學(xué)好C 程序設(shè)計(jì)語(yǔ)言,關(guān)鍵在于教師要有效地組織教學(xué),才能激發(fā)學(xué)生的學(xué)習(xí)興趣,讓學(xué)生主動(dòng)、愉快地學(xué)習(xí),滿足他們的求知欲,這樣才能取得良好的教學(xué)效果。
參考文獻(xiàn)
篇10
【關(guān)鍵詞】C語(yǔ)言程序設(shè)計(jì) 教學(xué)方法 資源整合
C語(yǔ)言是一門結(jié)構(gòu)化程序設(shè)計(jì)語(yǔ)言,對(duì)于學(xué)生來(lái)說(shuō),C語(yǔ)言程序設(shè)計(jì)的思維方式和概念都是全新的,學(xué)生接受起來(lái)很困難。那么,在C語(yǔ)言程序設(shè)計(jì)教學(xué)過(guò)程中,怎樣開展這種構(gòu)造性的又具有創(chuàng)造力活動(dòng)的教學(xué)呢?筆者經(jīng)過(guò)這幾年的自我學(xué)習(xí)以及實(shí)際教學(xué)中的不斷摸索,對(duì)C語(yǔ)言程序設(shè)計(jì)教學(xué)方法有了一些認(rèn)識(shí),與大家共同探討。
一、注重網(wǎng)絡(luò)環(huán)境下的資源整合
互聯(lián)網(wǎng)技術(shù)的飛速發(fā)展徹底引發(fā)了閱讀、計(jì)算等方式的變革,巨大的信息量、便捷的信息傳
遞、極強(qiáng)的交互性,使得網(wǎng)絡(luò)成為最有效的資源獲取工具。因此,在教學(xué)過(guò)程中建立或利用一個(gè)以C語(yǔ)言為專題的編程學(xué)習(xí)網(wǎng)站,整合與C語(yǔ)言編程相關(guān)的豐富的學(xué)習(xí)資源,為學(xué)生提供動(dòng)態(tài)的、協(xié)作性的學(xué)習(xí)環(huán)境和學(xué)習(xí)工具,讓學(xué)習(xí)者自己選擇信息資料,自己收集、分析并應(yīng)用知識(shí),去解決實(shí)際問(wèn)題。通過(guò)網(wǎng)絡(luò)學(xué)習(xí)環(huán)境開展C語(yǔ)言教學(xué),提高了C語(yǔ)言教學(xué)活動(dòng)的有效性。
二、以合作學(xué)習(xí)為導(dǎo)向,改革課堂教學(xué)環(huán)節(jié)
合作學(xué)習(xí)是備受國(guó)際教育界推崇的學(xué)習(xí)模式,因?yàn)樗兄谂囵B(yǎng)學(xué)習(xí)者的合作精神和協(xié)同解決問(wèn)題能力。
教學(xué)中,以幾名學(xué)生為小組組成學(xué)習(xí)的基本單位,學(xué)生在學(xué)習(xí)小組內(nèi)相互協(xié)作、相互幫助、群策群力,共同完成相應(yīng)的教學(xué)任務(wù)。實(shí)際教學(xué)中,教師向各小組布置項(xiàng)目任務(wù),給以必要的說(shuō)明,提供必要的資料和網(wǎng)絡(luò)資源,然后各學(xué)習(xí)小組研究問(wèn)題,制定解決方案,最后將結(jié)果展示出來(lái)。例如,在C語(yǔ)言中的函數(shù)調(diào)用這一個(gè)問(wèn)題,將程序分解為數(shù)個(gè)模塊,每個(gè)小組各自承擔(dān)其中一個(gè)模塊的程序編寫,C語(yǔ)言模塊化程序設(shè)計(jì)的思想在這時(shí)得到充分地展現(xiàn),讓學(xué)生深刻理解了模塊化程序設(shè)計(jì)理念,同時(shí)也使學(xué)生感受到了團(tuán)隊(duì)合作的重要性,培養(yǎng)了學(xué)生協(xié)作互助精神。
三、抓住重點(diǎn),分散難點(diǎn),注重循序漸進(jìn)
學(xué)習(xí)程序設(shè)計(jì)是一個(gè)逐步積累的過(guò)程。教材在整體設(shè)計(jì)上,要注意分散難點(diǎn)、合理選材,為學(xué)生建立科學(xué)的學(xué)習(xí)順序,并注意適時(shí)、適量,學(xué)以致用地逐步滲透相關(guān)的知識(shí)、思想和方法。對(duì)于有難度的知識(shí)點(diǎn),采用先用一個(gè)簡(jiǎn)單的例子讓學(xué)生有所了解,經(jīng)過(guò)一段時(shí)間的反復(fù)練習(xí)以及相關(guān)知識(shí)的積累后,再引入一個(gè)復(fù)雜一些的例子,深入理解和掌握,然后再加以概括和總結(jié)。讓學(xué)生對(duì)知識(shí)的認(rèn)識(shí)、理解、運(yùn)用有一個(gè)逐步深入的“螺旋式”上升過(guò)程。幫助學(xué)生把已學(xué)到的內(nèi)容不斷納入新的內(nèi)容體系中去,使學(xué)生認(rèn)知結(jié)構(gòu)中原有的概念和新的知識(shí)建立起實(shí)質(zhì)性的聯(lián)系。例如,雙循環(huán)結(jié)構(gòu)知識(shí)點(diǎn)中的打印規(guī)則圖案的程序設(shè)計(jì)方法,就可依據(jù)問(wèn)題的難易程度,先找出直角三角形圖案形成的規(guī)律,再探究等腰三角形圖案的形成特點(diǎn),最后解決構(gòu)成菱形圖案的程序設(shè)計(jì),讓學(xué)生有一個(gè)全面、系統(tǒng)的理解和掌握解決該問(wèn)題的思想方法。
四、立足任務(wù)驅(qū)動(dòng),滲透基本概念
概念的形成過(guò)程常常是學(xué)生進(jìn)行邏輯思維的過(guò)程,如果遵循邏輯思維過(guò)程去組織教學(xué),必將使學(xué)生容易掌握概念。因此,要想讓學(xué)生領(lǐng)會(huì)C語(yǔ)言中抽象的概念,教學(xué)中以實(shí)例任務(wù)作為知識(shí)的載體,在每個(gè)實(shí)例中適時(shí)、適量滲透一些相關(guān)的概念和知識(shí),由實(shí)例去驅(qū)動(dòng)學(xué)生主動(dòng)發(fā)現(xiàn)、分析和處理問(wèn)題,讓學(xué)生在做中學(xué),在學(xué)中做,使學(xué)生在完成任務(wù)的過(guò)程中,逐漸地、很自然地去體會(huì)C語(yǔ)言的語(yǔ)法規(guī)則及相關(guān)概念,并且在這一過(guò)程中,學(xué)生還能體會(huì)到相似概念之間的差別,以及解決這一問(wèn)題的不同程序設(shè)計(jì)步驟。比如,當(dāng)型循環(huán)while與直到型循環(huán)do-while語(yǔ)句的區(qū)別,如果只通過(guò)教師講述,多數(shù)同學(xué)一般只能在表面上知其然,實(shí)則不知其所以然,但如果給出一個(gè)具體的任務(wù)實(shí)例,讓同學(xué)們?cè)趯?shí)踐后的結(jié)果中自己去體
驗(yàn)兩者之間的不同,留在學(xué)生腦海中的記憶將猶為深刻。
五、引導(dǎo)學(xué)生建構(gòu)自己的知識(shí)體系
基于網(wǎng)絡(luò)環(huán)境下的學(xué)習(xí)過(guò)程具有開放性、廣域性和易交流性。因此,網(wǎng)絡(luò)環(huán)境下的創(chuàng)新教育能真正達(dá)到因材施教、發(fā)展個(gè)性的目的,能夠使學(xué)生主動(dòng)參與學(xué)習(xí)過(guò)程,并按照自己的認(rèn)知水平有序地進(jìn)行學(xué)習(xí)和提高,并使其創(chuàng)造性學(xué)習(xí)成為一種習(xí)慣。建構(gòu)主義的教學(xué)活動(dòng)中,教師的教學(xué)形式并不固定,學(xué)生則作為一個(gè)主體,積極會(huì)同其他的小組成員一起,通過(guò)已經(jīng)整合的學(xué)習(xí)資源在網(wǎng)絡(luò)下討論和學(xué)習(xí),教師給予學(xué)生引導(dǎo)和幫助,解決學(xué)生建立知識(shí)體系過(guò)程中所出現(xiàn)的問(wèn)題。這樣,學(xué)生既掌握了教材上的內(nèi)容,同時(shí)又通過(guò)網(wǎng)絡(luò)資源學(xué)習(xí)了相關(guān)的知識(shí)點(diǎn),完成了對(duì)自己知識(shí)體系的建構(gòu),形成了自己的學(xué)習(xí)方式,而教師不但完成了教學(xué)任務(wù),也教會(huì)了學(xué)生學(xué)習(xí)的方法,為學(xué)生以后的自我學(xué)習(xí)打下基礎(chǔ),正所謂“教”與“學(xué)”相得益彰。
六、做好歸納總結(jié),提高學(xué)生學(xué)習(xí)效率
C語(yǔ)言程序設(shè)計(jì)的學(xué)習(xí),很重要的一點(diǎn)在于歸納總結(jié)。一個(gè)章節(jié)的結(jié)束,學(xué)生則難以形成完整、清晰的框架,因此,教師在教學(xué)中要及時(shí)歸納、做好小結(jié)。教學(xué)歸納可以是一個(gè)知識(shí)點(diǎn)的歸納(如if條件語(yǔ)句的歸納),也可以是對(duì)一種知識(shí)結(jié)構(gòu)的歸納(如分支結(jié)構(gòu)中包含if語(yǔ)句、while語(yǔ)句、循環(huán)語(yǔ)句等的歸納)??偨Y(jié)可以是一個(gè)小節(jié)的總結(jié),也可以是一個(gè)單元內(nèi)容的總結(jié)。歸納總結(jié)的形式也可以多種多樣,可以使用文字概括,也可以使用圖表總結(jié),重點(diǎn)難點(diǎn)要著重強(qiáng)調(diào)。做好歸納總結(jié),有利于學(xué)生對(duì)知識(shí)的理解、做到融會(huì)貫通,順利實(shí)現(xiàn)知識(shí)遷移,提高學(xué)生的學(xué)習(xí)效率。
教學(xué)方法在程序設(shè)計(jì)教學(xué)中的重要性是不言而喻的,它制約著程序設(shè)計(jì)教學(xué)的效率。面對(duì)的教學(xué)對(duì)象不同,教學(xué)方法各異,但使每位學(xué)生都能得到充分的發(fā)展,培養(yǎng)創(chuàng)新人才,是我們的同一目的,教學(xué)絕不能脫離學(xué)生的知識(shí)背景和認(rèn)知規(guī)律。
參考文獻(xiàn):
[1]扈中平.現(xiàn)代教育理論.高等教育出版社,2004.