龐新法PANG Xin-fa
(陜西省委黨??萍冀萄胁?,西安 710061)
(Shaanxi Province Party School of the CPC,Xi'an 710061,China)
現(xiàn)在幾乎所有院校都開設(shè)了C 語言課程,將其作為學(xué)生學(xué)習(xí)程序設(shè)計技術(shù)的入門課程,這與C 語言的特點是分不開的。C 語言簡潔緊湊、靈活方便、運算符豐富等,不但可以編寫系統(tǒng)軟件,而且可以根據(jù)用戶的需要編寫出滿足用戶要求的應(yīng)用軟件,尤其是C 語言具有很好的對計算機(jī)的硬件編程能力,單片機(jī)編程也常用C 語言。其次很多新型的語言都是衍生自C 語言,如C++,Java,C#,J#,per 等,掌握了C 語言,也就間接地掌握了很多門其它語言,經(jīng)過深入學(xué)習(xí),就可以用這些新型的語言去開發(fā)程序。因此,C 語言已成為目前高校學(xué)生掌握程序設(shè)計的一門基礎(chǔ)性語言。因?qū)W生有多年英語學(xué)習(xí)的基礎(chǔ)和習(xí)慣,故本文從英語、C 語言語法對比的角度,說明如何學(xué)好C 語言,以便更好地由英語學(xué)習(xí)自然過渡到C 語言學(xué)習(xí)。
英語 C 語言
文章 程序
文章由段構(gòu)成(段的集合)程序由函數(shù)構(gòu)成(函數(shù)的集合)
段由語句構(gòu)成 函數(shù)由語句構(gòu)成
語句由語法成份構(gòu)成 語句由語法成分構(gòu)成
語句的結(jié)束符是句號 語句的結(jié)束符是分號
語法成份由單詞構(gòu)成 語法成份由單詞構(gòu)成
單詞由字符構(gòu)成 單詞由字符構(gòu)成
段的書寫順序等于文 函數(shù)的書寫順序不等
章的閱讀順序 于程序的執(zhí)行順序
文章從第一段開始閱讀 程序從主函數(shù)開始執(zhí)行
各段順次閱讀 各函數(shù)并非順次執(zhí)行
閱讀順序由書寫順序決定 執(zhí)行順序由主函數(shù)的調(diào)用順序決定
閱讀完最后一段標(biāo)志著全 執(zhí)行完主函數(shù)標(biāo)志著
文閱讀結(jié)束 整個程序執(zhí)行結(jié)束
未壓縮 是高度壓縮的英語
3.1 常量(常數(shù))單詞 ①10 進(jìn)制整形常量。詞法規(guī)則:由0-9 構(gòu)成,如:123,456。②16 進(jìn)制整形常量。詞法規(guī)則:以0x 開始,由0-9,A-F 構(gòu)成,如:0x123,0x456。③8 進(jìn)制整形常量。詞法規(guī)則:以0 開始,由0-7 構(gòu)成,如:0123,0456。④小數(shù)形式實型常量。詞法規(guī)則:必須有小數(shù)點,由0-9 構(gòu)成,如:123.0,7.456。⑤指數(shù)形式實型常量。詞法規(guī)則:必須有E,由0-9 構(gòu)成,E 的前面必須有數(shù)字,E的后面必須是整數(shù),如:12E3,7.456E-3。⑥字符型常量。詞法規(guī)則:單引號括起來的單個字符,如:‘1’,‘A’。⑦字符串常量。詞法規(guī)則:雙引號括起來的一串字符,如:“123”,“ABC”。
3.2 名字單詞 詞法規(guī)則:以字母或下劃線開始,由字母,數(shù)字,下劃線構(gòu)成的串。如:xyz,flag。
3.3 運算符單詞 如:+,-,*,/。
法規(guī)則:由常量,運算符,括號,名字構(gòu)成,如:123+456+x。
5.1 變量定義語句
語法規(guī)則:類型名,名字,其中名字起名詞作用,類型名起形容詞作用。
如:int x;
X 是一個名字,x 是一個整形單元的名字。X 是一個整形變量,整形的x。
5.2 表達(dá)式語句
語法規(guī)則:表達(dá)式后跟分號。
5.3 if 語句
語法規(guī)則:if(表達(dá)式)語句1;else 語句2;
語義:如果表達(dá)式成立則執(zhí)行語句1,否則執(zhí)行語句2。
修路時,必須考慮修2 條路,可能今天走A 條,明天走B 條,但每次只能走一條。編程時必須考慮2 種情況,今天運行執(zhí)行語句1,明天運行執(zhí)行語句2,但每次只能執(zhí)行一條。
5.4 while 語句
語法規(guī)則:while(表達(dá)式)語句;
語義:當(dāng)表達(dá)式成立,重復(fù)執(zhí)行語句,直到表達(dá)式不成立。
剛開始學(xué)循環(huán),必須對循環(huán)進(jìn)行分解。如以下程序:
6.1 int a[10];
a 是一個名字,括號的優(yōu)先級高,形容詞[說明a 是一個數(shù)組的名字,形容詞10 說明a 是一個由10 個元素構(gòu)成的數(shù)組名,形容詞int 說明a 是一個由10 個int 的元素構(gòu)成的數(shù)組名,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 是一個名字,括號的優(yōu)先級高,形容詞[說明p 是一個數(shù)組的名字,形容詞10 說明p 是一個由10 個元素構(gòu)成的數(shù)組名,形容詞*說明p 是一個由10 個指針的元素構(gòu)成的數(shù)組名,形容詞int 說明p 是一個由10 個指向int 的指針的元素構(gòu)成的數(shù)組的名字。p 是名詞,其余均為形容詞。
6.4 int *p();
p 是一個名字,括號的優(yōu)先級高,形容詞(說明p 是一個函數(shù)的名字,形容詞*說明p 是一個返回值為指針的函數(shù)的名字,形容詞int 說明p 是一個返回值為指向int 的指針的函數(shù)的名字。p 是名詞,其余均為形容詞。
6.5 int(*p)[10];
p 是一個名字,圓括號的優(yōu)先級更高,形容詞*說明p是一個指針的名字,形容詞[說明p 是一個指向行(數(shù)組)的指針的名字,形容詞10 說明p 是一個指向10 個元素構(gòu)成的行(數(shù)組)的指針的名字,形容詞int 說明p 是一個指向10 個int 的元素構(gòu)成的行(數(shù)組)的指針的名字。p 是名詞,其余均為形容詞。
6.6 int(*p)();
p 是一個名字,圓括號的優(yōu)先級更高,形容詞*說明p是一個指針的名字,第二個圓括號說明p 是一個指向函數(shù)的指針的名字,形容詞int 說明p 是一個指向返回值是int的函數(shù)的指針的名字。p 是名詞,其余均為形容詞。
在一些C 語言教材和參考資料中,常常把函數(shù)參數(shù)傳遞分為“數(shù)值傳遞”和“地址傳遞”兩種方式,這種概念模糊的分類方法給初學(xué)者的理解造成一定程度的困難。實際上C 語言只有“值傳遞”一種形式,值有可能是數(shù)據(jù),有可能是地址,由數(shù)據(jù)類型加以區(qū)分,普通類型變量作為函數(shù)參數(shù),其值為數(shù)據(jù),指針和數(shù)組名作為函數(shù)參數(shù),其值為地址。
7.1 普通類型變量作為函數(shù)參數(shù) 形參,實參是各自單元,互不影響,形參改變,實參不變,傳的值是數(shù)據(jù),如以下程序:
該程序運行結(jié)果是a=10,b=5,a,b 并未交換,只是x,y交換。
7.2 指針類型變量作為函數(shù)參數(shù) 形參,實參是各自單元,互不影響,故形參改變,實參不變,傳的值是地址,但形參所指向單元,實參所指向單元是同一個單元,故形參所指向單元改變,實參所指向單元隨之改變,形如父親張偉有兩個兒子,一個是張強(qiáng),一個是張剛,張強(qiáng)和張剛是兩個不同的人,但張強(qiáng)張剛的父親是同一個人,張強(qiáng)的父親工資漲100 元,張剛的父親隨之漲100 元,張強(qiáng)工資漲100 元,張剛的工資不變。如以下程序:
該程序運行結(jié)果是a=5,b=10,a,b 交換,*pa,*pb 交換,*x,*y 交換,但x,y 并未交換,pa,pb 并未交換。
學(xué)習(xí)C 語言與學(xué)習(xí)英語一樣,必須掌握詞法規(guī)則,語法規(guī)則,語義規(guī)則,然后用此三個規(guī)則組合程序即可。
[1]蘇丹丹,孟祥銳,褚麗娟.高校非計算機(jī)專業(yè)C 語言程序設(shè)計課程四位一體教學(xué)模式研究[J].長春師范學(xué)院學(xué)報(人文社會科學(xué)版),2008(10).
[2]李婭,張建勛,曾慶森.計算機(jī)軟件技術(shù)基礎(chǔ)教學(xué)的探討與實踐[J].重慶工學(xué)院學(xué)報(自然科學(xué)版),2007(03).
[3]張仿,盧繼勇,曹慧英.“啟發(fā)式”教學(xué)法與C 語言教學(xué)[J].重慶郵電學(xué)院學(xué)報(社會科學(xué)版),2004(S1).