c程序范文
時(shí)間:2023-03-29 10:47:55
導(dǎo)語:如何才能寫好一篇c程序,這就需要搜集整理更多的資料和文獻(xiàn),歡迎閱讀由公務(wù)員之家整理的十篇范文,供你借鑒。
篇1
本課介紹c語言程序設(shè)計(jì)的基本方法和基本的程序語句。
從程序流程的角度來看,程序可以分為三種基本結(jié)構(gòu),即順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)。這三種基本結(jié)構(gòu)可以組成所有的各種復(fù)雜程序。c語言提供了多種語句來實(shí)現(xiàn)這些程序結(jié)構(gòu)。本章介紹這些基本語句及其應(yīng)用,使讀者對c程序有一個(gè)初步的認(rèn)識,為后面各章的學(xué)習(xí)打下基礎(chǔ)。
c程序的語句
c程序的執(zhí)行部分是由語句組成的。程序的功能也是由執(zhí)行語句實(shí)現(xiàn)的。
C語句可分為以下五類:
1.表達(dá)式語句
2.函數(shù)調(diào)用語句
3.控制語句
4.復(fù)合語句
5.空語句
1.表達(dá)式語句
表達(dá)式語句由表達(dá)式加上分號“;”組成。其一般形式為:表達(dá)式;執(zhí)行表達(dá)式語句就是計(jì)算表達(dá)式的值。例如:x=y+z;賦值語句y+z;加法運(yùn)算語句,但計(jì)算結(jié)果不能保留,無實(shí)際意義i++;自增1語句,i值增1
2.函數(shù)調(diào)用語句
由函數(shù)名、實(shí)際參數(shù)加上分號“;”組成。其一般形式為:函數(shù)名(實(shí)際參數(shù)表);執(zhí)行函數(shù)語句就是調(diào)用函數(shù)體并把實(shí)際參數(shù)賦予函數(shù)定義中的形式參數(shù),然后執(zhí)行被調(diào)函數(shù)體中的語句,求取函數(shù)值。(在第五章函數(shù)中再詳細(xì)介紹)例如printf("CProgram");調(diào)用庫函數(shù),輸出字符串。
3.控制語句
控制語句用于控制程序的流程,以實(shí)現(xiàn)程序的各種結(jié)構(gòu)方式。
它們由特定的語句定義符組成。c語言有九種控制語句??煞殖梢韵氯悾?/p>
(1)條件判斷語句
if語句,switch語句
(2)循環(huán)執(zhí)行語句
dowhile語句,while語句,for語句
(3)轉(zhuǎn)向語句
break語句,goto語句,continue語句,return語句
4.復(fù)合語句
把多個(gè)語句用括號{}括起來組成的一個(gè)語句稱復(fù)合語句。在程序中應(yīng)把復(fù)合語句看成是單條語句,而不是多條語句,例如
{
x=y+z;
a=b+c;
printf(“%d%d”,x,a);
}
是一條復(fù)合語句。復(fù)合語句內(nèi)的各條語句都必須以分號“;”結(jié)尾,在括號“}”外不能加分號。
5.空語句
只有分號“;”組成的語句稱為空語句??照Z句是什么也不執(zhí)行的語句。在程序中空語句可用來作空循環(huán)體。例如while(getchar()!=''''\n'''');本語句的功能是,只要從鍵盤輸入的字符不是回車則重新輸入。這里的循環(huán)體為空語句。
賦值語句
賦值語句是由賦值表達(dá)式再加上分號構(gòu)成的表達(dá)式語句。其一般形式為:變量=表達(dá)式;賦值語句的功能和特點(diǎn)都與賦值表達(dá)式相同。它是程序中使用最多的語句之一。在賦值語句的使用中需要注意以下幾點(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.注意在變量說明中給變量賦初值和賦值語句的區(qū)別。給變量賦初值是變量說明的一部分,賦初值后的變量與其后的其它同類變量之間仍必須用逗號間隔,而賦值語句則必須用分號結(jié)尾。
3.在變量說明中,不允許連續(xù)給多個(gè)變量賦初值。如下述說明是錯(cuò)誤的:inta=b=c=5必須寫為inta=5,b=5,c=5;而賦值語句允許連續(xù)賦值
4.注意賦值表達(dá)式和賦值語句的區(qū)別。賦值表達(dá)式是一種表達(dá)式,它可以出現(xiàn)在任何允許表達(dá)式出現(xiàn)的地方,而賦值語句則不能。
下述語句是合法的:if((x=y+5)>0)z=x;語句的功能是,若表達(dá)式x=y+5大于0則z=x。下述語句是非法的:if((x=y+5;)>0)z=x;因?yàn)?y+5;是語句,不能出現(xiàn)在表達(dá)式中。
數(shù)據(jù)輸出語句
本小節(jié)介紹的是向標(biāo)準(zhǔn)輸出設(shè)備顯示器輸出數(shù)據(jù)的語句。在c語言中,所有的數(shù)據(jù)輸入/輸出都是由庫函數(shù)完成的。因此都是函數(shù)語句。本小節(jié)先介紹printf函數(shù)和putchar函數(shù)。printf函數(shù)printf函數(shù)稱為格式輸出函數(shù),其關(guān)鍵字最末一個(gè)字母f即為“格式”(format)之意。其功能是按用戶指定的格式,把指定的數(shù)據(jù)顯示到顯示器屏幕上。在前面的例題中我們已多次使用過這個(gè)函數(shù)。
一、printf函數(shù)調(diào)用的一般形式
printf函數(shù)是一個(gè)標(biāo)準(zhǔn)庫函數(shù),它的函數(shù)原型在頭文件“stdio.h”中。但作為一個(gè)特例,不要求在使用printf函數(shù)之前必須包含stdio.h文件。printf函數(shù)調(diào)用的一般形式為:printf(“格式控制字符串”,輸出表列)其中格式控制字符串用于指定輸出格式。格式控制串可由格式字符串和非格式字符串兩種組成。格式字符串是以%開頭的字符串,在%后面跟有各種格式字符,以說明輸出數(shù)據(jù)的類型、形式、長度、小數(shù)位數(shù)等。如“%d”表示按十進(jìn)制整型輸出,“%ld”表示按十進(jìn)制長整型輸出,“%c”表示按字符型輸出等。后面將專門給予討論。
非格式字符串在輸出時(shí)原樣照印,在顯示中起提示作用。輸出表列中給出了各個(gè)輸出項(xiàng),要求格式字符串和各輸出項(xiàng)在數(shù)量和類型上應(yīng)該一一對應(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é)果也不相同。第四行的輸出語句格式控制串中,兩格式串%d之間加了一個(gè)空格(非格式字符),所以輸出的a,b值之間有一個(gè)空格。第五行的printf語句格式控制串中加入的是非格式字符逗號,因此輸出的a,b值之間加了一個(gè)逗號。第六行的格式串要求按字符型輸出a,b值。第七行中為了提示輸出結(jié)果又增加了非格式字符串。
二、格式字符串
在TurboC中格式字符串的一般形式為:[標(biāo)志][輸出最小寬度][.精度][長度]類型其中方括號[]中的項(xiàng)為可選項(xiàng)。各項(xiàng)的意義介紹如下:
1.類型類型字符用以表示輸出數(shù)據(jù)的類型,其格式符和意義下表所示:
表示輸出類型的格式字符格式字符意義
d以十進(jìn)制形式輸出帶符號整數(shù)(正數(shù)不輸出符號)
o以八進(jìn)制形式輸出無符號整數(shù)(不輸出前綴O)
x以十六進(jìn)制形式輸出無符號整數(shù)(不輸出前綴OX)
u以十進(jìn)制形式輸出無符號整數(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é)果左對齊,右邊填空格
+輸出符號(正號或負(fù)號)空格輸出值為正時(shí)冠以空格,為負(fù)時(shí)冠以負(fù)號
#對c,s,d,u類無影響;對o類,在輸出時(shí)加前
綴o對x類,在輸出時(shí)加前綴0x;對e,g,f類當(dāng)結(jié)果有小數(shù)時(shí)才給出小數(shù)點(diǎn)
3.輸出最小寬度
用十進(jìn)制整數(shù)來表示輸出的最少位數(shù)。若實(shí)際位數(shù)多于定義的寬度,則按實(shí)際位數(shù)輸出,若實(shí)際位數(shù)少于定義的寬度則補(bǔ)以空格或0。
4.精度
精度格式符以“.”開頭,后跟十進(jìn)制整數(shù)。本項(xiàng)的意義是:如果輸出數(shù)字,則表示小數(shù)的位數(shù);如果輸出的是字符,則表示輸出字符的個(gè)數(shù);若實(shí)際位數(shù)大于所定義的精度數(shù),則截去超過的部分。
5.長度
長度格式符為h,l兩種,h表示按短整型量輸出,l表示按長整型量輸出。
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”格式的輸出相同,說明“l(fā)”符對“f”類型無影響?!?5.4lf”指定輸出寬度為5,精度為4,由于實(shí)際長度超過5故應(yīng)該按實(shí)際位數(shù)輸出,小數(shù)位數(shù)超過4位部分被截去。第九行輸出雙精度實(shí)數(shù),“%8.4lf”由于指定精度為4位故截去了超過4位的部分。第十行輸出字符量d,其中“%bc”指定輸出寬度為8故在輸出字符p之前補(bǔ)加7個(gè)空格。
使用printf函數(shù)時(shí)還要注意一個(gè)問題,那就是輸出表列中的求值順序。不同的編譯系統(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語句改一個(gè)printf語句輸出。但從結(jié)果可以看出是不同的。為什么結(jié)果會不同呢?就是因?yàn)閜rintf函數(shù)對輸出表中各量求值的順序是自右至左進(jìn)行的。在式中,先對最后一項(xiàng)“-i--”求值,結(jié)果為-8,然后i自減1后為7。再對“-i++”項(xiàng)求值得-7,然后i自增1后為8。再對“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'''');換行對控制字符則執(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ù)輸入語句
c語言的數(shù)據(jù)輸入也是由函數(shù)語句完成的。本節(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)庫函數(shù),它的函數(shù)原型在頭文件“stdio.h”中,與printf函數(shù)相同,c語言也允許在使用scanf函數(shù)之前不必包含stdio.h文件。scanf函數(shù)的一般形式為:scanf(“格式控制字符串”,地址表列);其中,格式控制字符串的作用與printf函數(shù)相同,但不能顯示非格式字符串,也就是不能顯示提示字符串。地址表列中給出各變量的地址。地址是由地址運(yùn)算符“&”后跟變量名組成的。例如,&a,&b分別表示變量a和變量b的地址。這個(gè)地址就是編譯系統(tǒng)在內(nèi)存中給a,b變量分配的地址。在c語言中,使用了地址這個(gè)概念,這是與其它語言不同的。應(yīng)該把變量的值和變量的地址這兩個(gè)不同的概念區(qū)別開來。變量的地址是C編譯系統(tǒng)分配的,用戶不必關(guān)心具體的地址是多少。變量的地址和變量值的關(guān)系如下:&a--->a567a為變量名,567是變量的值,&a是變量a的地址。在賦值表達(dá)式中給變量賦值,如:a=567在賦值號左邊是變量名,不能寫地址,而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語句在屏幕上輸出提示,請用戶輸入a、b、c的值。執(zhí)行scanf語句,則退出TC屏幕進(jìn)入用戶屏幕等待用戶輸入。用戶輸入7、8、9后按下回車鍵,此時(shí),系統(tǒng)又將返回TC屏幕。在scanf語句的格式串中由于沒有非格式字符在“%d%d%d”之間作輸入時(shí)的間隔,因此在輸入時(shí)要用一個(gè)以上的空格或回車鍵作為每兩個(gè)輸入數(shù)之間的間隔。
如:789
或
7
8
9
格式字符串
格式字符串的一般形式為:%[*][輸入數(shù)據(jù)寬度][長度]類型其中有方括號[]的項(xiàng)為任選項(xiàng)。各項(xiàng)的意義如下:
1.類型
表示輸入數(shù)據(jù)的類型,其格式符和意義下表所示。
格式字符意義
d輸入十進(jìn)制整數(shù)
o輸入八進(jìn)制整數(shù)
x輸入十六進(jìn)制整數(shù)
u輸入無符號十進(jìn)制整數(shù)
f或e輸入實(shí)型數(shù)(用小數(shù)形式或指數(shù)形式)
c輸入單個(gè)字符
s輸入字符串
2.“*”符
用以表示該輸入項(xiàng)讀入后不賦予相應(yīng)的變量,即跳過該輸入值。如scanf("%d%*d%d",&a,&b);當(dāng)輸入為:123時(shí),把1賦予a,2被跳過,3賦予b。
3.寬度
用十進(jìn)制整數(shù)指定輸入的寬度(即字符數(shù))。例如:scanf("%5d",&a);
輸入:
12345678
只把12345賦予變量a,其余部分被截去。又如:scanf("%4d%4d",&a,&b);
輸入:
12345678將把1234賦予a,而把5678賦予b。
4.長度
長度格式符為l和h,l表示輸入長整型數(shù)據(jù)(如%ld)和雙精度浮點(diǎn)數(shù)(如%lf)。h表示輸入短整型數(shù)據(jù)。
使用scanf函數(shù)還必須注意以下幾點(diǎn):
a.scanf函數(shù)中沒有精度控制,如:scanf("%5.2f",&a);是非法的。不能企圖用此語句輸入小數(shù)為2位的實(shí)數(shù)。
b.scanf中要求給出變量地址,如給出變量名則會出錯(cuò)。如scanf("%d",a);是非法的,應(yīng)改為scnaf("%d",&a);才是合法的。
c.在輸入多個(gè)數(shù)值數(shù)據(jù)時(shí),若格式控制串中沒有非格式字符作輸入數(shù)據(jù)之間的間隔則可用空格,TAB或回車作間隔。C編譯在碰到空格,TAB,回車或非法數(shù)據(jù)(如對“%d”輸入“12A”時(shí),A即為非法數(shù)據(jù))時(shí)即認(rèn)為該數(shù)據(jù)結(jié)束。
d.在輸入字符數(shù)據(jù)時(shí),若格式控制串中無非格式字符,則認(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"中沒有空格,輸入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í),雖然編譯能夠通過,但結(jié)果將不正確。
voidmain(){
inta;
printf("inputanumber\n");
scanf("%d",&a);
printf("%ld",a);
}
由于輸入數(shù)據(jù)類型為整型,而輸出語句的格式串中說明為長整型,因此輸出結(jié)果和輸入數(shù)據(jù)不符。如改動程序如下:
voidmain(){
longa;
printf("inputalonginteger\n");
scanf("%ld",&a);
printf("%ld",a);
}
運(yùn)行結(jié)果為:
inputalonginteger
1234567890
1234567890當(dāng)輸入數(shù)據(jù)改為長整型后,輸入輸出數(shù)據(jù)相等。
鍵盤輸入函數(shù)
getchar函數(shù)getchar函數(shù)的功能是從鍵盤上輸入一個(gè)字符。其一般形式為:getchar();通常把輸入的字符賦予一個(gè)字符變量,構(gòu)成賦值語句,如:
charc;
c=getchar();#include<stdio.h>
voidmain(){
charc;
printf("inputacharacter\n");
c=getchar();
putchar(c);
}
使用getchar函數(shù)還應(yīng)注意幾個(gè)問題:
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碼和對應(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é)長度。
分支結(jié)構(gòu)程序
關(guān)系運(yùn)算符和表達(dá)式
在程序中經(jīng)常需要比較兩個(gè)量的大小關(guān)系,以決定程序下一步的工作。比較兩個(gè)量的運(yùn)算符稱為關(guān)系運(yùn)算符。在c語言中有以下關(guān)系運(yùn)算符:
<小于
<=小于或等于
>大于
>=大于或等于
==等于
!=不等于
關(guān)系運(yùn)算符都是雙目運(yùn)算符,其結(jié)合性均為左結(jié)合。關(guān)系運(yùn)算符的優(yōu)先級低于算術(shù)運(yùn)算符,高于賦值運(yùn)算符。在六個(gè)關(guān)系運(yùn)算符中,<,<=,>,>=的優(yōu)先級相同,高于==和!=,==和!=的優(yōu)先級相同。
關(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)算符的值。字符變量是以它對應(yīng)的ASCII碼參與運(yùn)算的。對于含多個(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ù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)先級的關(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”來表示。其求值規(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”代表“假”。但反過來在判斷一個(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。對x||i&&j-3式,先計(jì)算j-3的值為非0,再求i&&j-3的邏輯值為1,故x||i&&j-3的邏輯值為1。對i<j&&x<y式,由于i<j的值為1,而x<y為0故表達(dá)式的值為1,0相與,最后為0,對i==5&&c&&(j=8)式,由于i==5為假,即值為0,該表達(dá)式由兩個(gè)與運(yùn)算組成,所以整個(gè)表達(dá)式的值為0。對于式x+y||i+j+k由于x+y的值為非0,故整個(gè)或表達(dá)式的值為1。
if語句
用if語句可以構(gòu)成分支結(jié)構(gòu)。它根據(jù)給定的條件進(jìn)行判斷,以決定執(zhí)行某個(gè)分支程序段。c語言的if語句有三種基本形式。
1.第一種形式為基本形式if(表達(dá)式)語句;其語義是:如果表達(dá)式的值為真,則執(zhí)行其后的語句,否則不執(zhí)行該語句。其過程可表示為下圖
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語句判別max和b的大小,如max小于b,則把b賦予max。因此max中總是大數(shù),最后輸出max的值。
2.第二種形式為if-else形式
if(表達(dá)式)
語句1;
else
語句2;
其語義是:如果表達(dá)式的值為真,則執(zhí)行語句1,否則執(zhí)行語句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語句判別a,b的大小,若a大,則輸出a,否則輸出b。
3.第三種形式為if-else-if形式
前二種形式的if語句一般都用于兩個(gè)分支的情況。當(dāng)有多個(gè)分支選擇時(shí),可采用if-else-if語句,其一般形式為:
if(表達(dá)式1)
語句1;
elseif(表達(dá)式2)
語句2;
elseif(表達(dá)式3)
語句3;
…
elseif(表達(dá)式m)
語句m;
else
語句n;
其語義是:依次判斷表達(dá)式的值,當(dāng)出現(xiàn)某個(gè)值為真時(shí),則執(zhí)行其對應(yīng)的語句。然后跳到整個(gè)if語句之外繼續(xù)執(zhí)行程序。如果所有的表達(dá)式均為假,則執(zhí)行語句n。然后繼續(xù)執(zhí)行后續(xù)程序。if-else-if語句的執(zhí)行過程如圖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碼來判別類型。由ASCII碼表可知ASCII值小于32的為控制字符。在“0”和“9”之間的為數(shù)字,在“A”和“Z”之間為大寫字母,在“a”和“z”之間為小寫字母,其余則為其它字符。這是一個(gè)多分支選擇的問題,用if-else-if語句編程,判斷輸入字符ASCII碼所在的范圍,分別給出不同的輸出。例如輸入為“g”,輸出顯示它為小寫字符。
4.在使用if語句中還應(yīng)注意以下問題
(1)在三種形式的if語句中,在if關(guān)鍵字之后均為表達(dá)式。該表達(dá)式通常是邏輯表達(dá)式或關(guān)系表達(dá)式,但也可以是其它表達(dá)式,如賦值表達(dá)式等,甚至也可以是一個(gè)變量。例如:if(a=5)語句;if(b)語句;都是允許的。只要表達(dá)式的值為非0,即為“真”。如在if(a=5)…;中表達(dá)式的值永遠(yuǎn)為非0,所以其后的語句總是要執(zhí)行的,當(dāng)然這種情況在程序中不一定會出現(xiàn),但在語法上是合法的。
又如,有程序段:if(a=b)
printf("%d",a);
else
printf("a=0");本語句的語義是,把b值賦予a,如為非0則輸出該值,否則輸出“a=0”字符串。這種用法在程序中是經(jīng)常出現(xiàn)的。
(2)在if語句中,條件判斷表達(dá)式必須用括號括起來,在語句之后必須加分號。
(3)在if語句的三種形式中,所有的語句應(yīng)為單個(gè)語句,如果要想在滿足條件時(shí)執(zhí)行一組(多個(gè))語句,則必須把這一組語句用{}括起來組成一個(gè)復(fù)合語句。但要注意的是在}之后不能再加分號。
例如:
if(a>b){
a++;
b++;
}
else{a=0;
b=10;
}
if語句的嵌套
當(dāng)if語句中的執(zhí)行語句又是if語句時(shí),則構(gòu)成了if語句嵌套的情形。其一般形式可表示如下:
if(表達(dá)式)
if語句;
或者為
if(表達(dá)式)
if語句;
else
if語句;
在嵌套內(nèi)的if語句可能又是if-else型的,這將會出現(xiàn)多個(gè)if和多個(gè)else重疊的情況,這時(shí)要特別注意if和else的配對問題。例如:
if(表達(dá)式1)
if(表達(dá)式2)
語句1;
else
語句2;
其中的else究竟是與哪一個(gè)if配對呢?
應(yīng)該理解為:還是應(yīng)理解為:
if(表達(dá)式1)if(表達(dá)式1)
if(表達(dá)式2)if(表達(dá)式2)
語句1;語句1;
elseelse
語句2;語句2;
為了避免這種二義性,c語言規(guī)定,else總是與它前面最近的if配對,因此對上述例子應(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語句的嵌套結(jié)構(gòu)。采用嵌套結(jié)構(gòu)實(shí)質(zhì)上是為了進(jìn)行多分支選擇,例3.16實(shí)際上有三種選擇即A>B、A<B或A=B。這種問題用if-else-if語句也可以完成。而且程序更加清晰。因此,在一般情況下較少使用if語句的嵌套結(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á)式
如果在條件語句中,只執(zhí)行單個(gè)的賦值語句時(shí),??墒褂脳l件表達(dá)式來實(shí)現(xià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á)式通常用于賦值語句之中。
例如條件語句:
if(a>b)max=a;
elsemax=b;
可用條件表達(dá)式寫為max=(a>b)?a:b;執(zhí)行該語句的語義是:如a>b為真,則把a(bǔ)賦予max,否則把b賦予max。
使用條件表達(dá)式時(shí),還應(yīng)注意以下幾點(diǎn):
1.條件運(yùn)算符的運(yùn)算優(yōu)先級低于關(guān)系運(yùn)算符和算術(shù)運(yùn)算符,但高于賦值符。因此max=(a>b)?a:b可以去掉括號而寫為max=a>b?a:b
2.條件運(yùn)算符?和:是一對運(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á)式對上例重新編程,輸出兩個(gè)數(shù)中的大數(shù)。
switch語句
c語言還提供了另一種用于多分支選擇的switch語句,其一般形式為:
switch(表達(dá)式){
case常量表達(dá)式1:語句1;
case常量表達(dá)式2:語句2;
…
case常量表達(dá)式n:語句n;
default:語句n+1;
}
其語義是:計(jì)算表達(dá)式的值。并逐個(gè)與其后的常量表達(dá)式值相比較,當(dāng)表達(dá)式的值與某個(gè)常量表達(dá)式的值相等時(shí),即執(zhí)行其后的語句,然后不再進(jìn)行判斷,繼續(xù)執(zhí)行后面所有case后的語句。如表達(dá)式的值與所有case后的常量表達(dá)式均不相同時(shí),則執(zhí)行default后的語句。
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以及以后的所有語句,輸出了Wednesday及以后的所有單詞。這當(dāng)然是不希望的。為什么會出現(xiàn)這種情況呢?這恰恰反應(yīng)了switch語句的一個(gè)特點(diǎn)。在switch語句中,“case常量表達(dá)式”只相當(dāng)于一個(gè)語句標(biāo)號,表達(dá)式的值和某標(biāo)號相等則轉(zhuǎn)向該標(biāo)號執(zhí)行,但不能在執(zhí)行完該標(biāo)號的語句后自動跳出整個(gè)switch語句,所以出現(xiàn)了繼續(xù)執(zhí)行所有后面case語句的情況。這是與前面介紹的if語句完全不同的,應(yīng)特別注意。為了避免上述情況,c語言還提供了一種break語句,專用于跳出switch語句,break語句只有關(guān)鍵字break,沒有參數(shù)。在后面還將詳細(xì)介紹。修改例題的程序,在每一case語句之后增加break語句,使每一次執(zhí)行之后均可跳出switch語句,從而避免輸出不應(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語句時(shí)還應(yīng)注意以下幾點(diǎn):
1.在case后的各常量表達(dá)式的值不能相同,否則會出現(xiàn)錯(cuò)誤。
2.在case后,允許有多個(gè)語句,可以不用{}括起來。
3.各case和default子句的先后順序可以變動,而不會影響程序執(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ù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語言提供了多種循環(huán)語句,可以組成各種不同形式的循環(huán)結(jié)構(gòu)。
while語句
while語句的一般形式為:while(表達(dá)式)語句;其中表達(dá)式是循環(huán)條件,語句為循環(huán)體。
while語句的語義是:計(jì)算表達(dá)式的值,當(dāng)值為真(非0)時(shí),執(zhí)行循環(huán)體語句。其執(zhí)行過程可用圖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++完成對輸入字符個(gè)數(shù)計(jì)數(shù)。從而程序?qū)崿F(xiàn)了對輸入一行字符的字符個(gè)數(shù)計(jì)數(shù)。
使用while語句應(yīng)注意以下幾點(diǎn):
1.while語句中的表達(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è)以上的語句,則必須用{}括起來,組成復(fù)合語句。
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語句的循環(huán)條件為賦值表達(dá)式a=5,因此該表達(dá)式的值永遠(yuǎn)為真,而循環(huán)體中又沒有其它中止循環(huán)的手段,因此該循環(huán)將無休止地進(jìn)行下去,形成死循環(huán)。4.允許while語句的循環(huán)體又是while語句,從而形成雙重循環(huán)。
do-while語句
do-while語句的一般形式為:
do
語句;
while(表達(dá)式);
其中語句是循環(huán)體,表達(dá)式是循環(huán)條件。
do-while語句的語義是:
先執(zhí)行循環(huán)體語句一次,再判別表達(dá)式的值,若為真(非0)則繼續(xù)循環(huán),否則終止循環(huán)。
do-while語句和while語句的區(qū)別在于do-while是先執(zhí)行后判斷,因此do-while至少要執(zhí)行一次循環(huán)體。而while是先判斷后執(zhí)行,如果條件不滿足,則一次循環(huán)體語句也不執(zhí)行。
while語句和do-while語句一般都可以相互改寫。
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í)行后判斷而造成的。
對于do-while語句還應(yīng)注意以下幾點(diǎn):
1.在if語句,while語句中,表達(dá)式后面都不能加分號,而在do-while語句的表達(dá)式后面則必須加分號。
2.do-while語句也可以組成多重循環(huán),而且也可以和while語句相互嵌套。
3.在do和while之間的循環(huán)體由多個(gè)語句組成時(shí),也必須用{}括起來組成一個(gè)復(fù)合語句。
4.do-while和while語句相互替換時(shí),要注意修改循環(huán)控制條件。
for語句
for語句是c語言所提供的功能更強(qiáng),使用更廣泛的一種循環(huán)語句。其一般形式為:
for(表達(dá)式1;表達(dá)式2;表達(dá)3)
語句;
表達(dá)式1通常用來給循環(huán)變量賦初值,一般是賦值表達(dá)式。也允許在for語句外給循環(huán)變量賦初值,此時(shí)可以省略該表達(dá)式。
表達(dá)式2通常是循環(huán)條件,一般為關(guān)系表達(dá)式或邏輯表達(dá)式。
表達(dá)式3通??捎脕硇薷难h(huán)變量的值,一般是賦值語句。
這三個(gè)表達(dá)式都可以是逗號表達(dá)式,即每個(gè)表達(dá)式都可由多個(gè)表達(dá)式組成。三個(gè)表達(dá)式都是任選項(xiàng),都可以省略。
一般形式中的“語句”即為循環(huán)體語句。for語句的語義是:
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)過程中,表達(dá)式1只計(jì)算一次,表達(dá)式2和表達(dá)式,3則可能計(jì)算多次。循環(huán)體可能多次執(zhí)行,也可能一次都不執(zhí)行。for語句的執(zhí)行過程如圖所示。
voidmain(){
intn,s=0;
for(n=1;n<=100;n++)
s=s+n;
printf("s=%d\n",s);
}
用for語句計(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語句中的表達(dá)式3為n++,實(shí)際上也是一種賦值語句,相當(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語句修改例題。從0開始,輸出n個(gè)連續(xù)的偶數(shù)。
inta=0,n;
printf("\ninputn:");
scanf("%d",&n);
for(;n>0;a++,n--)
printf("%d",a*2);
本例的for語句中,表達(dá)式1已省去,循環(huán)變量的初值在for語句之前由scanf語句取得,表達(dá)式3是一個(gè)逗號表達(dá)式,由a++,n--兩個(gè)表達(dá)式組成。每循環(huán)一次a自增1,n自減1。a的變化使輸出的偶數(shù)遞增,n的變化控制循次數(shù)。
在使用for語句中要注意以下幾點(diǎn)
1.for語句中的各表達(dá)式都可省略,但分號間隔符不能少。如: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則將造成無限循環(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--語句進(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語句的表達(dá)式全部省去。由循環(huán)體中的語句實(shí)現(xiàn)循環(huán)變量的遞減和循環(huán)條件的判斷。當(dāng)n值為0時(shí),由break語句中止循環(huán),轉(zhuǎn)去執(zhí)行for以后的程序。在此情況下,for語句已等效于while(1)語句。如在循環(huán)體中沒有相應(yīng)的控制手段,則造成死循環(huán)。
3.循環(huán)體可以是空語句。
#include"stdio.h"
voidmain(){
intn=0;
printf("inputastring:\n");
for(;getchar()!=''''\n'''';n++);
printf("%d",n);
}
本例中,省去了for語句的表達(dá)式1,表達(dá)式3也不是用來修改循環(huán)變量,而是用作輸入字符的計(jì)數(shù)。這樣,就把本應(yīng)在循環(huán)體中完成的計(jì)數(shù)放在表達(dá)式中完成了。因此循環(huán)體是空語句。應(yīng)注意的是,空語句后的分號不可少,如缺少此分號,則把后面的printf語句當(dāng)成循環(huán)體來執(zhí)行。反過來說,如循環(huán)體不為空語句時(shí),決不能在表達(dá)式的括號后加分號,這樣又會認(rèn)為循環(huán)體是空語句而不能反復(fù)執(zhí)行。這些都是編程中常見的錯(cuò)誤,要十分注意。
4.for語句也可與while,do-while語句相互嵌套,構(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)移語句
程序中的語句通??偸前错樞蚍较?,或按語句功能所定義的方向執(zhí)行的。如果需要改變程序的正常流向,可以使用本小節(jié)介紹的轉(zhuǎn)移語句。在c語言中提供了4種轉(zhuǎn)移語句:
goto,break,continue和return。
其中的return語句只能出現(xiàn)在被調(diào)函數(shù)中,用于返回主調(diào)函數(shù),我們將在函數(shù)一章中具體介紹。本小節(jié)介紹前三種轉(zhuǎn)移語句。
1.goto語句
goto語句也稱為無條件轉(zhuǎn)移語句,其一般格式如下:goto語句標(biāo)號;其中語句標(biāo)號是按標(biāo)識符規(guī)定書寫的符號,放在某一語句行的
前面,標(biāo)號后加冒號(:)。語句標(biāo)號起標(biāo)識語句的作用,與goto語句配合使用。
如:label:i++;
loop:while(x<7);
c語言不限制程序中使用標(biāo)號的次數(shù),但各標(biāo)號不得重名。goto語句的語義是改變程序流向,轉(zhuǎn)去執(zhí)行語句標(biāo)號所標(biāo)識的語句。
goto語句通常與條件語句配合使用??捎脕韺?shí)現(xiàn)條件轉(zhuǎn)移,構(gòu)成循環(huán),跳出循環(huán)體等功能。
但是,在結(jié)構(gòu)化程序設(shè)計(jì)中一般不主張使用goto語句,以免造成程序流程的混亂,使理解和調(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語句和goto語句構(gòu)成循環(huán)結(jié)構(gòu)。當(dāng)輸入字符不為''''\n''''時(shí)即執(zhí)行n++進(jìn)行計(jì)數(shù),然后轉(zhuǎn)移至if語句循環(huán)執(zhí)行。直至輸入字符為''''\n''''才停止循環(huán)。
break語句
break語句只能用在switch語句或循環(huán)語句中,其作用是跳出switch語句或跳出本層循環(huán),轉(zhuǎn)去執(zhí)行后面的程序。由于break語句的轉(zhuǎn)移方向是明確的,所以不需要語句標(biāo)號與之配合。break語句的一般形式為:break;上面例題中分別在switch語句和for語句中使用了break語句作為跳轉(zhuǎn)。使用break語句可以使循環(huán)語句有多個(gè)出口,在一些場合下使編程更加靈活、方便。
continue語句
continue語句只能用在循環(huán)體中,其一般格式是:
continue;
其語義是:結(jié)束本次循環(huán),即不再執(zhí)行循環(huán)體中continue語句之后的語句,轉(zhuǎn)入下一次循環(huán)條件的判斷與執(zhí)行。應(yīng)注意的是,本語句只結(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);
}
本例中,對7~100的每一個(gè)數(shù)進(jìn)行測試,如該數(shù)不能被7整除,即模運(yùn)算不為0,則由continus語句轉(zhuǎn)去下一次循環(huán)。只有模運(yùn)算為0時(shí),才能執(zhí)行后面的printf語句,輸出能被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;
}
}
檢查輸入的一行中有無相鄰兩字符相同。
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舉法來判斷一個(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)表示對1~100這100個(gè)數(shù)逐個(gè)判斷是否是素?cái)?shù),共循環(huán)100次,在第二層循環(huán)中則對數(shù)n用2~n-1逐個(gè)去除,若某次除盡則跳出該層循環(huán),說明不是素?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)變量的步長值改為2,即每次增加2,此外只需對數(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í)行的流程來看,程序可分為三種最基本的結(jié)構(gòu):順序結(jié)構(gòu),分支結(jié)構(gòu)以及循環(huán)結(jié)構(gòu)
2.程序中執(zhí)行部分最基本的單位是語句。c語言的語句可分為五類:
(1)表達(dá)式語句任何表達(dá)式末尾加上分號即可構(gòu)成表達(dá)式語句,常用的表達(dá)式語句為賦值語句。
(2)函數(shù)調(diào)用語句由函數(shù)調(diào)用加上分號即組成函數(shù)調(diào)用語句。
(3)控制語句用于控制程序流程,由專門的語句定義符及所需的表達(dá)式組成。主要有條件判斷執(zhí)行語句,循環(huán)執(zhí)行語句,轉(zhuǎn)向語句等。
(4)復(fù)合語句由{}把多個(gè)語句括起來組成一個(gè)語句。復(fù)合語句被認(rèn)為是單條語句,它可出現(xiàn)在所有允許出現(xiàn)語句的地方,如循環(huán)體等。
(5)空語句僅由分號組成,無實(shí)際功能。
3.c語言中沒有提供專門的輸入輸出語句,所有的輸入輸出都是由調(diào)用標(biāo)準(zhǔn)庫函數(shù)中的輸入輸出函數(shù)來實(shí)現(xiàn)的。
scanf和getchar函數(shù)是輸入函數(shù),接收來自鍵盤的輸入數(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語言提供了多種形式的條件語句以構(gòu)成分支結(jié)構(gòu)。
(1)if語句主要用于單向選擇。
(2)if-else語句主要用于雙向選擇。
(3)if-else-if語和switch語句用于多向選擇。
這幾種形式的條件語句一般來說是可以互相替代的。
6.c語言提供了三種循環(huán)語句。
(1)for語句主要用于給定循環(huán)變量初值,步長增量以及循環(huán)次數(shù)的循環(huán)結(jié)構(gòu)。
(2)循環(huán)次數(shù)及控制條件要在循環(huán)過程中才能確定的循環(huán)可用while或do-while語句。
(3)三種循環(huán)語句可以相互嵌套組成多重循環(huán)。循環(huán)之間可以并列但不能交叉。
(4)可用轉(zhuǎn)移語句把流程轉(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)行過程中可以得到修改,并使循環(huán)條件逐步變?yōu)榧?,從而結(jié)束循環(huán)。
7.c語言語句小結(jié)
名稱一般形式
簡單語句表達(dá)式語句表達(dá)式;
空語句;
復(fù)合語句{語句}
條件語句if(表達(dá)式)語句;
if(表達(dá)式)語句1;else語句2;
if(表達(dá)式1)語句1;elseif(表達(dá)式2)語句2…else語句n;
開關(guān)語句switch(表達(dá)式){case常量表達(dá)式:語句…default:語句;}
循環(huán)語句while語句
while(表達(dá)式)語句;
for語句for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語句;
break語句break;
goto語句goto;
篇2
>> C語言程序設(shè)計(jì)案例教學(xué)法研究 以程序案例為導(dǎo)向的《C語言程序設(shè)計(jì)》的教學(xué)研究 C語言程序設(shè)計(jì)教學(xué)探討 C++程序設(shè)計(jì)淺析 C程序設(shè)計(jì)教學(xué)的新寵 高職院?!禖++程序設(shè)計(jì)》 C語言程序設(shè)計(jì)教學(xué)研討 《C程序設(shè)計(jì)》教學(xué)心得 淺議C語言程序設(shè)計(jì)教學(xué) C程序設(shè)計(jì)課程教學(xué)探討 C語言程序設(shè)計(jì)教學(xué) 淺談C程序設(shè)計(jì)教學(xué) C語言程序設(shè)計(jì)教學(xué)探索 “C++程序設(shè)計(jì)”課程改革 《C++程序設(shè)計(jì)》教材介紹 C程序設(shè)計(jì)教學(xué)初探 C程序設(shè)計(jì)教學(xué)探討 《C語言程序設(shè)計(jì)》教學(xué)實(shí)踐 C高效程序設(shè)計(jì)的技巧 C++程序設(shè)計(jì)教學(xué)探討 常見問題解答 當(dāng)前所在位置:l),其中羅列了一些優(yōu)秀的開源C++項(xiàng)目。4) 開源中國社區(qū)(/ project/ lang/21/c)。
我們初步篩選出了以下8個(gè)開源項(xiàng)目:1) C++程序開發(fā)框架Qt;2)以3D方式顯示函數(shù)曲面的K3DSurf;3)比Windows 自帶的Notepad更優(yōu)秀的Notepad++;4)游覽宇宙星體的教育軟件Celestia;5)能夠檢測C++程序中邏輯錯(cuò)誤的CppCheck;6)能夠快速瀏覽大型源代碼系統(tǒng)的Source Navigator;7)能夠顯示W(wǎng)indows目錄、邏輯盤使用情況的WinDirStat;8)能夠顯示與合并目錄/文件差異的Winmerge。
2評估指標(biāo)
我們依據(jù)以下指標(biāo)對每個(gè)候選案例進(jìn)行定量化評估。
2.1學(xué)生興趣
從教育心理學(xué)角度看,如果學(xué)生對一個(gè)案例感興趣,他們就會主動去學(xué)習(xí)與該題目相關(guān)的其他領(lǐng)域知識,也會更積極地去研究課程知識是如何被應(yīng)用到該案例中去的。我們調(diào)查了南開大學(xué)軟件學(xué)院114名本科一年級學(xué)生對這8個(gè)開源項(xiàng)目的興趣程度。首先我們演示了這8個(gè)開源軟件各自的功能,再讓每個(gè)學(xué)生獨(dú)立的填寫一個(gè)問卷調(diào)查表。每個(gè)學(xué)生對一個(gè)項(xiàng)目感興趣的程度用數(shù)字1~5表示,5表示最感興趣,1表示最不感興趣。最后我們將所有學(xué)生對一個(gè)項(xiàng)目的興趣程度取均值。
2.2代碼規(guī)模
作為本科生的課程設(shè)計(jì)或者實(shí)訓(xùn)項(xiàng)目,往往要求學(xué)生在1個(gè)學(xué)期之內(nèi)的時(shí)間完成。如果案例本身代碼太多,學(xué)生們將無法在有限的時(shí)間里完成案例的學(xué)習(xí)。另一方面,如果案例本身代碼太少,將無法展示相關(guān)課程內(nèi)容在實(shí)際項(xiàng)目中的應(yīng)用情況。我們需要在二者之間進(jìn)行折中,依據(jù)軟件代碼行數(shù)(LOC,Line of Code)以及軟件中類型數(shù)量來評測一個(gè)項(xiàng)目的代碼規(guī)模。
2.3代碼質(zhì)量
精確地評估一個(gè)軟件系統(tǒng)的代碼質(zhì)量是比較困難的,這需要專家仔細(xì)研讀軟件的源代碼、文檔,理解并評估其軟件系統(tǒng)設(shè)計(jì),判讀其可擴(kuò)展性、可移植性、模塊化的程度,評判其代碼是否符合C++代碼規(guī)范的要求,評測其運(yùn)行時(shí)的性能、健壯程度等。8個(gè)候選題目的代碼總量大約為53萬行,進(jìn)行人工的評估顯然是不現(xiàn)實(shí)的。我們選擇了以下兩個(gè)子指標(biāo)對一個(gè)軟件項(xiàng)目的代碼質(zhì)量進(jìn)行評估:
1) 代碼中注釋部分的比例。適當(dāng)比例的注釋可以提高代碼的可讀性,同時(shí)也表明了編程人員編寫代碼比較仔細(xì)、嚴(yán)謹(jǐn)。
2)LCOM度量(Lack of Cohesion of Methods)。好的內(nèi)聚性(Cohesion)是一個(gè)高質(zhì)量軟件系統(tǒng)必須具備的。所謂內(nèi)聚性,是指一個(gè)類的成員變量和成員函數(shù)之間的耦合程度。雖然有多個(gè)度量來評測內(nèi)聚性,我們選擇Henderson-Sellers提出的Lack of Cohesion of Methods (LCOM-HS) [7]。該值越大,表明一個(gè)類的內(nèi)聚性越差;越小則表示內(nèi)聚性越好。其取值范圍為[0,2]。
2.4C++技術(shù)的應(yīng)用
由于案例教學(xué)的目的是要求學(xué)生熟練應(yīng)用C++以及相關(guān)面向?qū)ο蠹夹g(shù)進(jìn)行軟件開發(fā),所以我們要求所選案例本身能夠盡量全面的覆蓋C++的各個(gè)方面。我們選擇了3個(gè)子指標(biāo):
1) 一個(gè)項(xiàng)目所使用的名字空間(namespace)的個(gè)數(shù)。在一個(gè)中、大型軟件項(xiàng)目中,合理使用名字空間可以有效避免名字沖突,提高軟件系統(tǒng)的模塊化程度。
2) 一個(gè)項(xiàng)目所使用的模板(template)的個(gè)數(shù)。C++除了具有所有面向?qū)ο缶幊痰奶匦灾?現(xiàn)代的C++程序開始大量使用模板來實(shí)現(xiàn)泛型編程(Generic Programming)的思想。對模板的適度使用,可以使得一個(gè)相關(guān)模塊更加通用,更易擴(kuò)展,能夠最大程度地達(dá)到代碼復(fù)用的目的。
3) 繼承。類的繼承也可以達(dá)到代碼復(fù)用的目的,也是C++程序設(shè)計(jì)中實(shí)現(xiàn)多態(tài)性的必要條件之一。
3評估工具及運(yùn)用
有以下工具可以評測C++代碼的規(guī)模與質(zhì)量:
1)SourceAudit(),由Front EndART公司開發(fā)。
2)Telelogic 公司的logiscope。
3)CppDepend(),能夠?qū)++程序進(jìn)行60多個(gè)指標(biāo)的測量,其中有些是關(guān)于代碼結(jié)構(gòu)的(如class、namespace的數(shù)量),有些是關(guān)于代碼質(zhì)量的(如程序注釋比例、內(nèi)聚性、項(xiàng)目穩(wěn)定度等)。該工具還可以直觀地顯示程序模塊、類、函數(shù)之間的依賴性。CppDepend將被分析程序的代碼當(dāng)做數(shù)據(jù)庫來處理,允許用戶使用一種代碼查詢語言(Code Query Language,CQL)來靈活地分析程序代碼。由于該工具小巧(約8.6M字節(jié))、靈活(支持CQL語言)、被允許在學(xué)術(shù)機(jī)構(gòu)中免費(fèi)使用,我們選擇該工具來對課程案例進(jìn)行評估。
部分評估指標(biāo)在CppDepend生成的html格式的報(bào)告中可以直接找到,而有些評估指標(biāo)需要用戶創(chuàng)建CQL語句,提交給CppDepend完成查詢。CQL和SQL相似,其格式為SELECT TOP FROM WHERE ORDER BY。如為了查詢一個(gè)軟件項(xiàng)目中有哪些函數(shù)的代碼超過200行,可以使用下面的CQL語句。
SELECT METHODS WHERE NbLinesOfCode > 200 ORDER BY NbLinesOfCode DESC
其中METHODS表示代碼中的函數(shù),NbLinesOfCode表示函數(shù)體內(nèi)的代碼行數(shù),DESC表示降序排列。
需要使用CQL語句計(jì)算的評估指標(biāo)如下。為了查詢一個(gè)C++項(xiàng)目中的繼承數(shù),我們使用下面的CQL語句。
SELECT TYPES WHERE NbBaseClass >0
其中TYPES表示一個(gè)C++項(xiàng)目中定義的類型,比如類、結(jié)構(gòu)體、聯(lián)合體等。
為了查詢一個(gè)C++項(xiàng)目中內(nèi)聚性較差的類的名稱與數(shù)量,我們使用下面的CQL語句。
SELECT TYPES WHERE LCOMHS > 0.95 AND NbFields > 10 AND NbMethods >10 AND !IsGlobal ORDER BY LCOMHS DESC
其中LCOMHS表示Henderson-Sellers定義的LCOM度量,NbFields表示一個(gè)類的成員變量的數(shù)量,NbMethods表示一個(gè)類的成員函數(shù)的數(shù)量。
4評估結(jié)果
依據(jù)以上指標(biāo),我們對各個(gè)候選案例進(jìn)行定量分析,結(jié)果如表1。由于整個(gè)Qt軟件系統(tǒng)的總代碼規(guī)模、復(fù)雜程度遠(yuǎn)遠(yuǎn)超過本科生的理解能力范圍,我們選擇了其核心模塊QtCore以及經(jīng)常被開發(fā)人員使用的QtGui作為評估對象。表中,LOC表示代碼行數(shù)(Line Of Code),Types列顯示的是各系統(tǒng)中類型的數(shù)量,Comm列顯示的是注釋行數(shù)量與總代碼行的比值,LCOM列表示內(nèi)聚性差的類在所有類型中的比例,NSpace表示namespace的數(shù)量,templates和inherits分別表示各系統(tǒng)所使用的模板與繼承的數(shù)量。
從“學(xué)生興趣”指標(biāo)上看,學(xué)生們最感興趣的是Qt軟件包,這可能歸因于該軟件包的示例程序展現(xiàn)了Qt具有強(qiáng)大的圖形/圖像處理功能。學(xué)生們其次感興趣的是K3DSurf,可能是被該軟件所展現(xiàn)的精美的數(shù)學(xué)函數(shù)曲面所折服。學(xué)生們最不感興趣的是Winmerge,這可能是由于在他們有限的軟件開發(fā)經(jīng)歷中,尚未遇到要比較兩個(gè)目錄的問題。假如被調(diào)查對象是具有多年工作經(jīng)驗(yàn)的程序員,他們可能對Winmerge更感興趣,因?yàn)樵摴ぞ呖梢钥焖俚卣页鲆粋€(gè)軟件的兩個(gè)開發(fā)版本的異同。
從“C++技術(shù)的應(yīng)用”指標(biāo)上看,Qt、Celestia和Winmerge都大量的使用了名字空間、模板、繼承,表明這3款開源項(xiàng)目更適合作為課程案例來使用。由于學(xué)生們對Winmerge的興趣較低,我們候選案例清單縮減為Qt和Celestia。
就Qt而言,即使我們只選擇了其中的QtCore及QtGui模塊,代碼規(guī)模仍然高達(dá)22萬行。因而,我們選擇QtCore作為詳細(xì)剖析的案例對象,而對QtGui只做粗粒度的剖析。這樣,候選清單中的競爭者就成為了QtCore和Celestia。
總體上,QtCore和Celestia具有旗鼓相當(dāng)?shù)闹笜?biāo)值,只是學(xué)生們對Qt的興趣程度稍高,QtCore的注釋比例最高。作為一個(gè)C++程序開發(fā)框架,QtCore的軟件體系應(yīng)該比較抽象,所以它所使用的模板數(shù)量要高于Celestia。
5結(jié)語
本文設(shè)計(jì)了一套定量化的評估指標(biāo),使用代碼查詢語言(Code Query Language,CQL)及代碼分析工具CppDepend對8個(gè)開源項(xiàng)目進(jìn)行了定量評估,給出了適合于課程C++程序設(shè)計(jì)的候選案例,可供各高校在相關(guān)課程的案例教學(xué)中參考。
注:本文得到南開大學(xué)教務(wù)處、軟件學(xué)院“08 年教學(xué)改革專項(xiàng)”(2009-2~2010-12)的大力支持。
參考文獻(xiàn):
[1] Bruce Eckel. Thinking in C++[M]. 北京:機(jī)械工業(yè)出版社,2001.
[2] Stanley B Lippman,Josée LaJoie. C++ Primer[M]. 北京:人民郵電出版社,2005.
[3] Bjarne Stroustrup. The C++ Programming Language: Special Edition[M]. 北京:高等教育出版社,2001.
[4] Scott Meyers.Effective C++[M]. Greater Boston Area :Addison-Wesley Professional,2005.
[5] 陳艷華,余健,雷志軍. Visual C++.NET課程設(shè)計(jì)案例精編[M]. 北京:清華大學(xué)出版社,2008.
篇3
鐘 實(shí)
(江西科技學(xué)院)
[摘 要]C語言程序設(shè)計(jì)課程是計(jì)算機(jī)專業(yè)教育的重要組成部分。將探究教學(xué)引入C語言程序設(shè)計(jì)教學(xué)中,不僅可以提高學(xué)生學(xué)習(xí)的興趣,調(diào)動教師教學(xué)的
熱情,也豐富了探究教學(xué)的理論與實(shí)踐。具體分析并探討了C語言程序設(shè)計(jì)探究教學(xué)的實(shí)施目標(biāo)、實(shí)施條件、教學(xué)情境的創(chuàng)設(shè)、探究形式、教學(xué)評價(jià)等問題。
[關(guān)鍵詞]C語言程序設(shè)計(jì) 探究教學(xué) 實(shí)施目標(biāo)
一、 C語言程序設(shè)計(jì)探究教學(xué)實(shí)施的目標(biāo):情感目標(biāo)、能力目標(biāo)和認(rèn)知目
標(biāo)
1、體驗(yàn)C語言程序設(shè)計(jì)的編程思想,激發(fā)和保持對C語言程序設(shè)計(jì)課程的
求知欲,形成積極主動地學(xué)習(xí)和參與C語言程序設(shè)計(jì)課程探究活動的態(tài)度。
2、能辯證地認(rèn)識C語言程序設(shè)計(jì)對社會發(fā)展、科技進(jìn)步和日常生活學(xué)習(xí)的
影響。
3、獲得親自參與研究探索的積極體驗(yàn)、培養(yǎng)嚴(yán)謹(jǐn)?shù)目茖W(xué)態(tài)度。
4、能從日常生活、學(xué)習(xí)中發(fā)現(xiàn)或歸納可以利用C語言程序設(shè)計(jì)解決的問題,
通過問題分析確定程序功能。
5、能根據(jù)任務(wù)的要求,確定所需信息的類型和來源,并鑒別信息的真實(shí)性、
準(zhǔn)確性和相關(guān)性。
6、掌握計(jì)算機(jī)程序的基本概念,理解并掌握C語言程序設(shè)計(jì)語言的基本知
識,包括語句、數(shù)據(jù)類型、變量、常量、表達(dá)式、函數(shù)等,熟悉語言的語法規(guī)則,熟
悉計(jì)算機(jī)程序執(zhí)行的基本過程。
7、了解C語言程序設(shè)計(jì)語言,掌握編寫程序、編譯程序、連接程序以及程序
開發(fā)環(huán)境等基本知識,掌握調(diào)試、運(yùn)行程序的基本方法與技巧。
二、C語言程序設(shè)計(jì)探究教學(xué)實(shí)施的條件
1、掌握一定的計(jì)算機(jī)操作基礎(chǔ)
C語言程序設(shè)計(jì)課程由于其學(xué)科自身的特點(diǎn),需要在計(jì)算機(jī)上調(diào)試程序,
所以要求學(xué)生具有一定的計(jì)算機(jī)操作知識,如:開關(guān)機(jī)、鍵盤和鼠標(biāo)的使用、文
件的建立與查找、常用軟件的使用等。
2、良好的C語言程序設(shè)計(jì)認(rèn)知結(jié)構(gòu)
認(rèn)知結(jié)構(gòu)就是學(xué)生頭腦里的知識結(jié)構(gòu),是學(xué)習(xí)者觀念的全部內(nèi)容和組織。
奧蘇伯爾的認(rèn)知結(jié)構(gòu)理論是針對新學(xué)習(xí)內(nèi)容的影響(即遷移)提出的,良好的認(rèn)
知結(jié)構(gòu)有利于知識的提取和正向遷移。C語言程序設(shè)計(jì)探究教學(xué)強(qiáng)調(diào)在已有知
識經(jīng)驗(yàn)上的主動建構(gòu),面對新的問題和任務(wù),需要學(xué)生及時(shí)從頭腦中提取信息,
建立新舊知識間的聯(lián)系,在已有C語言程序設(shè)計(jì)知識的基礎(chǔ)上思考解決新問題
的辦法,并試圖將新知識納入自己的認(rèn)知結(jié)構(gòu)中。
3 、良好的探究環(huán)境
良好的探究環(huán)境是學(xué)生順利進(jìn)行探究的保證,至少包含兩方面的內(nèi)容:(1)
要有充足的探究時(shí)間和靈活的探究條件。探究時(shí)間應(yīng)該根據(jù)學(xué)習(xí)任務(wù)進(jìn)行合理
安排,應(yīng)該考慮到學(xué)生假設(shè)錯(cuò)誤時(shí)所耽誤的時(shí)間以及討論交流所需要的時(shí)間。
探究教學(xué)中可能需要查閱大量的資料,教師還應(yīng)該準(zhǔn)備書籍、網(wǎng)絡(luò)等輔助資源。
(2)學(xué)生在探究學(xué)習(xí)的時(shí)候不能有太多壓力,不同的學(xué)生由于其自身的因素不可
能以相同的速度學(xué)習(xí),所以教師在進(jìn)行評價(jià)的時(shí)候也應(yīng)該因人而異,應(yīng)該為每
個(gè)學(xué)生提供充分的思考機(jī)會和時(shí)間,讓每個(gè)學(xué)生都能以自己的進(jìn)度進(jìn)行探索,
并在此過程中感受到樂趣。
三、C語言程序設(shè)計(jì)探究教學(xué)情境的創(chuàng)設(shè)
心理學(xué)研究表明,恰當(dāng)、適宜的環(huán)境能有效激發(fā)人的熱烈情緒,提高活動的
質(zhì)量和效果。教學(xué)情境是指教師人為創(chuàng)造的“典型場景”,創(chuàng)設(shè)目的在于引出教
學(xué)任務(wù),將學(xué)生的注意力吸引到學(xué)習(xí)任務(wù)中來。教師把將要學(xué)習(xí)的C語言程序
設(shè)計(jì)知識通過一定的情境呈現(xiàn)給學(xué)生,使得學(xué)生認(rèn)知結(jié)構(gòu)與周圍環(huán)境不平衡,
引起他們對學(xué)習(xí)目標(biāo)的注意和興趣,并通過探究活動把學(xué)生過去的活動和將來
的活動聯(lián)系在心理學(xué)研究表明,恰當(dāng)、適宜的環(huán)境能有效激發(fā)人的熱烈情緒,提
高活動的質(zhì)量和效果。教學(xué)情境是指教師人為創(chuàng)造的“典型場景”,創(chuàng)設(shè)目的在
于引出教學(xué)任務(wù),將學(xué)生的注意力吸引到學(xué)習(xí)任務(wù)中來。教師把將要學(xué)習(xí)的C
語言程序設(shè)計(jì)知識通過一定的情境呈現(xiàn)給學(xué)生,使得學(xué)生認(rèn)知結(jié)構(gòu)與周圍環(huán)境
不平衡,引起他們對學(xué)習(xí)目標(biāo)的注意和興趣,并通過探究活動把學(xué)生過去的活
動和將來的活動聯(lián)系在一體。探究教學(xué)情境的創(chuàng)設(shè)應(yīng)做到:(1)創(chuàng)設(shè)的情境是為
C語言程序設(shè)計(jì)教學(xué)服務(wù)的,要以C語言程序設(shè)計(jì)探究教學(xué)目標(biāo)為依據(jù)。(2)探究
情境要接近學(xué)生的真實(shí)生活經(jīng)驗(yàn),能夠吸引學(xué)生的注意力,激發(fā)他們的認(rèn)知沖
突和求知欲。(3)學(xué)生在情境中能夠感覺到問題的存在,自然地將新舊知識聯(lián)系
起來。(4)情境中必須包含學(xué)生未知的新內(nèi)容,而且是能夠通過探究掌握的。
四、C語言程序設(shè)計(jì)課程中的探究形式
C語言程序設(shè)計(jì)課程中開展探究教學(xué)主要有4種形式:探究性提問、探究性
討論、探究性演示和探究性實(shí)驗(yàn)。這4種形式是相輔相承的,而不是孤立存在的,
在C語言程序設(shè)計(jì)探究教學(xué)中,需要用到多種形式來構(gòu)成一個(gè)完整的探究教學(xué)
過程。C語言程序設(shè)計(jì)探究教學(xué)通常都是由探究性提問開始,然后進(jìn)行探究性
討論、探究性演示或探究性實(shí)驗(yàn);也可能從探究性演示或探究性實(shí)驗(yàn)開始,在演
示或?qū)嶒?yàn)的過程中發(fā)現(xiàn)問題,再進(jìn)行探究性討論。在實(shí)際教學(xué)過程中,要根據(jù)學(xué)
習(xí)內(nèi)容和課堂情況靈活地選用這些形式。
五、C語言程序設(shè)計(jì)探究教學(xué)評價(jià)
教學(xué)評價(jià)指依據(jù)一定的標(biāo)準(zhǔn),通過各種策略和相關(guān)資料的收集,對教學(xué)活
動及其效果進(jìn)行客觀衡量和科學(xué)判定的系統(tǒng)過程。C語言程序設(shè)計(jì)探究教學(xué)評
價(jià)是對C語言程序設(shè)計(jì)探究教學(xué)過程及其影響的測量、分析和評定,評價(jià)中我
們更關(guān)注學(xué)生學(xué)習(xí)和成長的過程,尋找適合學(xué)生發(fā)展的學(xué)習(xí)方式,滿足學(xué)生知
識和能力發(fā)展的需要。評價(jià)對探究教學(xué)的積極作用是很明顯的,但是如果評價(jià)
指標(biāo)制定不合理,或者評價(jià)方法的選用、評價(jià)結(jié)果的表述不當(dāng),不僅不能達(dá)到預(yù)
期效果,還會對學(xué)生的C語言程序設(shè)計(jì)學(xué)習(xí)產(chǎn)生消極影響。
參考文獻(xiàn)
[1] 《基礎(chǔ)教育課程改革綱要(試行)》教育部文件,教基[2001]17號.
[2] 保羅 朗格朗.終身教育引論瞰[M].北京:中國對外翻譯出版公司,1985,
p15~31.
[3] 聯(lián)合國教科文組織.學(xué)會生存——教育世界的今天和明天[M].上海:
上海譯文出.
版社,1979,p2.
[4] 張大均。教育心理學(xué)[M].北京:人民教育出版社,2005,p68--71.
[5] 靳玉樂.探究教學(xué)論[M].重慶:西南師范大學(xué)出版社,200l.
作者簡介
鐘實(shí)(1986-02)男、民族(漢),籍貫(江西省南昌市),2010畢業(yè)于浙江大學(xué)
篇4
[關(guān)鍵詞]C語言程序設(shè)計(jì) 改革 實(shí)踐
引言
C語言程序設(shè)計(jì)課程足以C語言為平臺,使學(xué)生全面了解程序設(shè)計(jì)的總體思路、程序沒計(jì)的基本算法、C語言的語法規(guī)則以及使用C語言進(jìn)行構(gòu)化程序沒計(jì)的方法,并具有一定的程序設(shè)計(jì)和程序調(diào)試的能力,為今后使用C語言解決實(shí)際問題打下良好的基礎(chǔ) 由于C語言涉及的概念比較復(fù)雜,規(guī)則繁多,使用靈活,容易出錯(cuò),同時(shí)該課程又是學(xué)生首先接觸的第一門程序沒計(jì)課程,所以很多學(xué)生學(xué)習(xí)起來都感到困難和吃力.并不同程度產(chǎn)生畏懼心理。
在C語言程序設(shè)計(jì)的教學(xué)工作中,我們發(fā)現(xiàn),學(xué)生的學(xué)習(xí)熱情不高,更談不上綜合應(yīng)用能力的培養(yǎng)與提高。我們C語言課程教學(xué)組通過對我校C語言程序設(shè)計(jì)課程教學(xué)現(xiàn)狀的調(diào)查分析,總結(jié)出了教學(xué)效果較差的主要原因,并從教材內(nèi)容、教學(xué)方法、教學(xué)手段和、上機(jī)實(shí)踐和考核評價(jià)體系五個(gè)方面進(jìn)行了大膽的改革與實(shí)踐,并取得了較好的教學(xué)效果。
一、C語言程序設(shè)計(jì)課程教學(xué)現(xiàn)狀分析
為了實(shí)時(shí)掌握學(xué)生的真實(shí)學(xué)習(xí)情況,任課教師對學(xué)生進(jìn)行了問卷調(diào)查。根據(jù)問卷結(jié)果及各位教師的教學(xué)經(jīng)驗(yàn),總結(jié)出我校C語言程序設(shè)計(jì)課程教學(xué)效果較差的主要原因有以下幾點(diǎn)。
(1)內(nèi)容抽象、枯燥,學(xué)生學(xué)習(xí)興趣度低。相比第一學(xué)期已經(jīng)或多或少有所接觸并有一定基礎(chǔ)的大學(xué)計(jì)算機(jī)課程而言,第二學(xué)期開設(shè)的程序設(shè)計(jì)課程是一種截然不同的全新的課程,出現(xiàn)了大量的新概念、新名詞和新方法。上機(jī)時(shí)好不容易敲上了一個(gè)程序,一運(yùn)行就會出現(xiàn)一堆錯(cuò)誤。62.4%的學(xué)生看不懂錯(cuò)誤提示,84.76%的同學(xué)不會使用單步跟蹤、Watch窗口等基本調(diào)試工具,22.3%的同學(xué)竟然根本不知道這些調(diào)試工具。于是學(xué)生對該課程的學(xué)習(xí)舉步維艱,學(xué)習(xí)的熱情急速降溫。
(2)實(shí)用性不強(qiáng)。近80%的同學(xué)認(rèn)為C語言的語法知識學(xué)了一大堆,但不知道學(xué)這些語法有什么用,和自己的專業(yè)知識有什么聯(lián)系。因此,多年積累下來,對C語言程序設(shè)計(jì)課程的普遍看法是:這是一門無用的公共課,混混過去就算了。于是,很多同學(xué)上課不聽講、下課不預(yù)習(xí)、不復(fù)習(xí),周而復(fù)始,形成惡性循環(huán)。
(3)進(jìn)度過于緩慢。C語言程序設(shè)計(jì)每周4學(xué)時(shí),其中,2學(xué)時(shí)多媒體教室的課堂教學(xué),2學(xué)時(shí)計(jì)算中心機(jī)房的上機(jī)實(shí)踐。計(jì)算中心機(jī)房為多個(gè)班級公用,且無屏幕轉(zhuǎn)播設(shè)施,因此教師的教學(xué)僅限于2學(xué)時(shí)的課堂教學(xué)。課時(shí)太少,加上學(xué)生興趣度低,往往一學(xué)期下來指針剛講了基本概念就結(jié)束了。有些為參加全國計(jì)算機(jī)等級二級c語言考試而努力學(xué)習(xí)的同學(xué)也因?yàn)橹羔槂?nèi)容學(xué)習(xí)太少而難以過關(guān)。
針對上述C語言程序設(shè)計(jì)教學(xué)效果差的原因,我中心C語言課程組的各位教師認(rèn)真研讀了“研究式學(xué)習(xí)”、“CDIO教學(xué)模式”、“計(jì)算思維”等理論及各種教學(xué)方法和實(shí)踐方式,借鑒了哈工大全國精品課程“C語言程序設(shè)計(jì)”課程的先進(jìn)教學(xué)經(jīng)驗(yàn),并結(jié)合各位教師多年的教學(xué)經(jīng)驗(yàn),制定了C語言程序設(shè)汁課程教學(xué)體系的改革方案。該教學(xué)體系改革方案從教材內(nèi)容、教學(xué)方法、教學(xué)手段、上機(jī)實(shí)踐和考核評價(jià)體系五個(gè)方面展開。
二、編寫優(yōu)質(zhì)配套教材,實(shí)施教材改革
我們按照研究性學(xué)習(xí)的內(nèi)涵編寫了《研究式學(xué)習(xí)——C語言程序設(shè)計(jì)》教材,目前正在進(jìn)行面向“計(jì)算思維”的新版教材的編寫。該系列教材具備以下特點(diǎn):
(1) 編寫理念科學(xué)性強(qiáng)
整套教材的編寫以“研究式學(xué)習(xí)”理念為指導(dǎo),研究性學(xué)習(xí)是一種建構(gòu)性的、追求協(xié)商的、尊重個(gè)性的、以人為本的“體驗(yàn)式學(xué)習(xí)”。在2006年的《國家精品課程評估指標(biāo)》中新增了一條指標(biāo):“重視研究性學(xué)習(xí)、探究性學(xué)習(xí)、協(xié)作學(xué)習(xí)等現(xiàn)代教育理念在教學(xué)中的應(yīng)用;能夠根據(jù)課程內(nèi)容和學(xué)生特征,對教學(xué)方法和教學(xué)評價(jià)進(jìn)行設(shè)計(jì)?!彼匝芯啃詫W(xué)習(xí)是以人為本的高等教育價(jià)值觀的體現(xiàn),是社會變革和教育發(fā)展的要求,也是精品課程的要求。研究性學(xué)習(xí)的關(guān)鍵是要在學(xué)習(xí)的各個(gè)階段提出適當(dāng)?shù)难芯繂栴},以便在學(xué)習(xí)過程中為學(xué)生創(chuàng)造能親臨體驗(yàn)地進(jìn)行研究學(xué)習(xí)的平臺,問題的提出貫穿在課堂教學(xué)、實(shí)驗(yàn)教學(xué)、課后作業(yè)、綜合性作業(yè)以及評價(jià)的整個(gè)教學(xué)過程中。我們自2004年開始就致力于打造C語言程序設(shè)計(jì)精品課程,所有的教學(xué)和改革都圍繞該指導(dǎo)思想進(jìn)行。2007年以C語言程序設(shè)計(jì)為主體的“程序設(shè)計(jì)與計(jì)算機(jī)語言”被評為省級精品課程,2010年由教材主編主持申報(bào)到了省級質(zhì)量工程教改項(xiàng)目“Inquiry Learning體系在程序設(shè)計(jì)課程中的運(yùn)用”研究。這一系列的改革和研究都是以學(xué)生為主體,以培養(yǎng)和提高學(xué)生的計(jì)算機(jī)素養(yǎng)為最終目的而制定的。在教學(xué)過程中我們經(jīng)常與學(xué)生座談和交流,了解學(xué)生的需求,完善我們的教學(xué),使我們的教材和教學(xué)模式能與時(shí)俱進(jìn),保持很好的前瞻性和科學(xué)性。
(2) 內(nèi)容組織創(chuàng)新性強(qiáng)
本教材用“提出問題—分析問題—給出相關(guān)知識—舉一反三”的研究式學(xué)習(xí)方式來組織“C語言程序設(shè)計(jì)”這門課程,在注重語言知識培養(yǎng)的同時(shí),更注重邏輯思維能力、程序設(shè)計(jì)能力及創(chuàng)新能力的培養(yǎng)。內(nèi)容組織方式新穎,符合認(rèn)識規(guī)律,富有啟發(fā)性,便于學(xué)習(xí),有利于激發(fā)學(xué)生學(xué)習(xí)興趣及各種能力的培養(yǎng)。本教材每章都通過4個(gè)步驟來完成學(xué)習(xí):
第1步,通過提出問題、分析問題來激發(fā)學(xué)生的興趣,引起學(xué)生的思考。
第2步,通過問題的解決、相關(guān)知識點(diǎn)的跟進(jìn),使學(xué)生能逐步提升程序設(shè)計(jì)的能力,掌握C語言的知識,引導(dǎo)學(xué)生深入思考。
第3步,用一定數(shù)量的編程實(shí)例使學(xué)生深入理解和掌握所學(xué)知識,用具有趣味性的綜合應(yīng)用編程實(shí)例培養(yǎng)學(xué)生的邏輯思維能力和編程能力,挖掘?qū)W生的創(chuàng)新能力。
第4步,對每部分的知識進(jìn)行小結(jié),以便學(xué)生進(jìn)一步鞏固應(yīng)掌握的知識。
每章后面都有“綜合應(yīng)用”部分,讓學(xué)生對所學(xué)知識的具體運(yùn)用有明確的認(rèn)識,并能在此基礎(chǔ)上進(jìn)一步鞏固和提升。
三、采取多樣性方法,實(shí)施教學(xué)方法的改革
(1)任務(wù)驅(qū)動教學(xué)方法
大多數(shù)學(xué)生反映C語言概念眾多,許多知識點(diǎn)抽象且難以理解,學(xué)生不能將理論和實(shí)際應(yīng)用結(jié)合起米, 任務(wù)驅(qū)動教學(xué)法是一種建立在建構(gòu)主義學(xué)習(xí)理論基礎(chǔ)上的教學(xué)法,它將以往以傳授知識為主的傳統(tǒng)教學(xué)理念,轉(zhuǎn)變?yōu)橐越鉀Q問題、完成任務(wù)為主的多維巨動式的教學(xué)理念;將再現(xiàn)式教學(xué)轉(zhuǎn)變?yōu)樘骄渴綄W(xué)習(xí),使學(xué)生處于積極的學(xué)習(xí)狀態(tài),每一位學(xué)生都能根據(jù)自己對當(dāng)前問題的理解,運(yùn)用共有的知識和自己特有的經(jīng)驗(yàn)提出方案、解決問題。在c語言程寧沒計(jì)課中.體現(xiàn)“任務(wù)驅(qū)動”就是讓學(xué)生在一個(gè)個(gè)典型的程序“任務(wù)”驅(qū)動下,教師引導(dǎo)幫助學(xué)生完成一系列程序“任務(wù)”,把知識的學(xué)習(xí)和知識的應(yīng)用有機(jī)地融合在一起,讓學(xué)生達(dá)到融會貫通、一點(diǎn)帶面的效果。例如,在講授C語言循環(huán)語句的教學(xué)時(shí),按任務(wù)驅(qū)動教學(xué)模式不是孤立地介紹格式、作用和使用方法,而是將這一知識點(diǎn)設(shè)計(jì)為“計(jì)算1+2+3+……+1 00=?”這一具體的任務(wù)。首先,教師通過提出“任務(wù)”讓學(xué)生把握教學(xué)內(nèi)容,同學(xué)們會想象怎么完成這個(gè)任務(wù),頭腦里對前而的所學(xué)內(nèi)容進(jìn)行回顧,但前面學(xué)過的知識沒法完成這種任務(wù)。接下來教師再講解如何使用循環(huán)語句等具體操作方法,這樣教學(xué),學(xué)生學(xué)得快、學(xué)得牢。通過實(shí)踐發(fā)現(xiàn)“任務(wù)驅(qū)動”法有利于激發(fā)學(xué)生的學(xué)習(xí)興趣,培養(yǎng)學(xué)生的分析問題、解決問題的能力,提高學(xué)生自主學(xué)習(xí)及與他人協(xié)作的能力,縮短了學(xué)習(xí)周期。
(2) 項(xiàng)目教學(xué)法
很多學(xué)生在學(xué)完C語言程序沒汁課程后,其結(jié)果是聽得懂、卻編不出程序來。針對這一情況,我們在教學(xué)過程中采用項(xiàng)目教學(xué)法。項(xiàng)目教學(xué)法是通過實(shí)施一個(gè)完整的項(xiàng)目而進(jìn)行的教學(xué)活動,其目的是在課堂教學(xué)中把理論與實(shí)踐有機(jī)地結(jié)合起來,充分發(fā)掘?qū)W生的創(chuàng)造潛能,提高學(xué)生解決實(shí)際問題的綜合能力。在課程初期.主要是進(jìn)行單項(xiàng)的編程練習(xí),重在掌握C語言的基本數(shù)據(jù)類型、語句與程序結(jié)構(gòu)等。在進(jìn)入函數(shù)、數(shù)組、指針、結(jié)構(gòu)體和文件內(nèi)容教學(xué)時(shí),開始綜合實(shí)訓(xùn)項(xiàng)日的編程設(shè)計(jì),每一個(gè)實(shí)訓(xùn)項(xiàng)日都呵以用前一個(gè)實(shí)訓(xùn)項(xiàng)目為基礎(chǔ)。通過一個(gè)項(xiàng)目的層層遞進(jìn),引入課程內(nèi)容,使得學(xué)生的學(xué)習(xí)循序漸進(jìn),螺旋式地上升,效果很好,開闊學(xué)生的思維,使得學(xué)生在課堂上真正地成為“主體”,教師則扮演“主導(dǎo)”角色。該教學(xué)方法使學(xué)生積極參與到教學(xué)過程中,變被動為主動,有效地調(diào)動了學(xué)生學(xué)習(xí)的積極性,深受學(xué)生好評。
(3)比較教學(xué)法
C語言中的概念比較復(fù)雜,規(guī)則繁多.而且內(nèi)容前后聯(lián)系緊密,教學(xué)過程中教師通過對比的方式對相關(guān)的概念或類似的程序代碼進(jìn)行比較,進(jìn)而明確差異,然后進(jìn)行歸納總結(jié),方便學(xué)生理解,將會收到事半功倍的效果 例如,C語言中的指針是教學(xué)中的一個(gè)難點(diǎn).這一部分涉及的概念較多,如指向變量的指針、指向數(shù)組的指針、指向字符串的指針、指向函數(shù)的指針等。這些概念很容易混淆,但是將這些概念對比起來講解,學(xué)生就很容易理解了。這些概念的共性都是指針,那么它們不同的地方在哪呢?關(guān)鍵在于指針變量的指向不同,指針?biāo)赶蜃兞康臄?shù)據(jù)類型決定了指針變量的用法。通過這樣的講解,概念的定義就很容易理解,概念的用法也就可以統(tǒng)一了。再如,數(shù)據(jù)的排序問題有多種算法,典型的有冒泡排序、選擇排序、插入排序等,求解方程的根的算法也有多種,有迭代法、牛頓迭代法、二分法和弦截法等。這些算法之間既有聯(lián)系又有區(qū)別,講清楚了算法的聯(lián)系和區(qū)別,也就解決了整個(gè)問題。
(4)啟發(fā)式教學(xué)法
啟發(fā)式教學(xué)法就是通過教師的啟發(fā)教學(xué)充分調(diào)動學(xué)生的積極性、主動性和創(chuàng)造性,引導(dǎo)學(xué)生主動學(xué)習(xí)。例如,在學(xué)習(xí)printf()和scanf()函數(shù)時(shí),通過比較式啟發(fā)方法講解兩函數(shù)的功能、格式、使用特性等方面的異同,通過比較使學(xué)生更好地把握兩函數(shù)的特征。在學(xué)習(xí)選擇排序算法時(shí),使用模擬式啟發(fā)方法,讓l0個(gè)學(xué)生隨機(jī)坐在相鄰的l0個(gè)位子上,然后現(xiàn)場模擬排序過程;在學(xué)習(xí)數(shù)據(jù)交換算法時(shí),使用比喻式和問題式啟發(fā)方法,將兩個(gè)變量比喻成兩個(gè)瓶子,將里面存放的數(shù)據(jù)比喻成醋和醬油,然后提問:如果將兩個(gè)瓶子中的醋和醬油交換一下,應(yīng)如何操作。
(5)“魚漁兼授式”教學(xué)方法。C語言只是一種表述工具,如果只有扎實(shí)的語法知識,沒有程序設(shè)計(jì)思想,根本就不可能寫出程序;而如果有程序設(shè)計(jì)思想,但語法知識不扎實(shí),勢必在程序的編寫、運(yùn)行過程中遇到一系列的問題,從而影響學(xué)生的學(xué)習(xí)熱情。而“魚漁兼授式”教學(xué)方法可以在基礎(chǔ)語法知識和程序設(shè)計(jì)方法之問找到一個(gè)平衡點(diǎn),使之相輔相成。例如,在講解數(shù)據(jù)類型時(shí)著重講解為什么數(shù)據(jù)要分不同的數(shù)據(jù)類型,需要從哪幾個(gè)角度學(xué)習(xí)不同數(shù)據(jù)類型的特性;講解具體算法時(shí)著重講解遇到類似問題時(shí)應(yīng)從哪些角度分析問題,用什么方法進(jìn)行程序設(shè)計(jì)從而解決問題;在課前精心設(shè)計(jì)一些錯(cuò)誤,尤其是邏輯錯(cuò)誤,然后講解遇到錯(cuò)誤可以采用什么手段去剖析、定位錯(cuò)誤。
四、建立立體化教學(xué)體系,實(shí)施教學(xué)手段的改革
我們從2006年就開始了立體化教學(xué)體系的建設(shè),我們建立了精品課程網(wǎng)站,實(shí)現(xiàn)了“在線教育”,現(xiàn)在我們課程的課件、課堂教學(xué)錄像、軟件、二級等考及相關(guān)閱讀等教學(xué)資源都放在了網(wǎng)絡(luò)上,作業(yè)也通過網(wǎng)絡(luò)來實(shí)現(xiàn)布置、提交和批閱。師生之間可以通過教學(xué)郵箱和課程論壇進(jìn)行交流,任課教師可以自己定制調(diào)查問卷,隨時(shí)了解學(xué)生的動態(tài)和需求,還可以隨時(shí)進(jìn)行在線測試,課程考試已經(jīng)完全實(shí)現(xiàn)了網(wǎng)絡(luò)無紙化模式。學(xué)生可根據(jù)自身的情況進(jìn)行課后自主學(xué)習(xí)、自測學(xué)習(xí)、互相學(xué)習(xí)或下載資料、上交作業(yè),有助于學(xué)生的個(gè)性化發(fā)展和創(chuàng)新能力的培養(yǎng)。設(shè)計(jì)出包含驗(yàn)證型、引導(dǎo)型、擴(kuò)充型和設(shè)計(jì)型等多種類型的實(shí)驗(yàn),在實(shí)踐中充分體現(xiàn)學(xué)生的自主性,有目的、分層次地培養(yǎng)學(xué)生的實(shí)踐能力,使學(xué)生學(xué)會從實(shí)驗(yàn)過程中獲取知識,積累經(jīng)驗(yàn)。通過綜合設(shè)計(jì),為學(xué)生自己構(gòu)建、發(fā)展并完善自己的知識體系創(chuàng)造機(jī)會,使學(xué)生具備獲取知識和應(yīng)用知識的能力,激發(fā)學(xué)生的創(chuàng)新精神,培養(yǎng)學(xué)生的團(tuán)隊(duì)精神和協(xié)作能力,全面提高學(xué)生的實(shí)踐能力。
教學(xué)實(shí)踐證明:學(xué)生在課程網(wǎng)站上作業(yè)及報(bào)告的提交率達(dá)到98%以上,問卷調(diào)查的訪問量達(dá)到了85%以上,優(yōu)秀設(shè)計(jì)作業(yè)的訪問率達(dá)到90%以上,其他資料的訪問率也高于60%。由此可見,立體化教學(xué)體系很好的實(shí)現(xiàn)了不受時(shí)間、地點(diǎn)限制的開放式教學(xué)。
五、上機(jī)環(huán)節(jié)的改革與實(shí)踐
上機(jī)環(huán)節(jié)是教學(xué)活動的重要環(huán)節(jié),是對學(xué)生進(jìn)行基本技能訓(xùn)練、增強(qiáng)學(xué)生實(shí)踐能力的關(guān)鍵環(huán)節(jié),是培養(yǎng)學(xué)生創(chuàng)新精神的重要手段。本科實(shí)踐教學(xué)的目的是優(yōu)化學(xué)生的素質(zhì)結(jié)構(gòu)、能力結(jié)構(gòu)和知識結(jié)構(gòu),讓其具備獲取知識、應(yīng)用知識的能力和創(chuàng)新能力。對于《程序設(shè)計(jì)與計(jì)算機(jī)語言》課程,以往的實(shí)踐教學(xué)內(nèi)容和題目以驗(yàn)證型和設(shè)計(jì)型為主。驗(yàn)證型的題目只要求學(xué)生按照書本上的指示,輸入程序,填寫結(jié)果即可,學(xué)生處于被動接受的地位,學(xué)生覺得無趣,毫無創(chuàng)意;設(shè)計(jì)型的題目對于非計(jì)算機(jī)專業(yè)學(xué)生來說,難度太大,學(xué)生無從下手。為了全面提高學(xué)生的實(shí)踐能力和應(yīng)用能力,使實(shí)踐教學(xué)能滿足不同層次學(xué)生自主學(xué)習(xí)的需求,我們制定并實(shí)施了以下改革措施:
(1)改革上機(jī)實(shí)踐的教學(xué)模式:將以理論教學(xué)為主的教學(xué)模式改為由理論教學(xué)和實(shí)踐教學(xué)相互聯(lián)系、相互交叉、彼此滲透、有機(jī)結(jié)合、同步發(fā)展的教學(xué)模式,確立了實(shí)踐教學(xué)在《程序設(shè)計(jì)基礎(chǔ)》課程中的重要地位。
(2)設(shè)計(jì)多種類型的實(shí)驗(yàn)題目:針對學(xué)生存在基礎(chǔ)不同、接受能力不同、個(gè)性有差異等問題,設(shè)計(jì)出包含驗(yàn)證型、引導(dǎo)型、擴(kuò)充型和設(shè)計(jì)型共四種類型的實(shí)驗(yàn),題目盡可能做到覆蓋知識點(diǎn),切合實(shí)際、生動有趣。通過完成不同類型的實(shí)驗(yàn),有目的、分層次地培養(yǎng)學(xué)生的實(shí)踐能力,使學(xué)生學(xué)會從實(shí)驗(yàn)過程中獲取知識,積累經(jīng)驗(yàn)。
(3)在實(shí)踐中充分體現(xiàn)學(xué)生的自主性:實(shí)驗(yàn)課的實(shí)驗(yàn)任務(wù)由規(guī)定實(shí)驗(yàn)內(nèi)容和自主實(shí)驗(yàn)內(nèi)容兩部分組成。學(xué)生在完成規(guī)定的實(shí)驗(yàn)任務(wù)后,可根據(jù)自己的興趣和愛好,自主設(shè)計(jì)一些實(shí)驗(yàn)任務(wù),在教師的指導(dǎo)和幫助下加以完成和實(shí)現(xiàn)。通過自主學(xué)習(xí)和自主設(shè)計(jì),能有效地培養(yǎng)學(xué)生應(yīng)用知識的能力和探索精神,極大地激發(fā)學(xué)生的學(xué)習(xí)主動性。
(4) 啟發(fā)引導(dǎo)學(xué)生的創(chuàng)造性,培養(yǎng)學(xué)生的團(tuán)隊(duì)協(xié)作精神:本課程要求學(xué)生以小組(3~5人)為單位進(jìn)行綜合性程序設(shè)計(jì),設(shè)計(jì)題目主要由學(xué)生自己按綜合設(shè)計(jì)要求來確定,每個(gè)小組推選出一名小組長,負(fù)責(zé)協(xié)調(diào)程序的開發(fā)、與教師和組員的聯(lián)系、提交總的設(shè)計(jì)報(bào)告和完整的源程序等工作。在綜合設(shè)計(jì)過程中,學(xué)生處于主導(dǎo)地位,是核心。學(xué)習(xí)小組的組建,綜合設(shè)計(jì)題目的選擇或確定,各組員任務(wù)的分配與協(xié)調(diào),任務(wù)完成后的總結(jié)與成績的自評等,主要是按學(xué)生的意愿來進(jìn)行。教師只負(fù)責(zé)宏觀指導(dǎo)和一些條件支持。當(dāng)學(xué)生的選題不符合要求或系統(tǒng)功能設(shè)計(jì)不合理時(shí),教師會立即指出,并幫助他們修改和完善;當(dāng)學(xué)生調(diào)不通程序或程序中有錯(cuò)誤時(shí),教師會向他們介紹調(diào)試方法和查錯(cuò)方法,教會他們調(diào)試程序。對學(xué)習(xí)好、能力強(qiáng)的優(yōu)秀學(xué)生,教師會注重開擴(kuò)他們的思路,啟發(fā)他們的思維,引導(dǎo)他們?nèi)カ@取新知識、去探索新問題,激發(fā)他們的創(chuàng)新欲望,使他們能完成高水平的綜合設(shè)計(jì)。通過綜合設(shè)計(jì),可充分體現(xiàn)以學(xué)生為中心的教學(xué)方法,為學(xué)生自己構(gòu)建、發(fā)展并完善自己的知識體系創(chuàng)造機(jī)會,使學(xué)生具備獲取知識和應(yīng)用知識的能力,激發(fā)學(xué)生的創(chuàng)新精神,培養(yǎng)學(xué)生的團(tuán)隊(duì)精神和協(xié)作能力,全面提高學(xué)生的實(shí)踐能力,從而有效地提高《程序設(shè)計(jì)與計(jì)算機(jī)語言》課程的教學(xué)質(zhì)量。
六、考核評價(jià)體系的改革
我校C語言程序設(shè)計(jì)課程的成績分為理論和實(shí)踐兩個(gè)分?jǐn)?shù),各2個(gè)學(xué)分,兩項(xiàng)成績都合格即可獲得該課程的4個(gè)學(xué)分。其中:
理論課綜合成績(百分制)=平時(shí)(百分制)*(50%)+末考(百分制)*50%;
上機(jī)實(shí)踐綜合成績(百分制)=平時(shí)(百分制)*(60%)+綜合設(shè)計(jì)(百分制)*40%;
理論成績由平時(shí)成績和末考成績組成。其中:平時(shí)成績由上課考勤、作業(yè)提交、階段性實(shí)驗(yàn)報(bào)告組成,占總成績的50%;末考指的是期末閉卷無紙化考試,末考側(cè)重于基礎(chǔ)知識測試,考核學(xué)生對基本概念的掌握。題型包括:判斷題、選擇題、填空題和編程題,判斷題題型重點(diǎn)考察學(xué)生對基本知識點(diǎn)的掌握程度,選擇題和填空題重點(diǎn)考察學(xué)生對程序的閱讀、理解和分析能力,編程題則重點(diǎn)考察學(xué)生編寫程序的能力。
無紙化考試采用的是我們中心自己研發(fā)的考試系統(tǒng),但該系統(tǒng)存在一點(diǎn)缺陷,就是編程題需要人工閱卷。因此,我們于2012年開設(shè)了一個(gè)試點(diǎn)班,本著提高學(xué)生編程能力的目的出發(fā),從平時(shí)的教學(xué)和最后的考試都試用了哈工大研發(fā)的《C語言編程題自動評分系統(tǒng)》。該系統(tǒng)允許學(xué)生借助于 C編譯系統(tǒng)調(diào)試程序,學(xué)生將自己編寫并調(diào)試過的程序由客戶端提交給服務(wù)器端后,服務(wù)器端立即根據(jù)學(xué)生程序的結(jié)構(gòu)和語義進(jìn)行評分,并將評分返回給客戶端,使學(xué)生在提交程序之后立即看到自己的分?jǐn)?shù)。
上機(jī)實(shí)踐成績則由平時(shí)成績和綜合設(shè)計(jì)成績構(gòu)成。其中:平時(shí)成績由上機(jī)考勤、在線單元測試組成,占總成績的60%;課程最后提交的綜合設(shè)計(jì)則占到了40%。
該考核評價(jià)體系涉及到教學(xué)實(shí)施過程中的每一個(gè)環(huán)節(jié),有利于對學(xué)生進(jìn)行科學(xué)、客觀的評價(jià),從而避免了一張考卷定乾坤帶來的弊病。
該體系在實(shí)施過程中顯現(xiàn)出了其科學(xué)性,但是目前存在的問題就是教師的負(fù)擔(dān)太重。一個(gè)學(xué)生一學(xué)期一般要提交12份報(bào)告,每位教師一般帶兩個(gè)班,每個(gè)班約88位同學(xué),這樣每位教師一個(gè)學(xué)期只報(bào)告一項(xiàng)就要批閱約2000份,工作量太大?,F(xiàn)在正在努力尋求更加合理的解決方法。
七、結(jié)束語
教學(xué)實(shí)踐證明,以上改革措施能夠有效解決我校C語言程序設(shè)計(jì)教學(xué)過程中存在的問題。此教學(xué)模式下,教學(xué)內(nèi)容符合學(xué)生專業(yè)特點(diǎn),能夠滿足理工科專業(yè)學(xué)生對計(jì)算機(jī)技術(shù)的需求;教學(xué)方法行之有效,教學(xué)效果有明顯提高;教學(xué)實(shí)踐方法與措施切實(shí)可行,能夠有效促進(jìn)學(xué)生分析問題解決問題能力、實(shí)踐能力及團(tuán)隊(duì)合作能力等能力的培養(yǎng)與提高。當(dāng)然,該模式仍然存在一些不盡如人意的地方,這就需要我們堅(jiān)持不懈,繼續(xù)努力去改進(jìn)和完善。
項(xiàng)目來源:云南省高校質(zhì)量工程教改項(xiàng)目“Inquiry learning體系在程序設(shè)計(jì)中的運(yùn)用”(云教高[2010]96號)。
[參考文獻(xiàn)]
[1]王剛.CDIO工程教育模式的解讀與思考[J].中國高教研究,2009(5).
[2]謝延紅.C語言程序設(shè)計(jì)公共課教學(xué)模式改革與實(shí)踐[J].計(jì)算機(jī)時(shí)代,2010(12).
[3]馬新.《C語言程序設(shè)計(jì)》課程教學(xué)方法與手段的改革與實(shí)踐[J].科技信息,2010(33).
篇5
[關(guān)鍵詞]C#程序設(shè)計(jì) 教學(xué)改革 項(xiàng)目任務(wù) 情境設(shè)計(jì)
[作者簡介]郭紅艷(1975- ),女,河南新鄉(xiāng)人,河南廣播電視大學(xué),講師,碩士,研究方向?yàn)檐浖こ毯吐殬I(yè)教育;谷保平(1973- ),男,河南周口人,河南廣播電視大學(xué),講師,碩士,研究方向?yàn)榫W(wǎng)絡(luò)安全和數(shù)據(jù)挖掘。(河南 鄭州 450046)
[基金項(xiàng)目]本文系2013年度河南省社科聯(lián)“河南中小企業(yè)信息化發(fā)展現(xiàn)狀與對策研究”(項(xiàng)目編號:SKL-2013-3423)、2013年度河南廣播電視大學(xué)高職科研項(xiàng)目“‘C#程序設(shè)計(jì)’課程改革研究”(項(xiàng)目編號:GZYB2013027)階段性研究成果。
[中圖分類號]G642.3 [文獻(xiàn)標(biāo)識碼]A [文章編號]1004-3985(2013)32-0152-02
一、背景及意義
C#語言是Microsoft公司2000年6月的面向?qū)ο蟪绦蛟O(shè)計(jì)語言,經(jīng)過十幾年的普及發(fā)展,在計(jì)算機(jī)專業(yè)課程中逐漸取代了傳統(tǒng)的C++語言。對于應(yīng)用程序開發(fā)人員而言,C#語言吸收了C++和Java等語言的經(jīng)驗(yàn)和教訓(xùn),是最成熟的面向?qū)ο蟪绦蛟O(shè)計(jì)語言。該語言以其特有的面向?qū)ο蟆㈩愋桶踩?、組件技術(shù)、自動內(nèi)存管理等優(yōu)點(diǎn),越來越受到應(yīng)用程序開發(fā)人員的喜愛。“C#程序設(shè)計(jì)”作為學(xué)院多媒體專業(yè)比較核心的基礎(chǔ)職業(yè)課程,是學(xué)生接觸最早的編程語言。由于高職學(xué)生的整體素質(zhì)下降,加上程序設(shè)計(jì)的抽象性和C#的面向?qū)ο筇卣?,以學(xué)科系統(tǒng)知識和理論原理為導(dǎo)向、以知識為目標(biāo)、以教師為主體、以應(yīng)試為基礎(chǔ)的教學(xué)模式越來越不能適應(yīng)高職院校的教學(xué)要求,如何進(jìn)行教學(xué)改革,激發(fā)學(xué)生的學(xué)習(xí)興趣,提高學(xué)生的學(xué)習(xí)主動性,使學(xué)生在學(xué)習(xí)中建立真正的自信心,進(jìn)而掌握C#程序設(shè)計(jì)語言并能綜合運(yùn)用,是高職課程改革中必須面對并解決的關(guān)鍵問題。
高等職業(yè)教育是“以就業(yè)為導(dǎo)向,以應(yīng)用為宗旨,以能力為本位”的一種高等教育類型,目標(biāo)是培養(yǎng)實(shí)踐能力強(qiáng)、具有良好職業(yè)道德,面向生產(chǎn)、建設(shè)、管理和服務(wù)第一線崗位的高素質(zhì)技能型人才。高職教育的社會定位是培養(yǎng)技術(shù)應(yīng)用型(職業(yè)技術(shù))人才,畢業(yè)生應(yīng)主要從事生產(chǎn)、工藝、建設(shè)等工作,最需要的是“做事”的能力、知識應(yīng)用的能力,還需要具備各項(xiàng)專業(yè)技術(shù)能力。根據(jù)高職教育的培養(yǎng)目標(biāo)和社會定位,本文主要研究“C#程序設(shè)計(jì)”課程改革,探索在職業(yè)基礎(chǔ)課程如何進(jìn)行基于工作過程的課程設(shè)計(jì)和實(shí)施。
二、“C#程序設(shè)計(jì)”課程改革的現(xiàn)狀
基于工作過程的課程設(shè)計(jì)與開發(fā),強(qiáng)調(diào)為學(xué)生的職業(yè)生涯發(fā)展培養(yǎng)其綜合職業(yè)能力。課程建設(shè)的出發(fā)點(diǎn)、落腳點(diǎn)及實(shí)施都是工作過程。所謂工作過程是在企業(yè)里為完成一件工作任務(wù)并獲得工作成果而進(jìn)行的一個(gè)完整的工作程序。因此,在課程的知識體系框架內(nèi),通過構(gòu)建合適的學(xué)習(xí)情境,以職業(yè)活動的工作過程為依據(jù),改造課程的內(nèi)容和順序。通過項(xiàng)目的實(shí)現(xiàn),使學(xué)生獲得直接經(jīng)驗(yàn),實(shí)現(xiàn)由知識的認(rèn)識,到知識的重組,再到知識的遷移,最終實(shí)現(xiàn)知識的應(yīng)用。目前,學(xué)院多媒體技術(shù)專業(yè)已經(jīng)有了一些基于工作過程的課程改革成功案例,但大都是綜合應(yīng)用類的課程,對于“C#程序設(shè)計(jì)”這種基礎(chǔ)語言類課程來說,基于工作過程的課程設(shè)計(jì)與開發(fā)研究尚處起始階段。
在“C#程序設(shè)計(jì)”教學(xué)中,項(xiàng)目化教學(xué)已成為目前主要采用的課程模式,但在實(shí)踐層面上還存在諸多問題。一是項(xiàng)目來源和內(nèi)容的簡單化及隨意性。高職課程中的項(xiàng)目應(yīng)盡可能取材于企業(yè),但由于企業(yè)實(shí)際項(xiàng)目比較復(fù)雜,不符合課程教學(xué)要求,很難全面覆蓋課程的全部知識點(diǎn),實(shí)際操作起來比較困難。由于上述因素,在教學(xué)中使用的所謂項(xiàng)目基本還是原來例題、習(xí)題、案例的簡單改造,或者是學(xué)科體系中一些驗(yàn)證性實(shí)驗(yàn)簡單變換一下拿來用于項(xiàng)目化教學(xué),更有甚者,一些項(xiàng)目化教材的目錄就是原來的章節(jié)目錄。通過這種方式開發(fā)項(xiàng)目化課程和教材失去了“高職教育中的項(xiàng)目課程應(yīng)該是一種基于工作任務(wù)的項(xiàng)目課程”的根本意義。二是項(xiàng)目間缺乏有效提高學(xué)生能力的關(guān)聯(lián)度。項(xiàng)目的關(guān)聯(lián)不僅體現(xiàn)著知識的分配和覆蓋,還反映了能力的遷移和提高。目前教學(xué)過程中使用的項(xiàng)目大部分是獨(dú)立的,沒有相關(guān)性和遞進(jìn)性。學(xué)生可以完成工作過程中的孤立項(xiàng)目,卻不能獨(dú)立完成整個(gè)工作。究其原因,主要是訓(xùn)練項(xiàng)目間沒有關(guān)聯(lián),造成了知識缺失和遺漏,不能覆蓋工作領(lǐng)域需要的全部知識,使得學(xué)生在解決實(shí)際問題時(shí)缺少完整的知識體系支撐。
三、基于工作過程的課程改革實(shí)踐
1.確定課程教學(xué)目標(biāo)。“C#程序設(shè)計(jì)”是多媒體技術(shù)專業(yè)開設(shè)的職業(yè)基礎(chǔ)課程,是學(xué)生進(jìn)一步學(xué)習(xí)專業(yè)課程的基礎(chǔ)。經(jīng)過專業(yè)調(diào)研,對社會需求進(jìn)行分析,并結(jié)合現(xiàn)有師資條件,確定專業(yè)目標(biāo)崗位是面向中小微企業(yè)的Flas設(shè)計(jì)員和網(wǎng)站開發(fā)后臺程序員,課程體系以Flash系列課程為主線,結(jié)合網(wǎng)站設(shè)計(jì)和動態(tài)網(wǎng)站開發(fā)相關(guān)課程?!癈#程序設(shè)計(jì)”是學(xué)習(xí)Flash編程等課程的基礎(chǔ)課程。根據(jù)專業(yè)目標(biāo)崗位,通過與公司開發(fā)經(jīng)理、項(xiàng)目主管、程序設(shè)計(jì)人員、測試人員交流,共同研究應(yīng)用程序開發(fā)人員的工作流程和任務(wù),通過歸納和提煉,制定就業(yè)崗位的典型工作任務(wù),并依據(jù)典型工作任務(wù)確定課程的學(xué)習(xí)目標(biāo)。通過課程學(xué)習(xí),使學(xué)生掌握面向?qū)ο蟪绦蛟O(shè)計(jì)思想,C#程序開發(fā)環(huán)境Visual Studio 2008,程序設(shè)計(jì)的基本步驟和調(diào)試方法,并在學(xué)習(xí)實(shí)踐的基礎(chǔ)上了解計(jì)算機(jī)軟件開發(fā)的一般過程,理解計(jì)算機(jī)解決問題的基本思想,能獨(dú)立設(shè)計(jì)簡單的Windows應(yīng)用程序,能協(xié)作完成比較完整的小型應(yīng)用程序,能根據(jù)實(shí)際要求解決較為簡單、具體的問題,并具備觀察分析問題的能力和解決問題的能力。
2.基于工作過程的“C#程序設(shè)計(jì)”課程設(shè)計(jì)。根據(jù)典型工作任務(wù),“C#程序設(shè)計(jì)”為第一級學(xué)習(xí)領(lǐng)域,其學(xué)習(xí)效果直接影響后續(xù)課程。按照高職課程改造的三項(xiàng)重要原則:課程必須突出能力目標(biāo),以項(xiàng)目任務(wù)為教學(xué)內(nèi)容的主要載體,用項(xiàng)目和任務(wù)訓(xùn)練學(xué)生的能力,學(xué)生是課程教學(xué)的主體。在課程的設(shè)計(jì)過程中,圍繞能力目標(biāo),以工作過程為導(dǎo)向,通過專業(yè)教師與行業(yè)專家一起對課程進(jìn)行深入細(xì)致系統(tǒng)分析,最終確定“學(xué)生信息管理系統(tǒng)”為課程的貫穿綜合訓(xùn)練項(xiàng)目。在項(xiàng)目實(shí)現(xiàn)過程中,利用面向?qū)ο蟮乃枷耄ㄟ^設(shè)計(jì)學(xué)生類,實(shí)現(xiàn)學(xué)生數(shù)據(jù)的添加、刪除、修改以及查找操作,程序的界面設(shè)計(jì)等任務(wù),培養(yǎng)學(xué)生程序設(shè)計(jì)能力??紤]到知識的全面覆蓋和反復(fù)訓(xùn)練的需要,還增加了若干實(shí)用小程序(如貸款計(jì)算器)和趣味小游戲(如掃雷游戲)等作為能力訓(xùn)練的補(bǔ)充項(xiàng)目。這些項(xiàng)目任務(wù)是以應(yīng)用程序開發(fā)過程中必須使用的基礎(chǔ)知識、專業(yè)技能、職業(yè)素養(yǎng)等要求為依據(jù)選擇和設(shè)計(jì)的。每個(gè)訓(xùn)練任務(wù)的實(shí)現(xiàn)都按應(yīng)用程序的開發(fā)過程進(jìn)行設(shè)計(jì),項(xiàng)目盡可能地真正實(shí)施,并對項(xiàng)目效果進(jìn)行客觀檢驗(yàn)。項(xiàng)目的開展遵循從簡單到復(fù)雜、從感性到理性、從具體到抽象的原則,通過項(xiàng)目把理論知識與實(shí)踐能力進(jìn)行整合,實(shí)現(xiàn)理、實(shí)一體化的教學(xué)模式。
3.基于工作過程的“C#程序設(shè)計(jì)”課程實(shí)施。在教學(xué)過程中,教師在講解每個(gè)知識點(diǎn)前,通過學(xué)習(xí)情境將任務(wù)交給學(xué)生,教師提出任務(wù)設(shè)想,由學(xué)生討論,并最終確定項(xiàng)目任務(wù)的功能。該任務(wù)應(yīng)該是學(xué)生現(xiàn)實(shí)生活中的遇到的具體問題,而不應(yīng)該太抽象,這樣就可以讓學(xué)生帶著疑問聽課,激發(fā)學(xué)生學(xué)習(xí)的興趣。如在學(xué)習(xí)結(jié)構(gòu)化程序設(shè)計(jì)語句時(shí),引入中央電視臺綜藝節(jié)目的“看商品,猜價(jià)格”學(xué)習(xí)情境,由老師提出任務(wù),要求通過學(xué)習(xí),學(xué)生能夠自主開發(fā)出一個(gè)“看商品,猜價(jià)格”的游戲小程序。通過討論分析程序?qū)崿F(xiàn)的過程,引導(dǎo)學(xué)生逐步學(xué)習(xí)并使用程序設(shè)計(jì)中的選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。學(xué)生通過信息收集整理、方案設(shè)計(jì)實(shí)施檢驗(yàn)評價(jià)等一系列過程逐步實(shí)現(xiàn)項(xiàng)目任務(wù),并在直接感知、動手操作中掌握了理論知識,培養(yǎng)了職業(yè)技能。
下面以“學(xué)生信息管理系統(tǒng)”項(xiàng)目的實(shí)現(xiàn)來說明基于工作過程的課程實(shí)施過程:教師通過學(xué)習(xí)情境引出項(xiàng)目的任務(wù)和工作,給學(xué)生下發(fā)任務(wù),簡要介紹任務(wù)中需要學(xué)生掌握的新知識點(diǎn),然后由學(xué)生在教師的引導(dǎo)下逐步實(shí)現(xiàn)任務(wù)。項(xiàng)目實(shí)現(xiàn)過程中,學(xué)生自由結(jié)合,分成3~4人的項(xiàng)目小組,推選出項(xiàng)目組長,小組成員分工協(xié)作,共同完成項(xiàng)目。經(jīng)過項(xiàng)目小組討論,確定系統(tǒng)應(yīng)實(shí)現(xiàn)以下功能:學(xué)生信息及成績輸入;存儲每個(gè)學(xué)生信息及各科成績;計(jì)算每個(gè)學(xué)生的總分和平均分;修改或刪除某個(gè)學(xué)生的信息;按學(xué)號或姓名查詢學(xué)生成績;對指定的成績進(jìn)行排序;自動提示不及格考生參加補(bǔ)考或重修。在任務(wù)的實(shí)現(xiàn)過程中,把任務(wù)按照應(yīng)用程序開發(fā)規(guī)律,分解成若干相對獨(dú)立小任務(wù),如基本類的設(shè)計(jì)、UI設(shè)計(jì)等,并把C#的知識內(nèi)容進(jìn)行重組,融入每個(gè)具體的任務(wù)中,由小組成員協(xié)作完成,每個(gè)學(xué)生都承擔(dān)不同的任務(wù)。對于學(xué)生來說,每人只是完成1~2個(gè)模塊的設(shè)計(jì),較易實(shí)現(xiàn)。通過項(xiàng)目組成員相互交換工作任務(wù),每個(gè)成員輪流完成所有任務(wù)模塊,反復(fù)訓(xùn)練,從而達(dá)到多次“換崗”的要求,使每個(gè)學(xué)生都能體驗(yàn)工作全過程。采用這種方式,在進(jìn)行一輪實(shí)訓(xùn)后小組成員間、小組與小組間可以相互幫助,解決了指導(dǎo)老師難以兼顧所有學(xué)生的問題。
在授課形式上,傳統(tǒng)的課堂是教師的獨(dú)角戲,老師在上面講,學(xué)生在下面機(jī)械聽課。到了實(shí)訓(xùn)環(huán)節(jié),大部分學(xué)生無從下手,上課效果極差。根據(jù)課程特點(diǎn),結(jié)合學(xué)院實(shí)際情況,在實(shí)訓(xùn)室授課教學(xué)效果良好。實(shí)訓(xùn)室集計(jì)算機(jī)、多媒體教學(xué)設(shè)備為一體,并安裝了電子教室軟件的教學(xué)環(huán)境。授課過程中,通過投影和屏幕廣播,學(xué)生能清晰地看到老師的操作過程,并能根據(jù)老師的指導(dǎo)及時(shí)進(jìn)行實(shí)際操作。在任務(wù)實(shí)現(xiàn)的過程中,老師邊講邊讓學(xué)生練習(xí),可以隨時(shí)提問學(xué)生或指定學(xué)生演示,并將演示過程進(jìn)行屏幕廣播,遇到學(xué)生共性的問題,老師可以引導(dǎo)學(xué)生討論,共同解決問題。這些教學(xué)手段的使用,充分地把“教、學(xué)、做”融為一體,實(shí)現(xiàn)了做中學(xué),邊做邊練能力,邊做邊學(xué)知識,強(qiáng)化了學(xué)生的實(shí)踐動手能力。
在課程考試方式上,應(yīng)該采取過程性考核與期末考試相結(jié)合的考核方法,加強(qiáng)項(xiàng)目考核的比例。根據(jù)學(xué)生是教學(xué)主體的原則,老師在任務(wù)的實(shí)現(xiàn)過程中的主要作用是提出任務(wù)、遇到問題時(shí)及時(shí)指導(dǎo)學(xué)生,而學(xué)生是項(xiàng)目的設(shè)計(jì)實(shí)施者。項(xiàng)目完成后,由各個(gè)項(xiàng)目組公開展示成果,按組答辯并提交相關(guān)文檔和程序,教師和全體學(xué)生公開對小組項(xiàng)目進(jìn)行評估,具體的評分細(xì)則包括小組成績(小組成績?yōu)榻處煷蚍终?0分,其他組平均分占30分,小組自評分占10分)和學(xué)生個(gè)人成績(個(gè)人成績=小組成績×(個(gè)人組內(nèi)得分/組內(nèi)所有人平均得分)),其中個(gè)人組內(nèi)得分由項(xiàng)目組長組織評分,小組成員背靠背相互打分,取平均分。這種考核方式把課程考核落實(shí)在學(xué)生學(xué)習(xí)的過程中,突出能力目標(biāo),重點(diǎn)考查學(xué)生解決問題的能力,動手實(shí)踐能力和協(xié)作能力,激發(fā)了學(xué)生的學(xué)習(xí)興趣,提高了學(xué)習(xí)主動性和積極性。
四、結(jié)束語
基于工作過程的“C#程序設(shè)計(jì)”教學(xué)改革,通過設(shè)計(jì)合適的學(xué)習(xí)情境,引導(dǎo)學(xué)生動手動腦,提高了學(xué)生的學(xué)習(xí)興趣和學(xué)習(xí)主動性。通過項(xiàng)目任務(wù)訓(xùn)練,學(xué)生對就業(yè)崗位要求的專業(yè)知識、職業(yè)技能和職業(yè)素養(yǎng)都有了初步認(rèn)識,項(xiàng)目的實(shí)現(xiàn)過程也使學(xué)生的實(shí)踐技能得以提升,為今后就業(yè)奠定了扎實(shí)基礎(chǔ)。
[參考文獻(xiàn)]
[1]姜大源.職業(yè)教育學(xué)研究新論[M].北京:教育科學(xué)出版社,2007.
[2]戴士弘.職業(yè)教育課程教學(xué)改革[M].北京:清華大學(xué)出版社,2007
篇6
【關(guān)鍵詞】程序設(shè)計(jì)課程 教學(xué)方案 能力培養(yǎng)
【中圖分類號】G642 【文獻(xiàn)標(biāo)識碼】A 【文章編號】1006-9682(2012)06-0010-03
程序設(shè)計(jì)類課程是計(jì)算機(jī)科學(xué)與技術(shù)及相關(guān)專業(yè)的基礎(chǔ)課程,在計(jì)算機(jī)專業(yè)課程體系建設(shè)中占有十分重要的地位。目前大部分高校在程序設(shè)計(jì)教學(xué)中多采用傳統(tǒng)的講授法和系統(tǒng)的學(xué)習(xí),同時(shí)結(jié)合一些上機(jī)實(shí)踐操作來鞏固和熟悉課堂上所講的一些知識點(diǎn),但對于計(jì)算機(jī)程序設(shè)計(jì)課程而言,其特點(diǎn)是更新更快、內(nèi)容多、課時(shí)少。所以,在授課內(nèi)容處理上既要講授大量的基礎(chǔ)知識、基本概念,而且還要講授具體的應(yīng)用甚至操作,要讓學(xué)生掌握計(jì)算機(jī)的應(yīng)用能力;既不能拋棄傳統(tǒng)的、經(jīng)典的內(nèi)容,又要介紹當(dāng)前最新的成果。傳統(tǒng)的系統(tǒng)學(xué)習(xí)和講授有許多缺點(diǎn),它偏重知識的灌輸,重理論輕實(shí)踐,以教師為中心,以單項(xiàng)講授為主,是式的學(xué)習(xí)方法,培養(yǎng)出的學(xué)生實(shí)踐能力不強(qiáng),不能滿足當(dāng)前社會對人才的需要。[2~4]教育的目標(biāo)是培養(yǎng)、提高學(xué)生的科學(xué)素質(zhì),科學(xué)素質(zhì)教育的核心是培養(yǎng)學(xué)生的實(shí)際動手能力與創(chuàng)新精神。[5]所以,我們提倡把程序設(shè)計(jì)課程的重點(diǎn)放在學(xué)生的能力培養(yǎng)上,即如何從計(jì)算機(jī)解決實(shí)際問題的角度,以解決實(shí)際問題的程序設(shè)計(jì)思想作為切入點(diǎn)進(jìn)行教學(xué),培養(yǎng)學(xué)生具有利用軟件開發(fā)環(huán)境解決實(shí)際問題的能力。
在上述教學(xué)理念的指導(dǎo)之下,為了使程序設(shè)計(jì)課程達(dá)到上述的目標(biāo),提出以下教學(xué)方案,包括課程設(shè)置、教學(xué)內(nèi)容與教材建設(shè)、教學(xué)方法、教學(xué)手段等。
一、課程設(shè)置
在課程設(shè)置上,我們應(yīng)采用《程序設(shè)計(jì)基礎(chǔ)C++》+可視化開發(fā)環(huán)境介紹的方式,并配備集中課程實(shí)踐的方式。通過《程序設(shè)計(jì)基礎(chǔ)C++》的學(xué)習(xí),學(xué)生可以掌握基本的編程技能,但不能具備利用軟件開發(fā)工具進(jìn)行高級編程的能力,不能滿足社會對計(jì)算機(jī)專業(yè)學(xué)生的編程要求,甚至出現(xiàn)大四畢業(yè)生連一門開發(fā)工具都不掌握的情況。通過這兩門課程的學(xué)習(xí),學(xué)生能較深入全面地掌握程序設(shè)計(jì)的思想和技能,并可以使用軟件開發(fā)工具進(jìn)行高級編程。
學(xué)習(xí)程序設(shè)計(jì)的目標(biāo)是利用計(jì)算機(jī)這個(gè)智力工具來分析和解決問題,對現(xiàn)實(shí)問題進(jìn)行建模并編程解決的能力的培養(yǎng)是程序設(shè)計(jì)類課程的首要任務(wù)。知識、能力和素養(yǎng)三者具有辯證關(guān)系,一個(gè)具有較強(qiáng)能力和良好素養(yǎng)的人,必須掌握豐富的知識。程序設(shè)計(jì)基礎(chǔ)領(lǐng)域的知識是由程序設(shè)計(jì)的基本概念和程序設(shè)計(jì)藝術(shù)(技巧)組成的,要掌握這些基本概念和設(shè)計(jì)藝術(shù),必須立足于理性化的學(xué)習(xí)和理性化的實(shí)踐。能力是技能化的知識,是知識的綜合體現(xiàn),程序設(shè)計(jì)能力的培養(yǎng)必須通過動手實(shí)踐來培養(yǎng),同時(shí)程序設(shè)計(jì)需要以扎實(shí)的理論基礎(chǔ)、學(xué)科方法以及思維方法來指導(dǎo)實(shí)踐。為此,程序設(shè)計(jì)的課程應(yīng)在加強(qiáng)課堂教學(xué)的同時(shí),更注重上機(jī)實(shí)踐環(huán)節(jié),學(xué)生通過上課掌握了豐富的知識,通過實(shí)踐鍛煉了個(gè)人能力,與此同時(shí)個(gè)人素養(yǎng)也得到提高。[1] 程序設(shè)計(jì)基礎(chǔ)C++的語法和語義介紹以及開發(fā)工具的介紹,可以幫助學(xué)生掌握基本的程序設(shè)計(jì)概念,只有通過兩門課程大量的上機(jī)實(shí)踐才能幫助學(xué)生把所學(xué)的理論知識用于解決實(shí)際問題,促進(jìn)學(xué)生程序設(shè)計(jì)能力的提高。以我校為例,程序設(shè)計(jì)基礎(chǔ)共96學(xué)時(shí)(60學(xué)時(shí)課堂教學(xué)+36學(xué)時(shí)上機(jī)實(shí)驗(yàn)),在大一開設(shè),課程結(jié)束后緊接著是兩周的程序設(shè)計(jì)課程設(shè)計(jì)。目前該課程實(shí)踐教學(xué)環(huán)節(jié)由兩部分組成:與課堂教學(xué)同步安排的實(shí)驗(yàn)上機(jī)和集中安排的課程設(shè)計(jì)。實(shí)驗(yàn)上機(jī)注重學(xué)生理解和消化課堂講授的知識,偏重于如何編寫功能單一的“小”算法,局限于一個(gè)或兩個(gè)知識點(diǎn),運(yùn)用這些知識解決一些具體的算法設(shè)計(jì)問題,培養(yǎng)學(xué)生的動手能力,并培養(yǎng)良好的程序設(shè)計(jì)風(fēng)格。課程設(shè)計(jì)是軟件設(shè)計(jì)的綜合訓(xùn)練,包括問題分析、總體結(jié)構(gòu)設(shè)計(jì)、用戶界面設(shè)計(jì)、程序設(shè)計(jì)基本技能和技巧,多人合作,以至一整套軟件工作規(guī)范的訓(xùn)練和科學(xué)作風(fēng)的培養(yǎng),對學(xué)生的一種全面綜合訓(xùn)練,是與課堂聽講、自學(xué)和練習(xí)相輔相成的、必不可少的一個(gè)教學(xué)環(huán)節(jié)。但是,課程設(shè)計(jì)的效果不盡人意,絕大部分同學(xué)只是在DOS環(huán)境下實(shí)現(xiàn)了一個(gè)算法,演示效果缺乏美觀,盡管我們一再要求學(xué)生自學(xué)可視化開發(fā)工具如Visual C++,但是只有極少數(shù)同學(xué)進(jìn)行這項(xiàng)工作,很多同學(xué)反映,看不懂,太難了。所以,根據(jù)實(shí)際教學(xué)經(jīng)驗(yàn),應(yīng)該開設(shè)可視化開發(fā)環(huán)境介紹這門課,幫助學(xué)生掌握一門實(shí)際的開發(fā)工具。學(xué)習(xí)完這門課以后,開設(shè)課程設(shè)計(jì),這樣,在課程設(shè)計(jì)階段綜合運(yùn)用所學(xué)知識,提高學(xué)生用軟件開發(fā)環(huán)境解決實(shí)際問題的能力。
二、教學(xué)內(nèi)容與教材建設(shè)
教學(xué)內(nèi)容的組織與實(shí)施是程序設(shè)計(jì)課程改革的重要內(nèi)容。教學(xué)內(nèi)容在組織上應(yīng)該與時(shí)俱進(jìn),不與實(shí)際的程序設(shè)計(jì)發(fā)展脫節(jié),比如,STL(Standard Template Library),即標(biāo)準(zhǔn)模板庫,是一個(gè)具有工業(yè)強(qiáng)度的,高效的C++程序庫。它被容納于C++標(biāo)準(zhǔn)程序庫(C++ Standard Library)中,是ANSI/ISO C++標(biāo)準(zhǔn)中最新的也是極具革命性的一部分。應(yīng)該作為程序設(shè)計(jì)課程的必不可少的組成部分,程序設(shè)計(jì)內(nèi)容體系結(jié)構(gòu)應(yīng)分為三個(gè)部分:第一部分簡述程序設(shè)計(jì)的基本概念和思想,以C++語言面向語法和語義為背景,講述一般程序設(shè)計(jì)語言所具有的基本內(nèi)容:數(shù)據(jù)(類型)、操作、程序控制結(jié)構(gòu)、數(shù)據(jù)控制,這部分內(nèi)容重點(diǎn)介紹如何進(jìn)行結(jié)構(gòu)化程序設(shè)計(jì)及計(jì)算機(jī)解題的思路和方法,使學(xué)生理解算法結(jié)構(gòu)與解題過程,同時(shí)掌握程序調(diào)試與測試的初步技術(shù)。第二部分以C++面向?qū)ο髾C(jī)制為背景,介紹面向?qū)ο蟮幕靖拍睿侯悺ο?、消息、方法、封裝、繼承、多態(tài),使學(xué)生初步掌握面向?qū)ο蟪绦蛟O(shè)計(jì)開發(fā)技術(shù)的基本方法,為后繼課程打下基礎(chǔ)。第二部分以標(biāo)準(zhǔn)模板庫和Visual C++開發(fā)工具為背景,介紹容器、算法、迭代子、開發(fā)環(huán)境、MFC、視圖等知識,使學(xué)生進(jìn)一步掌握面向?qū)ο蟮某绦蛟O(shè)計(jì)方法,以及用高效的工具進(jìn)行軟件開發(fā)的能力。
教材的質(zhì)量直接影響教學(xué)的質(zhì)量,以注重學(xué)生的程序設(shè)計(jì)思想和能力的培養(yǎng)為指導(dǎo),組織編寫具有特色的、高水平的教材。此外,隨著教育信息化進(jìn)程的推進(jìn),僅提供一本平面紙質(zhì)教材,已無法滿足高校的教學(xué)需求。為了教學(xué)的需要,我們給學(xué)生提供了立體化的教材,主要包括:主教材、學(xué)習(xí)指導(dǎo)書(實(shí)驗(yàn)和課程設(shè)計(jì)指導(dǎo)書)、主要參考書目、電子教案、多媒體課件、習(xí)題庫和試題庫等。這些資料,學(xué)生都可以通過網(wǎng)站獲得。
三、教學(xué)方法
教學(xué)方法是程序設(shè)計(jì)教學(xué)的核心,有了合理的課程設(shè)置和教學(xué)內(nèi)容,把程序設(shè)計(jì)的知識傳授給學(xué)生,這是決定教學(xué)成功與否的關(guān)鍵因素。
在目前普遍采用的教育模式中,學(xué)生處于一種較單純的接受式學(xué)習(xí)方式中,學(xué)生所學(xué)知識,基本上是由教師以定論的形式傳授給學(xué)生的,學(xué)生不需要進(jìn)行獨(dú)立發(fā)現(xiàn),而只需接受或理解。教師則更多注重知識的傳授,重視教學(xué)內(nèi)容的選擇和講授的技巧和方法的研究,而往往不重視對學(xué)生的自主學(xué)習(xí)能力和創(chuàng)新思維的培養(yǎng)。因此,在對傳統(tǒng)教學(xué)方法分析的基礎(chǔ)上,繼續(xù)保持傳教法研究的優(yōu)勢,改變以教師為中心的狀況,注重學(xué)生多方面的能力和素質(zhì)的培養(yǎng),特別要重視學(xué)生思維能力、思維方法和創(chuàng)新能力的培養(yǎng),應(yīng)采用探究式教學(xué)方法。
1.采用探究式教學(xué)培養(yǎng)學(xué)生的創(chuàng)新能力
“探究式教學(xué)”,是指教學(xué)過程在教師的啟發(fā)誘導(dǎo)下,以學(xué)生自主學(xué)習(xí)和合作討論為基礎(chǔ),為學(xué)生提供充分自由表達(dá)、質(zhì)疑、探究、討論問題的機(jī)會,讓學(xué)生通過個(gè)人、小組、集體等多種解難釋疑嘗試活動,將所學(xué)知識應(yīng)用于解決實(shí)際問題的一種教學(xué)形式,[6]探究式教學(xué)方法通過“探究—創(chuàng)新”的過程,在培養(yǎng)創(chuàng)新型人才上起了明顯的作用,強(qiáng)調(diào)通過在教師引導(dǎo)下的學(xué)生自主或合作進(jìn)行探索而獲得知識,特別適宜于思維能力的鍛煉和自主學(xué)習(xí)能力和團(tuán)隊(duì)合作精神的培養(yǎng),它在啟發(fā)和培養(yǎng)學(xué)生創(chuàng)新能力方面呈現(xiàn)著明顯的優(yōu)點(diǎn),受到教育學(xué)界的重視并得到了逐步推廣。
2.采用案例教學(xué)法提高學(xué)生的興趣
案例教學(xué)法(Case Method),在1870年由哈佛法學(xué)院院長藍(lán)德爾(C.C.Langdell)首倡,案例教學(xué)法已被大學(xué)很多專業(yè)及中小學(xué)教學(xué)廣泛應(yīng)用。它是培養(yǎng)和提高學(xué)習(xí)者知識能力的一種教學(xué)方法,即將已經(jīng)發(fā)生或?qū)砜赡馨l(fā)生的問題作為個(gè)案形式讓學(xué)習(xí)者去分析和研究,并提出各種解決問題的方案,從而提高學(xué)習(xí)者解決實(shí)際問題能力的一種教學(xué)方法。案例教學(xué)法是一種啟發(fā)學(xué)生研究實(shí)際問題,注重學(xué)生智力開發(fā)及能力培養(yǎng)的現(xiàn)代教學(xué)方法,它有著傳統(tǒng)教學(xué)方法所不具備的特殊功能。和傳統(tǒng)的“滿堂灌”、“注入式”教學(xué)法相比,案例教學(xué)側(cè)重實(shí)踐和案例的講解分析,啟迪學(xué)生積極思維,強(qiáng)調(diào)在教學(xué)過程中學(xué)生主動參與,引導(dǎo)學(xué)生動用科學(xué)的理論知識,去分析、歸納、演繹、推理、總結(jié),從而達(dá)到鞏固知識的目的。案例教學(xué)的實(shí)施一般包括三個(gè)步驟,案例的選擇,作為教師可以選擇一些經(jīng)典案例課題,如程序設(shè)計(jì)課程中的“學(xué)生管理系統(tǒng)”案例,接下來是案例教學(xué)的開展。案例教學(xué)的一般流程是教師介紹案例背景給出任務(wù)目標(biāo),學(xué)生開展現(xiàn)場討論提出初步意見,之后就是在教師的指導(dǎo)下不斷討論與實(shí)踐直至最終完成任務(wù)目標(biāo)。案例教學(xué)的最后一步是評價(jià),對學(xué)生提交的案例實(shí)施報(bào)告和案例解決方案根據(jù)案例任務(wù)目標(biāo)進(jìn)行評價(jià),這里案例的評價(jià)通常由教師與學(xué)生共同完成,讓學(xué)生介入評價(jià)更有利于加強(qiáng)學(xué)生對案例的認(rèn)識提高案例教學(xué)效果。古語云:“授人以魚,三餐之需;授人以漁,終生之用?!痹诎咐x擇及實(shí)施階段強(qiáng)調(diào)學(xué)生的自學(xué)能力是非常有必要的。那么如何做到這點(diǎn)呢?首先逐步削弱學(xué)生對老師的依賴,即老師不再是學(xué)生學(xué)習(xí)知識的唯一途徑,告知學(xué)生如何提高各種途徑獲得解決問題的方法是一種很有效的手段。在課堂中經(jīng)常告知學(xué)生獲取知識的三種途徑:互聯(lián)網(wǎng)、書籍或者編程軟件的幫助文檔、他人。其次是對學(xué)生獨(dú)立解決的任何問題給予鼓勵(lì)及肯定,這必將進(jìn)一步促進(jìn)其獨(dú)立解決問題的興趣。最后是在案例中刻意制造一些未學(xué)習(xí)過的問題,促使學(xué)生必須通過各種途徑找到解決方法。[7~8]
3.采用任務(wù)驅(qū)動式教學(xué)法增強(qiáng)學(xué)生的綜合能力
任務(wù)驅(qū)動教學(xué)法是一種建立在建構(gòu)主義教學(xué)理論基礎(chǔ)上的教學(xué)法。所謂任務(wù)驅(qū)動教學(xué)法,就是讓學(xué)生在一個(gè)典型的信息處理“任務(wù)”的驅(qū)動下,展開教學(xué)活動,引導(dǎo)學(xué)生由簡到繁、由易到難、循序漸進(jìn)地完成一系列“任務(wù)”,從而得到清晰的思路、方法和知識的脈絡(luò),在完成“任務(wù)”的過程中,培養(yǎng)分析問題、解決問題以及用計(jì)算機(jī)處理信息的能力,為學(xué)生創(chuàng)造良好的學(xué)習(xí)環(huán)境,讓學(xué)生通過努力,能順利完成每個(gè)具體的任務(wù),掌握學(xué)習(xí)內(nèi)容,獲得成功的體驗(yàn)。任務(wù)驅(qū)動式教學(xué)在形式上是:提出任務(wù)師生共同分析完成任務(wù)的方法和步驟適當(dāng)講解或自學(xué)或協(xié)作學(xué)習(xí)完成任務(wù)實(shí)踐歸納和研討。比如我們在上運(yùn)算符重載時(shí),在沒進(jìn)入主題以前,先給學(xué)生布置一個(gè)任務(wù),實(shí)現(xiàn)兩個(gè)復(fù)數(shù)的運(yùn)算,可能學(xué)生會用以前的知識完成任務(wù),也有的學(xué)生可能會有比較超前的想法,然后通過研討的方式對問題進(jìn)行分析并提出解決方案,最終完成任務(wù),學(xué)生在完成任務(wù)的同時(shí)既學(xué)會了運(yùn)用以前的知識點(diǎn)分析解決問題,又學(xué)會了運(yùn)算符重載這一知識點(diǎn)。采用任務(wù)驅(qū)動教學(xué)法進(jìn)行教學(xué),教師的教和學(xué)生的學(xué)都是圍繞如何完成一個(gè)具體的任務(wù)進(jìn)行。教師教學(xué)思路清晰,學(xué)生學(xué)習(xí)目的明確,學(xué)習(xí)變成了學(xué)生的主動行為,可以充分調(diào)動學(xué)生的主觀能動性,在用的需求下學(xué),學(xué)以致用,更容易掌握學(xué)習(xí)內(nèi)容,增強(qiáng)學(xué)生的綜合能力。[1、7]
四、教學(xué)手段
在教學(xué)手段上,采用多媒體(黑板輔助)+實(shí)驗(yàn)室環(huán)境+網(wǎng)絡(luò)課堂的方式。多媒體教學(xué)已經(jīng)是一種非常重要的教學(xué)手段,但單純使用多媒體進(jìn)行教學(xué),老師的即興發(fā)揮以及與學(xué)生的交互將受到限制,所以,我們采用黑板進(jìn)行輔助的方式。對于識記性的內(nèi)容可以通過多媒體展示,對于理解性的內(nèi)容,為了理清學(xué)生的思路則通過黑板給學(xué)生講解。此外,對于一些例題,我們采用在集成開發(fā)環(huán)境下進(jìn)行現(xiàn)場調(diào)試和制作例題的多媒體動態(tài)演示課件等方法來加深學(xué)生的理解。當(dāng)前,程序設(shè)計(jì)的課堂教學(xué)一般在教室里采用“計(jì)算機(jī)+大屏幕投影”的方式,實(shí)驗(yàn)課在實(shí)驗(yàn)室環(huán)境下人手一機(jī)練習(xí)。該模式缺點(diǎn)是理論與實(shí)踐相脫節(jié)、以教師為中心、束縛學(xué)生的思維,最終直接影響到教學(xué)效果。[9]在實(shí)驗(yàn)室環(huán)境下,老師講課時(shí),鎖住所有的機(jī)器,使學(xué)生機(jī)和教師機(jī)保持同步,在學(xué)生練習(xí)時(shí),再給機(jī)器解鎖,讓學(xué)生自由練習(xí),通過這種方式,邊講邊練,可以通過實(shí)際動手編程加深對新知識的理解。為了使所有的教學(xué)資源能被有效地利用,要建立一個(gè)網(wǎng)絡(luò)輔助教學(xué)環(huán)境,即建立程序設(shè)計(jì)網(wǎng)絡(luò)課堂,將現(xiàn)實(shí)教學(xué)中的課堂教授、作業(yè)、答疑、測試、課程設(shè)計(jì)、討論等全部在網(wǎng)絡(luò)課堂中予以實(shí)現(xiàn),提供課程的教學(xué)大綱、教學(xué)日歷、參考資料等。這樣,為學(xué)生提供了一個(gè)很好的學(xué)習(xí)氛圍。學(xué)生可以進(jìn)入程序設(shè)計(jì)網(wǎng)絡(luò)課堂進(jìn)行在線學(xué)習(xí)、在線討論和答疑、在線測試等。
五、結(jié)束語
總之,程序設(shè)計(jì)是計(jì)算機(jī)專業(yè)的核心課程,合理的課程內(nèi)容設(shè)置配以科學(xué)的教學(xué)方法,充分利用科技發(fā)展帶來的教學(xué)方式的革新,定能促進(jìn)學(xué)生能力的提高,但是,還有很多方面有待進(jìn)一步摸索。
參考文獻(xiàn)
1 楊靜、王浩、胡學(xué)鋼、方寶富、張晶.程序設(shè)計(jì)課程教學(xué)改革探討[J].吉林大學(xué)學(xué)報(bào)(信息科學(xué)版),2005(S2)
2詹自勝.案例教學(xué)法在計(jì)算機(jī)程序設(shè)計(jì)教學(xué)中探索與實(shí)踐. 省略/lunwen/2008/200811/270935.shtml
3 方寶富、王浩、胡學(xué)鋼.機(jī)器人足球賽程序設(shè)計(jì)教學(xué)研究——大學(xué)生創(chuàng)新能力培養(yǎng)實(shí)踐第七屆全國計(jì)算機(jī)系主任論壇論文集[C].北京:清華大學(xué)出版社,2004
4 何炎祥、伍春香.現(xiàn)代教學(xué)理論指導(dǎo)下的“編譯原理”教學(xué)綜合改革[J].計(jì)算機(jī)教育,2005(3)
5 劉傳平.《C++語言程序設(shè)計(jì)》課程教學(xué)改革的探討[J].中國科技信息,2005(11)
6 戴挺、童蔚蘋.探究式教學(xué)法在計(jì)算機(jī)程序設(shè)計(jì)教學(xué)中的應(yīng)用[J].電氣電子教學(xué)學(xué)報(bào),2005(4)
7 崔艷莉、張敏、王重英.淺談“案例+任務(wù)”驅(qū)動教學(xué)法在VB程序設(shè)計(jì)語言教學(xué)中的應(yīng)用[J].中國農(nóng)業(yè)銀行武漢培訓(xùn)學(xué)院學(xué)報(bào),2009(1)
篇7
關(guān)鍵詞:C語言;C++語言;程序設(shè)計(jì)
高校的C族語言教學(xué)總是按照先學(xué)C語言,再學(xué)C++的順序進(jìn)行,這種學(xué)習(xí)順序隨著C++標(biāo)準(zhǔn)的不斷升級改革后變得越來越不適用。早期的C++屬于多面性語言,即可以像C一樣進(jìn)行模塊化的面向過程的編程設(shè)計(jì),也可以像Java一樣進(jìn)行抽象的面向?qū)ο蟪绦蛟O(shè)計(jì)。那時(shí)的教學(xué)者考慮的是學(xué)生應(yīng)當(dāng)從較為便于理解的面向過程的編程思路入門學(xué)習(xí)C語言編程,然后在熟練了面向過程的編程方式后再從C語言延伸到C++,轉(zhuǎn)而學(xué)習(xí)面向?qū)ο蟮某绦蛟O(shè)計(jì)??墒请S著面向?qū)ο蟮某绦蛟O(shè)計(jì)在應(yīng)用市場上占領(lǐng)了絕對的主導(dǎo)地位后,再讓學(xué)生從面向過程著手就等于是浪費(fèi)學(xué)習(xí)時(shí)間。加上C++和C兩門語言的初級語法思想是完全一致的,開設(shè)兩門課程浪費(fèi)了學(xué)時(shí),也耽誤后續(xù)更重要的核心課程的學(xué)習(xí)。
1程序設(shè)計(jì)語言C與C++的比較
1.1C與C++的共性。一般簡要的介紹是把C++當(dāng)作C的加強(qiáng)版,這種認(rèn)知當(dāng)然是錯(cuò)誤的,C++語言的設(shè)計(jì)者在設(shè)計(jì)之初為了保障自家語言會受到開發(fā)者的關(guān)注,所以兼容了的C的語法,這就自然使得C++可以使用C的編程方式進(jìn)行程序設(shè)計(jì),所以也導(dǎo)致了很多人對這兩種語言的關(guān)系產(chǎn)生了錯(cuò)誤的認(rèn)知。同時(shí)由于C語言本身設(shè)定上的優(yōu)越性,所以C++在進(jìn)行自我定義的時(shí)候也沿用了C語言很多優(yōu)良的性質(zhì)?;A(chǔ)數(shù)據(jù)結(jié)構(gòu)一致,C與C++的基礎(chǔ)數(shù)據(jù)類型都是以變量和常量作為基本屬性劃分,類型上有字符型、整型、長整型、單精度浮點(diǎn)型和雙精度浮點(diǎn)型,不過C++額外增設(shè)了布爾型。復(fù)合型數(shù)據(jù)結(jié)構(gòu)上也都同時(shí)具有數(shù)組、多維數(shù)組、結(jié)構(gòu)體、枚舉類型和共同體,但是C++增設(shè)了字符串類型以替代C語言中的字符數(shù)組,功能上更加強(qiáng)大,也更加便捷。在語法方面,聲明、賦值、循環(huán)、選擇的結(jié)構(gòu)和實(shí)現(xiàn)都是一致的,并且C++雖然提倡使用類和對象的概念去設(shè)計(jì)程序結(jié)構(gòu),可也同樣支持函數(shù)體結(jié)構(gòu)的程序設(shè)計(jì)結(jié)構(gòu)。并且C語言中函數(shù)的賦值都是間接調(diào)用,在使用C語言函數(shù)時(shí)總是會在指針上出現(xiàn)各種紕漏,但是C++的函數(shù)體可以使用引用參數(shù),這就使得C++的函數(shù)體比之C的更加好用??偟恼f來就是,C++標(biāo)準(zhǔn)下用戶可以完全使用C語法進(jìn)行編程而不會出現(xiàn)任何BUG,同時(shí)C++自身的優(yōu)越設(shè)定和標(biāo)準(zhǔn)使得其設(shè)計(jì)能力比C要強(qiáng)大數(shù)倍,是目前市場上大型程序開發(fā)的首選語言。
1.2C與C++的不同。上一節(jié)介紹了C++和C的基礎(chǔ)語法上的區(qū)別,這些區(qū)別都是C++的作者在C的基礎(chǔ)之上修訂而來的結(jié)果,是為了讓C++標(biāo)準(zhǔn)下得面向過程的程序設(shè)計(jì)比之單純的C更加便捷方便。但是C++的誕生伊始,就是一門向上使用面對對象的程序設(shè)計(jì)思想的高級編程語言。它的封裝性、繼承性、多態(tài)性和對象唯一性才是C++成為強(qiáng)大高級語言的重要原因,這些特性都是C語言不可能擁有的。所以C能夠?qū)崿F(xiàn)的程序,C++能夠?qū)崿F(xiàn)并且實(shí)現(xiàn)的更為方便,C不能實(shí)現(xiàn)的程序,C++同樣可以實(shí)現(xiàn)。
1.3C++的特色。承接上一節(jié),C++和C之間最大的不同,也是C++自身最值得夸耀的特性,就是面向?qū)ο蟪绦蛟O(shè)計(jì)思想。這種思想使得C++語言設(shè)計(jì)出來的程序,變成了類和對象的有機(jī)結(jié)合,這種結(jié)合的代碼比之面向過程的函數(shù)體架構(gòu)的代碼更加易讀,共同開發(fā)起來容易上手,后續(xù)的維護(hù)者也不用費(fèi)更多的腦筋去理解前人的代碼含義。而類和對象的設(shè)計(jì)思路,使得開發(fā)者合作時(shí)相互之間的工作變的更為獨(dú)立,雙方之間只需要知道對方所寫的類實(shí)現(xiàn)的功能和包含的數(shù)據(jù)就行。這種特性我們稱之為良好的封裝性,開發(fā)者之間不需要去知道對方的代碼是如何實(shí)現(xiàn),甚至在此之上還可以保證良好的代碼健壯性。因?yàn)轭惖囊?,更先進(jìn)的作用域機(jī)制也被引入進(jìn)來,類的書寫者往往會將自己類中的數(shù)據(jù)進(jìn)行嚴(yán)格的作用域限定,防止其他合作者擅自去修改和使用自己類中的數(shù)據(jù)。合作者想要知道類中的數(shù)據(jù)或者使用類中的數(shù)據(jù),只能通過類的書寫者定義的帶有檢查機(jī)制的方法才行。這樣會使得很多人合作開發(fā)的大型項(xiàng)目的穩(wěn)定性和安全性比之用C語言開發(fā)時(shí)再上一個(gè)臺階。同時(shí)類的概念中還有一個(gè)先進(jìn)的設(shè)定就是繼承性,并且由這個(gè)繼承性還延伸出了接口的概念。有了可以繼承的接口和類,那么開發(fā)者在對程序進(jìn)行迭代的瀑布開發(fā)流程時(shí),就可以很好的使用自己曾經(jīng)開發(fā)的源代碼,或者借用其他項(xiàng)目的源代碼,因?yàn)橹灰獙W(xué)會科學(xué)的使用繼承機(jī)制,就不僅僅是節(jié)約程序員的代碼時(shí)間,也減少了程序員在回顧曾經(jīng)代碼時(shí)發(fā)生的錯(cuò)誤和歧義。而與繼承機(jī)制配合使用的是多態(tài)性,曾經(jīng)C語言中定義的函數(shù),其靈活度非常差,特定的函數(shù)只能滿足特定程序定義的需求,想要重用曾經(jīng)的源代碼是幾乎不可能的事情。我們剛才提到的繼承機(jī)制使得C++開發(fā)者復(fù)用源代碼成為了一種習(xí)慣,但是復(fù)用時(shí)不可避免的修改問題又?jǐn)[到了臺面上,多態(tài)機(jī)制順應(yīng)而生了。多態(tài)機(jī)制使得類不僅可以繼承其他類,將父類的數(shù)據(jù)和方法都在本類體中自如的使用,同時(shí)還可以用本類中新的定義和代碼去覆蓋父類中的數(shù)據(jù)定義和方法。這就讓程序員變的更加自由,想用父類的數(shù)據(jù)和方法時(shí)就去繼承,但是不想全部使用時(shí)就加上多態(tài)機(jī)制去覆蓋。這樣代碼之間的重復(fù)利用率變得十分客觀,節(jié)約了大量的開發(fā)時(shí)間和開發(fā)成本。
2程序設(shè)計(jì)語言C與C++開設(shè)建議
C++課程的內(nèi)容應(yīng)當(dāng)如下安排:第一部分,教授C++的基礎(chǔ)語法,讓學(xué)生可以編寫出在DOS命令行下輸入輸出的程序,了解編程的基本概念和思想。并且這時(shí)應(yīng)當(dāng)同時(shí)進(jìn)行C和C++的雙向語法教學(xué),為日后學(xué)生進(jìn)入高年級后的方向選擇打下基礎(chǔ)。此部分使用半個(gè)學(xué)期最為適宜,并且此時(shí)并不灌輸學(xué)生何為面向?qū)ο蠛螢槊嫦蜻^程,而主在讓學(xué)生使用基礎(chǔ)語法進(jìn)行最基本的編程探索。第二部分,在學(xué)生有了基礎(chǔ)編程知識后,將數(shù)據(jù)結(jié)構(gòu)的內(nèi)容放入課程中去,用半學(xué)期的時(shí)間教授學(xué)生用C++實(shí)現(xiàn)的各類常見數(shù)據(jù)結(jié)構(gòu)。并且結(jié)合實(shí)際開發(fā)項(xiàng)目中的代碼作為閱讀補(bǔ)充,讓學(xué)生明白數(shù)據(jù)結(jié)構(gòu)的知識對程序開發(fā)的意義,然后將簡化后的小項(xiàng)目作為課堂的主要內(nèi)容,用實(shí)際的代碼讓學(xué)生去理解那些枯燥的數(shù)學(xué)定理和概念。而且在實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)的過程中,必然會面對一些更為高級的C++語法和概念??偟膩碚f,用大一上的一個(gè)學(xué)期讓學(xué)生對于基礎(chǔ)編程有了良好的認(rèn)知和深入,是十分值得和有效的。第三部分,在學(xué)生有了數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)和C++的基本語法掌握后,應(yīng)當(dāng)面對一些實(shí)際的開發(fā)項(xiàng)目和問題。當(dāng)然實(shí)際的問題還是需要老師進(jìn)行簡化,其主要目的是讓學(xué)生掌握C++的高級特性和實(shí)際軟件開發(fā)的過程與思路,并且想學(xué)生傳授基礎(chǔ)的算法。這一部分較為困難,應(yīng)當(dāng)使用一個(gè)學(xué)期讓學(xué)生慢慢的掌握和熟悉。第四部分,在學(xué)生算是對C++語言和數(shù)據(jù)結(jié)構(gòu)與算法都有了基礎(chǔ)的入門后,再進(jìn)行課堂教學(xué)意義就不大了,應(yīng)當(dāng)再大二上學(xué)期開設(shè)一門課程設(shè)計(jì)實(shí)驗(yàn)課,讓學(xué)生完成幾個(gè)難度從小到大的項(xiàng)目,循序漸進(jìn)的掌握基本的實(shí)際開發(fā)技巧和思維。
參考文獻(xiàn)
[1]羅莉.計(jì)算機(jī)程序設(shè)計(jì)的多應(yīng)用型開發(fā)與實(shí)現(xiàn)[J].產(chǎn)業(yè)與科技論壇,2015(14):54-55.
[2]鄧薇,何锫,錢俊彥,等.深度優(yōu)先的多基因表達(dá)式程序設(shè)計(jì)[J].模式識別與人工智能,2013(9):819-828.
篇8
關(guān)鍵詞: C程序設(shè)計(jì) Ch平臺 交互式 課堂實(shí)效性
高職教育重在職業(yè)能力的培養(yǎng)。目前,高職電子、機(jī)電、電信類大專業(yè),都不同程度地要求學(xué)生具備一定的程序設(shè)計(jì)能力。而程序設(shè)計(jì)能力是培養(yǎng)職業(yè)能力的核心能力之一。C語言作為計(jì)算機(jī)編程入門教學(xué)中應(yīng)用最廣泛的語言之一,已成為各個(gè)高職院校的首選。但是C語言本身的特點(diǎn)決定了它并不是最好的教學(xué)語言。加之高職層次的學(xué)生由于生源的特點(diǎn)所決定,他們英語和數(shù)學(xué)的基礎(chǔ)普通很差,邏輯思維能力有所欠缺。所以在高職這個(gè)層面上C程序設(shè)計(jì)這塊教學(xué)始終是塊硬骨頭。
Ch平臺是程輝教授在美國加州大學(xué)戴維斯分校從事近20年C語言程序設(shè)計(jì)教學(xué)和科研實(shí)踐中,針對C語言的眾多難點(diǎn),積累開發(fā)的一種跨平臺嵌入式C/C++程序解釋器。Ch平臺拋棄了傳統(tǒng)的抽象教學(xué)方式,由面向底層內(nèi)核的交互式命令外殼和教學(xué)專用且界面友好的集成開發(fā)環(huán)境兩大模塊構(gòu)成,從而形成了一種新的C程序設(shè)計(jì)教學(xué)平臺和新的教學(xué)模式。中國科學(xué)院計(jì)算技術(shù)研究所倪光南院士指出,Ch平臺是一個(gè)適合于中國計(jì)算機(jī)程序設(shè)計(jì)教學(xué)的優(yōu)秀平臺。本文就Ch平臺在高職C程序設(shè)計(jì)課的教學(xué)過程中所呈現(xiàn)出的魅力一一描述。
一、Ch平臺開發(fā)環(huán)境比較適合初學(xué)者。
如果一個(gè)開發(fā)環(huán)境非常的龐大和復(fù)雜,這會讓初學(xué)者望而卻步。Ch平臺具有以下特點(diǎn)。
1.體積比較小,方便安裝。它是所有C語言教學(xué)平臺中體積最小的。例如,最新版的Ch不到80MB,而VisualC++有30多GB。并且安裝后可以馬上使用,不用重啟和配置任何文件。
2.操作過程簡單明了。新建項(xiàng)目時(shí)過程簡單,學(xué)生易于上手。在緩沖區(qū)里同時(shí)打開多達(dá)20個(gè)文件,編寫程序時(shí)非常方便;有助于提高編程和調(diào)試效率。如下圖是ChIDE的集成環(huán)境。
3.有專門的使用幫助文件,方便初學(xué)者查找,有利于初學(xué)者入手。
4.界面美觀,具有人性化的設(shè)計(jì)。清晰明了的圖示降低了初學(xué)者學(xué)習(xí)的難度,有全面的快捷鍵說明。各個(gè)功能塊的作用明顯。
5.調(diào)試功能全面。調(diào)試時(shí)控制臺始終保持在最前,不必在代碼界面和調(diào)試控制臺之間頻繁切換。擁有一個(gè)典型的C語言開發(fā)環(huán)境所需要的所有運(yùn)行和調(diào)試功能:可以設(shè)置多個(gè)斷點(diǎn);單步調(diào)試時(shí)的提示清晰明確;單擊錯(cuò)誤提示就可以直接跳轉(zhuǎn)到有錯(cuò)誤的那一行;無需編譯鏈接就可以解釋代碼;在調(diào)試過程中可以更改變量的值,可以觀測任何含有變量的表達(dá)式的值,甚至可以在任何時(shí)候調(diào)用函數(shù)。在學(xué)習(xí)控制結(jié)構(gòu)時(shí),學(xué)生可以改變變量的值,觀察每次不同的分支選擇結(jié)果,以及在什么時(shí)候會進(jìn)入無限循環(huán)。對一個(gè)寫好的程序,也可以通過這個(gè)方式測試其穩(wěn)定性。
如下圖所示是ChIDE的調(diào)試工具欄。
7.強(qiáng)大的Ch命令外殼(Command Shell)。C語言也可以實(shí)現(xiàn)所見即所得,在交互式命令外殼的窗口下,可以清楚地看得到,體會得到C當(dāng)中語句的執(zhí)行過程。如下圖所示,從中可以明明白白地看到交互式的命令外殼的優(yōu)勢。
說明:定義兩個(gè)變量a,b,分別賦值9,7,然后計(jì)算a+b,立刻得到結(jié)果是16,接著再計(jì)算a*2,結(jié)果也立刻得到是18,這就是Ch平臺的交互式的命令外殼功能的體現(xiàn)。Ch平臺的這些優(yōu)勢決定它可以大大降低初學(xué)者學(xué)習(xí)計(jì)算機(jī)程序設(shè)計(jì)的門檻。
二、Ch平臺的交互操作可以提高課堂教學(xué)的實(shí)效性,激發(fā)學(xué)生的學(xué)習(xí)積極性。
教師可以使用這個(gè)平臺,在課堂上開展直觀的程序交互式演示教學(xué),幫助學(xué)生形象化地理解C語言指針、結(jié)構(gòu)體、數(shù)組、編程邏輯、編程調(diào)試等學(xué)習(xí)難點(diǎn),從而提高教學(xué)的實(shí)用性,激發(fā)學(xué)生的學(xué)習(xí)積極性。學(xué)生可以快捷地體驗(yàn)C語言的不同特征,無需進(jìn)行冗長的編譯/鏈接/運(yùn)行/調(diào)試的循環(huán)操作。例如,在講解變量所占字節(jié)數(shù)這個(gè)知識點(diǎn)時(shí),可以利用Ch平臺的交互功能,使得講授變得簡單易懂,形象生動。如下圖所示。
Inta,b定義兩個(gè)整型變量,然后用Sizeof()求出變量所占字節(jié)數(shù),馬上輸出結(jié)果是4,Char c定義一個(gè)字符型變量,同樣用Sizeof()求出變量所占字節(jié)數(shù)為1。利用這樣的交互操作,學(xué)生會一目了然,馬上明白整型和字符型變量在內(nèi)存中所占字節(jié)數(shù)。課堂的實(shí)效性顯然能大大地提高。學(xué)生也不會覺得程序設(shè)計(jì)有多難學(xué),積極性自然而然會大大提高。
三、Ch平臺可以大大提高女生學(xué)習(xí)計(jì)算機(jī)編程的興趣。
歷年來的程序設(shè)計(jì)課堂上總是有這樣一種怪現(xiàn)象,學(xué)習(xí)的時(shí)候男學(xué)生忙著走神,女生刻苦認(rèn)真;使用的時(shí)候,女生六神無主,男生才開始學(xué)習(xí)。期末考試的成績女同學(xué)的合格率高于男同學(xué),而優(yōu)秀率卻低于男同學(xué),所以如何提高女學(xué)生的學(xué)習(xí)興趣一直是個(gè)瓶頸。而利用Ch平臺可以很好地突破這個(gè)瓶頸。Ch平臺較之于其他的教學(xué)平臺有更多的優(yōu)勢,具有交互功能,大大地降低了理解C語言的抽象性。它的知識點(diǎn)可以得到形象、具體的顯示?,F(xiàn)在我們通過一個(gè)簡單的循環(huán)語句來說明。
#include
void main()
{int i,sum=0;
for (i=1;i
sum=sum+i;
printf(“%d”,sum);
}
女生的抽象理解能力和邏輯思維能力普遍差于男生,但女生的細(xì)心程度和英語基礎(chǔ)普遍好于男生。通過Ch平臺的調(diào)試工具欄,可以把一些知識點(diǎn)的講解難度降低,變得簡單易懂。
四、利用Ch平臺授課可以在突破重點(diǎn)和難點(diǎn)時(shí)做到事半功倍。
例如,在講解for循環(huán)語句時(shí),利用此平臺,發(fā)揮它的交互解釋作用,可以讓學(xué)生一目了然,清清楚楚地知道循環(huán)的次數(shù),每一次循環(huán)都做了哪幾條語句,以及循環(huán)時(shí)程序的跳轉(zhuǎn),等等。通過對比講解(和利用其他平臺對比,在時(shí)間的花費(fèi)上對比,在教學(xué)效果上對比)得出利用Ch平臺授課可以在突破重點(diǎn)和難點(diǎn)時(shí)做到事半功倍。
總之,Ch平臺一經(jīng)在我校引入,程序設(shè)計(jì)課的教學(xué)效果大大提高,特別值得一提的是,在近幾年的浙江省ACM程序設(shè)計(jì)大賽中,我校學(xué)生成績不俗,最好的一次獲得了高職組金獎和最佳組織獎。這和我們在教學(xué)中引入Ch平臺夯實(shí)基礎(chǔ)密不可分。
參考文獻(xiàn):
[1]吳文虎.程序設(shè)計(jì)基礎(chǔ).北京:清華大學(xué)出版社,2004.
[2]譚浩強(qiáng).C程序設(shè)計(jì)教程.北京:清清華大學(xué)出版社,2006.
[3]孫紹榮.教育信息理論.上海:上海教育出版社,2006.
[4]譚浩強(qiáng).C程序設(shè)計(jì)試題匯編.北京:清華大學(xué)出版社,2006.
[5]何光明.C語言實(shí)用培訓(xùn)教程.北京:人民郵電出版社,2002.
[6]黃逵中.C語言實(shí)例教程.北京:中國電力出版社,2004.
[7]美國加州大學(xué)網(wǎng)站主頁.QCOP.edu/.
[8]Ch網(wǎng)站主頁.省略/.
篇9
【關(guān)鍵詞】單片機(jī);延時(shí)程序
接觸單片機(jī)有一年之久,從基礎(chǔ)知識了解開始,到流水燈、數(shù)碼管動靜態(tài)顯示,鍵盤到液晶等幾個(gè)基本的模塊,編了一些基本的小程序,發(fā)現(xiàn)其中最常用的延時(shí)程序用C語言編寫也是千變?nèi)f化的,不同的程序,不同的用途,精確度不一樣,延時(shí)程序也需要有改變。下面就對我所知道的延時(shí)的方法談下自己的見解。
總的延時(shí)方法通常有兩種:一種為軟件延時(shí),通常采用循環(huán)的形式進(jìn)行;另外一種為硬件延時(shí),用到定時(shí)器/計(jì)數(shù)器,這種方法可以提高CPU的工作效率,并且能相對精確延時(shí)。
一、軟件延時(shí)與時(shí)間計(jì)算
軟件延時(shí)方式精確度不是很高,但是基本時(shí)間可以控制,并且移植性很好。
2.需要多種延時(shí)時(shí)間。還是8個(gè)燈做成流水燈,但是要求第一個(gè)燈亮1S,第2個(gè)燈亮2S,第三個(gè)燈亮3S……最后一個(gè)燈亮8S。
3.時(shí)間的確定。很多朋友看完我上面講個(gè)兩種延時(shí)方法可能會說,這樣是方便了,但是上面的時(shí)間如何確定呢?你的時(shí)間確定圖怎么來的?方法很簡單,利用keil強(qiáng)大的功能實(shí)現(xiàn)。比如1S延時(shí)
另外還可以用示波器測試時(shí)間,需要外接示波器,用proteus畫完連接圖,接上示波器,再調(diào)用寫好程序的hex,就可以很清楚的看到延時(shí)時(shí)間。下面為延時(shí)20ms圖。
同時(shí)還可以用反匯編工具計(jì)算延時(shí)時(shí)間,匯編時(shí)間是很精確的,便于計(jì)算的。有興趣的朋友也可以自己上網(wǎng)搜索這兩種方法。對于初學(xué)的朋友,我建議還是用這種keil本身的工具比較方便。
二、用定時(shí)器/計(jì)數(shù)器實(shí)現(xiàn)精確定時(shí)
在很多情況下,需要我們精確定時(shí),那么我們就不能用前面講的調(diào)用小的延時(shí)子程序delay()來完成。所以就要考慮用精確的定時(shí)方式:定時(shí)器/計(jì)數(shù)器。
以上我介紹了對于寫延時(shí)程序自己的一些膚淺的見解,在以后的學(xué)習(xí)中還需要進(jìn)一步提高。粗略延時(shí)用基本的delay(),精確延時(shí)用定時(shí)/計(jì)數(shù)器。
篇10
關(guān)鍵詞:程序設(shè)計(jì);教學(xué)方法;教學(xué)手段
中圖分類號:G642 文獻(xiàn)標(biāo)識碼:B
“C語言程序設(shè)計(jì)”作為一門公共基礎(chǔ)課程,是高校理工科非計(jì)算機(jī)專業(yè)學(xué)生的一門必修課程。通過該課程的學(xué)習(xí),學(xué)生不僅要掌握C程序設(shè)計(jì)語言的知識,更重要的是要學(xué)會分析問題的方法,提高解決基本問題的能力和程序語言的應(yīng)用能力,并為今后的繼續(xù)學(xué)習(xí)打下良好的基礎(chǔ)。
由于“C語言程序設(shè)計(jì)”這門課程的實(shí)踐性較強(qiáng),必須通過大量的編程訓(xùn)練,才能逐步理解和掌握程序設(shè)計(jì)的思想和方法,因此,怎樣激發(fā)學(xué)生自主學(xué)習(xí)的興趣,培養(yǎng)學(xué)生的實(shí)際編程能力是這門課教學(xué)改革應(yīng)解決的問題。
1教材適合教師的“教”和學(xué)生的“學(xué)”
教學(xué)有兩個(gè)方面,一個(gè)是教師的“教”,另一個(gè)是學(xué)生的“學(xué)”?!敖獭笔菫榱藢W(xué)生能獨(dú)立地去“學(xué)”,就像葉圣陶先生說的那樣:教,是為了最后達(dá)到不需要教。教師不僅要研究怎么教,更重要的是要研究學(xué)生怎么學(xué)。教師備課一定是要“背”學(xué)生的,首先要看學(xué)生的基礎(chǔ)是什么?學(xué)生要達(dá)到的目標(biāo)是什么?其評價(jià)的標(biāo)準(zhǔn)也是以學(xué)生能夠掌握為評判標(biāo)準(zhǔn)。
其實(shí),學(xué)生都想學(xué)好“C語言程序設(shè)計(jì)”這門課,也想掌握一門真本領(lǐng)到社會上去競爭。但很多學(xué)生一遇到問題就退縮了,不愿意費(fèi)太大的力氣,而這門課恰恰又是需要通過大量練習(xí)才能入門的一門課。
感謝由譚浩強(qiáng)教授編著的《C 程序設(shè)計(jì)》這本書,為教師進(jìn)行該課程的教學(xué)改革提供了一個(gè)很好的平臺。該書不僅將復(fù)雜問題簡單化了,而且可使教師根據(jù)不同程度的學(xué)生對內(nèi)容進(jìn)行取舍而不影響整個(gè)程序設(shè)計(jì)的思想和方法。該書符合學(xué)生的任知規(guī)律,將學(xué)習(xí)的每一個(gè)臺階變“矮”,并能夠使人理性認(rèn)識C語言。
我們在教學(xué)中考慮到學(xué)生學(xué)習(xí)的難度,分解講解,從而使學(xué)生克服了畏難心理,覺得C語言并不難學(xué)。有些課上沒有講到的內(nèi)容,學(xué)生也可利用教材自學(xué)。同時(shí),根據(jù)該教材,我們制作了適合學(xué)生自學(xué)的助學(xué)系統(tǒng)。考慮到學(xué)生基礎(chǔ)的差異,我們結(jié)合教材,編寫了《C語言程序設(shè)計(jì)上機(jī)指導(dǎo)》,從而給學(xué)生提供了一個(gè)自主學(xué)習(xí)的平臺,受到學(xué)生們的好評。
2培養(yǎng)學(xué)生的抽象思維能力
在進(jìn)行“C語言程序設(shè)計(jì)”的教學(xué)改革中,我們思考了這樣的問題:如果教師只是鉆研教材,并讓學(xué)生理解、記住其結(jié)果,那么,學(xué)生就會失去獨(dú)立鉆研和獲取新知識的能力;每個(gè)學(xué)習(xí)“C語言程序設(shè)計(jì)”的學(xué)生將來未必都從事計(jì)算機(jī)編程;因此,我們把砥礪學(xué)生的抽象思維能力作為了改革“C語言程序設(shè)計(jì)”教學(xué)的方法之一。
首先,我們根據(jù)“C語言程序設(shè)計(jì)”這門課的特點(diǎn),研究了譚浩強(qiáng)教授編著的《C程序設(shè)計(jì)》這本書是怎樣引導(dǎo)學(xué)生完成抽象的認(rèn)知過程并逐步提升的;怎樣通過簡單的舉例和進(jìn)一步的講解,使學(xué)生理解抽象的數(shù)據(jù)類型、函數(shù)以及指針在構(gòu)造抽象程序中的意義;并將研究成果應(yīng)用在教學(xué)中,從而使學(xué)生學(xué)會算法抽象的基本方法,掌握程序抽象的思考方法。
實(shí)踐中,我們采用程序設(shè)計(jì)和語言講解并行的方法。首先提出用程序要解決的一個(gè)問題,找出解決問題的方法,講解要引入的新的語法知識,給出算法并解釋,最后編寫出完整的程序,再上機(jī)實(shí)踐。
3激發(fā)學(xué)生的學(xué)習(xí)興趣,培養(yǎng)學(xué)生解決實(shí)際問題的能力
教學(xué)與科研在研究目的等很多方面一樣,其本質(zhì)都是為了實(shí)際應(yīng)用,并且科研的有些方法也同樣適用于教學(xué)研究,因此,如何強(qiáng)調(diào)實(shí)踐教學(xué)都不為過,并把培養(yǎng)學(xué)生解決實(shí)際問題的能力作為“C語言程序設(shè)計(jì)”教學(xué)改革追求的主要目標(biāo),這也與譚浩強(qiáng)教授編著的《C程序設(shè)計(jì)》這本書的初衷相一致。至于采用哪種方法好,筆者認(rèn)為,主要看是否適合學(xué)生。在這個(gè)問題上,只有適合不適合,而沒有好壞之分。
對于所要解決的問題,首先引導(dǎo)學(xué)生仔細(xì)進(jìn)行分析、對各功能模塊進(jìn)行抽象描述、畫出解決方案的流程圖、討論并修改算法、最后再進(jìn)行編程、調(diào)試,并得出正確結(jié)論,這是培養(yǎng)學(xué)生創(chuàng)造性地解決實(shí)際問題能力的必由之路。我們在教授“C語言程序設(shè)計(jì)”這門課開始時(shí),就把本學(xué)期要做一個(gè)實(shí)用作品、期末要進(jìn)行上機(jī)編程考試、作品及上機(jī)考試占期末成績的比例、要求寫實(shí)驗(yàn)報(bào)告等信息告知給學(xué)生,并在期中將所要做的內(nèi)容確定下來。有的是老師指定內(nèi)容,有的是讓學(xué)生自己選題。有的教師采取一對一輔導(dǎo),有的分成小組讓學(xué)生討論,教師在適當(dāng)?shù)臅r(shí)候給予指導(dǎo)。對于做得比較好的同學(xué)及時(shí)給予表揚(yáng),并讓學(xué)生將思路講給教師聽;同時(shí)要求寫出詳細(xì)的注釋,并在小組或班上講解。這樣做,可使部分學(xué)生的編程能力明顯提高,并帶動了很多同學(xué)積極參與討論,激發(fā)了同學(xué)們編程的熱情,課上和課下都有學(xué)生在討論編程的事,班里出現(xiàn)了良好的學(xué)習(xí)編程的氛圍。
但是,我們清楚地認(rèn)識到:要普遍提高學(xué)生的實(shí)際編程能力目前還存在著很大的困難。教師在有限的學(xué)時(shí)內(nèi)不僅要完成授課計(jì)劃,還要利用很多的課余時(shí)間完成類似于課程設(shè)計(jì)的作品輔導(dǎo),教師在肩負(fù)科研和教學(xué)雙重任務(wù),所教學(xué)生多的情況下,也只是盡力而為。因此,在實(shí)際實(shí)施的過程中,采取“先讓少部分人富起來”的做法,教師對部分編程愛好者多進(jìn)行輔導(dǎo),讓好一點(diǎn)的學(xué)生去幫助其他同學(xué)。雖然取得了一定的效果,但距離我們良好的愿望還相差很遠(yuǎn),需要我們在今后的教學(xué)中不斷地探索,找出普遍提高學(xué)生實(shí)際編程能力更好的方法。
4 “C語言程序設(shè)計(jì)”的教學(xué)改革
C++是從C語言發(fā)展演變而來的一種面向?qū)ο蟮某绦蛟O(shè)計(jì)語言,其主要特點(diǎn)表現(xiàn)在全面兼容C,并且支持面向?qū)ο蟮姆椒?。目?C++程序設(shè)計(jì)語言已經(jīng)成為應(yīng)用最廣泛的面向?qū)ο蟮某绦蛟O(shè)計(jì)語言之一,全國計(jì)算機(jī)等級考試(二級)也已把它作為主要考查的語種之一。很多學(xué)生考慮到就業(yè),也希望我們開設(shè)這門課。鑒于上述等原因,我們從教學(xué)改革的角度出發(fā),在我校部分班級開設(shè)C++程序設(shè)計(jì)課程,先在部分班級試點(diǎn),待積累一定的經(jīng)驗(yàn),時(shí)機(jī)成熟時(shí)再向全院推進(jìn)。
“程序設(shè)計(jì)方法是不可選擇或不可抗拒的時(shí)代潮流,只能在應(yīng)用中領(lǐng)悟和熟悉,算法則需要比較深入的理論知識,必須經(jīng)過嚴(yán)格的科學(xué)訓(xùn)練?!?我們在教學(xué)實(shí)踐中,本著一個(gè)原則:不論是C程序設(shè)計(jì)還是C++程序設(shè)計(jì),均把培養(yǎng)學(xué)生的實(shí)際編程能力作為教學(xué)目標(biāo)。對于非計(jì)算機(jī)專業(yè)的在校大學(xué)生來說,學(xué)習(xí)C++程序設(shè)計(jì)是為了讓學(xué)生了解面向?qū)ο蟪绦蛟O(shè)計(jì)方法,能夠利用C++編寫較大并相對簡單的程序,為以后進(jìn)一步的學(xué)習(xí)和應(yīng)用打下良好的基礎(chǔ)。
通過對所教學(xué)生進(jìn)行實(shí)事求是的分析和估計(jì),我們選用了譚浩強(qiáng)教授編著的《C ++程序設(shè)計(jì)》作為教材。之所以選用這本教材,主要還是想用容易理解的方法講清楚有關(guān)的基本概念和基本方法。該教材前7章的內(nèi)容是C++從C語言繼承來的部分。由于教師都是初上該門課,感到完成整個(gè)教材,課時(shí)有些緊張,如果再加上實(shí)用作品設(shè)計(jì),學(xué)生負(fù)擔(dān)會太重。因此,我們在教學(xué)上著力于使學(xué)生對C++的全貌和作用有基本的認(rèn)識,而不是注重語法中的細(xì)節(jié),同時(shí)引導(dǎo)學(xué)生閱讀實(shí)用程序,指導(dǎo)學(xué)生在學(xué)完課程后,編寫完成一個(gè)較大的應(yīng)用程序。
5結(jié)束語
“C語言程序設(shè)計(jì)”的教學(xué)改革是一項(xiàng)長期的任務(wù),無論怎樣改,都要從學(xué)生的實(shí)際出發(fā),發(fā)揮教師的主導(dǎo)作用,調(diào)動學(xué)生學(xué)習(xí)的積極性,使學(xué)生有收獲。教學(xué)千古事,得失寸心知。在今后的教學(xué)實(shí)踐中我們還要不斷地完善教學(xué)內(nèi)容和方法,做到既有“法”而又無“定法”,真正提高教學(xué)質(zhì)量。
參考文獻(xiàn):
熱門標(biāo)簽
相關(guān)文章
1C語言程序設(shè)計(jì)課程資源優(yōu)化方法
2C語言程序設(shè)計(jì)智能化運(yùn)行及管理
3C語言程序設(shè)計(jì)實(shí)踐教學(xué)環(huán)節(jié)研究