【摘要】本文結合C語言的教學實踐,講解了C 語言基礎知識的幾個難點,是教學過程中學生較難掌握和容易出錯的重要知識點。希望可以對學習C語言的讀者提供參考,能更好地理解C程序設計的思想、編寫出優(yōu)秀的C程序。
【關鍵詞】C語言;整形數據;溢出;運算符;自增自減 switch;循環(huán)語句
C語言作為國際上最流行的、應用最廣泛的編程語言之一,一方面它具有高級語言的優(yōu)點,另一方面又有著低級語言的特性,既適合編寫操作系統(tǒng)、編譯器等系統(tǒng)軟件,同時也適用編寫各種應用軟件。因此,C語言越來越多地成為高等院校計算機專業(yè)的學生學習程序設計的首選課程?!禖語言程序設計》是計算機專業(yè)的一門重要的基礎課程,也是《C++程序設計》、《數據結構》等專業(yè)課的前導課程。筆者結合自己的教學實踐,談談C語言基礎知識的幾個難點。
一、整型數據的范圍
不同類型的數據在內存中占用的存儲單元長度不同,以VC++6.0的編譯環(huán)境為例,基本整型(int)數據分配4個字節(jié),短整型(short "int)數據分配2個字節(jié)。我們以short int為例。1個字節(jié)為8個二進制位,每個短整型數據分配2個字節(jié),即16位。對于有符號位的短整型(signed short int,默認的),最左面一位作為符號位,0表示正,1表示負。即能存儲的最大數為0111111111111111,第一位是0,表示正數,后邊15位都是1,轉換為十進制為32767;最小數為1000000000000000,轉換為十進制為-32768。超出此范圍,即為“溢出”。例如:
short int a,b,c,d; "a=32767;b=a+1; " c=-32768;d=b-1;
printf(\"b=%d\t\",b); " printf(\"d=%d\n\",d); 輸出結果為b=-32768 " d=32767
對于無符號的短整型(unsigned short int),最小為0000000000000000,最大為1111111111111111,范圍0~65535。例如:
unsigned short int e=65535,f; "f=e+1;
printf(\"f=%d\n\",f); " "輸出結果為f=0
二、運算符
算術運算符有+,-,*,/,%,++,--。其中,*號在表達式中不可以省略,如b2-4ac,寫成表達式為b*b-4*a*c。/和%要區(qū)分好,/為商,%為余。如a可以被b整除,表示為a%b==0。++,--的使用方法有兩種:一種i++,i--,先使用i原值,再使i的值加或減1;第二種++i,--i,先使i的值加或減1,再使用i的新值。例如:
int i=11; printf(\"%d\n\",i++ * 1/3); " 輸出結果為3。
int i=11; printf(\"%d\n\",++i * 1/3); " 輸出結果為4。
自加自減運算符在后邊的學習中會經常用到,要好好理解。
邏輯運算符有amp;amp;,||,!。在邏輯表達式中,不是所有的邏輯運算符都執(zhí)行,只在必須執(zhí)行下一個邏輯運算符才能求出表達式的解的時候,才執(zhí)行該運算符。a amp;amp; b只有a為真時,才判斷b的值。換句話說,a如果為假,b就不執(zhí)行。同理,a || b,a如果為真,b就不用執(zhí)行。例如:
int m=1,n=1,a=1,b=1;
printf(“表達式=%d\t”,(m=agt;b)amp;amp;(n=agt;b)); "printf(\"m=%d,n=%d\n\",m,n);
輸出結果為 表達式=0 " m=0,n=1
常用的運算符的優(yōu)先級別從高到低排序為:!,算術運算符(++,--高于*,/,%高于+,-),關系運算符(gt;,gt;=,lt;,lt;=高于==,!=),amp;amp;,||,賦值運算符,逗號運算符。
三、比較數的大小
例如:編寫程序,輸出三個整數的最大值。剛接觸C語言的學生,大部分學生上機實踐都可以完成這個程序,但是思路不太好。調整算法思路,便于以后程序的編寫。
main( )
{ int a,b,c,max; " "max=a;
if(bgt;max) max=b; " if(cgt;max) max=c; "printf(\"max=%d\n\",max);}
同理,編寫程序,輸出10個整數的最大值。
main( )
{ int a[10],max,i; " for(i=0;ilt;=9;i++) "scanf(\"%d\",amp;a[i]);
max=a[0]; "for(i=1;ilt;=9;i++) "if(a[i]gt;max) max=a[i];
printf(\"max=%d\",max); " }
四、switch語句
處理選擇結構有if語句和switch語句。switch語句用于處理多分支選擇結構,在使用時有多個注意點,這里強調兩點。
1.case后邊的常量,不能寫成表達式。
例如:編寫程序,評判學生成績score的等級grade,90~100為A,80~90為B,70~80為C,60~70為D,60以下為E。
switch((int)(score/10))
{case 10: case 9: grade='A';break;
case 8: grade='B';break;
case 7: grade='C';break;
case 6: grade='D';break;
case 5: case 4: case 3: case 2: case 1: case 0: grade='E';}
很多學生最初拿到這個題目,會在case后邊寫條件表達式,case gt;90等,是錯誤的。應該找規(guī)律,如何將某個范圍內的數據劃定在一個等級上,如果score為float類型,int(score/10)就是等級劃分的標準。
2.case標號只起到標記的作用,所以在各個case子句后邊要加break語句,使流程跳出當前switch結構。在switch嵌套結構中,break只能跳出本層的switch結構。例如:
main( )
{ int x=1,y=0,a=0,b=0;
switch(x) { "case 1:switch(y) { case 0:a++;
case 1:b++;break; " }
case 2:a++;b++;break; " } printf(\"a=%d,b=%d\n\",a,b); "} " "輸出結果為a=2,b=2。
switch(y)中的break不能退出switch(x),所以還要執(zhí)行case 2;如果想讓程序不執(zhí)行case 2,要在switch(y) { case 0:a++; " case 1:b++;break; "}語句后邊加break;。
五、循環(huán)語句
循環(huán)語句有while,do-while,for語句。掌握每種循環(huán)語句的結構和執(zhí)行過程,清楚三種循環(huán)語句的適用情況,分析問題,設計算法,上機實踐操作,熟練掌握,為以后程序設計奠定基礎。
參考文獻
[1]譚浩強.C程序設計[M].清華大學出版社,2010.
[2]趙睿.C語言案例教程[M].機械工業(yè)出版社,2007.
[3]邱建華.C語言程序設計教程[M].東軟電子出版社,2009.