[摘 要] 本文主要針對C語言的幾個要點,進行透徹分析,挖掘C語言與較為流行的程序設計語言java的共同點,突出C語言的基礎性地位,從而為C語言學習者提供便捷的學習方法。
[關鍵詞] C語言;程序設計;java
[中圖分類號] TP311.11 [文獻標識碼] A
C語言是最重要的計算機程序設計語言之一,以其自身的特色與優勢,在計算機科學技術、工業控制、單片機編程、系統底層開發等領域應用非常廣泛。此外,它還是其他重要程序設計語言如Java、C++等的入門語言。近些年,由于程序設計類語言的發展與進步,C語言地位正在被弱化,但由于其重要性,C語言知識還應該更全面地得到推廣。
在Java語言程序設計中,隨處可見C語言的影子,所以在面向對象的程序設計語言日益流行的今天,入門階段由C語言程序設計來完成是再合適不過了,只有成功完成這一過渡,才能更好地把握Java程序設計語言的主要特點,最終能夠運用Java語言進行網絡與數據庫方面的系統設計,更好地完成項目設計,更好地站在軟件工程技術的前沿。
C語言程序書寫形式自由,把高級語言的基本結構和語句與低級語言的實用性結合起來,適合于多種操作系統,使程序效率更高。語法比較靈活,允許程序編寫者有較大的自由度。
程序設計包括了很多小的知識點,這些知識點與計算機原理知識結合非常緊密。如C語言中的關鍵字和控制語句,大多被延用到java程序中,使用方法和規則大多沒有改變。足可見C語言的基本內容的精典性。
本文主要針對C語言的幾個要點,進行透徹分析,挖掘C語言與較為流行的程序設計語言java的共同點,突出C語言的基礎性地位,從而為C語言學習者提供便捷的學習方法。
1 數據類型與數據的種類
數據類型在C語言中應該與數據的種類做個清晰的區分,因為它所涉及的內容實質不同。
1.1 基本數據類型
short、int、long、char、float、double這六個關鍵字代表C語言里的六種基本數據類型,數據類型其實就是個模子。在C語言中可以用這六個關鍵字創建無數個需要的數據,可以用它們在內存中分配不同大小的變量。
1.2 數據的種類
C語言中數據的種類有兩種,一種是有固定值的常量,另一種是沒有固定值的變量。常量的表現形式如上各種基本數據類型形式的數據。
變量是可以存儲各種基本數據類型的數據存儲單元,它是所有程序設計語言中的重要概念。它所涉及的內容連貫性很強,如:
(1)變量用什么來表示?
答:用變量名來表示
(2)變量名是什么?
答:變量名是一個用于表示內存單元的符號地址,是用戶所起的標識符,需要符合C語言中規定的標識符的命名規則。
(3)變量如何確定下來?
答:由一個聲明語句確定下來。
(4)確定下來的這個內存單元有什么作用?
答:用于存取指定的數據類型的數據。
(5)聲明語句完成什么工作?
答:聲明語句完成數據類型的分配,一個聲明語句只能完成一種數據類型的指定。
2 運算符的運算優先級與結合性
C語言中的運算全部在java中得到了延展,只是在java程序設計中重載了運算符“+”,如此看來,C語言中的運算符是如此經典。下面對C語言中的運算問題作一論述。
2.1 優先級:C語言中,不同類型的運算符在運算優先級上有個明確的分級。 在表達式中,優先級較高的先于優先級較低的進行運算。而在一個運算量兩側的運算符優先級相同時,則按運算符的結合性所規定的結合方向處理。
2.2 結合性:C語言中各運算符的結合性分為兩種,即左結合性(自左至右)和右結合性(自右至左)。例如算術運算符的結合性是自左至右,即先左后右。如有表達式x-y+z則y應先與“-”號結合,執行x-y運算,然后再執行+z的運算。這種自左至右的結合方向就稱為“左結合性”。而自右至左的結合方向稱為“右結合性”。
最典型的右結合性運算符是賦值運算符。如x=y=z,由于“=”的右結合性,應先執行y=z再執行x=(y=z)運算。C語言運算符中有不少為右結合性。
優先級從上到下依次遞減,最上面具有最高的優先級,大致依據的原則是:單目運算高于雙目運算,算術運算高于位運算高于關系運算高于邏輯運算,逗號操作符具有最低的優先級。
所有的優先級中,只有三個優先級是從右至左結合的,它們是單目運算符、條件運算符、賦值運算符。其他的都是從左至右結合。
另外是單目運算符,所有的單目運算符具有相同的優先級,真正的運算符中它們具有最高的優先級,又由于它們都是從右至左結合的,因此*p++與*(p++)等效是毫無疑問的。
在C語言里,有前置、后置之分,因為++--是右結合所以右側優先運算,表現為“操作數后置優先級比較高”的假象,前置和后置的由其運算規律進行區分更為合理,就前置運算的自增或自減,可認為它是所有混合運算中最先進行的,而后置運算的自增或自減則是所有混合運算中最后進行的。
最后在程序設計過程中一個不可忽略的要點就是關系運算符(<、<=、>、>=、==、!=)和邏輯操作符(!、~、、||),與其相關的就是關系或邏輯表達式的設計與應用。有非常廣泛的應用,如:在選擇結構流程中if結構的條件表達式和循環結構流程中循環條件表達式的應用。
3 流程控制語句
C語言是結構化程序設計語言,程序設計過程中結構化程序要求非常高,其流程控制可分為順序結構、選擇結構和循環結構,這些結構可以說是通過關鍵字的應用而實現。沒有表示流程控制的關鍵字,則實現了順序結構流程,應用了if、else、switch等實現了選擇結構流程,應用了while、do、for關鍵字,則實現了循環結構流程。在java中,對這些關鍵點也做了全面的復制。與流程控制相關的要點大致有如下幾點。
3.1 復合語句
在C語言中,一對花括號{}不僅可以用作函數體的開頭和結尾標志,也可以用作復合語句的開頭和結束標志。復合語句也稱為語句塊,其形式如下:
{語句1 語句2 語句n},一個復合語句在語法上被視為一條語句,在一對花括號內的語句數量不限。我們可簡單地認為,復合語句的效性開始于{(左大括號),結束于}(右大括號),它是C語言所承認的一種語法現象,可視做是一個作用域,所以在復合語句中不僅可以有執行語句,也可以有定義部分,復合語句申明的變量的作用域只在復合語句中,出了復合語句就不起作用.復合語句中的變量名和主函數中的變量可以相同,但不是同一變量。例如:示例代碼。
main(){
int a=3,b=2,c=1;
printf(“[1]:%d, %d, %d\n”, a, b, c);
{
int b=5;
int c=12;
printf(“[2]:%d,%d,%d\n”,a,b,c);
}
printf(“[3] %d,%d,%d,”,a,b,c);
}
在上例代碼中,兩個變量b、c被聲明兩次,而程序正確通過編譯,其中的原因就是因為在第二次聲明這兩個變量時用大括號括住了,在這對大括號內形成了一個作用域,在大括號外邊的b、c在整個程序中都有效,而大括號里邊的b、c僅在大括號起始和終止的范圍內有效。
3.2 選擇結構
3.2.1 選擇結構中if分支的要點分析
C語言中的if分支有著非常重要的用途,如在程序設計中實現異常處理,這是程序設計中的一個很重要的內容,在C語言中用if...else...來實現控制異常,利用選擇結構可以控制一些非法的數據參與程序運行,保證程序正常執行,引導用戶正常地使用程序。
我們經常看到這樣的代碼:
main()
{
float num;
char grade;
scanf(“%d”,num);
if(num>=90) grade='A';
else if(num>=80num<89) grade='B';
else if(num>=70num<79) grade='C';
else if(num>=60num<69) grade='D';
else grade='E';
printf(“%c”,grade);
}
在上例中,不合理的數據如1234,-1234或ASCII表中字符在程序執行過程中也會得到等級判斷的結果,顯然是不正常的運行結果,在編寫程序時需要處理一下,不允許這些不合理的數據進入程序,就是在輸入數據后用if(num<=100num>=0)判斷輸入的數據是否合理,既是否在百分制的成績取值范圍中,如果在就可以獲得等級的判斷,否則給予其他的處理,如else printf(“輸入的數據錯誤?。躰”)。
3.2.2 選擇結構中分支語句的要點分析
分支語句也是程序設計中常用到的一種結構,這樣的結構實現最為關鍵的是設計switch關鍵字后邊的常量表達式,如學生成績等級的判定,需要處理的數據與整數10進行模運算后結果是一個0到10的整數,個人所得稅計算的程序中,需要處理的數據與1000進行除法運算并取整后結果也是一些規律整數,等等。所以用switch結構時,設計常量表達式時,目標就是經過某一運算找到一個等差數列(用字符型數據除外)。
3.3 循環結構
無論是當型循環還是直到型循環,實現時都要通過兩個內容,循環的條件和循環體。在真正編寫程序的時候,需要做以下四點設計:
(1)初始化語句
初始化語句在循環開始之前完成,用于完成一些初始化工作,往往指的是循環變量(可以決定循環執行和結束的變量)的初始化。
(2)循環條件
這是一個邏輯表達式或關系表達式,由這個表達式來決定是否執行循環體。
(3)循環體
這個部分是循環的主體,問題中被重復執行的語句必須在循環體中出現。
(4)改變循環條件語句
在一次循環體執行結束后和循環條件求值之前執行,通常用于循環變量的改變,使得循環在合適的時候結束。
這種實現重復性操作的辦法適合于所有的程序設計語言,把這些關鍵點實現后可以解決所有的循環問題,包括一些復雜的循環問題,如需要循環嵌套,數組的程序設計。這些C語言流程的算法思想也被完整的應用在java邏輯中。
C語言中實現或設計循環時所用的關鍵字while,do…while,for,及用于控制流程的break,continue無一遺漏的在java程序設計中出現,不同之處只是個別情況,既在for結構的實現上,靈活性增強了一些。
C語言的基礎性地位是毋庸置疑的,以上內容被全部應用到了java程序設計中,另外在C++中也體現的非常的完整。對以上知識全面理解后,學習java程序設計及其他的面向對象時可以在幾小時,甚至更短的時間內入門,提高了學習新知識的效率。解決了java學習初期的一些障礙。
以上是有關C語言基本點的論述,不當之處敬請批評指正。
參考文獻
[1]馮艷茹《C語言程序設計》[M].國防科技大學,2010年3月第1版.
[2]劉書倫《Java程序設計》[M].國防科技大學,2012年1月第1版.
作者簡介:孫承秀(1979.6-),女,本科,助理工程師,研究方向:計算機程序設計語言研究。