999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

關于C語言教學方法和程序設計的探討

2007-01-01 00:00:00陳仲民
計算機教育 2007年6期

摘要:本文討論了C語言教學方法及若干程序設計技巧。

關鍵詞:C語言;教學方法;程序設計

中圖分類號:G642 文獻標識碼:B

文章編號:1672-5913(2007)06-0003-04

C語言是目前國內理工科專業的首選教學語言,它功能強大,表達靈活方便,面向硬件,但學生接受起來有一定的難度。如何提高教學質量,讓學生盡快掌握這門語言,值得探討。下面根據筆者多年來的教學體會,談談自己的想法。

1 研究教學方法,提高教學水平

首先要培養學生的學習興趣。教師要在教學方法與手段上多下功夫,加強對學生的引導,在講清語法規則的基礎上,可通過許多具體有趣的實例,如“兔子問題”、“水仙花數”、“競賽記分”等來激發學生的學習主動性與積極性,綜合利用板書、課件、程序演示等手段,做好師生互動,使學生加強理解和記憶。

教學過程上要講究循序漸進。教師要在充分備課的基礎上,吃透教學內容,對課程的重難點胸中有數,重視層次性和條理性,既注意教學內容本身的系統性和科學性,又要注意通俗性、可接受性和啟發性,由淺到深,由表及里,環環相扣,真正做到精選精講,授課時突出解題思路、方法和步驟,使學生掌握如何分析和解決問題,逐漸培養學生進行程序設計的正確思維模式。

要特別重視培養學生的實踐動手能力。學好一門語言除了理解語法規則和掌握算法思想外,最重要的就是多編程、多上機、多調試。任務驅動下的協作學習是學習C語言課程的好方法,教師要在教學實踐中為學生創造協作學習的環境,及時發現問題并予以指導。除正常的上機實驗課外,可通過布置大作業及安排實習周的模式,來強化對學生的訓練。

最后,要作好課外輔導。建立C語言學習網站,包括課程內容、習題解答、實驗指導、在線測試、網上答疑等,充分發揮學生的主觀能動性,充分利用計算機網絡為教學服務,進一步提高教學質量。

2 關于C語言程序設計中值得注意的若干問題

2.1 幾個易出錯的問題

(1)++ i和i++的區別:++ i是先執行i=i+1后,再使用i的值;而i++是先使用i的值后,再執行i=i+1。如:i=3,printf(″%d″, + + i)輸出值為4;若用printf(″%d″,i + +),則輸出值為3。“- -”與此類似。

(2)對邏輯與,如果第一個操作數的值為0,則第二個操作數就不再被計值;而對邏輯或||,如果第一個操作數為1,則第二個操作數不再被計值。

例如下述的程序段寫法有問題:

if(a>3 b = = (c=5*3))

a=c;

else a=c+1;

其目的是當a大于3而且b與c的值(5×3)相等時,把c值賦給a。但實際上當a不大于3時,第二個表達式(c=5*3)不再被計值,所以c的值并不等于15(因為沒有運算5*3并賦值給c),從而a=c+1的結果就不正確。在編程中遇到這類問題,應把必須參加運算的表達式寫在前面。因而上例應改寫成:

if(b = = (c = 5 * 3) a>3)……

再如:int x=5, y=0, z=6, i;

i=x-3 | | + + y | | z*5;

printf(\"i=%d, y=%d, z=%d\",i, y, z);

其結果是i=1, y=0, z=6,而不是i=1, y=1, z=30。理由很簡單,由于x-3非零值,即可得出i結果1(真),不再繼續判斷y和z*5的值。

(3)比較兩數是否相等用“= =”,而不是“=”,因為后者是賦值運算符。但比較兩字符串是否相等,則用庫函數“strcmp(char *, char * )”,而不能用“= =”。

(4)庫函數getchar使用中應注意的問題。請看下面的一個例子:

# include

main( )

{

int ch;

int year;

do {

printf(\"please input year: \\ n\");

scanf(\"%d\", year);

if(year%4 = = 0 year% 100! =0 || year% 400 = = 0)

printf(\"YES %d \\ n\",year);

else

printf(\"NO%d\\", year);

printf(\"Y-continue, any key - -

exit \\ n\");

error:ch=getchar ( ) ;

} while (ch = = `Y`|| ch = =`Y`);

}

上面程序其本意是,當輸入完年份后,按“Y”或“y”繼續,其實做不到,因為每輸入一個數還須按一下回車,為了去掉這個回車,須再加一個getchar()語句。將標號為error的語句改為getchar(),ch=getchar();就可以了。

(5)關于文件讀寫語句,fread函數和fwrite函數一般只適宜于讀寫數據塊,尤其是讀寫結構體變量最為合適,而對文本文件的讀寫用fscanf函數和fprintf函數最方便。另外,對文件的讀寫應注意文件指針的位置。如下例,要求從鍵盤中輸入若干行字符(每行長度不等),輸入后把它們存儲到一磁盤文件中,再從該文件中讀入這些數據,將其小寫轉換成大寫字母在顯示屏上輸出。

# include\"stdio.h\"

main( )

{

char c;

FILE* fp;

it((fp=fopen(\"c:czmt\", \"w+\")) = = NULL)

{ printf(\"\\ ncan`t open file\");

exit(0);}

while((c=getchar())! =EOF)

fputc(c,fp);

linel: while((c = fgetc(fp))! =EOF)

{ if(c>=`a`c< =`z`) c=c -32;

putchar(c);}

fclose(fp);

}

上面程序達不到要求的效果。原因在于執行完\"fputc(c,fp);\"后,文件指針已不在開始位置,應用rewind函數使文件指針重新回到文件開頭,在標號為linel語句前加上一句\"rewind(fp);\"就可以了。

2.2 遞歸和指針

C語言中,遞歸的應用比較靈活,如下面的例子,將一個整數n轉換成字符串,例如,輸入483,應輸出字符串“483”,n位數不確定,可以是任意位數的整數。用遞歸法編制的程序如下:

include\"stdio.h\"

void change(m)

int m;

{int k= m%10;

if(m/10) m = m/10, change(m);

printf(\"%d\",k);

}

main()

{ int i;

printf(\"\\ nplease input a number \\ n\");

scanf(\"%d\", i);

if(i<0)i=-i, printf(\"-\");

change(i);

}

指針是C語言中最靈活、最復雜且最重要的類型,將指針、函數、數組與運算符結合時,經常使一些說明語句變得很復雜,使人難以理解。例如:int(* p)[],由于加括號后*號的優先級最高,故應讀做:指向整型數組的指針;而int* p[ ]由于[]比*的優先級高,則應讀做指向整數型的指針數組。同理,對int* p()[],函數圓括號()與[]的優先級相同,但由于它出現在方括號前面,因此,它的優先級高些,故讀做返回整型指針數組(首地址)的函數。

3 靈活應用C語言編制程序

對同一個問題可以多種方法實現,如下面的例子,在A盤上有一個數據文件js.dat,文件中有10個整數為:3 8 17 28 39 44 56 73 80 95,編程從js.dat中取出這10個數,將其中的素數輸出到文件A:js.out中,要求求素數過程必須用子函數prime( )。我們可用3種方法實現,一是函數不設返回值,main函數和prime函數都對同一個數組操作;二是每次只返回一個值,多次調用prime函數;還有一種方法就是,函數的返回值設為指針(數組的首地址),調用一次prime函數即可。程序分別如下:

/* filel.c* /

#include\"stdio.h\"

# include\"math.h\"

void prime( );

int a[10];

main( )

{

FILE* fp, * fpl;

int i;

if((fp=fopen(\"a:js.dat\",\"r\")) = = NULL)

{printf(\" \\ n can`t open file\");

exit(0);}

for (i=0;i< = 9; i + +)

fscanf(fp, \"%d\", a[i]);

if ((fpl=fopen(\"a:js.out\", \"w\")) = = NULL)

{

printf(\" \\ n can`t write file\");

exit(0); }

prime(a);

for(i=0;a[i]! =0i< = 9; i + +)

fprintf(fpl, \"%d\", a[i]);

fclose(fp), fclose(fpl);

}

void prime(a)

int a[ ];

{

int i,j,k,m=0;

for(i=0;i<=9;i+ +)

{

k=sqrt(a[i]);

for(j=2;j<=k;j + + )

{if(a[i]%j = =0)break;}

if(j>k) a[m + + ] = a[i];

}

for(;m< =9;m + + )

a[m] = 0 ;

return;

}/* end* /

/ * file2. c* /

# include < stdio.h >

# include < math.h >

main()

{

int a[10], b, i;

FILE* fp, * fpl;

if((fp=fopen(\"A:js.dat\", \"r\"))= = NULL)

{ printf(\"can`t open a:js. dat \\ n\");

exit(1);}

if ((fpl=fopen(\"A:js. out\", \"w\"))= = NULL)

{ printf(\"can`t open a:js. out \\ n\");

exit(1);}

for(i=0;i<= 9;i+ +)

fscanf(fp, \"%d\", a[i]);

for(i=0;i< =9; i + +)

{b=prime(a[i]);

if(b! =0)

fprintf(fpl, \"%d\\ n\",b); }

fclose(fp), fclose(fpl);

}

int prime(a)

int a;

{

int k, t, b;

k=sqrt(a);

for(t=2;t< =k; t+ +)

if ((a%t)= = 0)break;

if(t>k)return(a);

else retun (0);

}/* end* /

/* file3.c* /

# include

# include

int* prime();

main()

{

int i;

static int a[10];

int* b;

FILE* fp, * fpl;

if((fp=fopen(\"A:js.dat\",\"r\")) = = NULL)

{ printf(\"can`t open a:js. dat \\ n\");

exit(1);}

if ((fpl=fopen(\"A:js.out\",\"w\")) = =NULL)

{printf(\"can`t open file \\ n\");

exit(1);}

for(i=0;i<=9;i + +)

fscanf(fp, \"%d\", a[i]);

b=prime(a);

while (* b)

{

fprintf(fpl, \"%d\", * b + +);

}

fclose(fp), fclose(fpl);

}

int* prime(a)

int a[ ];

{

int i,j,k,m=0;

static int b[10];

for(i=0;i< =9;i + +)

{

k=sqrt(a[i]);

for(j=2; j< =k;j + +)

if((a[i]%j) = =0) break;

if (j>k)b[m + + ] = a[i];

}

return(b);

}/* end*/

參考文獻:

[1] 譚浩強.C程序設計[M].北京:清華大學出版社,1991.

[2] Boris Allan.C Programming principles practice[M].Paradigm Publishing,1987.

收稿日期:2006-11-29

作者簡介:陳仲民(1964-),男,副教授,研究方向:并行與分布式計算,軟件工程。

主站蜘蛛池模板: 亚洲天堂色色人体| www.亚洲一区| 中文字幕2区| 97国产成人无码精品久久久| 成人久久18免费网站| 91精品国产丝袜| 一区二区欧美日韩高清免费| 香蕉精品在线| 成人免费视频一区| 日本人又色又爽的视频| 日日噜噜夜夜狠狠视频| 国产成人喷潮在线观看| 91精品国产自产在线观看| 亚洲IV视频免费在线光看| 国产欧美日韩综合在线第一| 国产拍揄自揄精品视频网站| 欧美日本视频在线观看| 在线看片中文字幕| 二级特黄绝大片免费视频大片 | 亚洲AV无码不卡无码| 91精品国产情侣高潮露脸| 国产日韩久久久久无码精品| 在线播放91| 成人免费一区二区三区| 国产极品粉嫩小泬免费看| 日韩成人午夜| 这里只有精品在线播放| 精品综合久久久久久97超人| 国产精品一区二区在线播放| 午夜精品区| 国产精女同一区二区三区久| 日韩精品免费一线在线观看| 97精品伊人久久大香线蕉| 无码aaa视频| 国产成人禁片在线观看| 亚洲av无码成人专区| 久久国产亚洲欧美日韩精品| 色婷婷狠狠干| 免费无码在线观看| 亚洲综合二区| 国产99视频在线| 毛片视频网| 国产精品v欧美| 欧美在线精品一区二区三区| 高潮毛片无遮挡高清视频播放| 免费毛片视频| 天堂在线视频精品| 欧美成人一级| 亚洲AV成人一区二区三区AV| 国产香蕉在线| 亚洲天堂网在线观看视频| 国产自在线播放| 中文字幕亚洲第一| 波多野结衣无码中文字幕在线观看一区二区 | 五月丁香伊人啪啪手机免费观看| 亚洲欧洲一区二区三区| 最新无码专区超级碰碰碰| 欧美一级高清视频在线播放| 人妻少妇乱子伦精品无码专区毛片| 在线观看国产精美视频| 69av在线| 国产三级视频网站| 精品午夜国产福利观看| 精品人妻无码区在线视频| 免费国产在线精品一区| 成人一区专区在线观看| 免费亚洲成人| 广东一级毛片| 91美女在线| 狠狠色狠狠色综合久久第一次| 日韩成人在线网站| 久久男人资源站| а∨天堂一区中文字幕| 67194亚洲无码| 91丝袜美腿高跟国产极品老师| 综合人妻久久一区二区精品 | 中文字幕精品一区二区三区视频| 在线亚洲小视频| 国产欧美在线观看一区| 91精品啪在线观看国产91| 性欧美久久| 亚洲欧美日韩成人在线|