c語言程序范文

時間:2023-03-14 06:54:08

導(dǎo)語:如何才能寫好一篇c語言程序,這就需要搜集整理更多的資料和文獻,歡迎閱讀由公務(wù)員之家整理的十篇范文,供你借鑒。

c語言程序

篇1

本課介紹c語言程序設(shè)計的基本方法和基本的程序語句。

從程序流程的角度來看,程序可以分為三種基本結(jié)構(gòu),即順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)。這三種基本結(jié)構(gòu)可以組成所有的各種復(fù)雜程序。c語言提供了多種語句來實現(xiàn)這些程序結(jié)構(gòu)。本章介紹這些基本語句及其應(yīng)用,使讀者對c程序有一個初步的認(rèn)識,為后面各章的學(xué)習(xí)打下基礎(chǔ)。

c程序的語句

c程序的執(zhí)行部分是由語句組成的。程序的功能也是由執(zhí)行語句實現(xiàn)的。

C語句可分為以下五類:

1.表達式語句

2.函數(shù)調(diào)用語句

3.控制語句

4.復(fù)合語句

5.空語句

1.表達式語句

表達式語句由表達式加上分號“;”組成。其一般形式為:表達式;執(zhí)行表達式語句就是計算表達式的值。例如:x=y+z;賦值語句y+z;加法運算語句,但計算結(jié)果不能保留,無實際意義i++;自增1語句,i值增1

2.函數(shù)調(diào)用語句

由函數(shù)名、實際參數(shù)加上分號“;”組成。其一般形式為:函數(shù)名(實際參數(shù)表);執(zhí)行函數(shù)語句就是調(diào)用函數(shù)體并把實際參數(shù)賦予函數(shù)定義中的形式參數(shù),然后執(zhí)行被調(diào)函數(shù)體中的語句,求取函數(shù)值。(在第五章函數(shù)中再詳細介紹)例如printf("CProgram");調(diào)用庫函數(shù),輸出字符串。

3.控制語句

控制語句用于控制程序的流程,以實現(xiàn)程序的各種結(jié)構(gòu)方式。

它們由特定的語句定義符組成。c語言有九種控制語句。可分成以下三類:

(1)條件判斷語句

if語句,switch語句

(2)循環(huán)執(zhí)行語句

dowhile語句,while語句,for語句

(3)轉(zhuǎn)向語句

break語句,goto語句,continue語句,return語句

4.復(fù)合語句

把多個語句用括號{}括起來組成的一個語句稱復(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)體為空語句。

賦值語句

賦值語句是由賦值表達式再加上分號構(gòu)成的表達式語句。其一般形式為:變量=表達式;賦值語句的功能和特點都與賦值表達式相同。它是程序中使用最多的語句之一。在賦值語句的使用中需要注意以下幾點:

1.由于在賦值符“=”右邊的表達式也可以又是一個賦值表達式,因此,下述形式變量=(變量=表達式);是成立的,從而形成嵌套的情形。其展開之后的一般形式為:變量=變量=…=表達式;

例如:

a=b=c=d=e=5;按照賦值運算符的右接合性,因此實際上等效于:

e=5;

d=e;

c=d;

b=c;

a=b;

2.注意在變量說明中給變量賦初值和賦值語句的區(qū)別。給變量賦初值是變量說明的一部分,賦初值后的變量與其后的其它同類變量之間仍必須用逗號間隔,而賦值語句則必須用分號結(jié)尾。

3.在變量說明中,不允許連續(xù)給多個變量賦初值。如下述說明是錯誤的:inta=b=c=5必須寫為inta=5,b=5,c=5;而賦值語句允許連續(xù)賦值

4.注意賦值表達式和賦值語句的區(qū)別。賦值表達式是一種表達式,它可以出現(xiàn)在任何允許表達式出現(xiàn)的地方,而賦值語句則不能。

下述語句是合法的:if((x=y+5)>0)z=x;語句的功能是,若表達式x=y+5大于0則z=x。下述語句是非法的:if((x=y+5;)>0)z=x;因為=y+5;是語句,不能出現(xiàn)在表達式中。

數(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)鍵字最末一個字母f即為“格式”(format)之意。其功能是按用戶指定的格式,把指定的數(shù)據(jù)顯示到顯示器屏幕上。在前面的例題中我們已多次使用過這個函數(shù)。

一、printf函數(shù)調(diào)用的一般形式

printf函數(shù)是一個標(biāo)準(zhǔn)庫函數(shù),它的函數(shù)原型在頭文件“stdio.h”中。但作為一個特例,不要求在使用printf函數(shù)之前必須包含stdio.h文件。printf函數(shù)調(diào)用的一般形式為:printf(“格式控制字符串”,輸出表列)其中格式控制字符串用于指定輸出格式。格式控制串可由格式字符串和非格式字符串兩種組成。格式字符串是以%開頭的字符串,在%后面跟有各種格式字符,以說明輸出數(shù)據(jù)的類型、形式、長度、小數(shù)位數(shù)等。如“%d”表示按十進制整型輸出,“%ld”表示按十進制長整型輸出,“%c”表示按字符型輸出等。后面將專門給予討論。

非格式字符串在輸出時原樣照印,在顯示中起提示作用。輸出表列中給出了各個輸出項,要求格式字符串和各輸出項在數(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之間加了一個空格(非格式字符),所以輸出的a,b值之間有一個空格。第五行的printf語句格式控制串中加入的是非格式字符逗號,因此輸出的a,b值之間加了一個逗號。第六行的格式串要求按字符型輸出a,b值。第七行中為了提示輸出結(jié)果又增加了非格式字符串。

二、格式字符串

在TurboC中格式字符串的一般形式為:[標(biāo)志][輸出最小寬度][.精度][長度]類型其中方括號[]中的項為可選項。各項的意義介紹如下:

1.類型類型字符用以表示輸出數(shù)據(jù)的類型,其格式符和意義下表所示:

表示輸出類型的格式字符格式字符意義

d以十進制形式輸出帶符號整數(shù)(正數(shù)不輸出符號)

o以八進制形式輸出無符號整數(shù)(不輸出前綴O)

x以十六進制形式輸出無符號整數(shù)(不輸出前綴OX)

u以十進制形式輸出無符號整數(shù)

f以小數(shù)形式輸出單、雙精度實數(shù)

e以指數(shù)形式輸出單、雙精度實數(shù)

g以%f%e中較短的輸出寬度輸出單、雙精度實數(shù)

c輸出單個字符

s輸出字符串

2.標(biāo)志

標(biāo)志字符為-、+、#、空格四種,其意義下表所示:

標(biāo)志格式字符標(biāo)志意義

-結(jié)果左對齊,右邊填空格

+輸出符號(正號或負(fù)號)空格輸出值為正時冠以空格,為負(fù)時冠以負(fù)號

#對c,s,d,u類無影響;對o類,在輸出時加前

綴o對x類,在輸出時加前綴0x;對e,g,f類當(dāng)結(jié)果有小數(shù)時才給出小數(shù)點

3.輸出最小寬度

用十進制整數(shù)來表示輸出的最少位數(shù)。若實際位數(shù)多于定義的寬度,則按實際位數(shù)輸出,若實際位數(shù)少于定義的寬度則補以空格或0。

4.精度

精度格式符以“.”開頭,后跟十進制整數(shù)。本項的意義是:如果輸出數(shù)字,則表示小數(shù)的位數(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的值。其中“%f”和“%lf”格式的輸出相同,說明“l(fā)”符對“f”類型無影響?!?5.4lf”指定輸出寬度為5,精度為4,由于實際長度超過5故應(yīng)該按實際位數(shù)輸出,小數(shù)位數(shù)超過4位部分被截去。第九行輸出雙精度實數(shù),“%8.4lf”由于指定精度為4位故截去了超過4位的部分。第十行輸出字符量d,其中“%bc”指定輸出寬度為8故在輸出字符p之前補加7個空格。

使用printf函數(shù)時還要注意一個問題,那就是輸出表列中的求值順序。不同的編譯系統(tǒng)不一定相同,可以從左到右,也可從右到左。TurboC是按從右到左進行的。如把例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

這個程序與例2.13相比只是把多個printf語句改一個printf語句輸出。但從結(jié)果可以看出是不同的。為什么結(jié)果會不同呢?就是因為printf函數(shù)對輸出表中各量求值的順序是自右至左進行的。在式中,先對最后一項“-i--”求值,結(jié)果為-8,然后i自減1后為7。再對“-i++”項求值得-7,然后i自增1后為8。再對“i--”項求值得8,然后i再自減1后為7。再求“i++”項得7,然后I再自增1后為8。再求“--i”項,i先自減1后輸出,輸出值為7。最后才求輸出表列中的第一項“++i”,此時i自增1后輸出8。但是必須注意,求值順序雖是自右至左,但是輸出順序還是從左至右,因此得到的結(jié)果是上述輸出結(jié)果。

字符輸出函數(shù)

putchar函數(shù)

putchar函數(shù)是字符輸出函數(shù),其功能是在顯示器上輸出單個字符。其一般形式為: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ù)是一個標(biāo)準(zhǔn)庫函數(shù),它的函數(shù)原型在頭文件“stdio.h”中,與printf函數(shù)相同,c語言也允許在使用scanf函數(shù)之前不必包含stdio.h文件。scanf函數(shù)的一般形式為:scanf(“格式控制字符串”,地址表列);其中,格式控制字符串的作用與printf函數(shù)相同,但不能顯示非格式字符串,也就是不能顯示提示字符串。地址表列中給出各變量的地址。地址是由地址運算符“&”后跟變量名組成的。例如,&a,&b分別表示變量a和變量b的地址。這個地址就是編譯系統(tǒng)在內(nèi)存中給a,b變量分配的地址。在c語言中,使用了地址這個概念,這是與其它語言不同的。應(yīng)該把變量的值和變量的地址這兩個不同的概念區(qū)別開來。變量的地址是C編譯系統(tǒng)分配的,用戶不必關(guān)心具體的地址是多少。變量的地址和變量值的關(guān)系如下:&a--->a567a為變量名,567是變量的值,&a是變量a的地址。在賦值表達式中給變量賦值,如:a=567在賦值號左邊是變量名,不能寫地址,而scanf函數(shù)在本質(zhì)上也是給變量賦值,但要求寫變量的地址,如&a。這兩者在形式上是不同的。&是一個取地址運算符,&a是一個表達式,其功能是求變量的地址。

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屏幕進入用戶屏幕等待用戶輸入。用戶輸入7、8、9后按下回車鍵,此時,系統(tǒng)又將返回TC屏幕。在scanf語句的格式串中由于沒有非格式字符在“%d%d%d”之間作輸入時的間隔,因此在輸入時要用一個以上的空格或回車鍵作為每兩個輸入數(shù)之間的間隔。

如:789

7

8

9

格式字符串

格式字符串的一般形式為:%[*][輸入數(shù)據(jù)寬度][長度]類型其中有方括號[]的項為任選項。各項的意義如下:

1.類型

表示輸入數(shù)據(jù)的類型,其格式符和意義下表所示。

格式字符意義

d輸入十進制整數(shù)

o輸入八進制整數(shù)

x輸入十六進制整數(shù)

u輸入無符號十進制整數(shù)

f或e輸入實型數(shù)(用小數(shù)形式或指數(shù)形式)

c輸入單個字符

s輸入字符串

2.“*”符

用以表示該輸入項讀入后不賦予相應(yīng)的變量,即跳過該輸入值。如scanf("%d%*d%d",&a,&b);當(dāng)輸入為:123時,把1賦予a,2被跳過,3賦予b。

3.寬度

用十進制整數(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)和雙精度浮點數(shù)(如%lf)。h表示輸入短整型數(shù)據(jù)。

使用scanf函數(shù)還必須注意以下幾點:

a.scanf函數(shù)中沒有精度控制,如:scanf("%5.2f",&a);是非法的。不能企圖用此語句輸入小數(shù)為2位的實數(shù)。

b.scanf中要求給出變量地址,如給出變量名則會出錯。如scanf("%d",a);是非法的,應(yīng)改為scnaf("%d",&a);才是合法的。

c.在輸入多個數(shù)值數(shù)據(jù)時,若格式控制串中沒有非格式字符作輸入數(shù)據(jù)之間的間隔則可用空格,TAB或回車作間隔。C編譯在碰到空格,TAB,回車或非法數(shù)據(jù)(如對“%d”輸入“12A”時,A即為非法數(shù)據(jù))時即認(rèn)為該數(shù)據(jù)結(jié)束。

d.在輸入字符數(shù)據(jù)時,若格式控制串中無非格式字符,則認(rèn)為所有輸入的字符均為有效字符。例如:

scanf("%c%c%c",&a,&b,&c);

輸入為:

def

則把''''d''''賦予a,''''f''''賦予b,''''e''''賦予c。只有當(dāng)輸入為:

def

時,才能把''''d''''賦于a,''''e''''賦予b,''''f''''賦予c。如果在格式控制中加入空格作為間隔,如scanf("%c%c%c",&a,&b,&c);則輸入時各數(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時則可輸出MN兩字符,見下面的輸入運行情況: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ù)據(jù)之間可以有空格間隔。e.如果格式控制串中有非格式字符則輸入時也要輸入該非格式字符。

例如:

scanf("%d,%d,%d",&a,&b,&c);其中用非格式符“,”作間隔符,故輸入時應(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ù)與輸出的類型不一致時,雖然編譯能夠通過,但結(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);

}

運行結(jié)果為:

inputalonginteger

1234567890

1234567890當(dāng)輸入數(shù)據(jù)改為長整型后,輸入輸出數(shù)據(jù)相等。

鍵盤輸入函數(shù)

getchar函數(shù)getchar函數(shù)的功能是從鍵盤上輸入一個字符。其一般形式為:getchar();通常把輸入的字符賦予一個字符變量,構(gòu)成賦值語句,如:

charc;

c=getchar();#include<stdio.h>

voidmain(){

charc;

printf("inputacharacter\n");

c=getchar();

putchar(c);

}

使用getchar函數(shù)還應(yīng)注意幾個問題:

1.getchar函數(shù)只能接受單個字符,輸入數(shù)字也按字符處理。輸入多于一個字符時,只接收第一個字符。

2.使用本函數(shù)前必須包含文件“stdio.h”。

3.在TC屏幕下運行含本函數(shù)程序時,將退出TC屏幕進入用戶屏幕等待用戶輸入。輸入完畢再返回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);

}

輸入三個小寫字母

輸出其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)系運算符和表達式

在程序中經(jīng)常需要比較兩個量的大小關(guān)系,以決定程序下一步的工作。比較兩個量的運算符稱為關(guān)系運算符。在c語言中有以下關(guān)系運算符:

<小于

<=小于或等于

>大于

>=大于或等于

==等于

!=不等于

關(guān)系運算符都是雙目運算符,其結(jié)合性均為左結(jié)合。關(guān)系運算符的優(yōu)先級低于算術(shù)運算符,高于賦值運算符。在六個關(guān)系運算符中,<,<=,>,>=的優(yōu)先級相同,高于==和!=,==和!=的優(yōu)先級相同。

關(guān)系表達式

關(guān)系表達式的一般形式為:表達式關(guān)系運算符表達式例如:a+b>c-d,x>3/2,''''a''''+1<c,-i-5*j==k+1;都是合法的關(guān)系表達式。由于表達式也可以又是關(guān)系表達式。因此也允許出現(xiàn)嵌套的情況,例如:a>(b>c),a!=(c==d)等。關(guān)系表達式的值是“真”和“假”,用“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īng)的ASCII碼參與運算的。對于含多個關(guān)系運算符的表達式,如k==j==i+5,根據(jù)運算符的左結(jié)合性,先計算k==j,該式不成立,其值為0,再計算0==i+5,也不成立,故表達式值為0。

邏輯運算符和表達式

邏輯運算符c語言中提供了三種邏輯運算符&&與運算||或運算!非運算與運算符&&和或運算符||均為雙目運算符。具有左結(jié)合性。非

運算符!為單目運算符,具有右結(jié)合性。邏輯運算符和其它運算符優(yōu)先級的關(guān)系可表示如下:

按照運算符的優(yōu)先順序可以得出:

a>b&&c>d等價于(a>b)&&(c>d)

!b==c||d<a等價于((!b)==c)||(d<a)

a+b>c&&x+y<b等價于((a+b)>c)&&((x+y)<b)

邏輯運算的值

邏輯運算的值也為“真”和“假”兩種,用“1”和“0”來表示。其求值規(guī)則如下:

1.與運算&&參與運算的兩個量都為真時,結(jié)果才為真,否則為假。例如,5>0&&4>2,由于5>0為真,4>2也為真,相與的結(jié)果也為真。

2.或運算||參與運算的兩個量只要有一個為真,結(jié)果就為真。兩個量都為假時,結(jié)果為假。例如:5>0||5>8,由于5>0為真,相或的結(jié)果也就為真

3.非運算!參與運算量為真時,結(jié)果為假;參與運算量為假時,結(jié)果為真。

例如:!(5>0)的結(jié)果為假。

雖然c編譯在給出邏輯運算值時,以“1”代表“真”,“0”代表“假”。但反過來在判斷一個量是為“真”還是為“假”時,以“0”代表“假”,以非“0”的數(shù)值作為“真”。例如:由于5和3均為非“0”因此5&&3的值為“真”,即為1。

又如:5||0的值為“真”,即為1。

邏輯表達式邏輯表達式的一般形式為:表達式邏輯運算符表達式其中的表達式可以又是邏輯表達式,從而組成了嵌套的情形。例如:(a&&b)&&c根據(jù)邏輯運算符的左結(jié)合性,上式也可寫為:a&&b&&c邏輯表達式的值是式中各種邏輯運算的最后值,以“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-3的值為非0,再求i&&j-3的邏輯值為1,故x||i&&j-3的邏輯值為1。對i<j&&x<y式,由于i<j的值為1,而x<y為0故表達式的值為1,0相與,最后為0,對i==5&&c&&(j=8)式,由于i==5為假,即值為0,該表達式由兩個與運算組成,所以整個表達式的值為0。對于式x+y||i+j+k由于x+y的值為非0,故整個或表達式的值為1。

if語句

用if語句可以構(gòu)成分支結(jié)構(gòu)。它根據(jù)給定的條件進行判斷,以決定執(zhí)行某個分支程序段。c語言的if語句有三種基本形式。

1.第一種形式為基本形式if(表達式)語句;其語義是:如果表達式的值為真,則執(zhí)行其后的語句,否則不執(zhí)行該語句。其過程可表示為下圖

voidmain(){

inta,b,max;

printf("\ninputtwonumbers:");

scanf("%d%d",&a,&b);

max=a;

if(max<b)max=b;

printf("max=%d",max);

}

輸入兩個整數(shù),輸出其中的大數(shù)。

scanf("%d%d",&a,&b);

max=a;

if(max<b)max=b;

printf("max=%d",max);

本例程序中,輸入兩個數(shù)a,b。把a先賦予變量max,再用if語句判別max和b的大小,如max小于b,則把b賦予max。因此max中總是大數(shù),最后輸出max的值。

2.第二種形式為if-else形式

if(表達式)

語句1;

else

語句2;

其語義是:如果表達式的值為真,則執(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);

}

輸入兩個整數(shù),輸出其中的大數(shù)。改用if-else語句判別a,b的大小,若a大,則輸出a,否則輸出b。

3.第三種形式為if-else-if形式

前二種形式的if語句一般都用于兩個分支的情況。當(dāng)有多個分支選擇時,可采用if-else-if語句,其一般形式為:

if(表達式1)

語句1;

elseif(表達式2)

語句2;

elseif(表達式3)

語句3;

elseif(表達式m)

語句m;

else

語句n;

其語義是:依次判斷表達式的值,當(dāng)出現(xiàn)某個值為真時,則執(zhí)行其對應(yīng)的語句。然后跳到整個if語句之外繼續(xù)執(zhí)行程序。如果所有的表達式均為假,則執(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”之間為小寫字母,其余則為其它字符。這是一個多分支選擇的問題,用if-else-if語句編程,判斷輸入字符ASCII碼所在的范圍,分別給出不同的輸出。例如輸入為“g”,輸出顯示它為小寫字符。

4.在使用if語句中還應(yīng)注意以下問題

(1)在三種形式的if語句中,在if關(guān)鍵字之后均為表達式。該表達式通常是邏輯表達式或關(guān)系表達式,但也可以是其它表達式,如賦值表達式等,甚至也可以是一個變量。例如:if(a=5)語句;if(b)語句;都是允許的。只要表達式的值為非0,即為“真”。如在if(a=5)…;中表達式的值永遠為非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語句中,條件判斷表達式必須用括號括起來,在語句之后必須加分號。

(3)在if語句的三種形式中,所有的語句應(yīng)為單個語句,如果要想在滿足條件時執(zhí)行一組(多個)語句,則必須把這一組語句用{}括起來組成一個復(fù)合語句。但要注意的是在}之后不能再加分號。

例如:

if(a>b){

a++;

b++;

}

else{a=0;

b=10;

}

if語句的嵌套

當(dāng)if語句中的執(zhí)行語句又是if語句時,則構(gòu)成了if語句嵌套的情形。其一般形式可表示如下:

if(表達式)

if語句;

或者為

if(表達式)

if語句;

else

if語句;

在嵌套內(nèi)的if語句可能又是if-else型的,這將會出現(xiàn)多個if和多個else重疊的情況,這時要特別注意if和else的配對問題。例如:

if(表達式1)

if(表達式2)

語句1;

else

語句2;

其中的else究竟是與哪一個if配對呢?

應(yīng)該理解為:還是應(yīng)理解為:

if(表達式1)if(表達式1)

if(表達式2)if(表達式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");

}

比較兩個數(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)實質(zhì)上是為了進行多分支選擇,例3.16實際上有三種選擇即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");

}

條件運算符和條件表達式

如果在條件語句中,只執(zhí)行單個的賦值語句時,??墒褂脳l件表達式來實現(xiàn)。不但使程序簡潔,也提高了運行效率。

條件運算符為?和:,它是一個三目運算符,即有三個參與運算的量。由條件運算符組成條件表達式的一般形式為:

表達式1?表達式2:表達式3

其求值規(guī)則為:如果表達式1的值為真,則以表達式2的值作為條件表達式的值,否則以表達式2的值作為整個條件表達式的值。條件表達式通常用于賦值語句之中。

例如條件語句:

if(a>b)max=a;

elsemax=b;

可用條件表達式寫為max=(a>b)?a:b;執(zhí)行該語句的語義是:如a>b為真,則把a賦予max,否則把b賦予max。

使用條件表達式時,還應(yīng)注意以下幾點:

1.條件運算符的運算優(yōu)先級低于關(guān)系運算符和算術(shù)運算符,但高于賦值符。因此max=(a>b)?a:b可以去掉括號而寫為max=a>b?a:b

2.條件運算符?和:是一對運算符,不能分開單獨使用。

3.條件運算符的結(jié)合方向是自右至左。

例如:

a>b?a:c>d?c:d應(yīng)理解為

a>b?a:(c>d?c:d)這也就是條件表達式嵌套的情形,即其中的表達式3又是一個條

件表達式。

voidmain(){

inta,b,max;

printf("\ninputtwonumbers:");

scanf("%d%d",&a,&b);

printf("max=%d",a>b?a:b);

}

用條件表達式對上例重新編程,輸出兩個數(shù)中的大數(shù)。

switch語句

c語言還提供了另一種用于多分支選擇的switch語句,其一般形式為:

switch(表達式){

case常量表達式1:語句1;

case常量表達式2:語句2;

case常量表達式n:語句n;

default:語句n+1;

}

其語義是:計算表達式的值。并逐個與其后的常量表達式值相比較,當(dāng)表達式的值與某個常量表達式的值相等時,即執(zhí)行其后的語句,然后不再進行判斷,繼續(xù)執(zhí)行后面所有case后的語句。如表達式的值與所有case后的常量表達式均不相同時,則執(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");

}

}

本程序是要求輸入一個數(shù)字,輸出一個英文單詞。但是當(dāng)輸入3之后,卻執(zhí)行了case3以及以后的所有語句,輸出了Wednesday及以后的所有單詞。這當(dāng)然是不希望的。為什么會出現(xiàn)這種情況呢?這恰恰反應(yīng)了switch語句的一個特點。在switch語句中,“case常量表達式”只相當(dāng)于一個語句標(biāo)號,表達式的值和某標(biāo)號相等則轉(zhuǎn)向該標(biāo)號執(zhí)行,但不能在執(zhí)行完該標(biāo)號的語句后自動跳出整個switch語句,所以出現(xiàn)了繼續(xù)執(zhí)行所有后面case語句的情況。這是與前面介紹的if語句完全不同的,應(yīng)特別注意。為了避免上述情況,c語言還提供了一種break語句,專用于跳出switch語句,break語句只有關(guān)鍵字break,沒有參數(shù)。在后面還將詳細介紹。修改例題的程序,在每一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語句時還應(yīng)注意以下幾點:

1.在case后的各常量表達式的值不能相同,否則會出現(xiàn)錯誤。

2.在case后,允許有多個語句,可以不用{}括起來。

3.各case和default子句的先后順序可以變動,而不會影響程序執(zhí)行結(jié)果。

4.default子句可以省略不用。程序舉例

輸入三個整數(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的值即可。計算器程序。用戶輸入運算數(shù)和四則運算符,輸出計算結(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");

}

本例可用于四則運算求值。switch語句用于判斷運算符,然后輸出運算值。當(dāng)輸入運算符不是+,-,*,/時給出錯誤提示。

循環(huán)結(jié)構(gòu)程序

循環(huán)結(jié)構(gòu)是程序中一種很重要的結(jié)構(gòu)。其特點是,在給定條件成立時,反復(fù)執(zhí)行某程序段,直到條件不成立為止。給定的條件稱為循環(huán)條件,反復(fù)執(zhí)行的程序段稱為循環(huán)體。c語言提供了多種循環(huán)語句,可以組成各種不同形式的循環(huán)結(jié)構(gòu)。

while語句

while語句的一般形式為:while(表達式)語句;其中表達式是循環(huán)條件,語句為循環(huán)體。

while語句的語義是:計算表達式的值,當(dāng)值為真(非0)時,執(zhí)行循環(huán)體語句。其執(zhí)行過程可用圖3—4表示。統(tǒng)計從鍵盤輸入一行字符的個數(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++完成對輸入字符個數(shù)計數(shù)。從而程序?qū)崿F(xiàn)了對輸入一行字符的字符個數(shù)計數(shù)。

使用while語句應(yīng)注意以下幾點:

1.while語句中的表達式一般是關(guān)系表達或邏輯表達式,只要表達式的值為真(非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)體輸出表達式a++*2的值。該表達式等效于(a*2;a++)

2.循環(huán)體如包括有一個以上的語句,則必須用{}括起來,組成復(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)條件為賦值表達式a=5,因此該表達式的值永遠為真,而循環(huán)體中又沒有其它中止循環(huán)的手段,因此該循環(huán)將無休止地進行下去,形成死循環(huán)。4.允許while語句的循環(huán)體又是while語句,從而形成雙重循環(huán)。

do-while語句

do-while語句的一般形式為:

do

語句;

while(表達式);

其中語句是循環(huán)體,表達式是循環(huán)條件。

do-while語句的語義是:

先執(zhí)行循環(huán)體語句一次,再判別表達式的值,若為真(非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)注意以下幾點:

1.在if語句,while語句中,表達式后面都不能加分號,而在do-while語句的表達式后面則必須加分號。

2.do-while語句也可以組成多重循環(huán),而且也可以和while語句相互嵌套。

3.在do和while之間的循環(huán)體由多個語句組成時,也必須用{}括起來組成一個復(fù)合語句。

4.do-while和while語句相互替換時,要注意修改循環(huán)控制條件。

for語句

for語句是c語言所提供的功能更強,使用更廣泛的一種循環(huán)語句。其一般形式為:

for(表達式1;表達式2;表達3)

語句;

表達式1通常用來給循環(huán)變量賦初值,一般是賦值表達式。也允許在for語句外給循環(huán)變量賦初值,此時可以省略該表達式。

表達式2通常是循環(huán)條件,一般為關(guān)系表達式或邏輯表達式。

表達式3通??捎脕硇薷难h(huán)變量的值,一般是賦值語句。

這三個表達式都可以是逗號表達式,即每個表達式都可由多個表達式組成。三個表達式都是任選項,都可以省略。

一般形式中的“語句”即為循環(huán)體語句。for語句的語義是:

1.首先計算表達式1的值。

2.再計算表達式2的值,若值為真(非0)則執(zhí)行循環(huán)體一次,否則跳出循環(huán)。

3.然后再計算表達式3的值,轉(zhuǎn)回第2步重復(fù)執(zhí)行。在整個for循環(huán)過程中,表達式1只計算一次,表達式2和表達式,3則可能計算多次。循環(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語句計算s=1+2+3+...+99+100

intn,s=0;

for(n=1;n<=100;n++)

s=s+n;

printf("s=%d\n",s);

本例for語句中的表達式3為n++,實際上也是一種賦值語句,相當(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個連續(xù)的偶數(shù)。

inta=0,n;

printf("\ninputn:");

scanf("%d",&n);

for(;n>0;a++,n--)

printf("%d",a*2);

本例的for語句中,表達式1已省去,循環(huán)變量的初值在for語句之前由scanf語句取得,表達式3是一個逗號表達式,由a++,n--兩個表達式組成。每循環(huán)一次a自增1,n自減1。a的變化使輸出的偶數(shù)遞增,n的變化控制循次數(shù)。

在使用for語句中要注意以下幾點

1.for語句中的各表達式都可省略,但分號間隔符不能少。如:for(;表達式;表達式)省去了表達式1。for(表達式;;表達式)省去了表達式2。

for(表達式;表達式;)省去了表達式3。for(;;)省去了全部表達式。

2.在循環(huán)變量已賦初值時,可省去表達式1,如例3.27即屬于這種情形。如省去表達式2或表達式3則將造成無限循環(huán),這時應(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);

}

本例中省略了表達式1和表達式3,由循環(huán)體內(nèi)的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語句的表達式全部省去。由循環(huán)體中的語句實現(xiàn)循環(huán)變量的遞減和循環(huán)條件的判斷。當(dāng)n值為0時,由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語句的表達式1,表達式3也不是用來修改循環(huán)變量,而是用作輸入字符的計數(shù)。這樣,就把本應(yīng)在循環(huán)體中完成的計數(shù)放在表達式中完成了。因此循環(huán)體是空語句。應(yīng)注意的是,空語句后的分號不可少,如缺少此分號,則把后面的printf語句當(dāng)成循環(huán)體來執(zhí)行。反過來說,如循環(huán)體不為空語句時,決不能在表達式的括號后加分號,這樣又會認(rèn)為循環(huán)體是空語句而不能反復(fù)執(zhí)行。這些都是編程中常見的錯誤,要十分注意。

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語句通常與條件語句配合使用??捎脕韺崿F(xiàn)條件轉(zhuǎn)移,構(gòu)成循環(huán),跳出循環(huán)體等功能。

但是,在結(jié)構(gòu)化程序設(shè)計中一般不主張使用goto語句,以免造成程序流程的混亂,使理解和調(diào)試程序都產(chǎn)生困難。

統(tǒng)計從鍵盤輸入一行字符的個數(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''''時即執(zhí)行n++進行計數(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)語句有多個出口,在一些場合下使編程更加靈活、方便。

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的每一個數(shù)進行測試,如該數(shù)不能被7整除,即模運算不為0,則由continus語句轉(zhuǎn)去下一次循環(huán)。只有模運算為0時,才能執(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;

}

本例程序中,把第一個讀入的字符送入b。然后進入循環(huán),把下一字符讀入a,比較a,b是否相等,若相等則輸出提示串并中止循環(huán),若不相等則把a中的字符賦予b,輸入下一次循環(huán)。

輸出100以內(nèi)的素數(shù)。素數(shù)是只能被1和本身整除的數(shù)??捎酶F舉法來判斷一個數(shù)是否是素數(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個數(shù)逐個判斷是否是素數(shù),共循環(huán)100次,在第二層循環(huán)中則對數(shù)n用2~n-1逐個去除,若某次除盡則跳出該層循環(huán),說明不是素數(shù)。如果在所有的數(shù)都是未除盡的情況下結(jié)束循環(huán),則為素數(shù),此時有i>=n,故可經(jīng)此判斷后輸出素數(shù)。然后轉(zhuǎn)入下一次大循環(huán)。實際上,2以上的所有偶數(shù)均不是素數(shù),因此可以使循環(huán)變量的步長值改為2,即每次增加2,此外只需對數(shù)n用2~n去除就可判斷該數(shù)是否素數(shù)。這樣將大大減少循環(huá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)表達式語句任何表達式末尾加上分號即可構(gòu)成表達式語句,常用的表達式語句為賦值語句。

(2)函數(shù)調(diào)用語句由函數(shù)調(diào)用加上分號即組成函數(shù)調(diào)用語句。

(3)控制語句用于控制程序流程,由專門的語句定義符及所需的表達式組成。主要有條件判斷執(zhí)行語句,循環(huán)執(zhí)行語句,轉(zhuǎn)向語句等。

(4)復(fù)合語句由{}把多個語句括起來組成一個語句。復(fù)合語句被認(rèn)為是單條語句,它可出現(xiàn)在所有允許出現(xiàn)語句的地方,如循環(huán)體等。

(5)空語句僅由分號組成,無實際功能。

3.c語言中沒有提供專門的輸入輸出語句,所有的輸入輸出都是由調(diào)用標(biāo)準(zhǔn)庫函數(shù)中的輸入輸出函數(shù)來實現(xiàn)的。

scanf和getchar函數(shù)是輸入函數(shù),接收來自鍵盤的輸入數(shù)據(jù)。

scanf是格式輸入函數(shù),可按指定的格式輸入任意類型數(shù)據(jù)。

getchar函數(shù)是字符輸入函數(shù),只能接收單個字符。

printf和putchar函數(shù)是輸出函數(shù),向顯示器屏幕輸出數(shù)據(jù)。

printf是格式輸出函數(shù),可按指定的格式顯示任意類型的數(shù)據(jù)。

putchar是字符顯示函數(shù),只能顯示單個字符。

4.關(guān)系表達式和邏輯表達式是兩種重要的表達式,主要用于條件執(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)變量的值在運行過程中可以得到修改,并使循環(huán)條件逐步變?yōu)榧伲瑥亩Y(jié)束循環(huán)。

7.c語言語句小結(jié)

名稱一般形式

簡單語句表達式語句表達式;

空語句;

復(fù)合語句{語句}

條件語句if(表達式)語句;

if(表達式)語句1;else語句2;

if(表達式1)語句1;elseif(表達式2)語句2…else語句n;

開關(guān)語句switch(表達式){case常量表達式:語句…default:語句;}

循環(huán)語句while語句

while(表達式)語句;

for語句for(表達式1;表達式2;表達式3)語句;

break語句break;

goto語句goto;

篇2

關(guān)鍵詞:C語言;程序設(shè)計;機考;分層教學(xué);課程改革

中圖分類號:G642 文獻標(biāo)識碼:A 文章編號:1009-3044(2014)34-8225-02

《C語言程序設(shè)計》課程的授課對象是計算機專業(yè)本科學(xué)生,為專業(yè)基礎(chǔ)(必修)課,是學(xué)好后續(xù)各軟件課程必要的基礎(chǔ)。有別于已經(jīng)掌握的漢語、英語語言,作為人與計算機交流的語言,C語言不但概念多、符號多、語法多、規(guī)則多,而且抽象、難懂,再加上需要有一定的理解力以及解決問題的清晰思路,有些學(xué)生在學(xué)習(xí)過程中會感覺到枯燥、繁雜、無趣。因此培養(yǎng)學(xué)生的學(xué)習(xí)興趣、加強對課程的重視、提高實際編程能力、將理論與實際相結(jié)合,是教師必須解決的問題。

為了提高學(xué)習(xí)質(zhì)量,從2010年秋季學(xué)期開始對《C語言程序設(shè)計》課程的教學(xué)過程、成績考核進行了改革,由原來的紙質(zhì)試卷考試變成全程上機考試。改革實施多年來,大部分學(xué)生增加了學(xué)習(xí)興趣,有了編寫程序的主動性和積極性,增加了專業(yè)學(xué)習(xí)的信心,提升了程序設(shè)計的能力。

考慮到學(xué)生在基礎(chǔ)知識、智力因素、學(xué)習(xí)能力上的差異,為了更有效地實施“因材施教”,從2013年秋季學(xué)期開始實施分層教學(xué)。在講完C語言基礎(chǔ)知識、程序基本設(shè)計方法之后進行分層。通過考核,外加自愿的原則,將原來的教學(xué)班打亂,重新組合成兩種班型――高層次、低層次班。分層之后,每個學(xué)生個體獲取的知識趨于最大化,極大地提高了課堂學(xué)習(xí)效率。

1 傳統(tǒng)教學(xué)與紙質(zhì)考試存在的問題

傳統(tǒng)的教學(xué)是按照指定教材,在課上將重點內(nèi)容進行講解,典型的問題、方法在TC/VC環(huán)境中進行演示,課后留給學(xué)生一定的紙質(zhì)作業(yè)和上機編程作業(yè)。同樣的講授,理解力強的學(xué)生一聽就懂;理解力弱的學(xué)生,老師需要講多遍才有可能懂。傳統(tǒng)的教學(xué)中,老師只能顧及大多數(shù)中等學(xué)生,照顧不到特殊的學(xué)生。降低了課堂效率,也可以說浪費了某一部分學(xué)生的時間。

由于期末考核采用的是紙質(zhì)考試,只是從紙面上考核學(xué)生對C語言理論、編程方法的理解、掌握程度,更對學(xué)生的學(xué)習(xí)產(chǎn)生誤導(dǎo)。部分學(xué)生也只重視理論,不重視實際動手編程。他們只滿足于“紙上談兵”,不考慮結(jié)果。因此,實際應(yīng)用時,對上機環(huán)境不熟悉、編寫的程序不能順利通過,導(dǎo)致很多學(xué)生高分低能,在解決實際問題時,茫然無措。

2 機考及分層教學(xué)改革的探索

計算機專業(yè)課程的特點是實踐性強,學(xué)生在掌握了基本語法后重點是上機實踐,即在計算機上解決實際問題,這里包括問題的分析與抽象、程序的編寫與調(diào)試。

常言道:“實踐是檢驗真理的標(biāo)準(zhǔn)”。在學(xué)習(xí)C語言過程中,上機實踐是鞏固理論知識、增加理解力、提升編程能力的重要途徑。為了提高教學(xué)質(zhì)量,讓學(xué)生真正打好專業(yè)基礎(chǔ),授課教師在教學(xué)內(nèi)容、教學(xué)方法、教學(xué)組織、考試方式等多方面上進行了調(diào)整。

2.1 教學(xué)方法以及教學(xué)組織上的改革

為了使教學(xué)效果更好,將兩個自然班作為一個授課班,教學(xué)內(nèi)容統(tǒng)一要求。講授時,由淺入深、循序漸進。在語言的基礎(chǔ)上,重點放在程序設(shè)計的思想、方法、技巧的講解,結(jié)合典型例題,培養(yǎng)學(xué)生分析、設(shè)計、解決問題的能力。通過精心設(shè)計實驗題目、課后作業(yè)、調(diào)整考核比例、增加課后上機機時、多方位提供答疑指導(dǎo)等環(huán)節(jié)培養(yǎng)學(xué)生學(xué)習(xí)興趣,使學(xué)生重視上機編程。

對學(xué)生作業(yè)題目進行精心設(shè)計,既覆蓋知識點,又有趣味性,每個題目都像在講一個故事,把要解決的問題融在故事中,學(xué)生在讀故事的同時,不自覺地就會去想解決辦法,增加了興趣,提高了自主性,也鍛煉了思維。

調(diào)整平時考核內(nèi)容。平時考核的環(huán)節(jié)包括:上機小測試、期中機考、上機作業(yè)、考勤,每一個環(huán)節(jié)的成績都會反映到平時成績中。平時成績的取得完全依賴自己的學(xué)習(xí)態(tài)度。

增加課后上機機時。由于考核重點是對實際動手能力的考核,光靠課內(nèi)安排的上機時間顯然不夠,所以需增加學(xué)生課外自主上機實驗時間,并配有指定人員輔導(dǎo)。

多方位提供答疑指導(dǎo)。所有任課教師把答疑時間錯開,這樣每周學(xué)生可以有多次答疑時間,對比原來教師只給自己學(xué)生答疑的做法,學(xué)生增加了學(xué)習(xí)解疑的機會。

2.2加強上機實驗過程控制,促進考試改革

借助于“課程自動評測與抄襲檢測系統(tǒng)”,老師和學(xué)生有了C語言作業(yè)部署、學(xué)習(xí)、檢測的平臺。通過這個平臺,老師可以布置上機實驗、安排考試、檢查學(xué)生提交的作業(yè)。根據(jù)知識點,每章布置4-5道題,限定學(xué)生在規(guī)定時間內(nèi)獨立提交。老師可以隨時查看學(xué)生提交的程序,及時與學(xué)生溝通、反饋。學(xué)生可以隨時把自己編寫的程序提交,系統(tǒng)對提交到服務(wù)器的程序自動判斷對錯,學(xué)生可以及時了解自己程序存在的問題,不斷進行修改,直到能夠順利通過所有測試。

這一環(huán)節(jié)起到了鞏固課本知識、增加獨立思考、加強動手能力的作用。期末就是利用這個平臺進行全程兩個小時的考試,要求學(xué)生既有編程的能力,又有時間的緊迫感。

加強過程考核,增加平時機考次數(shù)。為了緩解期末機考時的緊張情緒,之前會安排1-2次的上機考試,成績記入期評,其中期中考試的考試形式與期末一樣,為全程兩個小時的機考,隨機組卷。學(xué)生可以盡早了解考試模式,并更加重視對本門課程實際動手能力的訓(xùn)練,學(xué)會調(diào)整心態(tài)。

為了滿足不同層次學(xué)生的要求,在平臺上配備了大量不同難度的習(xí)題,不受提交時間的限制。學(xué)生可以根據(jù)自身需求,隨時編程測試。

2.3分層教學(xué),提升學(xué)習(xí)效率

分層教學(xué)是根據(jù)學(xué)生不同基礎(chǔ)、不同學(xué)習(xí)需求而實施教學(xué)的一種手段。是在承認(rèn)學(xué)生差異、考慮學(xué)生興趣的前提下,以發(fā)展的眼光看待學(xué)生,給每個學(xué)生提供符合他們發(fā)展的教學(xué)目標(biāo)與方法,是同時提高所有學(xué)生能力的理想狀態(tài)。經(jīng)過調(diào)研,從三個方面進行分層教學(xué)。

1)學(xué)生分層。對學(xué)生能力考核的一個重要標(biāo)準(zhǔn)就是學(xué)生的學(xué)習(xí)成績,但是在學(xué)習(xí)這門課之初,沒有可依據(jù)的成績。分層安排在講完兩周課,即學(xué)完了簡單程序設(shè)計之后進行。學(xué)生根據(jù)自己當(dāng)前對C語言的理解和接受程度,選擇不同層次。在分層教學(xué)的實施過程中,這樣的分層是暫時的、動態(tài)的。過一段時間,視學(xué)生的后期學(xué)習(xí)成績、學(xué)生的具體情況,可遞進或降層。這樣更有利于學(xué)生個性化發(fā)展。

2)講課分層。對不同層次的學(xué)生,采取不同課堂。在講授編程思想、必備知識基礎(chǔ)上,對高層次學(xué)生,拓寬和加深問題的難度,做到拔尖提高;對普通學(xué)生,在達到大綱要求的同時,考慮他們的接受能力,適度增加和加深知識,做到穩(wěn)步推進。

3)實驗分層。練習(xí)是對所學(xué)知識的鞏固和消化。按照作業(yè)、實驗題目的難易,對不同層次的學(xué)生提出不同要求。對普通學(xué)生布置基礎(chǔ)題,進行強化訓(xùn)練;對高層次學(xué)生,以綜合運用知識進行練習(xí)。要求學(xué)生多編程解決問題,以提高應(yīng)用知識的能力。這樣使得不同層次的學(xué)生得到不同程度的提高。

3 教學(xué)改革實踐效果

實行考試改革后,學(xué)生的學(xué)習(xí)積極性有了明顯提高。由于考試時間的有限性,增加了學(xué)生的緊迫感、主動性,在程序編寫、調(diào)試程序的實際動手能力方面得到了重視并有所提高,為后續(xù)課程學(xué)習(xí)奠定了良好的基礎(chǔ)。經(jīng)過分層教學(xué),滿足了不同層次學(xué)生學(xué)習(xí)的需要,激勵了各層次學(xué)生朝著有利于自己的方向努力,有利于學(xué)生個性能力的張揚,有利于學(xué)生綜合素質(zhì)的提高,更有利于優(yōu)秀學(xué)生綜合能力的發(fā)揮、較低層次學(xué)生潛在能力的開發(fā)。

3.1帶動學(xué)風(fēng),促進后續(xù)課程的學(xué)習(xí)

大部分學(xué)生能夠按時到課,勤于思考,互相研究,答疑的同學(xué)增多了。改變了不良學(xué)風(fēng),營造了良好學(xué)習(xí)氛圍。由于課程期間比較重視學(xué)生結(jié)構(gòu)化程序設(shè)計的方法,要求編寫程序之前理清解題思路、做好算法設(shè)計,經(jīng)過訓(xùn)練后,在后續(xù)的“程序設(shè)計專題訓(xùn)練”中,面對稍難一些的問題,學(xué)生也能逐步找到解決辦法,編出程序,順利通過測試。在小學(xué)期“學(xué)術(shù)工程實踐”課程中,要求完成一個小型管理系統(tǒng),有一定的難度。大部分學(xué)生能夠順利編寫由多個結(jié)構(gòu)體、多個文件、幾十個函數(shù)組成的、2000-4000行代碼的程序,并調(diào)試成功,完成管理。

3.2提升學(xué)生的程序設(shè)計能力和創(chuàng)新能力

競賽是考核學(xué)生全面素質(zhì)的一個平臺,它要求學(xué)生具有扎實的理論基礎(chǔ)、清晰的算法設(shè)計能力、嫻熟的編程能力、良好的心理素質(zhì)和快速的臨場應(yīng)變能力。

隨著知識的積累,學(xué)生的能力和自信心不斷增強。學(xué)生們更加渴求知識,渴望展示自己,參加競賽的積極性提高了,人數(shù)也不斷增多。在大二階段,報名參加全國軟件設(shè)計大賽的人數(shù)由09級的16人次(占09級學(xué)生人數(shù)14.04%)、10級的33人次(占10級學(xué)生人數(shù)26.19%),增加到11級的66人次(占11級學(xué)生人數(shù)51.56%)。全國獲獎人數(shù)由09級的1人次(占09級學(xué)生人數(shù)0.88%),到10級的12人次(占10級學(xué)生人數(shù)9.52%),再到11級的17人次(占11級學(xué)生人數(shù)13.28%),獲獎人數(shù)同比增多。

4 結(jié)論

總之,學(xué)習(xí)“高級程序設(shè)計語言”不僅要使得學(xué)生在程序表達和設(shè)計上得到培養(yǎng),更重要的是在掌握解決問題的思想、方法和手段的同時,實際動手編程能力有所提高,從而增長設(shè)計程序的能力。因而,將“C程序設(shè)計”課程的考試改為上機考試是很有益的,可以改變不良的學(xué)風(fēng),營造良好學(xué)習(xí)氛圍;可以加強學(xué)生對課程的重視,提高學(xué)生程序編寫、調(diào)試等實際動手能力,提升學(xué)生的程序設(shè)計能力和創(chuàng)新能力,為后續(xù)課程學(xué)習(xí)、為培養(yǎng)合格的專業(yè)人才奠定良好的基礎(chǔ)。

對“C程序設(shè)計”課程實施分層次教學(xué)也是必要的,可以針對不同層次學(xué)生的需求給予相應(yīng)的學(xué)習(xí)指導(dǎo),以達到學(xué)生全面發(fā)展的教學(xué)目標(biāo);可以激發(fā)不同層次學(xué)生學(xué)習(xí)的欲望,向著更高更深的知識海洋探索;可以鞭策任課教師積極思考、合理取舍,做到充分了解學(xué)生、合理安排進度,能夠極大地提升老師的組織與應(yīng)變能力。

參考文獻:

[1] 李學(xué)會.C程序設(shè)計教學(xué)改革與實踐[J].實驗室科學(xué),2010(4)33-34.

篇3

(中國礦業(yè)大學(xué)(北京) 機電與信息工程學(xué)院,北京 100083)

摘要:分析C語言教學(xué)中存在的普遍問題,從教學(xué)內(nèi)容組織形式、教學(xué)方法以及考核方式等方面提出一系列有針對性的教學(xué)方法,指出這種教學(xué)方法能有效地提高學(xué)生的學(xué)習(xí)效率和質(zhì)量。

關(guān)鍵詞 :C語言程序設(shè)計;公共基礎(chǔ)課;教學(xué)方法

基金項目:北京高等學(xué)校青年英才計劃項目;煤炭資源與安全開采國家重點實驗室開放課題(SKLCRSM11KFB12)。

作者簡介:王振武,男,副教授,研究方向為數(shù)據(jù)挖掘、圖形圖像處理,wangzhenwu@126.com。

0 引言

為提高大學(xué)生利用計算機解決問題的能力,全國高校普遍為理工科專業(yè)的低年級學(xué)生開設(shè)了C語言程序設(shè)計這門必修的公共基礎(chǔ)課程。一方面,該課程是學(xué)生接觸的第一門程序設(shè)計類課程,其編程思維的養(yǎng)成是一個較長的過程;另一方面,該課程具有內(nèi)容繁多、知識點關(guān)聯(lián)性強、算法抽象、實踐性要求高等特點,學(xué)生在學(xué)習(xí)過程中易產(chǎn)生畏難心理,進而出現(xiàn)學(xué)習(xí)動力不足、積極性不高等問題。C語言程序設(shè)計是一門難學(xué)也難教的課程,目前在教學(xué)上普遍存在很多問題。文獻[1-4]對C語言程序設(shè)計的教學(xué)方法給出了建議,但都不夠系統(tǒng)和全面。

1 C語言程序設(shè)計教學(xué)方法研究

1.1 理論教學(xué)

對于大多數(shù)課程而言,從宏觀上將課程知識點及其關(guān)聯(lián)講授給學(xué)生非常必要,這便于學(xué)生更加系統(tǒng)深刻地理解所學(xué)內(nèi)容。筆者以文獻[5]作為教材講解C語言程序設(shè)計的知識點結(jié)構(gòu)。如圖1所示,知識點之間的關(guān)聯(lián)可以層層細化,教師首先從宏觀上給學(xué)生介紹C語言程序的整體組成結(jié)構(gòu)(如圖1-(a),然后針對圖1-(a)中一個源程序文件的組成成分舉例介紹,如圖1-(b)所示。在圖1-(b)中,教師對涉及的知識點進行歸類,共包含預(yù)處理命令、數(shù)據(jù)類型、運算符、語句和函數(shù)等5部分,然后圖1-(c)至圖1-(i)依次層層展開上述各類知識點的組成,逐步細化。

從宏觀上梳理C語言與程序設(shè)計課程的知識點是非常必要和重要的,這樣可以避免學(xué)生“只見樹木,不見森林”,最后只學(xué)到一堆零散的知識點,只有從宏觀上把握各個知識點在知識體系中的位置和作用,才能學(xué)得深、記得牢。

對于程序語言課程,如果僅僅介紹語法的運用,學(xué)生往往對知識點理解不深刻。我們在教學(xué)實踐中的體會是:在講解C語言語法的基礎(chǔ)上,適當(dāng)?shù)仄饰鼍幊陶Z言在計算機中的運行機制,會讓學(xué)生的理解更加透徹。因此,我們的課堂教學(xué)方法分為如下兩部分。

1)課件講解。

課件講解包括兩部分,即知識點要點總結(jié)和知識點運行機制剖析。知識點要點總結(jié)就是告訴學(xué)生該知識點如何使用;而知識點運行機制剖析則告訴學(xué)生該程序在計算機內(nèi)存中的執(zhí)行過程。由于絕大部分高校在開設(shè)C語言程序設(shè)計之前都會開設(shè)計算機文化基礎(chǔ)等課程,因此學(xué)生有足夠的計算機基礎(chǔ)知識來理解C語言程序的運行機制。

2)實例演示。

作為一門編程語言,C語言需要在實踐中理解和掌握,因此,課堂教學(xué)中,在具體的編程環(huán)境(如VC++6.0)下演示十分必要。通過在具體的軟件環(huán)境下編程,告訴學(xué)生應(yīng)該做什么和不應(yīng)該做什么,并總結(jié)該知識點的注意事項。相比傳統(tǒng)的脫離編程環(huán)境,只在PPT或黑板上進行板書的教學(xué)模式,該方法的教學(xué)效果要好得多。在課堂教學(xué)中,具體的教學(xué)步驟如下:①使用PPT或者板書列出該知識點的注意要點;②在編程環(huán)境(如VC++6.0)下演示該知識點的用法,給出正確的和錯誤的使用方法,并進行對比;③通過幻燈片動畫或flash動畫等形式演示程序在計算機內(nèi)存中的執(zhí)行過程,讓學(xué)生更加深刻地理解程序的運行機制。

3)教學(xué)難點與重點——“復(fù)合知識點”。

從C語言的教學(xué)內(nèi)容來講,數(shù)組、函數(shù)和指針是教學(xué)的重點章節(jié),這些章節(jié)之間相互關(guān)聯(lián)的部分又是重點中的難點,如數(shù)組和函數(shù)結(jié)合,數(shù)組名做函數(shù)參數(shù),數(shù)組和指針結(jié)合,指向數(shù)組的指針變量,函數(shù)和指針結(jié)合,指向函數(shù)的指針變量等。在教學(xué)過程中要反復(fù)強調(diào)各個知識點的注意事項,如果基本知識點能夠理解透徹,上述難點內(nèi)容也就迎刃而解了。

1.2 上機實踐教學(xué)

在實踐教學(xué)中,教師可以通過實際教學(xué)案例循序漸進地強化學(xué)生對C語言知識點的理解。上機實踐的教學(xué)內(nèi)容通常分為兩部分:基本知識點練習(xí)和綜合訓(xùn)練。首先通過基本知識點的練習(xí),讓學(xué)生掌握該知識點的使用,即鞏固課堂所學(xué)內(nèi)容;然后通過一個綜合性的大作業(yè),訓(xùn)練學(xué)生綜合應(yīng)用C語言知識點的能力,例如,通過編寫“學(xué)生課程成績統(tǒng)計系統(tǒng)”考查學(xué)生對數(shù)組、結(jié)構(gòu)體、指針、函數(shù)、文件等知識的綜合掌握情況。

對于初學(xué)編程語言的學(xué)生,往往沒有養(yǎng)成良好的編程習(xí)慣,出錯的可能性較大,而出錯之后進行調(diào)試又將耗費較長的時間,這勢必對學(xué)生的學(xué)習(xí)熱情產(chǎn)生負(fù)面影響。因此,一開始就給學(xué)生制定科學(xué)的編程步驟和規(guī)范,使學(xué)生養(yǎng)成良好的編程習(xí)慣,將大大減少程序出錯的可能。在C語言教學(xué)實踐中,我們總結(jié)了“五步編程法”:①定義變量,如“int a;”;②對變量進行初始化,如“a=0;”,對變量進行初始化操作是一種良好的編程習(xí)慣,可防止未對變量賦值而引起的隱性錯誤;③通過scanf語句賦值,如“scanf(“%d”,&a);”;④實現(xiàn)程序的主要算法,該部分是程序的主體;⑤通過printf語句將結(jié)果輸出在顯示器上,將結(jié)果輸出在顯示器上便于比較程序運行結(jié)果是否正確。

下面是按照上述五步編寫的一個完整的C語言程序,用來比較兩個整數(shù)的大小。按照上述五步進行編程,經(jīng)過一段時間的訓(xùn)練之后,學(xué)生出現(xiàn)語法錯誤的可能性大大降低,此時學(xué)生更多的精力將集中在程序算法的設(shè)計和實現(xiàn)上。

1.3 考試形式

對于C語言程序設(shè)計的考核方式,我們采用知識點考核和編程實踐相結(jié)合的方式。知識點考核偏重于C語言基本語法,用于檢驗學(xué)生對知識點的掌握是否全面,此項考核約占總成績的40%;編程實踐考核用于檢驗學(xué)生的實際動手能力,學(xué)生將在規(guī)定的時間內(nèi)根據(jù)題目在機器上編程,此項考核約占總成績的60%。為了實現(xiàn)知識點的考核,我們將考試與計算機二級C語言上機考試緊密結(jié)合,采用題庫平臺進行上機考試,學(xué)生直接在機器上答題并提交,知識點考核多采取客觀題,如填空題、程序修改題以及讀程序題等,編程題在實戰(zhàn)編程中考核。C語言程序設(shè)計課程的重要特點就是實踐性強,學(xué)習(xí)該課程的目的就是為了編寫程序。因此從考試的角度講,進行編程實踐是最合適的方式,通過上機編程來考核學(xué)生的學(xué)習(xí)情況也是最公正和客觀的方式。

2 C語言程序設(shè)計教學(xué)實踐結(jié)果分析

中國礦業(yè)大學(xué)(北京)每年都有40多個班級同時開設(shè)C語言程序設(shè)計課程,因此該課程教學(xué)質(zhì)量的高低將直接影響全校理工科學(xué)生對C語言的理解和掌握。中國礦業(yè)大學(xué)(北京)C語言程序設(shè)計教學(xué)團隊經(jīng)過長期的探索總結(jié)出一套行之有效的C語言教學(xué)方法,我們將上述方法在學(xué)校越崎實驗班中進行了試點。如圖2所示,采用上述教學(xué)法的越崎實驗班的C語言程序設(shè)計課程考試成績要明顯好于其他班級,其中90分以上的學(xué)生占10.7%,80分以上的學(xué)生占總?cè)藬?shù)的53.6%。另外,學(xué)生的學(xué)習(xí)積極性比采用上述方法前得到明顯提高,很多學(xué)生都對計算機編程產(chǎn)生了濃厚興趣,實踐證明我們提出的上述方法是行之有效的。

3 結(jié)語

中國礦業(yè)大學(xué)(北京)C語言程序設(shè)計教學(xué)團隊在長期的教學(xué)實踐中探索出的這套教學(xué)方法被證明是行之有效的,它能夠極大地提高學(xué)生的學(xué)習(xí)興趣,不但讓學(xué)生學(xué)得會、記得牢,而且能夠舉一反三,把該方法應(yīng)用到其他編程語言的學(xué)習(xí)中。長期的教學(xué)實踐使我們深刻地認(rèn)識到,教學(xué)方法的好壞對提高教學(xué)質(zhì)量有直接和重要的影響。我們團隊提出的這套教學(xué)方法是對C語言程序設(shè)計教學(xué)方法的初步嘗試,希望能夠?qū)Ω叩仍盒語言程序設(shè)計教學(xué)方法的研究起到拋磚引玉的作用。

參考文獻:

[1] 謝中科. C語言程序設(shè)計的教學(xué)改革與實踐[J]. 理工高教研究, 2004,3(23): 96-97.

[2] 簡慧云. 提高C語言程序設(shè)計教學(xué)質(zhì)量的探討[J]. 理工高教研究, 2004, 6(23): 83-85.

[3] 王孝平, 董秀成, 謝維成.提高電器信息類專業(yè)學(xué)生C語言學(xué)習(xí)能力的教學(xué)方法探索[J]. 高等教育研究, 2012, 2(29): 37-40.

[4] 張麗華, 王冬星. 自主學(xué)習(xí)教學(xué)模式在C語言教學(xué)中的運用[J]. 黑龍江教育: 高教研究與評估, 2009(12): 91-92.

篇4

【關(guān)鍵詞】單片機;延時程序

接觸單片機有一年之久,從基礎(chǔ)知識了解開始,到流水燈、數(shù)碼管動靜態(tài)顯示,鍵盤到液晶等幾個基本的模塊,編了一些基本的小程序,發(fā)現(xiàn)其中最常用的延時程序用C語言編寫也是千變?nèi)f化的,不同的程序,不同的用途,精確度不一樣,延時程序也需要有改變。下面就對我所知道的延時的方法談下自己的見解。

總的延時方法通常有兩種:一種為軟件延時,通常采用循環(huán)的形式進行;另外一種為硬件延時,用到定時器/計數(shù)器,這種方法可以提高CPU的工作效率,并且能相對精確延時。

一、軟件延時與時間計算

軟件延時方式精確度不是很高,但是基本時間可以控制,并且移植性很好。

2.需要多種延時時間。還是8個燈做成流水燈,但是要求第一個燈亮1S,第2個燈亮2S,第三個燈亮3S……最后一個燈亮8S。

3.時間的確定。很多朋友看完我上面講個兩種延時方法可能會說,這樣是方便了,但是上面的時間如何確定呢?你的時間確定圖怎么來的?方法很簡單,利用keil強大的功能實現(xiàn)。比如1S延時

另外還可以用示波器測試時間,需要外接示波器,用proteus畫完連接圖,接上示波器,再調(diào)用寫好程序的hex,就可以很清楚的看到延時時間。下面為延時20ms圖。

同時還可以用反匯編工具計算延時時間,匯編時間是很精確的,便于計算的。有興趣的朋友也可以自己上網(wǎng)搜索這兩種方法。對于初學(xué)的朋友,我建議還是用這種keil本身的工具比較方便。

二、用定時器/計數(shù)器實現(xiàn)精確定時

在很多情況下,需要我們精確定時,那么我們就不能用前面講的調(diào)用小的延時子程序delay()來完成。所以就要考慮用精確的定時方式:定時器/計數(shù)器。

以上我介紹了對于寫延時程序自己的一些膚淺的見解,在以后的學(xué)習(xí)中還需要進一步提高。粗略延時用基本的delay(),精確延時用定時/計數(shù)器。

篇5

(一《)C語言程序設(shè)計》的教學(xué)目標(biāo)

社會對于人才的需要,并不是要求他們只要學(xué)會理論知識就可以,各個單位對人才的要求更看重于他們的實踐能力,要求他們能夠把所學(xué)習(xí)過的知識轉(zhuǎn)化為動手能力與實際解決問題的能力。因此,對于學(xué)生的《C語言程序設(shè)計》課程的教學(xué)只是進行理論知識的教育是遠遠不夠的,還有提升學(xué)生的綜合能力。學(xué)生要達到的認(rèn)知類目標(biāo)包括:掌握C語言程序設(shè)計課程相關(guān)的基本概念;理解解決問題的基本技巧;理解標(biāo)記控制循環(huán)與計數(shù)控制循環(huán);把握程序性的知識,并學(xué)會如何應(yīng)用。學(xué)生要達到的能力類的目標(biāo)包括:掌握C語言程序設(shè)計的基本技能,進行程序計算;熟練運用與、或、否命題,以此來解決實際中的程序問題;熟練運用一些基本的邏輯運算符;能夠使用break和continue程序控制語句;學(xué)會編寫基本字符模式下的簡單程序;另外還有培養(yǎng)學(xué)生動手實踐能力和與他人合作的能力。除此之外,還有培養(yǎng)學(xué)生學(xué)習(xí)C語言程序設(shè)計的興趣,養(yǎng)成學(xué)習(xí)工作中嚴(yán)謹(jǐn)、務(wù)真求實的良好態(tài)度,培養(yǎng)解決程序問題的開放性思維。

(二《)C語言程序設(shè)計》教學(xué)策略設(shè)計

對學(xué)生進行C語言程序設(shè)計的教育,其最終目的就是要讓學(xué)生掌握這門課程,并且運用到實際工作中,而教學(xué)策略的設(shè)計,就是為了在最短的時間內(nèi),讓學(xué)生掌握更多的知識,并且將其轉(zhuǎn)化為自身的實踐能力。(1《)C語言程序設(shè)計》的教學(xué)方法教學(xué)方法多種多樣,其中講授法、談話法、演示法、實踐法等最為常見。教師在選擇教學(xué)方法的時候,要充分考慮教學(xué)大綱的要求和教材中的內(nèi)容,還要考慮學(xué)生的學(xué)習(xí)情況與學(xué)習(xí)能力,以及現(xiàn)有的教學(xué)條件,從而選擇最適合教學(xué)工作的一種方法。同樣的教學(xué)方法,對于某一個班級的學(xué)生合適,對于另外一個班級也許就不適用,因為每個班的學(xué)習(xí)氛圍不同,同理,對于某一位學(xué)生教學(xué)方法很恰當(dāng),而對另外一個學(xué)生來說,可能就是阻礙學(xué)習(xí)的因素。因此,教師在教學(xué)過程中要對各個方面影響教學(xué)效果的因素進行充分的考慮。對學(xué)生的教學(xué)工作,可以采取分組教學(xué)的形式,這種方法不但可以讓教師能夠更大程度上關(guān)注到每一位學(xué)生的學(xué)習(xí)情況,還能夠通過小組間學(xué)生相互幫助,分享交流學(xué)習(xí)經(jīng)驗,從而獲得更多提高成績的機會。另外,學(xué)生之間的交流要比學(xué)生與教師之間的交流更為順利,學(xué)生之間相互學(xué)習(xí)更容易發(fā)現(xiàn)自身的優(yōu)勢與不足之處,從而把自己的學(xué)習(xí)經(jīng)驗分享給其他人,同時向其他同學(xué)學(xué)習(xí)自己沒有掌握的知識。小組教學(xué)還能夠增強學(xué)生的交流能力,加強學(xué)生之間的人際關(guān)系,培養(yǎng)學(xué)生的團隊合作能力,從而提升學(xué)生的綜合素質(zhì)。(2《)C語言程序設(shè)計》的學(xué)習(xí)組織形式學(xué)習(xí)組織能力是指學(xué)生在學(xué)習(xí)的過程中,師生的共同活動在程序、人員、時空關(guān)系上的組合形式。運用適合學(xué)生的學(xué)習(xí)組織形式,有助于學(xué)生提高C語言程序設(shè)計學(xué)習(xí)的效率,同時,還可以將一些高效率的學(xué)習(xí)方法、學(xué)習(xí)敬仰在學(xué)習(xí)組織形式中進行運用,由于《C語言程序設(shè)計》教學(xué)分為基礎(chǔ)知識與課程設(shè)計兩種基本形式,我們把以問題為導(dǎo)向的《C語言程序設(shè)計》教學(xué)模式下的學(xué)習(xí)組織形式也分為兩種類型。一種是課堂小組合作學(xué)習(xí)。在《C語言程序設(shè)計》所有課時中,基礎(chǔ)知識的課程占據(jù)了絕大多數(shù),教學(xué)地點可以選為網(wǎng)絡(luò)機房,以問題為導(dǎo)向的《C語言程序設(shè)計》有利于學(xué)生培養(yǎng)團隊合作精神,提高彼此之間的交流能力,鼓勵學(xué)生在學(xué)習(xí)的過程中勇敢地提出問題回答問題,為學(xué)生營造一種良好的學(xué)習(xí)氛圍。教師充分發(fā)揮自身的引導(dǎo)與輔助的作用,幫助學(xué)生發(fā)現(xiàn)問題,解決問題。另一種類型是課程設(shè)計探究學(xué)習(xí)。課程設(shè)計的時間一般比較短,在此期間,教師要通過合理的課程設(shè)計來為學(xué)生創(chuàng)造一個和諧的學(xué)習(xí)氛圍,師生之間、學(xué)生之間進行交流,分享學(xué)習(xí)經(jīng)驗與解決問題的方法,一方面可以增加學(xué)生彼此學(xué)習(xí)的機會,另一方面也可以監(jiān)督學(xué)生完成自己的學(xué)習(xí)任務(wù)。(3)網(wǎng)絡(luò)環(huán)境下的問題導(dǎo)向教學(xué)模式網(wǎng)絡(luò)環(huán)境下的以問題為導(dǎo)向的《C語言程序設(shè)計》課程教學(xué)模式,則是利用網(wǎng)絡(luò)科技來輔助教師的教學(xué)活動,在這個教學(xué)過程中,教師是教學(xué)活動中的引導(dǎo)者與輔助者,而學(xué)生才是學(xué)習(xí)的主體。教師為學(xué)生設(shè)計好學(xué)習(xí)任務(wù),明確每一位學(xué)生所要解決的問題,再對學(xué)生進行合理的分組,讓學(xué)生充分利用網(wǎng)絡(luò)資源,收集對自己有利的信息,并且對信息進行有效的篩選與整合。學(xué)生在尋求解決問題的過程中,能夠充分利用網(wǎng)絡(luò)環(huán)境的優(yōu)勢,推動以問題為導(dǎo)向的教學(xué)模式的實施,實現(xiàn)學(xué)生的自主學(xué)習(xí)、互動合作、自覺約束自己的學(xué)習(xí)活動。這樣,學(xué)生在整個學(xué)習(xí)過程中,不僅解決了教師提出的問題,還掌握了搜集、處理信息的能力,收獲成功之后的成就感,增強與他人之間的交流,提高自身的創(chuàng)造能力,真正做到增強自身的綜合素質(zhì)。

2以問題為導(dǎo)向的《C語言程序設(shè)計》的實踐

在《C語言程序設(shè)計》課程教學(xué)過程中,教師的教學(xué)工作與學(xué)生的學(xué)習(xí)活動總是會暴露一些問題,如教師講解不到位,學(xué)生不能理解理論知識,教師講課難以吸引學(xué)生的學(xué)習(xí)興趣,學(xué)生學(xué)習(xí)效率低下等問題。而以問題為導(dǎo)向的《C語言程序設(shè)計》教學(xué)模式,要如何進行具體的實施,才能夠幫助學(xué)生掌握解決問題的技巧,加深對理論知識的理解呢?

(一)以問題為導(dǎo)向的教學(xué)模式中的課程設(shè)計

在《C語言程序設(shè)計》教學(xué)過程中,使用以問題為導(dǎo)向的教學(xué)模式,要明確本次課程的教學(xué)目標(biāo)是什么,所有的課程設(shè)計的大方向要以教學(xué)目標(biāo)為準(zhǔn)則,教學(xué)中要以人為本,以學(xué)生為中心,站在學(xué)生的立場上,充分考慮到學(xué)生的接受知識的能力與完成任務(wù)的可能性。另外還有考慮哪些教學(xué)設(shè)備可以供學(xué)生使用,做到最大程度利用現(xiàn)有的資源,幫助學(xué)生掌握更多的知識。同時,對于學(xué)生的要求要合理,要求過高,學(xué)生難以完成目標(biāo),將會打擊學(xué)生的參與教學(xué)的積極性與信心,要求過低,將會浪費時間,學(xué)生的實際能力達不到質(zhì)的飛躍。因此,課程的設(shè)計要實事求是,一切從實際出發(fā)。

(二)以問題為導(dǎo)向的教學(xué)模式實施的原則

1.遵循現(xiàn)代社會教育事業(yè)的發(fā)展規(guī)律,尊重學(xué)生的認(rèn)知規(guī)律,鼓勵學(xué)生運用自己的優(yōu)勢進行創(chuàng)新性的學(xué)習(xí)。2.堅持以學(xué)生為主體、以學(xué)生為中心的原則,讓學(xué)生出于教學(xué)中的主體地位。營造輕松的學(xué)習(xí)氛圍,讓每一位學(xué)生都積極大膽地參與到其中,敢于提出自己的疑問,敢于回答教師與其他學(xué)生提出的問題,積極參與具有挑戰(zhàn)性的任務(wù)。3.教師發(fā)揮自身的引導(dǎo)與輔助的作用,引導(dǎo)學(xué)生進行有利于提高自身能力的學(xué)習(xí)活動,幫助學(xué)生解決難度較大的問題,并且監(jiān)督學(xué)生對問題作出總結(jié),從完成任務(wù)的過程中學(xué)到更多的知識。

(三)以問題為導(dǎo)向的教學(xué)模式應(yīng)當(dāng)注意的問題

篇6

[關(guān)鍵詞]C語言 程序設(shè)計 能力培養(yǎng) 教學(xué)改革

[中圖分類號]G642 [文獻標(biāo)識碼]A [文章編號]1009-5349(2015)12-0232-01

一、當(dāng)今《C語言程序設(shè)計》課程的教學(xué)現(xiàn)狀

《C語言程序設(shè)計》這門學(xué)科的教學(xué)內(nèi)容及功能是非常強大的,應(yīng)用范圍也很廣,數(shù)據(jù)結(jié)構(gòu)相對比較復(fù)雜。該課程的語法檢驗結(jié)構(gòu)相對比較薄弱,相對沒有編程基礎(chǔ)的大學(xué)生來講,要很好地學(xué)習(xí)和理解C語言的知識和程序設(shè)計方法,需要熟練各個知識點和語法結(jié)構(gòu)。以往《C語言程序設(shè)計》課程教學(xué)大多主要以C語言的語法為主要講授知識點,將教學(xué)的重點放在語言的語法知識上,因此,很大一方面就忽視了在解決問題和編寫程序語句時如何能更好地應(yīng)用有效的教學(xué)方法。很多學(xué)生在掌握語法知識后,不知道如何去編寫程序來解決實際問題。

二、《C語言程序設(shè)計》課程改革的幾點想法

(一)對教學(xué)內(nèi)容進行重組

一方面教師要充分考慮到?jīng)]有了解程序語言設(shè)計和不懂編程經(jīng)驗的學(xué)生,要將教學(xué)的重點放到C語言的理論語法知識上,全面講解《C語言程序設(shè)計》課程的基本語法知識。面對新的教學(xué)內(nèi)容,要避開以往傳統(tǒng)的細節(jié)語法知識講解,引入一套新的教學(xué)思路,要以具體的實例編程去營造一個好的教學(xué)環(huán)境和教學(xué)方式,將學(xué)生引入要讓自己有能力、有想法去判斷和總結(jié)理解掌握C語言的語法知識以及編程方法。通過第一階段的理解學(xué)習(xí),很大一部分學(xué)生能夠基本掌握C語言的基礎(chǔ)知識,同時也具備編寫C語言編寫程序的能力,并可以獨立編寫較難程序,并能順利通過程序調(diào)試與程序的測試。

另一方面要將教學(xué)的主要內(nèi)容放在那些具有掌握一些C語言基礎(chǔ)知識和編寫程序,了解C語言知識的學(xué)生上。在這個階段,課程內(nèi)容要注重培養(yǎng)學(xué)生的較專業(yè)的程序編寫與實踐。同時,在教學(xué)過程中注意設(shè)計教學(xué)環(huán)節(jié),不但要引入項目式驅(qū)動教學(xué)法,還要將教學(xué)內(nèi)容化分模塊,把每個模塊都建立一套綜合案例,把案例內(nèi)容覆蓋C語言程序設(shè)計課程的所有核心知識點,貫穿整個教學(xué)過程。

學(xué)生通過開發(fā)綜合案例,能夠?qū)⒅R點融會貫通,達到學(xué)以致用的目的。也可以把要處理的問題和知識點做成項目,給學(xué)生分配項目任務(wù),并且為學(xué)生提供可查閱的學(xué)習(xí)資料和設(shè)備。通過老師的學(xué)習(xí)指導(dǎo),讓學(xué)生自由發(fā)揮,開創(chuàng)思想,并以小組討論的形式進行任務(wù)開發(fā),共同完成一個完整的項目。在這一教學(xué)階段設(shè)計的目的是要在一個完整的項目開發(fā)過程中,使學(xué)生能夠?qū)W習(xí)和了解到一些關(guān)于C語言中不常使用到的關(guān)鍵知識。也使學(xué)生學(xué)習(xí)和掌握這些知識的可行性和要重性,在教師的正確引導(dǎo)下將問題成功解決,使學(xué)生收獲到知識。

(二)加強實踐教學(xué)

《C語言程序設(shè)計》是一門實踐性很強的專業(yè)技術(shù)課程。實踐教學(xué)是《C語言程序設(shè)計》課程教學(xué)中的主要教學(xué)環(huán)節(jié)。在加大實踐教學(xué)內(nèi)容的同時,也要改變實踐教學(xué)內(nèi)容,這也是提高和培養(yǎng)具有創(chuàng)新能力學(xué)生所必經(jīng)的階段。因此,在實踐教學(xué)上,要專門編寫相關(guān)的資料,方便教學(xué)。在資料中,可以編寫一些具有代表性的上機練習(xí)程序設(shè)計題目,使學(xué)生能更好地理解和學(xué)習(xí)C語言的知識和編程方法。同時也為學(xué)生提供一些比較綜合的編程題目,讓學(xué)生能在這些問題中,找到自己知識的缺口,然后補充知識,在這些編程題中發(fā)揮自己的優(yōu)點和創(chuàng)新點。同時,要開發(fā)學(xué)生的學(xué)習(xí)思路,培養(yǎng)學(xué)生的自主學(xué)習(xí)能力。

(三)完善網(wǎng)絡(luò)教學(xué)平臺

當(dāng)今是網(wǎng)絡(luò)遍布的時代,所以C語言課堂教學(xué)也少不了網(wǎng)絡(luò)。我們要用網(wǎng)絡(luò)教學(xué)平臺做為輔助教學(xué)手段,合理地為學(xué)生安排布置學(xué)習(xí)內(nèi)容和資料,開展小組式的學(xué)習(xí)方式,以小組方式討論問題。課堂的教學(xué)時間是有限的,對于這一類的教學(xué)活動在課堂上是不能完全實現(xiàn)的。所以要以開放式的網(wǎng)絡(luò)教學(xué)平臺為課堂輔助教學(xué)。教學(xué)平臺主要包括課程學(xué)習(xí)、電子教案、網(wǎng)上答疑、實驗指導(dǎo)等,讓學(xué)生能更好地自主學(xué)習(xí)。

(四)創(chuàng)新考試方式

以往的《C語言程序言設(shè)計》課程考試大多數(shù)是以筆試為主要內(nèi)容,目的是考查基本的語法知識,該種考核方式使學(xué)生偏重于語法學(xué)習(xí)。為此,改革傳統(tǒng)的考核方式勢在必行,期末考試采用專門的考試系統(tǒng),將理論題與實踐題相結(jié)合統(tǒng)一在上機考試環(huán)節(jié)完成,在限定時間內(nèi)考核學(xué)生的學(xué)習(xí)效果。即考即出分,減少人工批卷出錯的漏洞,減少教師的工作量,改變了傳統(tǒng)的批閱方法,通過考試的檢驗以促進學(xué)生平時學(xué)習(xí)掌握知識牢固程度,加強上機實踐,突出學(xué)生程序編寫能力過程,將實踐教學(xué)的重要性展現(xiàn)出來。

【參考文獻】

篇7

1.明確教學(xué)目標(biāo),精選教學(xué)內(nèi)容,改革教學(xué)方法。傳統(tǒng)C語言教學(xué)的目標(biāo)更多的是教學(xué)生程序設(shè)計語言,卻非程序設(shè)計,而高職學(xué)生在實際需求中更注重程序設(shè)計的能力。因此本課程改革的教學(xué)目標(biāo)是希望學(xué)生掌握簡單的數(shù)據(jù)抽象問題建模和簡單的算法等基礎(chǔ)知識,養(yǎng)成解決問題的能力和程序設(shè)計的能力,養(yǎng)成自我學(xué)習(xí)專業(yè)知識的能力,學(xué)會學(xué)習(xí)一門語言,熟練使用語言及其開發(fā)環(huán)境進行程序開發(fā)與測試的技能。C語言的計算能力強,語法知識豐富而細致,上機調(diào)試容易出錯,是一門比較難學(xué)的課程,C語言程序設(shè)計一般安排在大一第一學(xué)期,與它相關(guān)的課程沒有上,這也增加了學(xué)習(xí)的難度,學(xué)生比較難入門。因此,在開始學(xué)習(xí)的前幾節(jié)課,教師一定要注重激發(fā)學(xué)生學(xué)習(xí)興趣和學(xué)習(xí)主動性。提高教師自身素質(zhì),對所教課程鉆研精通,教學(xué)方法得當(dāng),精選教學(xué)內(nèi)容,精心設(shè)計課件,課堂演示編程和調(diào)試過程,提高學(xué)生的學(xué)習(xí)興趣。C語言語法豐富,但是如果過度強調(diào)語法知識的細節(jié)和容易出錯的地方,特別容易使學(xué)生陷入過度關(guān)注細節(jié),而忽略學(xué)習(xí)C語言的目標(biāo)在于應(yīng)用。在實際教學(xué)中要重點突出,把不常用的函數(shù)只簡單介紹,避免展開分析。在每節(jié)課之前,教師要對本節(jié)內(nèi)容進行精心設(shè)計,針對本小節(jié)的內(nèi)容提出一個與現(xiàn)實生活聯(lián)系較緊密且難度適中的問題,使用案例式教學(xué)法,分析問題,提出解決問題的方法,在分析問題、解決問題的過程中強化學(xué)生用編程解決實際問題的意識,在學(xué)生對該問題的程序所涉及的知識點和函數(shù)有了宏觀的認(rèn)識后,然后講授與此相關(guān)的語法和函數(shù),演示編程和調(diào)試的過程,最終給出相應(yīng)的程序。另外,在教學(xué)過程中不應(yīng)過度依賴PPT等多媒體教學(xué)設(shè)備,也要發(fā)揮傳統(tǒng)教學(xué)媒體的作用,利用黑板對關(guān)鍵內(nèi)容進行板書演示,加強學(xué)生對主要內(nèi)容的理解和對知識點的消化吸收。在課堂上提出問題、分析問題的過程符合學(xué)生的思維特點,也符合程序設(shè)計的本質(zhì)要求,編程思想在理論教學(xué)中逐步加強,演示編程和調(diào)試過程,使枯燥的語法在解決實際問題的編程過程中得到具體應(yīng)用。

2.加強實踐教學(xué),針對不同的學(xué)生因材施教。C語言是實踐性很強的課程,大量的語法和算法應(yīng)該在實踐教學(xué)中得到應(yīng)用和鞏固,而編程思想也必須在實踐中逐步形成。在課內(nèi)外,教師要經(jīng)常通過各種方式與學(xué)生溝通,了解學(xué)生的計算機水平、對本課程的學(xué)習(xí)情況,以及在本課程學(xué)習(xí)中遇到的問題,對不同的學(xué)生實行因材施教,對學(xué)生集中反映的問題及時解決。在實踐教學(xué)過程中要對學(xué)生提出具體詳細的要求,使每個學(xué)生能夠盡其所能提高自己的實踐技能,避免學(xué)生在有限的實踐教學(xué)時間內(nèi)因為沒有具體的實踐任務(wù)而降低實踐教學(xué)的效果。我們將實踐教學(xué)分成入門技能、基本技能和綜合技能三個階段,在不同的階段對學(xué)生提出具體的不同要求,并且根據(jù)不同學(xué)生的能力靈活調(diào)整實踐學(xué)習(xí)的要求。(1)編程入門技能。這一階段主要是練習(xí)C語言基礎(chǔ)知識、各類運算符、表達式、輸入輸出語句。首先要求學(xué)生能夠看懂課本的例題,在編輯器VC++6.0中輸入例題中的程序,并調(diào)試運行出結(jié)果。在學(xué)習(xí)初期,學(xué)生一般會出現(xiàn)各種語法錯誤,在此階段可以強化學(xué)生的語法知識。一個好的程序一般是經(jīng)過多次修改和調(diào)試才能夠很好地實現(xiàn)它的功能,因此在C語言學(xué)習(xí)過程中,調(diào)試程序、改錯是一個重要的部分,學(xué)生熟悉課本例題后,教師可以給定一些能夠?qū)崿F(xiàn)特定功能的程序,要求學(xué)生改錯,直至調(diào)試運行出正確結(jié)果。這一階段可以是學(xué)生熟練掌握語法知識,獲得學(xué)習(xí)程序設(shè)計的成就感,并激發(fā)強烈的學(xué)習(xí)興趣。(2)基本編程技能。本階段教學(xué)內(nèi)容包括函數(shù)、數(shù)組和指針,在實踐教學(xué)中要求學(xué)生需要完成簡單的編程任務(wù)。這一階段要求學(xué)生能夠看懂程序的流程圖,給定程序后,學(xué)生應(yīng)該能夠清楚的知道程序的執(zhí)行順序,通過練習(xí)學(xué)會使用順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu),改編課本例題、擴展原有的程序?qū)崿F(xiàn)更加完善的功能,使用數(shù)組、指針等新技能實現(xiàn)原有程序,實現(xiàn)一題多解,擴展解決問題的思路。教師給定實際生活中相對簡單的問題,用編程的思想對問題抽象建模,畫出流程圖,設(shè)計算法,并寫出相應(yīng)的程序來實現(xiàn)。(3)綜合編程技能。程序設(shè)計不能陷入到單純學(xué)習(xí)語言語法的誤區(qū),程序設(shè)計的語法是重要的,但是更重要的是用編程來解決實際問題。綜合編程階段教學(xué)內(nèi)容深入到結(jié)構(gòu)體、共用體和文件,在實踐教學(xué)過程中學(xué)生除了練習(xí)本階段編程的基礎(chǔ)知識外,教師提出實際問題,引導(dǎo)學(xué)生應(yīng)用所學(xué)知識分工合作解決問題,達到學(xué)習(xí)知識點、掌握編程技能的效果。教師在布置具體試驗任務(wù)時要考慮問題的難易度和趣味性,可以布置難易程度不同的多個任務(wù),學(xué)生根據(jù)自己的能力選擇不同的任務(wù)來完成,以充分發(fā)揮學(xué)生的主動性,避免能力較強的學(xué)生快速完成后浪費時間,同時也避免了水平較差的學(xué)生對實踐課程喪失信心和興趣,讓學(xué)生在學(xué)習(xí)中獲得成就感,在課堂上發(fā)揮主體作用。

3.改革考核方式。教師在教學(xué)評價體系中增加對學(xué)生動手能力的激勵機制,能夠有效促進學(xué)生的實際動手操作的主動性。改變考試方式并不是一個教師所能進行的教學(xué)改革,但教師應(yīng)該在能力范圍之內(nèi)探索教學(xué)改革,增強學(xué)生的學(xué)習(xí)效果。我校的學(xué)生的成績評定中平時成績占30%,平時成績不應(yīng)該是學(xué)生出勤率的簡單體現(xiàn),而應(yīng)是多種因素的共同結(jié)果,教師應(yīng)注重對學(xué)生學(xué)習(xí)過程的評價,并將其作為平時成績的重要參考。實踐教學(xué)一般采用驗證性實驗和綜合性實驗的方式考核。驗證性實驗由學(xué)生獨立完成,綜合性實驗則分小組進行,學(xué)生對實驗的情況撰寫實驗報告,描述需求分析、算法設(shè)計、編寫程序和上機調(diào)試的過程,總結(jié)出現(xiàn)的問題和解決方法。教師針對不同學(xué)生的不同設(shè)計方案和不同問題做一些關(guān)鍵性的指導(dǎo),形成一個以學(xué)生自己動手為主,教師引導(dǎo)與點評相結(jié)合的啟發(fā)式教學(xué)模式。在實踐教學(xué)時增加隨堂測驗,要求學(xué)生現(xiàn)場完成編寫調(diào)試程序。在評價過程中避免單一考核實驗結(jié)果的正確性,要建立面向過程,注重實踐操作能力和創(chuàng)新能力的考核機制,考核機制應(yīng)能夠反映學(xué)生實踐課程的學(xué)習(xí)態(tài)度和實驗任務(wù)的完成情況,鼓勵學(xué)生主動分析問題,嘗試用不同的方法完成實驗任務(wù),鍛煉學(xué)生創(chuàng)新能力。

二、結(jié)語

篇8

摘要:本文在分析了C語言程序設(shè)計課程的教學(xué)現(xiàn)狀和教學(xué)困境的基礎(chǔ)上,對比自然語言和程序設(shè)計語言的共性以及C語言的特殊性,提出了“從概念入手,側(cè)重程序閱讀和程序設(shè)計能力培養(yǎng)”而非“語法研究”的教學(xué)角度。

關(guān)鍵詞:C語言;程序設(shè)計;教學(xué)內(nèi)容;教學(xué)角度

中圖分類號:G64 文獻標(biāo)識碼:A

1教學(xué)現(xiàn)狀

在高等學(xué)校的本科教育中,“C語言程序設(shè)計”幾乎成了所有專業(yè)的必開課程,從計算機科學(xué)與技術(shù)、軟件工程、網(wǎng)絡(luò)工程等相關(guān)專業(yè),到電子信息類理工科各專業(yè),乃至理工科院校的所有非計算機專業(yè),有的是專業(yè)基礎(chǔ)課,有的是公共必修基礎(chǔ)課,有的是“非計算機專業(yè)的計算機基礎(chǔ)課”。只是課程名稍有差異,常見的有“C語言程序設(shè)計”、“高級語言程序設(shè)計”、“C語言”、“C程序設(shè)計”、“結(jié)構(gòu)化程序設(shè)計”等。無論叫什么樣的課程名,也無論是哪類專業(yè),其課程的教學(xué)要求和教材選用卻無太大差別,只是課時分配差異較大。

從網(wǎng)絡(luò)調(diào)查的16所不同類型高校的“C語言程序設(shè)計”教學(xué)大綱看,普遍都包含“通過本課程的學(xué)習(xí),使學(xué)生了解有關(guān)程序設(shè)計的基本概念、術(shù)語及C語言的特點,掌握C語言基本數(shù)據(jù)類型、語法規(guī)則、程序控制結(jié)構(gòu)、常用的標(biāo)準(zhǔn)庫函數(shù),培養(yǎng)學(xué)生的程序設(shè)計技能,初步積累編程經(jīng)驗”的教學(xué)基本要求;約百分之八十左右的“C語言程序設(shè)計”課程都選用由譚浩強主編、清華大學(xué)出版社出版的“C程序設(shè)計”作為主教材;課時分配從30~108課時不等,其中80課時以上的多為應(yīng)用型本科院校的計算機相關(guān)專業(yè)以及綜合性大學(xué)的非計算機專業(yè),理論課時與實驗課時的比例一般為1:1到1:1.2。與此同時,其他專業(yè)基礎(chǔ)課(如計算機組成原理、操作系統(tǒng)、數(shù)據(jù)結(jié)構(gòu)等)的課時一般為54課時,最多不超過72學(xué)時。相比之下,“C語言程序設(shè)計”所占課時是其他專業(yè)基礎(chǔ)課的1.5倍至2倍。

從教學(xué)目的看,非計算機專業(yè)的“C語言程序設(shè)計”課程主要目的是“掌握語法規(guī)則和程序結(jié)構(gòu),具備一定的程序設(shè)計能力”,而計算機相關(guān)專業(yè)的“C語言程序設(shè)計”課的教學(xué)目的則要分為三個層次,一是使學(xué)生全面理解計算機程序設(shè)計語言的基本內(nèi)容和結(jié)構(gòu);二是通過算法掌握程序設(shè)計的基本方法和步驟,并具備一定的程序設(shè)計能力;三是為后續(xù)課程的算法描述和其他程序設(shè)計語言的學(xué)習(xí)奠定基礎(chǔ)。

2教學(xué)誤區(qū)

從以上的教學(xué)現(xiàn)狀(特別是課時分配)看,長期以來,“C語言程序設(shè)計”的課程教學(xué)存在“教學(xué)內(nèi)容背離教學(xué)要求和教學(xué)目的”的誤區(qū),主要表現(xiàn)在教材誤區(qū)、講授誤區(qū)和考核誤區(qū)三個方面。

2.1教材誤區(qū)

國內(nèi)高校的“C語言程序設(shè)計”課大多選用譚浩強主編、清華大學(xué)出版社出版的“C程序設(shè)計”[1]為主教材,目前使用的是2005年7月修訂出版的第三版,教材共363頁,主體內(nèi)容分為14章,其中,第3章的數(shù)據(jù)類型與表達式占用30頁,第4章的格式輸入輸出占用12頁,前9章共占用218頁,后5章共占用145頁。占用如此大篇幅的原因是教材中除了介紹相關(guān)語法格式外,還增加了相當(dāng)多“特殊格式”和“特殊情況”的解釋和說明,因此,該教材的最大優(yōu)點就是“內(nèi)容詳盡、解釋清晰”。然而,對于初學(xué)者來說,學(xué)習(xí)計算機程序設(shè)計語言就是為了“為計算機描述求解問題的過程”,過于詳細但又遠離現(xiàn)實問題的“特殊格式”和“特殊情況”的解釋,使得學(xué)習(xí)內(nèi)容復(fù)雜化,增加了程序設(shè)計語言學(xué)習(xí)的難度,誤導(dǎo)了學(xué)習(xí)者的學(xué)習(xí)重點,由此也賦予了該教材無法掩飾的缺點,那就是教材編寫的指導(dǎo)思想和教材內(nèi)容的組織脫離了高校各專業(yè)“C語言程序設(shè)計”課程的教學(xué)目標(biāo),過分強調(diào)語法細節(jié)而忽略了程序設(shè)計語言的“正向表達能力”的應(yīng)用,過分強調(diào)“語言的靈活性”而導(dǎo)致教材主體內(nèi)容的“復(fù)雜化”,從而誤導(dǎo)“C語言程序設(shè)計”課程的教學(xué)內(nèi)容朝著“重語法學(xué)習(xí)、輕算法描述”的“語言研究”方向發(fā)展。

2.2講授誤區(qū)

由于教材內(nèi)容的“復(fù)雜”,課堂講授自然需要較多課時,教學(xué)重點當(dāng)然也放在了“語法研究”上。從網(wǎng)上下載的“C程序設(shè)計(第三版)”的配套教學(xué)課件以及有關(guān)院校的“C語言程序設(shè)計”教學(xué)課件的內(nèi)容組織上可以清楚的給出以上判斷?!罢Z法研究”型的課堂講授,更加放大了教材對“C語言程序設(shè)計”課程內(nèi)容的“扭曲”程度,給學(xué)生提供了錯誤的程序設(shè)計語言學(xué)習(xí)方法,把簡單問題復(fù)雜化,更為嚴(yán)重的是,挫傷了學(xué)生學(xué)習(xí)計算機程序設(shè)計語言的興趣和積極性,把本應(yīng)“主動學(xué)習(xí)”的課程成引入了“被動學(xué)習(xí)”的歧途,直接導(dǎo)致“懂語法、會做題,但不會編程序”的教學(xué)后果。

2.3考核誤區(qū)

多年來,“C語言程序設(shè)計”的主體考試內(nèi)容就是“語法”,無論是選擇題、填空題還是程序閱讀題,大多都無法逃脫“語法”的束縛。考試方式以筆試為主。這在某種程度上肯定了“語言研究”的教學(xué)角度,促使“C語言程序設(shè)計”的教學(xué)重點更向“語法研究”的方向傾斜,最終誤入“增加課時,強化語法,還是不會編程序”的怪圈。

3應(yīng)有的教學(xué)角度

按照網(wǎng)上調(diào)查的各專業(yè)教學(xué)大綱中“培養(yǎng)具有一定程序設(shè)計能力”的教學(xué)目的,“C語言程序設(shè)計”課程的教學(xué)落腳點應(yīng)該更確切的理解為培養(yǎng)“能用程序設(shè)計語言描述求解問題過程”的一般程序設(shè)計者,而不是造就“全面掌握程序設(shè)計語言語法、能設(shè)計高效、難懂程序”的程序設(shè)計語言方面的“作家”。因此,“C語言程序設(shè)計”課程教學(xué)相當(dāng)于自然語言中的“基本語言能力”教學(xué),而不是“語言研究”或“高級寫作”能力培養(yǎng)。

3.1自然語言與計算機程序設(shè)計語言

計算機程序設(shè)計語言是用人和計算機都能識別的方式描述計算機求解問題過程的過程描述語言,它具有和人所使用的自然語言相同或相似的組成和結(jié)構(gòu)特點,對于已經(jīng)掌握了至少一門自然語言(比如漢語或英語)并具備一定文化程度的人來說,學(xué)習(xí)一種計算機程序設(shè)計語言并非難事。自然語言的基本組成包括符號集合、字、詞、句、數(shù)據(jù)及其運算規(guī)則等基本要素,學(xué)習(xí)過程包括認(rèn)識符號、發(fā)音、識字、組詞、學(xué)語法并造句、學(xué)文法并寫短文、練習(xí)寫文章等基本階段,在具備了基本的語言能力之后,擴充詞匯量和提高寫作能力將成為終身學(xué)習(xí)的基本內(nèi)容。按照自然語言的基本組成和學(xué)習(xí)過程,也可將計算機程序設(shè)計語言的基本組成歸納為字符集、標(biāo)識符(常量、變量、保留字等)、數(shù)據(jù)類型、運算符、表達式、語句、程序格式等基本要素,其中,字符集和數(shù)據(jù)類型是定義程序設(shè)計語言的基礎(chǔ),字符按一定規(guī)則組成標(biāo)識符,用來充當(dāng)常量名、變量名或其他標(biāo)識,在自然語言中被人們公認(rèn)的特殊標(biāo)識符被賦予特定的語言含義,專門為語言系統(tǒng)所用(用戶不得再次定義其意義),稱為保留字;字符集中的特殊符號(如+、-、*、/)被賦予特定的運算意義(如加、減、乘、除)稱為運算符;不同數(shù)據(jù)類型的常量、變量用運算符按一定規(guī)則連接起來組成的式子就構(gòu)成表達式;將特定的保留字與表達式等語言要素按照語法規(guī)則組合起來就形成相應(yīng)的語句;將語句按照要描述的求解問題的邏輯順序排列起來,就構(gòu)成了某種程序設(shè)計語言求解特定問題的一段程序。

3.2C語言的特殊性

一方面,C語言是程序設(shè)計語言的一種,具備一般程序設(shè)計語言的基本組成要素和結(jié)構(gòu)特點。另一方面,C語言能成為面向過程的結(jié)構(gòu)化程序設(shè)計語言的代表,也有其自身的特殊性。首先,C語言的數(shù)據(jù)類型極為豐富。除了基本數(shù)據(jù)類型外,還有構(gòu)造類型、指針類型、空類型和用戶自定義類型,其中,構(gòu)造類型包括數(shù)組、結(jié)構(gòu)體(struct)、共用體(union)和枚舉類型(enum)等四種數(shù)據(jù)結(jié)構(gòu)。其次,C語言具有位操作能力。除了能夠?qū)Ω黝愖兞窟M行操作外,C語言還具備“按位”進行邏輯“與”、“或”、“非”、“異或”運算和“左”、“右”移位運算,這使得C語言具備了更強的系統(tǒng)開發(fā)能力。第三,C語言具有顯著的結(jié)構(gòu)化程序設(shè)計能力,并通過完整的函數(shù)定義來實現(xiàn)。第四,C語言的最大特點就是“語法限制不嚴(yán),解釋靈活”。第五,C語言允許直接訪問物理地址,可直接對硬件端口進行操作。第六,C語言沒有輸入/輸出語句,信息輸入/輸出功能由標(biāo)準(zhǔn)函數(shù)庫中相應(yīng)的I/O函數(shù)來完成。

C語言的這些特殊性,決定了C語言的教、學(xué)過程不同于其他程序設(shè)計語言的教學(xué)過程。

3.3C語言的教學(xué)角度

根據(jù)一般程序設(shè)計語言的基本組成與結(jié)構(gòu)特點,結(jié)合C語言的特殊性,“C語言程序設(shè)計”課程的教學(xué)角度應(yīng)該是:從介紹程序設(shè)計語言的基本概念入手,重點介紹語言的“正

向”設(shè)計功能而非“特殊格式”或“特殊語法”說明,側(cè)重學(xué)生的程序閱讀和程序設(shè)計能力培養(yǎng),從教學(xué)內(nèi)容的廣度和深度兩個方面,恰當(dāng)把握教學(xué)角度。

“C語言程序設(shè)計”課程的內(nèi)容可分為三個基本模塊,教學(xué)過程從第一個模塊切入,逐漸擴展到第二和第三個模塊。第一個模塊可稱為“程序設(shè)計語言公共模塊”,主要包括程序設(shè)計語言的基本概念、程序設(shè)計語言的基本要素(字符集、標(biāo)識符、常量變量以及保留字、基本數(shù)據(jù)類型、運算符、表達式、語句與控制結(jié)構(gòu)、程序結(jié)構(gòu)以及程序書寫規(guī)范等)以及輸入/輸出格式等內(nèi)容;第二個模塊是C語言的主體,主要包括函數(shù)、數(shù)組、指針、文件等;第三個模塊是高級編程內(nèi)容,主要包括結(jié)構(gòu)體(struct)、共用體(union)、枚舉類型(enum)以及用戶自定義類型等。

在教學(xué)深度方面,各模塊的教學(xué)重點應(yīng)放在“規(guī)范的語法描述和直觀易懂而且正確的語義表述上”,避免涉及各種過細的“不符合人類閱讀習(xí)慣”的語義描述,暫時避開“特殊格式”或“特殊情況”的糾纏,擺脫“研究語法”的錯誤向?qū)АT诖嘶A(chǔ)上,第一模塊的教學(xué)可與自然語言相比對,通過學(xué)生已有的自然語言學(xué)習(xí)經(jīng)驗和語言要素,使學(xué)生快速建立程序設(shè)計語言的基本概念,正確理解程序設(shè)計語言的基本要素及其關(guān)系,掌握基本語法和程序基本控制結(jié)構(gòu)(順序、選擇、循環(huán)),并通過算法歸納求解問題的過程,正確理解算法不同描述方式(自然語言、傳統(tǒng)流程圖、N-S流程圖、偽代碼、程序設(shè)計語言)的作用和差異,特別是從“問題”到“程序”的漸進轉(zhuǎn)化過程,從而培養(yǎng)學(xué)生的基本程序設(shè)計能力。通過第二模塊的教學(xué),使學(xué)生明確函數(shù)、數(shù)組、指針、文件等概念和作用,掌握它們的定義和引用方法,能進行相應(yīng)數(shù)據(jù)類型的編程,進而掌握用函數(shù)定義的結(jié)構(gòu)化模塊程序設(shè)計的方法;通過第三個模塊的教學(xué),將程序的數(shù)據(jù)處理能力擴展到結(jié)構(gòu)體、共用體、枚舉類型以及用戶自定義類型等復(fù)雜數(shù)據(jù)類型的處理上來,通過恰當(dāng)?shù)睦討?yīng)用這些數(shù)據(jù)類型,向?qū)W生展示C語言強有力的數(shù)據(jù)表示和處理能力。

另外,可以將C語言中的“語法靈活性”和不同部分的各種“特殊情況”分類總結(jié),歸納整理成“語言參考手冊”等形式,以附錄的形式提供給學(xué)生,以便需要時“備查”。這樣既可節(jié)省教學(xué)課時,又可向?qū)W生提供學(xué)習(xí)語言的主動權(quán)。

3.4教學(xué)策略和方法

“C語言程序設(shè)計”屬語言類課程,教學(xué)過程充滿了逐步完善和熟練的基本特點,因此,從教學(xué)安排的策略上要分重點、分階段逐步進行,每個階段的教學(xué)方法應(yīng)該采用建立在一定基礎(chǔ)上的有重點的“部分教學(xué)法”,以核心內(nèi)容為基礎(chǔ),向外逐漸延伸,部分學(xué)習(xí),漸進掌握。盡可能避免不分主次、不論難易、不顧急緩,盲目一次性掃清各類知識點的“地毯式”教授方法或?qū)W習(xí)方法,同時強調(diào)自學(xué)和上機驗證,強化在特定環(huán)境下(如Turbo C++ 3.0)的程序設(shè)計訓(xùn)練,做到“精講多練[2]”,從小程序練起,逐漸過渡到求解較大或?qū)嶋H問題的程序設(shè)計上來。

4結(jié)束語

從目前的教學(xué)現(xiàn)狀看,無論是計算機相關(guān)專業(yè),還是理工科的電子信息類專業(yè),乃至綜合性大學(xué)的非計算機專業(yè),“C語言程序設(shè)計”的課程教學(xué)均占有重要的教學(xué)地位,在全面提高教學(xué)質(zhì)量和教學(xué)效率的今天,不同類型專業(yè)結(jié)合自身優(yōu)勢和程序設(shè)計語言類課程的特點,選擇合適的角度組織和實施“C語言程序設(shè)計”課程的教學(xué)活動非常重要,而且很有必要。筆者的教學(xué)實踐證明,避開“語法研究”的程序設(shè)計教學(xué)不僅可減少課時,更可提高學(xué)生利用程序設(shè)計語言“表述求解問題過程”的能力。

參 考 文 獻

篇9

[論文摘要]C程序設(shè)計語言作為大、中專學(xué)生入學(xué)后的首門計算機語言課程,也是重要的程序設(shè)計課程。對于學(xué)生來說,程序設(shè)計的思維方式和概念都是全新的,學(xué)生接受起來很困難,通過對C程序設(shè)計語言教學(xué)方法探討,能收到較好的教學(xué)效果。

一、引言

《C程序設(shè)計語言》是計算機及相關(guān)專業(yè)中一門重要的計算機基礎(chǔ)課程,由于其在當(dāng)今系統(tǒng)軟件和部分應(yīng)用軟件的開發(fā)中具有實用性強的特點,又與硬件和程序設(shè)計環(huán)境底層的聯(lián)系緊密,是當(dāng)今計算機軟硬件工程師應(yīng)該掌握的一種基本的、比較實用的程序設(shè)計語言。它作為學(xué)生入學(xué)后第一次系統(tǒng)地學(xué)習(xí)與高級程序設(shè)計語言和程序設(shè)計有關(guān)的內(nèi)容的一門新課程,本身就比較難;再加上其內(nèi)容的龐雜、語言描述的靈活,更讓學(xué)生感覺難上加難。因此對于擔(dān)任該課程的老師來說,如何教好這門課程,培養(yǎng)學(xué)生運用C程序設(shè)計語言分析問題、解決問題的能力,是這一門課程的目的和宗旨。

二、采用案例教學(xué),培養(yǎng)學(xué)生的興趣和積極性

C程序設(shè)計是應(yīng)用性很強的一門課程它既有理論又有實踐,既講方法又講動手能力。一般來說,教材中前幾章都是先介紹C程序設(shè)計語言的一些概念和基礎(chǔ)知識,然后才介紹程序的建立和運行。這些概念和基礎(chǔ)知識,既枯燥又比較抽象難懂。在教學(xué)中,我們打破課本原有的順序組織課堂教學(xué)的方式的邏輯結(jié)構(gòu)體系,改用從案例入手,通過給學(xué)生演示、讓學(xué)生模仿,在實際應(yīng)用中去探究和領(lǐng)悟這些概念,并適時地加以歸納總結(jié)和概念的延伸,讓學(xué)生在輕松愉快的氣氛中學(xué)習(xí)新知識。

案例教學(xué)法打破了以教材為中心的傳統(tǒng)教學(xué)模式,不按教材的順序授課,而是以精選出的程序設(shè)計的案例為中心,把學(xué)習(xí)的重點放在具體案例的講述上,把要學(xué)習(xí)的語法和概念融入到具體案例中來講解。整個教學(xué)過程中強調(diào)在應(yīng)用中學(xué)習(xí),從而避免了枯燥的理論說教,不僅能增進學(xué)生的學(xué)習(xí)興趣,而且對提高學(xué)生綜合分析和解決實際問題的能力也大有幫助。那么該如何培養(yǎng)學(xué)生對C語言課程的興趣呢?案例教學(xué)法是培養(yǎng)學(xué)生學(xué)習(xí)興趣的有效途徑一。

三、運用多媒體CAI課件教學(xué),提供交互式學(xué)習(xí)環(huán)境

C語言的內(nèi)容比較繁雜,我們把概念、定義等一些知識性的東西用幻燈的形式投影出來就會使課堂內(nèi)容更加豐富,提高學(xué)生的注意力,節(jié)省老師板書的時間,讓整堂課的效果改觀。但是課堂上課件的演示也要適當(dāng),避免喧賓奪主,使學(xué)生更多地關(guān)注了形式的變化,而忽略了內(nèi)容本身。相應(yīng)的,課件在其他內(nèi)容的處理上就要慎重了。比如算法、程序的設(shè)計,我們不是只注重給學(xué)生一個結(jié)果、一個程序,而更應(yīng)該展示給學(xué)生的是一個過程,一個思想,也就是怎么樣去解決這個問題。我們的重點在于教會學(xué)生掌握方法,即幫助學(xué)生學(xué)會自己解決問題,而不是幫助學(xué)生解決問題。即授人以漁,而非授人以魚。因此在講解這些內(nèi)容的時候就不能是一張幻燈一個算法、一個程序,而應(yīng)該重點介紹方法、思想,根據(jù)題目求解的過程,一步一步把結(jié)果“ 寫” 出來。

多媒體CAI課件主要包括課程內(nèi)容、算法演示、在線測試、在線討論以及資源中心五部分功能。多媒體CAI課件可以提供交互式環(huán)境供學(xué)生學(xué)習(xí),并自動根據(jù)操作過程進行實時評價。將多媒體CAI課件和教師課堂講授有機地結(jié)合起來,能形成最佳教學(xué)任務(wù)的綜合性手段與教學(xué)方案。

四、把握課堂教學(xué)方法,提高課堂教學(xué)質(zhì)量

(一)注意“互動式教學(xué)”,切記不要“自演自說”?;邮浇虒W(xué)就是要改變老師是課堂上唯一主體形式的狀況,讓學(xué)生也作為主體形式參與到課堂上來。互動式教學(xué)既可以提高學(xué)生的參與積極性,還可以避免學(xué)生上課疲勞,產(chǎn)生注意力不集中的現(xiàn)象。互動式教學(xué)在形式上有老師提問,讓學(xué)生上黑板演算、上教師機操作,讓學(xué)生討論等,讓學(xué)生進行正誤判析,解決普遍性問題,或者請有獨特思路的同學(xué)演示自己的方法或程序,對比各種方法的優(yōu)缺點,鼓勵大家再提出新方法。實踐證明,這種教學(xué)方法效果顯著,課堂活躍,學(xué)生的參與程度很高。但是我們在進行師生互動方面也要注意把握一個度的概念,讓課堂既要有互動的活躍氛圍,也要有好的課堂秩序,使得課堂互動有序有效進行。

(二)培養(yǎng)學(xué)生讀程序的能力。程序是C語言的本質(zhì),讀程序是學(xué)習(xí)C語言入門最快,也是最好的方法。要培養(yǎng)學(xué)生獨立編程的能力,首先應(yīng)該培養(yǎng)學(xué)生讀程序的能力。學(xué)生讀的程序越多,見識的編程的思想、方法、技巧也就越多,就能更加擴展自己的編程思路,還能在某些時候把別人的東西拿來歸為己用。

在培養(yǎng)學(xué)生讀程序方面要注意循序漸進,先給學(xué)生讀一些簡單的、只有幾行的程序,然后逐漸增大程序的復(fù)雜度。

(三)采用問題驅(qū)動法。在C程序設(shè)計語言課程中,有一些概念之間的差別和程序的設(shè)計步驟如果只通過教師講述,學(xué)生在字面上可以接受,但在理解深度上往往難以達到令人滿意的效果,如果能設(shè)計出一系列問題,讓學(xué)生在實踐和解決問題的過程中自己去探究和體驗,情況將完全是另一個樣子。另外,采用一些有趣的問題來引入對某些語句結(jié)構(gòu)的學(xué)習(xí)同樣有相同的作用。

采用問題驅(qū)動法,一切都要求學(xué)生自己動手動腦設(shè)計,他們在操作過程中探究和解決問題的積極性和主動性得到

了調(diào)動,從而達到了我們的教學(xué)目標(biāo)。

五、加強實驗環(huán)節(jié)的教學(xué)設(shè)計,輔助理論教學(xué)

C程序設(shè)計語言是實踐性很強的一門課,培養(yǎng)學(xué)生的實踐能力是教學(xué)的首要目的。因此,在授課的同時,如何引導(dǎo)學(xué)生利用上機實驗來加強實踐也是教學(xué)中的一個重要環(huán)節(jié)。C程序設(shè)計語言實驗教學(xué)的目的應(yīng)是:1. 緊密配合理論教學(xué),通過相關(guān)實驗,幫助和加深對語句功能的理解;2. 通過實驗可以將各門課程學(xué)到的知識融會貫通,思考利用C程序設(shè)計語言解決實際應(yīng)用問題的有效方法,從而使學(xué)生分析和解決問題的能力得到鍛煉和提高。依據(jù)實驗教學(xué)的目的,考慮學(xué)生的個體差異,將實驗設(shè)置成不同的類型:必做和選做實驗:這兩類實驗都是結(jié)合相關(guān)課程的教學(xué)需要由授課教師設(shè)計的;前者目的在于幫助學(xué)生掌握基礎(chǔ)知識和實驗研究方法,后者則在于培養(yǎng)和鼓勵學(xué)生的學(xué)習(xí)興趣、擴大知識面以及培養(yǎng)學(xué)生的應(yīng)用能力和創(chuàng)新意識。從而大大激發(fā)了學(xué)生的學(xué)習(xí)熱情,為其今后的學(xué)習(xí)和工作打下良好的基礎(chǔ)。

六、結(jié)束語

要教學(xué)好C 程序設(shè)計語言,關(guān)鍵在于教師要有效地組織教學(xué),才能激發(fā)學(xué)生的學(xué)習(xí)興趣,讓學(xué)生主動、愉快地學(xué)習(xí),滿足他們的求知欲,這樣才能取得良好的教學(xué)效果。

參考文獻

篇10

【關(guān)鍵詞】C語言程序設(shè)計 教學(xué)方法 資源整合

C語言是一門結(jié)構(gòu)化程序設(shè)計語言,對于學(xué)生來說,C語言程序設(shè)計的思維方式和概念都是全新的,學(xué)生接受起來很困難。那么,在C語言程序設(shè)計教學(xué)過程中,怎樣開展這種構(gòu)造性的又具有創(chuàng)造力活動的教學(xué)呢?筆者經(jīng)過這幾年的自我學(xué)習(xí)以及實際教學(xué)中的不斷摸索,對C語言程序設(shè)計教學(xué)方法有了一些認(rèn)識,與大家共同探討。

一、注重網(wǎng)絡(luò)環(huán)境下的資源整合

互聯(lián)網(wǎng)技術(shù)的飛速發(fā)展徹底引發(fā)了閱讀、計算等方式的變革,巨大的信息量、便捷的信息傳

遞、極強的交互性,使得網(wǎng)絡(luò)成為最有效的資源獲取工具。因此,在教學(xué)過程中建立或利用一個以C語言為專題的編程學(xué)習(xí)網(wǎng)站,整合與C語言編程相關(guān)的豐富的學(xué)習(xí)資源,為學(xué)生提供動態(tài)的、協(xié)作性的學(xué)習(xí)環(huán)境和學(xué)習(xí)工具,讓學(xué)習(xí)者自己選擇信息資料,自己收集、分析并應(yīng)用知識,去解決實際問題。通過網(wǎng)絡(luò)學(xué)習(xí)環(huán)境開展C語言教學(xué),提高了C語言教學(xué)活動的有效性。

二、以合作學(xué)習(xí)為導(dǎo)向,改革課堂教學(xué)環(huán)節(jié)

合作學(xué)習(xí)是備受國際教育界推崇的學(xué)習(xí)模式,因為它有助于培養(yǎng)學(xué)習(xí)者的合作精神和協(xié)同解決問題能力。

教學(xué)中,以幾名學(xué)生為小組組成學(xué)習(xí)的基本單位,學(xué)生在學(xué)習(xí)小組內(nèi)相互協(xié)作、相互幫助、群策群力,共同完成相應(yīng)的教學(xué)任務(wù)。實際教學(xué)中,教師向各小組布置項目任務(wù),給以必要的說明,提供必要的資料和網(wǎng)絡(luò)資源,然后各學(xué)習(xí)小組研究問題,制定解決方案,最后將結(jié)果展示出來。例如,在C語言中的函數(shù)調(diào)用這一個問題,將程序分解為數(shù)個模塊,每個小組各自承擔(dān)其中一個模塊的程序編寫,C語言模塊化程序設(shè)計的思想在這時得到充分地展現(xiàn),讓學(xué)生深刻理解了模塊化程序設(shè)計理念,同時也使學(xué)生感受到了團隊合作的重要性,培養(yǎng)了學(xué)生協(xié)作互助精神。

三、抓住重點,分散難點,注重循序漸進

學(xué)習(xí)程序設(shè)計是一個逐步積累的過程。教材在整體設(shè)計上,要注意分散難點、合理選材,為學(xué)生建立科學(xué)的學(xué)習(xí)順序,并注意適時、適量,學(xué)以致用地逐步滲透相關(guān)的知識、思想和方法。對于有難度的知識點,采用先用一個簡單的例子讓學(xué)生有所了解,經(jīng)過一段時間的反復(fù)練習(xí)以及相關(guān)知識的積累后,再引入一個復(fù)雜一些的例子,深入理解和掌握,然后再加以概括和總結(jié)。讓學(xué)生對知識的認(rèn)識、理解、運用有一個逐步深入的“螺旋式”上升過程。幫助學(xué)生把已學(xué)到的內(nèi)容不斷納入新的內(nèi)容體系中去,使學(xué)生認(rèn)知結(jié)構(gòu)中原有的概念和新的知識建立起實質(zhì)性的聯(lián)系。例如,雙循環(huán)結(jié)構(gòu)知識點中的打印規(guī)則圖案的程序設(shè)計方法,就可依據(jù)問題的難易程度,先找出直角三角形圖案形成的規(guī)律,再探究等腰三角形圖案的形成特點,最后解決構(gòu)成菱形圖案的程序設(shè)計,讓學(xué)生有一個全面、系統(tǒng)的理解和掌握解決該問題的思想方法。

四、立足任務(wù)驅(qū)動,滲透基本概念

概念的形成過程常常是學(xué)生進行邏輯思維的過程,如果遵循邏輯思維過程去組織教學(xué),必將使學(xué)生容易掌握概念。因此,要想讓學(xué)生領(lǐng)會C語言中抽象的概念,教學(xué)中以實例任務(wù)作為知識的載體,在每個實例中適時、適量滲透一些相關(guān)的概念和知識,由實例去驅(qū)動學(xué)生主動發(fā)現(xiàn)、分析和處理問題,讓學(xué)生在做中學(xué),在學(xué)中做,使學(xué)生在完成任務(wù)的過程中,逐漸地、很自然地去體會C語言的語法規(guī)則及相關(guān)概念,并且在這一過程中,學(xué)生還能體會到相似概念之間的差別,以及解決這一問題的不同程序設(shè)計步驟。比如,當(dāng)型循環(huán)while與直到型循環(huán)do-while語句的區(qū)別,如果只通過教師講述,多數(shù)同學(xué)一般只能在表面上知其然,實則不知其所以然,但如果給出一個具體的任務(wù)實例,讓同學(xué)們在實踐后的結(jié)果中自己去體

驗兩者之間的不同,留在學(xué)生腦海中的記憶將猶為深刻。

五、引導(dǎo)學(xué)生建構(gòu)自己的知識體系

基于網(wǎng)絡(luò)環(huán)境下的學(xué)習(xí)過程具有開放性、廣域性和易交流性。因此,網(wǎng)絡(luò)環(huán)境下的創(chuàng)新教育能真正達到因材施教、發(fā)展個性的目的,能夠使學(xué)生主動參與學(xué)習(xí)過程,并按照自己的認(rèn)知水平有序地進行學(xué)習(xí)和提高,并使其創(chuàng)造性學(xué)習(xí)成為一種習(xí)慣。建構(gòu)主義的教學(xué)活動中,教師的教學(xué)形式并不固定,學(xué)生則作為一個主體,積極會同其他的小組成員一起,通過已經(jīng)整合的學(xué)習(xí)資源在網(wǎng)絡(luò)下討論和學(xué)習(xí),教師給予學(xué)生引導(dǎo)和幫助,解決學(xué)生建立知識體系過程中所出現(xiàn)的問題。這樣,學(xué)生既掌握了教材上的內(nèi)容,同時又通過網(wǎng)絡(luò)資源學(xué)習(xí)了相關(guān)的知識點,完成了對自己知識體系的建構(gòu),形成了自己的學(xué)習(xí)方式,而教師不但完成了教學(xué)任務(wù),也教會了學(xué)生學(xué)習(xí)的方法,為學(xué)生以后的自我學(xué)習(xí)打下基礎(chǔ),正所謂“教”與“學(xué)”相得益彰。

六、做好歸納總結(jié),提高學(xué)生學(xué)習(xí)效率

C語言程序設(shè)計的學(xué)習(xí),很重要的一點在于歸納總結(jié)。一個章節(jié)的結(jié)束,學(xué)生則難以形成完整、清晰的框架,因此,教師在教學(xué)中要及時歸納、做好小結(jié)。教學(xué)歸納可以是一個知識點的歸納(如if條件語句的歸納),也可以是對一種知識結(jié)構(gòu)的歸納(如分支結(jié)構(gòu)中包含if語句、while語句、循環(huán)語句等的歸納)。總結(jié)可以是一個小節(jié)的總結(jié),也可以是一個單元內(nèi)容的總結(jié)。歸納總結(jié)的形式也可以多種多樣,可以使用文字概括,也可以使用圖表總結(jié),重點難點要著重強調(diào)。做好歸納總結(jié),有利于學(xué)生對知識的理解、做到融會貫通,順利實現(xiàn)知識遷移,提高學(xué)生的學(xué)習(xí)效率。

教學(xué)方法在程序設(shè)計教學(xué)中的重要性是不言而喻的,它制約著程序設(shè)計教學(xué)的效率。面對的教學(xué)對象不同,教學(xué)方法各異,但使每位學(xué)生都能得到充分的發(fā)展,培養(yǎng)創(chuàng)新人才,是我們的同一目的,教學(xué)絕不能脫離學(xué)生的知識背景和認(rèn)知規(guī)律。

參考文獻:

[1]扈中平.現(xiàn)代教育理論.高等教育出版社,2004.