古詩詞大全網 - 成語用法 - 什麽是C語言?

什麽是C語言?

C語言是Combined Language(組合語言)的中英混合簡稱。是壹種計算機程序設計語言。它既具有高級語言的特點,又具有匯編語言的特點。它可以作為工作系統設計語言,編寫系統應用程序,也可以作為應用程序設計語言,編寫不依賴計算機硬件的應用程序。因此,它的應用範圍廣泛,不僅僅是在軟件開發上,而且各類科研都需要用到C語言,具體應用比如單片機以及嵌入式系統開發。

C語言發展如此迅速,而且成為最受歡迎的語言之壹,主要因為它具有強大的功能。許多著名的系統軟件,如DBASE Ⅳ都是由C 語言編寫的。用C 語言加上壹些匯編語言子程序,就更能顯示C 語言的優勢了,像PC- DOS 、WORDSTAR等就是用這種方法編寫的。

歸納起來C 語言具有下列特點:

1. C是中級語言。它把高級語言的基本結構和語句與低級語言的實用性結合起來。C 語言可以像匯編語言壹樣對位、字節和地址進行操作, 而這三者是計算機最基本的工作單元。

2.C是結構式語言。結構式語言的顯著特點是代碼及數據的分隔化,即程序的各個部分除了必要的信息交流外彼此獨立。這種結構化方式可使程序層次清晰,便於使用、維護以及調試。C 語言是以函數形式提供給用戶的,這些函數可方便的調用,並具有多種循環、條件語句控制程序流向,從而使程序完全結構化。

3.C語言功能齊全。具有各種各樣的數據類型,並引入了指針概念,可使程序效率更高。另外C語言也具有強大的圖形功能,支持多種顯示器和驅動器。而且計算功能、邏輯判斷功能也比較強大,可以實現決策目的的遊戲。

4. C語言適用範圍大。適合於多種操作系統,如Windows、DOS、UNIX等等;也適用於多種機型。

C語言對編寫需要硬件進行操作的場合,明顯優於其它解釋型高級語言,有壹些大型應用軟件也是用C語言編寫的。

C語言具有繪圖能力強,可移植性,並具備很強的數據處理能力,因此適於編寫系統軟件,三維,二維圖形和動畫。它是數值計算的高級語言。

常用的C語言IDE(集成開發環境)有Microsoft Visual C++,Dev-C++,Code::Blocks,Borland C++,Watcom C++ ,Borland C++ Builder,GNU DJGPP C++ ,Lccwin32 C Compiler 3.1,High C,Turbo C,C-Free, win-tc 等等……

對於壹個初學者,Microsoft Visual C++是壹個比較好的軟件。界面友好,功能強大,調試也很方便。

[編輯本段]

發展歷史

C語言的原型ALGOL 60語言。(也稱為A語言)

1963年,劍橋大學將ALGOL 60語言發展成為CPL(Combined Programming Language)語言。

1967年,劍橋大學的Martin Richards 對CPL語言進行了簡化,於是產生了BCPL語言。

1970年,美國貝爾實驗室的Ken Thompson將BCPL進行了修改,並為它起了壹個有趣的名字“B語言”。意思是將CPL語言煮幹,提煉出它的精華。並且他用B語言寫了第壹個UNIX操作系統。

而在1972年,B語言也給人“煮”了壹下,美國貝爾實驗室的D.M.Ritchie在B語言的基礎上最終設計出了壹種新的語言,他取了BCPL的第二個字母作為這種語言的名字,這就是C語言。

為了使UNIX操作系統推廣,1977年Dennis M.Ritchie 發表了不依賴於具體機器系統的C語言編譯文本《可移植的C語言編譯程序》。

1978年由美國電話電報公司(AT&T)貝爾實驗室正式發表了C語言。同時由 B.W.Kernighan和D.M.Ritchie合著了著名的《The C Programming Language》壹書。通常簡稱為《K&R》,也有人稱之為《K&R》標準。但是,在《K&R》中並沒有定義壹個完整的標準C 語言,後來由美國國家標準化協會(American National Standards Institute)在此基礎上制定了壹個C語言標準,於壹九八三年發表。通常稱之為ANSI C。

1987年,隨著微型計算機的日益普及,出現了許多C語言版本。由於沒有統壹的標準,使得這些C語言之間出現了壹些不壹致的地方。為了改變這種情況,美國國家標準化協會(ANSI)為C語言制定了壹套ANSI標準——87 ANSI C,成為現行的C語言標準。

1990年,國際標準化組織ISO(International StandardOrganization)接受了87 ANSI C 為I SO C 的標準(ISO9899-1990)。1994年,ISO修訂了C語言的標準。

目前流行的C語言編譯系統大多是以ANSI C為基礎進行開發的,但不同版本的C編譯系統所實現的語言功能和語法規則有略有差別。

[編輯本段]

優點

1. 簡潔緊湊、靈活方便

C語言壹***只有32個關鍵字,9種控制語句,程序書寫形式自由,主要用小寫字母表示。它把高級語言的基本結構和語句與低級語言的實用性結合起來。 C 語言可以像匯編語言壹樣對位、字節和地址進行操作,而這三者是計算機最基本的工作單元。

2. 運算符豐富

C語言的運算符包含的範圍很廣泛,***有34種運算符。C語言把括號、賦值、強制類型轉換等都作為運算符處理。從而使C語言的運算類型極其豐富,表達式類型多樣化。靈活使用各種運算符可以實現在其它高級語言中難以實現的運算。

3. 數據結構豐富

C語言的數據類型有:整型、實型、字符型、數組類型、指針類型、結構體類型、***用體類型等。能用來實現各種復雜的數據結構的運算。並引入了指針概念,使程序效率更高。另外C語言具有強大的圖形功能,支持多種顯示器和驅動器。且計算功能、邏輯判斷功能強大。

4. C是結構式語言

結構式語言的顯著特點是代碼及數據的分隔化,即程序的各個部分除了必要的信息交流外彼此獨立。這種結構化方式可使程序層次清晰,便於使用、維護以及調試。C語言是以函數形式提供給用戶的,這些函數可方便的調用,並具有多種循環、條件語句控制程序流向,從而使程序完全結構化。

5. C語法限制不太嚴格,程序設計自由度大

雖然C語言也是強類型語言,但它的語法比較靈活,允許程序編寫者有較大的自由度。

6. C語言允許直接訪問物理地址,可以直接對硬件進行操作

因此既具有高級語言的功能,又具有低級語言的許多功能,能夠像匯編語言壹樣對位、字節和地址進行操作,而這三者是計算機最基本的工作單元,可用來寫系統軟件。

7. 生成目標代碼質量高,程序執行效率高

壹般只比匯編程序生成的目標代碼效率低10へ20%。

8. C語言適用範圍大,可移植性好

C語言有壹個突出的優點就是適合於多種操作系統,如DOS、UNIX;也適用於多種機型。C語言具有強大的繪圖能力,可移植性好,並具備很強的數據處理能力,因此適於編寫系統軟件,三維,二維圖形和動畫,它也是數值計算的高級語言。

[編輯本段]

缺點

1. C語言的缺點主要表現在數據的封裝性上,這壹點使得C在數據的安全性上有很大缺陷,這也是C和C++的壹大區別。

2. C語言的語法限制不太嚴格,對變量的類型約束不嚴格,影響程序的安全性,對數組下標越界不作檢查等。從應用的角度,C語言比其他高級語言較難掌握。

[C語言指針]

指針是C語言的壹大特色,可以說是C語言優於其它高級語言的壹個重要原因。就是因為它有指針,可以直接進行靠近硬件的操作,但是C的指針操作也給它帶來了很多不安全的因素。C++在這方面做了很好的改進,在保留了指針操作的同時又增強了安全性。Java取消了指針操作,提高了安全性,適合初學者使用。

[編輯本段]

結構特點

1.壹個C語言源程序可以由壹個或多個源文件組成。

2.每個源文件可由壹個或多個函數組成。

3.壹個源程序不論由多少個文件組成,都有壹個且只能有壹個main函數,即主函數。

4.源程序中可以有預處理命令(include 命令僅為其中的壹種),預處理命令通常應放在源文件或源程序的最前面。

5.每壹個說明,每壹個語句都必須以分號結尾。但預處理命令,函數頭和花括號“}”之後不能加分號。

6.標識符,關鍵字之間必須至少加壹個空格以示間隔。若已有明顯的間隔符,也可不再加空格來間隔。

[編輯本段]

學習C語言

在初學C語言時,可能會遇到有些問題理解不透,或者表達方式與以往數學學習中不同(如運算符等),這就要求不氣餒,不明白的地方多問多想,鼓足勇氣進行學習,待學完後面的章節知識,前面的問題也就迎刃而解了,這壹方面我感覺是我們同學最欠缺的。大多學不好的就是因為壹開始遇到困難就放棄,曾經和好多同學談他的問題,回答是聽不懂、不想聽、放棄這樣三個過程,我反問,這節課妳聽過課嗎?回答又是沒有,根本就沒聽過課,怎麽說自己聽不懂呢?相應的根本就沒學習,又談何學得好?

學習C語言始終要記住“曙光在前頭”和“千金難買回頭看”,“千金難買回頭看”是學習知識的重要方法,就是說,學習後面的知識,不要忘了回頭弄清遺留下的問題和加深理解前面的知識,這是我們學生最不易做到的,然而卻又是最重要的。學習C語言就是要經過幾個反復,才能前後貫穿,積累應該掌握的C知識。

那麽,我們如何學好《C程序設計》呢?

壹.學好C語言的運算符和運算順序

這是學好《C程序設計》的基礎,C語言的運算非常靈活,功能十分豐富,運算種類遠多於其它程序設計語言。在表達式方面較其它程序語言更為簡潔,如自加、自減、逗號運算和三目運算使表達式更為簡單,但初學者往往會覺的這種表達式難讀,關鍵原因就是對運算符和運算順序理解不透不全。當多種不同運算組成壹個運算表達式,即壹個運算式中出現多種運算符時,運算的優先順序和結合規則顯得十分重要。在學習中,只要我們對此合理進行分類,找出它們與我們在數學中所學到運算之間的不同點之後,記住這些運算也就不困難了,有些運算符在理解後更會牢記心中,將來用起來得心應手,而有些可暫時放棄不記,等用到時再記不遲。

先要明確運算符按優先級不同分類,《C程序設計》運算符可分為15種優先級,從高到低,優先級為1 ~ 15,除第2、13級和第14級為從右至左結合外,其它都是從左至右結合,它決定同級運算符的運算順序.

二.學好C語言的四種程序結構

(1)順序結構

順序結構的程序設計是最簡單的,只要按照解決問題的順序寫出相應的語句就行,它的執行順序是自上而下,依次執行。

例如:a = 3,b = 5,現交換a,b的值,這個問題就好像交換兩個杯子水,這當然要用到第三個杯子,假如第三個杯子是c,那麽正確的程序為:c = a; a = b; b = c; 執行結果是a = 5,b = c = 3如果改變其順序,寫成:a = b; c = a; b =c; 則執行結果就變成a = b = c = 5,不能達到預期的目的,初學者最容易犯這種錯誤。順序結構可以獨立使用構成壹個簡單的完整程序,常見的輸入、計算,輸出三步曲的程序就是順序結構,例如計算圓的面積,其程序的語句順序就是輸入圓的半徑r,計算s = 3.14159*r*r,輸出圓的面積s。不過大多數情況下順序結構都是作為程序的壹部分,與其它結構壹起構成壹個復雜的程序,例如分支結構中的復合語句、循環結構中的循環體等。

(2) 分支結構

順序結構的程序雖然能解決計算、輸出等問題,但不能做判斷再選擇。對於要先做判斷再選擇的問題就要使用分支結構。分支結構的執行是依據壹定的條件選擇執行路徑,而不是嚴格按照語句出現的物理順序。分支結構的程序設計方法的關鍵在於構造合適的分支條件和分析程序流程,根據不同的程序流程選擇適當的分支語句。分支結構適合於帶有邏輯或關系比較等條件判斷的計算,設計這類程序時往往都要先繪制其程序流程圖,然後根據程序流程寫出源程序,這樣做把程序設計分析與語言分開,使得問題簡單化,易於理解。程序流程圖是根據解題分析所繪制的程序執行流程圖。

學習分支結構不要被分支嵌套所迷惑,只要正確繪制出流程圖,弄清各分支所要執行的功能,嵌套結構也就不難了。嵌套只不過是分支中又包括分支語句而已,不是新知識,只要對雙分支的理解清楚,分支嵌套是不難的。下面我介紹幾種基本的分支結構。

①if(條件)

{分支體}

這種分支結構中的分支體可以是壹條語句,此時“{}”可以省略,也可以是多條語句即復合語句。它有兩條分支路徑可選,壹是當條件為真,執行分支體,否則跳過分支體,這時分支體就不會執行。如:要計算x的絕對值,根據絕對值定義,我們知道,當 x>=0時,其絕對值不變,而x<0時其絕對值是為x的反號,因此程序段為:if(x<0)x=-x;

②if(條件)

{分支1}

else

{分支2}

這是典型的分支結構,如果條件成立,執行分支1,否則執行分支2,分支1和分支2都可以是1條或若幹條語句構成。如:求ax^2+bx+c=0的根

分析:因為當b^2-4ac>=0時,方程有兩個實根,否則(b^2-4ac<0)有兩個***軛復根。其程序段如下:

main()

{

int a,b,c,d,x,y;

printf("Please put the number of a,b&c from the quadratic equation of one variable one by one\n");

scanf("%d%d%d",&a,&b,&c);

d=b*b-4*a*c;

if(d<0)

{

printf("NO Root!Wrong!\n");

}

else

{

y=-b-sqrt(d)/2*a;

x=-b+sqrt(d)/2*a;

printf("The 1st equation root=%d\nThe 2nd equation root=%d",y,x);

}

}

③IF嵌套分支語句:其語句格式為:

if(條件1) {分支1}

else if(條件2) {分支2}

else if(條件3) {分支3}

……

else if(條件n) {分支n}

else {分支n+1}

FOR嵌套,其語句格式為:

for(初值A;範圍A;步長A)

{

for(初值B;範圍B;步長B)

{

循環體

}

}

FOR嵌套例子:九九乘法表

main()

{

int a,b,c;

for(a=1;a<=9;a++)

{

for(b=1;b<=a;b++)

{

c=b*a;

printf("%dx%d=%d ",b,a,c);

}

printf("\n");

}

}

嵌套分支語句雖可解決多個入口和出口的問題,但超過3重嵌套後,語句結構變得非常復雜,對於程序的閱讀和理解都極為不便,建議嵌套在3重以內,超過3重可以用下面的語句。

④switch開關語句:該語句也是多分支選擇語句,到底執行哪壹塊,取決於開關設置,也就是表達式的值與常量表達式相匹配的那壹路,它不同if…else語句,它的所有分支都是並列的,程序執行時,由第壹分支開始查找,如果相匹配,執行其後的塊,接著執行第2分支,第3分支……的塊,直到遇到break語句;如果不匹配,查找下壹個分支是否匹配。這個語句在應用時要特別註意開關條件的合理設置以及break語句的合理應用。

(3)循環結構:

循環結構可以減少源程序重復書寫的工作量,用來描述重復執行某段算法的問題,這是程序設計中最能發揮計算機特長的程序結構,C語言中提供四種循環,即goto循環、while循環、do?Cwhile循環和for循環。四種循環可以用來處理同壹問題,壹般情況下它們可以互相代替換,但壹般不提倡用goto循環,因為強制改變程序的順序經常會給程序的運行帶來不可預料的錯誤,在學習中我們主要學習 while、do…while、for三種循環。常用的三種循環結構學習的重點在於弄清它們相同與不同之處,以便在不同場合下使用,這就要清楚三種循環的格式和執行順序,將每種循環的流程圖理解透徹後就會明白如何替換使用,如把while循環的例題,用for語句重新編寫壹個程序,這樣能更好地理解它們的作用。特別要註意在循環體內應包含趨於結束的語句(即循環變量值的改變),否則就可能成了壹個死循環,這是初學者的壹個常見錯誤。

在學完這三個循環後,應明確它們的異同點:用while和do…while循環時,循環變量的初始化的操作應在循環體之前,而for循環壹般在語句1中進行的;while循環和for循環都是先判斷表達式,後執行循環體,而do…while循環是先執行循環體後判斷表達式,也就是說do…while的循環體最少被執行壹次,而while循環和for就可能壹次都不執行。另外還要註意的是這三種循環都可以用break語句跳出循環,用continue語句結束本次循環,而goto語句與if構成的循環,是不能用break和 continue語句進行控制的。

順序結構、分支結構和循環結構並不彼此孤立的,在循環中可以有分支、順序結構,分支中也可以有循環、順序結構,其實不管哪種結構,我們均可廣義的把它們看成壹個語句。在實際編程過程中常將這三種結構相互結合以實現各種算法,設計出相應程序,但是要編程的問題較大,編寫出的程序就往往很長、結構重復多,造成可讀性差,難以理解,解決這個問題的方法是將C程序設計成模塊化結構。

(4)模塊化程序結構

C語言的模塊化程序結構用函數來實現,即將復雜的C程序分為若幹模塊,每個模塊都編寫成壹個C 函數,然後通過主函數調用函數及函數調用函數來實現壹大型問題的C程序編寫,因此常說:C程序=主函數+子函數。因此,對函數的定義、調用、值的返回等中要尤其註重理解和應用,並通過上機調試加以鞏固。