龐新法PANG Xin-fa
(陜西省委黨??萍冀萄胁?,西安 710061)
(Shaanxi Province Party School of the CPC,Xi'an 710061,China)
現在幾乎所有院校都開設了C 語言課程,將其作為學生學習程序設計技術的入門課程,這與C 語言的特點是分不開的。C 語言簡潔緊湊、靈活方便、運算符豐富等,不但可以編寫系統軟件,而且可以根據用戶的需要編寫出滿足用戶要求的應用軟件,尤其是C 語言具有很好的對計算機的硬件編程能力,單片機編程也常用C 語言。其次很多新型的語言都是衍生自C 語言,如C++,Java,C#,J#,per 等,掌握了C 語言,也就間接地掌握了很多門其它語言,經過深入學習,就可以用這些新型的語言去開發程序。因此,C 語言已成為目前高校學生掌握程序設計的一門基礎性語言。因學生有多年英語學習的基礎和習慣,故本文從英語、C 語言語法對比的角度,說明如何學好C 語言,以便更好地由英語學習自然過渡到C 語言學習。
英語 C 語言
文章 程序
文章由段構成(段的集合)程序由函數構成(函數的集合)
段由語句構成 函數由語句構成
語句由語法成份構成 語句由語法成分構成
語句的結束符是句號 語句的結束符是分號
語法成份由單詞構成 語法成份由單詞構成
單詞由字符構成 單詞由字符構成
段的書寫順序等于文 函數的書寫順序不等
章的閱讀順序 于程序的執行順序
文章從第一段開始閱讀 程序從主函數開始執行
各段順次閱讀 各函數并非順次執行
閱讀順序由書寫順序決定 執行順序由主函數的調用順序決定
閱讀完最后一段標志著全 執行完主函數標志著
文閱讀結束 整個程序執行結束
未壓縮 是高度壓縮的英語
3.1 常量(常數)單詞 ①10 進制整形常量。詞法規則:由0-9 構成,如:123,456。②16 進制整形常量。詞法規則:以0x 開始,由0-9,A-F 構成,如:0x123,0x456。③8 進制整形常量。詞法規則:以0 開始,由0-7 構成,如:0123,0456。④小數形式實型常量。詞法規則:必須有小數點,由0-9 構成,如:123.0,7.456。⑤指數形式實型常量。詞法規則:必須有E,由0-9 構成,E 的前面必須有數字,E的后面必須是整數,如:12E3,7.456E-3。⑥字符型常量。詞法規則:單引號括起來的單個字符,如:‘1’,‘A’。⑦字符串常量。詞法規則:雙引號括起來的一串字符,如:“123”,“ABC”。
3.2 名字單詞 詞法規則:以字母或下劃線開始,由字母,數字,下劃線構成的串。如:xyz,flag。
3.3 運算符單詞 如:+,-,*,/。
法規則:由常量,運算符,括號,名字構成,如:123+456+x。
5.1 變量定義語句
語法規則:類型名,名字,其中名字起名詞作用,類型名起形容詞作用。
如:int x;
X 是一個名字,x 是一個整形單元的名字。X 是一個整形變量,整形的x。
5.2 表達式語句
語法規則:表達式后跟分號。
5.3 if 語句
語法規則:if(表達式)語句1;else 語句2;
語義:如果表達式成立則執行語句1,否則執行語句2。
修路時,必須考慮修2 條路,可能今天走A 條,明天走B 條,但每次只能走一條。編程時必須考慮2 種情況,今天運行執行語句1,明天運行執行語句2,但每次只能執行一條。
5.4 while 語句
語法規則:while(表達式)語句;
語義:當表達式成立,重復執行語句,直到表達式不成立。
剛開始學循環,必須對循環進行分解。如以下程序:

6.1 int a[10];
a 是一個名字,括號的優先級高,形容詞[說明a 是一個數組的名字,形容詞10 說明a 是一個由10 個元素構成的數組名,形容詞int 說明a 是一個由10 個int 的元素構成的數組名,a 是名詞,其余均為形容詞。
6.2 int *p;
p 是一個名字,形容詞*說明p 是一個指針變量名,形容詞int 說明p 是一個指向int 的指針的變量名,*p 是int 型,并非p 是int 型。p 是名詞,其余均為形容詞。單詞p表示p 單元,*p 表示p 所指向的單元,并非p 單元,p,*P表示兩個互不相同的單元,形如“張偉”和“張偉他哥”是不同的兩個人。
6.3 int *p[10];
p 是一個名字,括號的優先級高,形容詞[說明p 是一個數組的名字,形容詞10 說明p 是一個由10 個元素構成的數組名,形容詞*說明p 是一個由10 個指針的元素構成的數組名,形容詞int 說明p 是一個由10 個指向int 的指針的元素構成的數組的名字。p 是名詞,其余均為形容詞。
6.4 int *p();
p 是一個名字,括號的優先級高,形容詞(說明p 是一個函數的名字,形容詞*說明p 是一個返回值為指針的函數的名字,形容詞int 說明p 是一個返回值為指向int 的指針的函數的名字。p 是名詞,其余均為形容詞。
6.5 int(*p)[10];
p 是一個名字,圓括號的優先級更高,形容詞*說明p是一個指針的名字,形容詞[說明p 是一個指向行(數組)的指針的名字,形容詞10 說明p 是一個指向10 個元素構成的行(數組)的指針的名字,形容詞int 說明p 是一個指向10 個int 的元素構成的行(數組)的指針的名字。p 是名詞,其余均為形容詞。
6.6 int(*p)();
p 是一個名字,圓括號的優先級更高,形容詞*說明p是一個指針的名字,第二個圓括號說明p 是一個指向函數的指針的名字,形容詞int 說明p 是一個指向返回值是int的函數的指針的名字。p 是名詞,其余均為形容詞。
在一些C 語言教材和參考資料中,常常把函數參數傳遞分為“數值傳遞”和“地址傳遞”兩種方式,這種概念模糊的分類方法給初學者的理解造成一定程度的困難。實際上C 語言只有“值傳遞”一種形式,值有可能是數據,有可能是地址,由數據類型加以區分,普通類型變量作為函數參數,其值為數據,指針和數組名作為函數參數,其值為地址。
7.1 普通類型變量作為函數參數 形參,實參是各自單元,互不影響,形參改變,實參不變,傳的值是數據,如以下程序:

該程序運行結果是a=10,b=5,a,b 并未交換,只是x,y交換。
7.2 指針類型變量作為函數參數 形參,實參是各自單元,互不影響,故形參改變,實參不變,傳的值是地址,但形參所指向單元,實參所指向單元是同一個單元,故形參所指向單元改變,實參所指向單元隨之改變,形如父親張偉有兩個兒子,一個是張強,一個是張剛,張強和張剛是兩個不同的人,但張強張剛的父親是同一個人,張強的父親工資漲100 元,張剛的父親隨之漲100 元,張強工資漲100 元,張剛的工資不變。如以下程序:

該程序運行結果是a=5,b=10,a,b 交換,*pa,*pb 交換,*x,*y 交換,但x,y 并未交換,pa,pb 并未交換。
學習C 語言與學習英語一樣,必須掌握詞法規則,語法規則,語義規則,然后用此三個規則組合程序即可。
[1]蘇丹丹,孟祥銳,褚麗娟.高校非計算機專業C 語言程序設計課程四位一體教學模式研究[J].長春師范學院學報(人文社會科學版),2008(10).
[2]李婭,張建勛,曾慶森.計算機軟件技術基礎教學的探討與實踐[J].重慶工學院學報(自然科學版),2007(03).
[3]張仿,盧繼勇,曹慧英.“啟發式”教學法與C 語言教學[J].重慶郵電學院學報(社會科學版),2004(S1).