c語言

c語言
編輯
 

C語言即c語言。html

C語言是一種 計算機程序設計語言,它既具備 高級語言的特色,又具備 彙編語言的特色。它由美國貝爾 實驗室的Dennis M. Ritchie於1972年推出,1978年後,C語言已前後被移植到大、中、小及微型機上,它能夠做爲工做系統設計語言,編寫 系統 應用程序,也能夠做爲應用程序設計語言,編寫不依賴計算機硬件的應用程序。它的應用範圍普遍,具有很強的數據處理能力,不只僅是在軟件開發上,並且各種科研都須要用到C語言,適於編寫系統軟件, 三維,二維圖形和動畫,具體應用好比 單片機以及 嵌入式系統開發
中文名
C語言
外文名
The C Programming Language
類    別
計算機程序設計語言
創始人
Dennis MacAlistair Ritchie
創始時間
1972年
發    源
BCPL語言
 

1簡介編輯

c語言宣傳圖

c語言宣傳圖[1]

C語言是1972年由美國的Dennis Ritchie設計發明的,並首次在 UNIX操做系統的DEC PDP-11計算機上使用。它由早期的 編程語言 BCPL(Basic Combined Programming Language)發展演變而來,在1970年,AT&T 貝爾實驗室Ken Thompson根據BCPL語言設計出較先進的並取名爲B的語言,最後致使了C語言的問世。 而 B語言以前還有A語言,取名自世界上第一位女程序員Ada( 艾達)。

發展

隨着 微型計算機的日益普及,出現了許多C語言版本。因爲沒有統一的標準, 使得這些C語言之間出現了一些不一致的地方。爲了改變這種狀況,美國國家標準研究所( ANSI)爲C語言制定了一套 ANSI標準,成爲現行的C語言標準。
注:國際標準化組織 ISO也制定C語言的標準,被不少 編譯器所採用,如: GCC等。
C語言是世界上最流行、使用最普遍的高級 程序設計語言之一。 [2]
操做系統和系統使用程序以及須要對 硬件進行操做的場合,用C語言明顯優於其它 高級語言,之前有許多大型應用軟件都是用C語言編寫的(因爲面向對象編程技術的出現,大型軟件轉由 C++JAVAC#再配合C語言開發;C語言在面對大型的軟件開發時,會顯得有些吃力)
C語言繪圖能力強,具備 可移植性,並具有很強的數據 處理能力,所以適於編寫 系統軟件三維,二維圖形和動畫。它是數值計算的高級語言。

編譯軟件

經常使用的編譯軟件有 Microsoft Visual C++Borland C++、Intel C++、 gccclang、Watcom C++ 、Lccwin32 C Compiler 3.一、 Microsoft C[3]
同時也是中國國家 計算機等級考試中計算機二級考試下的一個考試 科目

2C語言之父編輯

丹尼斯·裏奇, C語言之父, UNIX之父。1978年與布萊恩·科爾尼幹(Brian W. Kernighan)一塊兒出版了名著《C程序設計語言( The C Programming Language)》,此書已翻譯成多種語言,成爲C語言方面最權威的教材之一。2011年10月9日,丹尼斯-裏奇去世,享年70歲。
丹尼斯·裏奇,全稱丹尼斯·麥卡利斯泰爾·裏奇。美國計算機科學家,對C語言和其餘編程語言、 MulticsUnix操做系統的發展做出了巨大貢獻。裏奇在哈佛大學學習物理學和應用數學畢業,1967年他進入 貝爾實驗室,1983年他與肯·湯普遜一塊兒得到了 圖靈獎。理由是他們「研究發展了通用的操做系統理論,尤爲是實現了UNIX操做系統」。 肯·湯普遜和丹尼斯·裏奇1999年兩人爲發展C語言和Unix操做系統一塊兒得到了美國國家技術獎章。在裏奇的成長曆程中,有兩我的對他的影響最大,一個是他 父親,而另外一個是他的摯友,同爲 UNIX發明人的肯·湯普遜。尤爲是後者。 有人問過丹尼斯,他的偶像是誰,不論在計算機領域仍是其餘領域?他說:我不是在英雄薰陶下成長起來的。很顯然,對我職業生涯影響最大的人物是肯·湯普遜。UNIX大部分是他的工做,一樣也是C語言的前輩,一樣 Plan 9系統的大部分工做也是他作的。而且在這其間Ken作了第一個計算機象棋大師。 [4]
裏奇身上有不少難得的品格:首先,他對所作的事十分有興趣。好比創造出 Unix的初衷並不是爲了掙錢,事實上剛開始是爲了省錢,或者將他們的遊戲裝到一個更省錢的機子裏邊。第二,跳出溫馨區工做很是有必要。裏奇本來是一個 物理學家數學家,可是,他卻成了最具傳奇的程序員。很顯然,他的專業背景爲他研發出C語言或者Unix起了很大幫助,正如裏奇所言:「要不懼工做在一個陌生的領域裏。」若是裏奇花了數十年的時間在 晦澀的數學上,或許Unix就會胎死腹中。第三,要有創新思惟。Unix在貝爾實驗室是幸運的,那裏資金充足、不缺員工,他纔有條件與他的朋友按照本身的時間安排來研發他們想要的東西。最後,要懂得分享。許多企業都喜歡保密,將本身的核心技術藏匿起來,這在裏奇看來都是不成功的。 [5]

3歷史發展編輯

早期發展

C語言之因此命名爲C,是由於 C語言源自 Ken Thompson發明的 B語言,而 B語言則源自BCPL語言。
1967年, 劍橋大學的Martin Richards對 CPL語言進行了簡化,因而產生了BCPL(Basic Combined Programming Language)語言。
20世紀60年代,美國AT&T公司貝爾實驗室(AT&T Bell Laboratory)的研究員 Ken Thompson閒來無事,手癢難耐,想玩一個他本身編的,模擬在太陽系航行的電子遊戲——Space Travel。他揹着老闆,找到了臺空閒的機器—— PDP-7。但這臺機器沒有操做系統,而遊戲必須使用操做系統的一些功能,因而他着手爲PDP-7開發操做系統。後來,這個操做系統被命名爲——UNIX。
1970年,美國 貝爾實驗室的 Ken Thompson,以 BCPL語言爲基礎,設計出很簡單且很接近硬件的B語言(取BCPL的首字母)。而且他用B語言寫了第一個 UNIX操做系統。
1971年,一樣酷愛Space Travel的 Dennis M.Ritchie爲了能早點兒玩上游戲,加入了 Thompson的開發項目,合做開發UNIX。他的主要工做是改造B語言,使其更成熟。 [6]
1972年,美國 貝爾實驗室的 D.M.Ritchie 在B語言的基礎上最終設計出了一種新的語言,他取了BCPL的第二個字母做爲這種語言的名字,這就是C語言。
1973年初,C語言的主體完成。Thompson和Ritchie火燒眉毛地開始用它徹底重寫了UNIX。此時,編程的樂趣使他們已經徹底忘記了那個"Space Travel",一門心思地投入到了UNIX和C語言的開發中。隨着UNIX的發展,C語言自身也在不斷地完善。直到今天,各類版本的UNIX內核和周邊工具仍然使用C語言做爲最主要的開發語言,其中還有很多繼承Thompson和Ritchie之手的代碼。 [6]
在開發中,他們還考慮把UNIX移植到其餘類型的計算機上使用。C語言強大的移植性(Portability)在此顯現。機器語言和彙編語言都不具備移植性,爲x86開發的程序,不可能在Alpha,SPARC和ARM等機器上運行。而C語言程序則能夠在任意機器上運行,只要那種計算機上有C語言編譯器和庫。 [6]
1977年, Dennis M.Ritchie發表了不依賴於具體機器 系統的C語言編譯文本《可移植的C語言編譯程序》。 [7]
C語言繼續發展,在1982年,不少有識之士和美國國家標準協會爲了使這個語言健康地發展下去,決定成立C標準委員會,創建C語言的標準。委員會由硬件廠商,編譯器及其餘軟件工具生產商,軟件設計師,顧問,學術界人士,C語言做者和應用程序員組成。1989年, ANSI發佈了第一個完整的C語言標準——ANSI X3.159—1989,簡稱「C89」,不過人們也習慣稱其爲「ANSIC」。C89在1990年被國際標準組織ISO(International Organization for Standardization)一字不改地採納,因此也有「C90」的說法。1999年,在作了一些必要的修正和完善後,ISO發佈了新的C語言標準,命名爲ISO/IEC 9899:1999,簡稱「C99」。 [6]

K&R C

1978年由 美國電話電報公司(AT&T)貝爾實驗室正式發表了C語言。Brian Kernighan 和 Dennis Ritchie 出版了一本書,名叫《The C Programming Language》。這本書被 C語言開發者們稱爲"K&R",不少年來被看成 C語言的非正式的標準說明。人們稱這個版本的 C語言爲 K&R C[7]

ANSI C / C89標準

1970到80年代,C語言被普遍應用,從大型主機到小型微機,也衍生了C語言的不少不一樣版本。
1983年美國國家標準局 (American National Standards Institute,簡稱ANSI)成立了一個委員會,來制定 C語言標準。 [8]
1989年 C語言標準被批准,被稱爲 ANSI X3.159-1989 "Programming Language C",俗稱 ANSI CC89標準
1990年, 國際標準化組織ISO(International Organization for Standards)接受了1989年的ANSI C爲 ISO C 的標準,命名爲ISO/IEC 9899:1990,簡稱 C90標準。不過習慣上仍然叫 C89標準
1994年,ISO修訂了C語言的標準。
1995年,ISO對C90作了一些修訂,即「1995基準增補1(ISO/IEC/9899/AMD1:1995)」。 [9]
在ANSI標準化後,C語言的標準在一段至關的時間內都保持不變,儘管C繼續在改進。(實際上,NormativeAmendment1在1995年已經開發了一個新的C語言版本。可是這個版本不多爲人所知。)它被ANSI於2000年3月採用。 [10]

C99標準

1999年,ISO又對C語言標準進行修訂,在基本保留原來C語言特徵的基礎上,針對應該的須要,增長了一些功能,命名爲 ISO/IEC 9899:1999,俗稱 C99標準

C11標準

2001年和2004年前後進行了兩次技術修正。
2011年12月8日,ISO正式公佈C語言新的國際標準,命名爲 ISO/IEC 9899:2011,俗稱 C11標準[7] [11-13]
(注意:「C11標準」與「C++ 11標準」是兩個徹底不一樣的標準,前者是 C語言的標準ISO/IEC 9899:2011,後者是 C++語言的標準ISO/IEC 14882:2011。兩個別搞混淆了。)

4特色編輯

基本特性

C++語言代碼

C++語言代碼

一、 C是高級語言:它是把 高級語言基本結構語句與低級語言的實用性結合起來的工做單元。 [14]
二、 C是結構式語言:結構式語言的顯著特色是 代碼及數據的分隔化,即程序的各個部分除了必要的信息交流外彼此獨立。這種結構化方式可以使程序層次清晰,便於使用、 維護以及 調試。C 語言是以函數形式提供給用戶的,這些函數可方便的調用,並具備多種 循環、條件語句控制 程序流向,從而使程序徹底結構化。 [14]
三、 C語言功能齊全:具備各類各樣的 數據類型,並引入了 指針概念,可以使程序效率更高。並且計算功能、 邏輯判斷功能也比較強大,能夠實現決策目的的遊戲。 [14]
四、 C語言適用範圍大:適合於多種 操做系統,如Windows、 DOSUNIX等等;也適用於多種機型。C語言對編寫須要硬件進行操做的場合,優於其它高級語言,有一些大型 應用軟件也是用C語言編寫的。 [14]
五、 C語言應用指針:能夠直接進行靠近硬件的操做,可是C的指針操做不作保護,也給它帶來了不少不安全的因素。C++在這方面作了改進,在保留了指針操做的同時又加強了安全性,受到了一些用戶的支持,可是,因爲這些改進增長語言的複雜度,也爲另外一部分所詬病。 Java則吸收了C++的教訓,取消了 指針操做,也取消了C++改進中一些備受爭議的地方,在安全性和適合性方面均取得良好的效果,但其自己解釋在 虛擬機中運行,運行效率低於C++/C。通常而言,C,C++, java被視爲同一系的語言,它們長期佔據着程序使用榜的前三名。 [15]
六、 C語言文件由數據序列組成:能夠構成二進制文件或文本文件經常使用的C語言IDE( 集成開發環境)有Microsoft Visual C++、 Dev-C++Code::Blocks、Borland C++ Builder、Watcom C++、GNU DJGPP C++、Lccwin32 C Compiler 3.一、High C, Turbo CC-FreeWin-TC、Xcode等。

新特性

一、 對齊處理(Alignment)的標準化(包括_Alignas標誌符,alignof 運算符,aligned_alloc 函數以及<stdalign.h> 頭文件)。
二、_Noreturn 函數標記,相似於 gcc 的 __attribute__(noreturn)。
三、_Generic 關鍵字
四、 多線程(Multithreading)支持,包括:_Thread_local存儲類型標識符,<threads.h>;頭文件,裏面包含了線程的建立和管理函數。
五、加強的Unicode的支持,基於C Unicode技術報告ISO/IEC TR 19769:2004,加強了對Unicode的支持。包括爲UTF-16/UTF-32編碼增長了char16_t和char32_t數據類型,提供了包含unicode字符串轉換函數的頭文件<uchar.h>.
六、刪除了 gets() 函數,使用一個新的更安全的函數gets_s()替代。
七、增長了邊界檢查函數接口,定義了新的安全的函數,例如 fopen_s(),strcat_s()等等。
八、增長了更多浮點處理宏。
九、匿名結構體/聯合體支持,這個在gcc早已存在,C11將其引入標準。
十、靜態斷言(Static assertions),_Static_assert(),在解釋 #if 和 #error 以後被處理。
十一、新的 fopen()模式,(「…x」),相似 POSIX 中的 O_CREAT|O_EXCL,在文件鎖中比較經常使用。
十二、新增 quick_exit()函數做爲第三種終止程序的方式。當 exit()失敗時能夠作最少的清理工做。
1三、_Atomic類型修飾符和<stdatomic.h>頭文件。

5優缺點編輯

優勢

一、 簡潔緊湊、靈活方便
C語言一共只有32個 關鍵字,9種 控制語句,程序書寫形式自由,區分大小寫。把高級語言的基本結構和語句與低級語言的實用性結合起來。C 語言能夠像彙編語言同樣對 字節地址進行操做,而這三者是計算機最基本的工做單元。 [16]
C語言的 Hello World 程序

C語言的 Hello World 程序

二、 運算符豐富
C語言的 運算符包含的範圍很普遍,共有34種運算符。C語言把 括號賦值強制類型轉換等都做爲運算符處理。從而使C語言的運算類型極其豐富, 表達式類型多樣化。靈活使用各類運算符能夠實如今其它 高級語言中難以實現的運算。 [16]
三、 數據類型豐富
C語言的數據類型有: 整型、實型、字符型、數組類型、指針類型、 結構體類型、共用體類型等。能用來實現各類複雜的 數據結構的運算。並引入了指針概念,使程序效率更高。 [17]
四、 表達方式靈活實用
C語言提供多種運算符和表達式值的方法,對問題的表達可經過多種途徑得到,其程序設計更主動、靈活。它語法限制不太嚴格,程序設計自由度大,如對整型量與字符型數據及邏輯型數據能夠通用等。 [18]
五、 容許直接訪問物理地址,對硬件進行操做
因爲C語言容許直接訪問 物理地址,能夠直接對 硬件進行操做,所以它既具備高級語言的功能,又具備低級語言的許多功能,可以像 彙編語言同樣對位(bit)、字節和地址進行操做,而這三者是計算機最基本的工做單元,可用來寫 系統軟件[19]
六、 生成目標代碼質量高,程序執行效率高
C語言描述問題比 彙編語言迅速,工做量小、 可讀性好,易於調試、修改和移植,而代碼質量與 彙編語言至關。C語言通常只比彙編程序生成的目標代碼效率低10%~20%。 [18]
七、 可移植性好
C語言在不一樣機器上的C 編譯程序,86%的代碼是公共的,因此C語言的編譯程序便於移植。在一個環境上用C語言編寫的程序,不改動或稍加改動,就可移植到另外一個徹底不一樣的環境中運行。 [18]
八、 表達力強
C語言有豐富的數據結構和 運算符。包含了各類數據結構,如 整型、數組類型、指針類型和聯合類型等,用來實現各類數據結構的運算。C語言的運算符有34種,範圍很寬,靈活使用各類運算符能夠實現難度極大的運算。
C語言能直接訪問硬件的物理地址,能進行位( bit)操做。兼有高級語言和低級語言的許多優勢。
它既可用來編寫系統軟件,又可用來開發應用軟件,已成爲一種通用程序設計語言。
另外C語言具備強大的圖形功能,支持多種 顯示器驅動器。且計算功能、 邏輯判斷功能強大。 [18]

缺點

1. C語言的缺點主要表如今數據的 封裝性上,這一點使得C在數據的安全性上有很大 缺陷,這也是C和C++的一大 區別
2. C語言的語法限制不太嚴格,對 變量的類型約束不嚴格,影響程序的安全性,對 數組下標越界不做檢查等。從應用的角度,C語言比其餘高級語言較難掌握。也就是說,對用C語言的人,要求對程序設計更熟練一些。 [20]

6語法編輯

基礎

數據類型
C的數據類型包括: 整型、字符型、實型或 浮點型(單精度和雙精度)、 枚舉類型、數組類型、 結構體類型、共用體類型、指針類型和空類型。 [21]
常量與變量
常量其值不可改變,符號常量名一般用大寫。
變量是以某標識符爲名字,其值能夠改變的量。標識符是以字母或下劃線開頭的一串由字母、數字或下劃線構成的序列,請注意第一個字符必須爲字母或下劃線,不然爲不合法的變量名。變量在編譯時爲其分配相應存儲單元。
數組
若是一個變量名後面跟着一個有數字的中括號,這個聲明就是數組聲明。字符串也是一種數組。它們以ASCII的NULL做爲數組的結束。要特別注意的是,方括內的索引值是從0算起的。 [22]
指針
若是一個變量聲明時在前面使用 * 號,代表這是個指針型變量。換句話說,該變量存儲一個地址,而 *(此處特指單目運算符 * ,下同。C語言中另有 雙目運算符 *) 則是取內容操做符,意思是取這個內存地址裏存儲的內容。指針是 C 語言區別於其餘同時代 高級語言的主要特徵之一。 [23]
指針不只能夠是變量的地址,還能夠是 數組、數組 元素函數的地址。經過指針做爲 形式參數能夠在 函數的調用過程獲得一個以上的返回值,不一樣於return(z)這樣的僅能獲得一個返回值。
指針是一把雙刃劍,許多操做能夠經過指針天然的表達,可是不正確的或者過度的使用指針又會給程序帶來大量潛在的錯誤。 [22]
字符串
C語言的字符串其實就是以'\0'字符結尾的char型 數組,使用字符型並不須要引用 ,可是使用字符串就須要C標準庫裏面的一些用於對字符串進行操做的函數。它們不一樣於字符數組。使用這些函數須要引用 頭文件<string.h>。 [24]
文件輸入/輸出
在C語言中, 輸入輸出是經由標準庫中的一組函數來實現的。在ANSI/ISO C中,這些函數被定義在頭文件<stdio.h>;中。
標準輸入/輸出
有三個標準輸入/輸出是標準I/O庫預先定義的:
stdin標準輸入
stdout標準輸出
stderr輸入輸出錯誤 [21]
運算
C語言的運算很是靈活,功能十分豐富,運算種類遠多於其它 程序設計語言。在表達式方面較其它程序語言更爲簡潔,如自加、自減、逗號運算和三目運算使表達式更爲簡單,但初學者每每會覺的這種表達式難讀,關鍵緣由就是對運算符和運算順序理解不透不全。當多種不一樣運算組成一個運算表達式,即一個運算式中出現多種運算符時,運算的優先順序和結合規則顯得十分重要。在學習中,對此合理進行分類,找出它們與數學中所學到運算之間的不一樣點以後,記住這些運算也就不困難了,有些運算符在理解後更會牢記心中,未來用起來駕輕就熟,而有些可暫時放棄不記,等用到時再記不遲。
先要明確運算符按 優先級不一樣分類,《 C程序設計》運算符可分爲15種優先級,從高到低, 優先級爲1 ~ 15,除第2.13級和第14級爲從右至左結合外,其它都是從左至右結合,它決定同級運算符的運算順序。 [25]

關鍵字

關鍵字又稱爲 保留字,就是已被C語言自己使用,不能做其它用途使用的字。例如 關鍵字不能用做變量名、函數名等 標識符
由ISO標準定義的C語言關鍵字共32個:
auto double int struct break else long switch
case enum register typedef char extern return union
const float short unsigned continue for signed void
default goto sizeof volatile do if while static inline
restrict _Bool _Complex _Imaginary _Generic [26]

數據類型關鍵字

基本數據類型
void:聲明函數無返回值或無參數,聲明無類型指針,顯示丟棄運算結果。
char:字符型類型數據,屬於 整型數據的一種。
int:整型數據,表示範圍一般爲編譯器指定的內存字節長。
float單精度浮點型數據,屬於 浮點數據的一種。
double:雙精度浮點型數據,屬於浮點數據的一種。
_Bool: 布爾型(C99標準新增)
_Complex:複數的基本類型(C99標準新增)
_Imaginary:虛數,與複數基本類型類似,沒有實部的純虛數(C99標準新增)
_Generic:提供重載的接口入口(C11標準新增)
類型修飾關鍵字
short:修飾int,短整型數據,可省略被修飾的int。
long:修飾int,長整型數據,可省略被修飾的int。
long long:修飾int,超長整型數據,可省略被修飾的int。(C99標準新增)
signed:修飾整型數據,有符號數據類型。
unsigned:修飾整型數據,無符號數據類型。
restrict:用於限定和約束指針,並代表指針是訪問一個數據對象的惟一且初始的方式。
複雜類型關鍵字
struct:結構體聲明。
union:共用體聲明。
enum:枚舉聲明。
typedef:聲明類型別名。
sizeof:獲得特定類型或特定類型變量的大小。
inline:內聯函數用於取代宏定義,會在任何調用它的地方展開。(C99標準新增)
存儲級別關鍵字
auto:指定爲 自動變量,由編譯器自動分配及釋放。一般在棧上分配。與static相反。當變量未指定時默認爲auto。
static:指定爲 靜態變量,分配在靜態變量區,修飾函數時,指定函數做用域爲文件內部。
register:指定爲 寄存器變量,建議編譯器將變量存儲到寄存器中使用,也能夠修飾函數形參,建議編譯器經過寄存器而不是 堆棧傳遞參數。
extern:指定對應變量爲 外部變量,即標示變量或者函數的定義在別的文件中,提示編譯器遇到此變量和函數時在其餘模塊中尋找其定義。
const:指定變量不可被當前線程改變(但有可能被系統或其餘線程改變)。
volatile:指定變量的值有可能會被系統或其餘線程改變,強制編譯器每次從內存中取得該變量的值,阻止編譯器把該變量優化成寄存器變量。

流程控制關鍵字

跳轉結構
return:用在 函數體中,返回特定值(若是是void類型,則不返回函數值)。
continue:結束當前循環,開始下一輪循環。
break:跳出當前循環或switch結構。
goto:無條件跳轉語句。
分支結構
if:條件語句,後面不須要放分號。
else:條件語句否認分支(與if連用)。
switch:開關語句(多重分支語句)。
case:開關語句中的分支標記,與switch連用。
default:開關語句中的「其餘」分支,可選。

7語法結構編輯

順序結構

順序結構程序設計是最簡單的,只要按照解決問題的順序寫出相應的語句就行,它的執行順序是自上而下,依次執行。
例如: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。不過大多數狀況下順序結構都是做爲程序的一部分,與其它結構一塊兒構成一個複雜的程序,例如分支結構中的 複合語句、循環結構中的循環體等。 [27]

選擇結構

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

循環結構

循環結構能夠減小源程序重複書寫的工做量,用來描述重複執行某段算法的問題,這是程序設計中最能發揮計算機特長的程序結構,C語言中提供四種循環,即goto循環、while循環、do while循環和 for循環。四種循環能夠用來處理同一問題,通常狀況下它們能夠互相代替換,但通常不提倡用goto循環,由於強制改變程序的順序常常會給程序的運行帶來不可預料的錯誤。
特別要注意在循環體內應包含趨於結束的語句(即循環變量值的改變),不然就可能成了一個 死循環,這是初學者的一個常見錯誤。
三個循環的異同點:用while和do…while循環時,循環變量的初始化的操做應在循環體以前,而for循環通常在語句1中進行的;while循環和for循環都是先判斷表達式,後執行循環體,而do…while循環是先執行循環體後判斷表達式,也就是說do…while的循環體最少被執行一次,而while循環和for就可能一次都不執行。另外還要注意的是這三種循環均可以用break語句跳出循環,用continue語句結束本次循環,而 goto語句if構成的循環,是不能用 break和 continue語句進行控制的。
順序結構、分支結構和循環結構並不彼此孤立的,在循環中能夠有分支、順序結構,分支中也能夠有循環、順序結構,其實無論哪一種結構,都可廣義的把它們當作一個語句。在實際編程過程當中常將這三種結構相互結合以實現各類算法,設計出相應程序,可是要編程的問題較大,編寫出的程序就每每很長、結構重複多,形成可讀性差,難以理解,解決這個問題的方法是將C程序設計成 模塊化結構。 [29]
具體內容:
for循環
for循環結構是c語言中最具備特點的循環語句,使用最爲靈活方便,它的通常形式爲:
for(表達式1;表達式2;表達式3)循環體語句 。(其中;不能省略)
表達式
表達式1爲初值表達式,用於在循環開始前爲循環變量賦初值。
表達式2是循環控制邏輯表達式,它控制循環執行的條件,決定循環的次數。
表達式3爲循環控制變量修改表達式,它使for循環趨向結束。
循環體語句是在循環控制條件成立的狀況下被反覆執行的語句。
可是在整個for循環過程當中,表達式1只計算一次,表達式2和表達式3則可能計算屢次,也可能一次也不計算。循環體可能屢次執行,也可能一次都不執行。
先執行表達式2,而後執行循環結構,最後表達式3,一直這樣循環下去。
for循環語句是c語言種功能最爲強大的語句,甚至在必定程度上能夠代替其餘的循環 語句
do
do循環結構,do 1 while⑵;的執行順序是1->2->1...循環,2爲循環 條件
while
while循環結構,while(1) 2; 的執行順序是1->2->1...循環,1爲循環條件
以上循環語句,當循環條件表達式爲真則繼續循環,爲假則跳出循環。

8預編譯與條件編譯編輯

#define 預編譯宏
#if 表達式 #else if 表達式 #else #endif 條件編譯
#ifdef 宏 #else #endif 條件編譯
#ifndef 宏 #else #endif 條件編譯

9模塊化程序結構編輯

C語言的模塊化程序結構用函數來實現,即將複雜的C程序分爲若干模塊,每一個模塊都編寫成一個C函數,而後經過主 函數調用函數及函數調用函數來實現一大型問題的C程序編寫,所以常說:C程序=主函數+子函數。所以,對函數的定義、調用、值的返回等中要尤爲注重理解和應用,並經過上機調試加以鞏固。 [30]

判斷語句(選擇結構):

if 語句:「若是」語句;if—else 語句:「若…(則)…不然…」語句;switch 語句:「切換」語句;switch—case:「切換—狀況」語句。

循環語句(循環結構):

while 語句:「當…」語句;do—while 語句:「作…當…(時候)」語句;for 語句:條件語句(即「(作)…爲了…」語句)。

跳轉語句(循環結構:是否循環):

goto 語句:「轉舵」語句;break 語句:「中斷」(循環)語句;continue 語句:「繼續」語句(結束本次循環,繼續下一次循環);return 語句:「返回饋」語句。 [1]

10運算符號編輯

比較特別的是,比特右移(>>)運算符能夠是算術(左端補最高有效位)或是邏輯(左端補 0)位移。例如,將 11100011 右移 3 比特,算術右移後成爲 11111100,邏輯右移則爲 00011100。因算術比特右移較適於處理帶負號整數,因此幾乎全部的編譯器都是算術比特右移。
運算符的優先級從高到低大體是: 單目運算符算術運算符關係運算符邏輯運算符、條件運算符、賦值運算符(=)和逗號運算符。 [31]

11函數簡介編輯

C程序是由一組或是變量或是函數的外部對象組成的。 函數是一個自我包含的完成必定相關功能的執行代碼段。咱們能夠把函數當作一個「黑盒子」,你只要將數據送進去就能獲得結果,而函數內部到底是如何工做的的,外部程序是不知道的。外部程序所知道的僅限於輸入給函數什麼以及函數輸出什麼。函數提供了編制程序的手段,使之容易讀、寫、理解、排除錯誤、修改和維護。
C程序中函數的數目其實是不限的,若是說有什麼限制的話,那就是,一個C程序中必須至少有一個函數,並且其中必須有一個而且僅有一個以main爲名,這個函數稱爲主函數,整個程序從這個主函數開始執行。
C 語言程序鼓勵和提倡人們把一個大問題劃分紅一個個子問題,對應於解決一個子問題編制一個函數,所以,C 語言程序通常是由大量的小函數而不是由少許大函數構成的,即所謂「小函數構成大程序」。這樣的好處是讓各部分相互充分獨立,而且任務單一。於是這些充分獨立的小模塊也能夠做爲一種固定規格的小「構件」, 用來構成新的大程序。
C語言的一個主要特色是能夠創建庫函數。Turbo C 2.0 提供的運行程序庫有400多個函數, 每一個函數都完成必定的功能, 可由用戶隨意調用。這些函數總的分爲輸入輸出函數、數學函數、字符串和內存函數、與BIOS和DOS有關的函數、 字符屏幕和圖形功能函數、過程控制函數、目錄函數等。對這些庫函數應熟悉其功能, 只有這樣纔可省去不少沒必要要的工做。
本處專門介紹Turbo C2.0的庫函數,並對每一個函數都給出例程,(點擊頁底的連接就能夠瀏覽相應的函數),讀者能夠將自已須要的部分以塊的方式定義, 而後將此塊寫入文件,這樣就能夠在進入Turbo C2.0集成開發環境後,直接調用此程序,鏈接,運行,觀察結果,以加深對該函數的理解。
用戶編制Turbo C語言源程序,就是利用Turbo CC語言函數簡介。

12程序結構編輯

1.一個C語言 源程序能夠由一個或多個 源文件組成。 [32]
2.每一個源文件可由一個或多個 函數組成。
3.一個源程序不論由多少個文件組成,都有一個且只能有一個 main函數,即 主函數
4.源程序中能夠有 預處理命令(包括include 命令,ifdef、ifndef命令、define命令),預處理命令一般應放在源文件或源程序的最前面。
5.每個說明,每個語句都必須以分號結尾。但預處理命令, 函數頭和花括號「}」以後不能加分號。(結構體、聯合體、枚舉型的聲明的「}」後要加「 ;」。)
6. 標識符,關鍵字之間必須至少加一個空格以示間隔。若已有明顯的間隔符,也可再也不加空格來間隔。 [33]

13書寫規則編輯

  1. 一個說明或一個語句佔一行。
  2. 用{} 括起來的部分,一般表示了程序的某一層次結構。{}通常與該結構語句的第一個字母對齊,並單獨佔一行。
  3. 低一層次的語句或說明可比高一層次的語句或說明縮進若干格後書寫。以便看起來更加清晰,增長程序的可讀性。在編程時應力求遵循這些規則,以養成良好的編程風格。 [33]

14經典錯誤編輯

void main()的用法並非任何標準制定的,是微軟公司內定的,雖然有少數編譯器支持這種寫法。C語言正確的語法是int main(void)和int main(int argc, char *argv[])。另外int main(int argc, char *argv[], char *env[])也是不規範的。若是使用void main()或者int main(int argc, char *argv[], char *env[])會使C程序失去跨平臺的移植特性。 [34]

15經典教材編輯

入門教材

《C Primer Plus (Fifth Edition)》 [35-36]
《C Primer Plus (第五版)中文版》 [37-38]

進階教材

《The C Programming Language (Second Edition)》
《C程序設計語言(第二版)》

高階教材

《Expert C Programming》 [39]
《C Traps and Pitfalls》 [40]
《Pointers on C》
《C: A Reference Manual》 [41]

16程序設計編輯

最初,C語言被用於系統程序設計。一個「系統行式」是一大類程序的一部分,這一大類構成了電腦操做系統及實用程序。一般被稱爲系統程序的有:
· 操做系統。
· 翻譯行式。
· 編輯行式。
· 彙編程序。
· 編譯程序。
· 數據庫管理程序。

17考試編輯

特色

全國計算機等級考試(National Computer Rank Examination,簡稱NCRE),是經原國家教育委員會(現教育部)批准,由教育部考試中心主辦,面向社會,用於考查應試人員計算機應用知識與技能的全國性計算機水平考試體系。其中二級考試中包含了C語言的科目。 [3]
[42] 一、全國計算機等級考試二級考試科目;
二、C語言普遍應用於數控、機械、電子、通訊、自動控制等領域;
三、C語言簡潔緊湊、靈活方便、算符豐富、據結構豐富;
四、C語言容許直接訪問物理地址,能夠直接對硬件進行操做;
五、語言適用範圍大,可移植性好,C語言有一個突出的優勢就是適合於多種操做系統。

題庫

《計算機等級考試題庫(二級C語言程序設計)》系計算機等級考試寶典試題輔導軟件,適用於計算機等級考試寶典,軟件試題庫設計緊扣最新計算機等級考試寶典大綱、考試教材,符合計算機等級考試寶典題型與考試科目,複習輔導資料、考試資料豐富,免費試用、試題庫巨大(註冊版試題量達7百多題、19萬多字),輔導軟件收錄計算機等級考試寶典考前衝刺、歷年試題,試題輔導軟件囊括了目前全部的最新計算機等級考試寶典科目:程序填空題、改錯題、編程題、考前衝刺、歷年真題,並提供專業級的計算機等級考試寶典解題方法、答題技巧、考試要點精解。經過全面、針對性強的強化考試輔導訓練、考前培訓,提升您計算機等級考試寶典的應試能力,輔導您考試成功。咱們免費提供計算機等級考試寶典報名時間、報名地點、報考條件、考試時間、成績查詢、合格分數線。 [43]
 
 
參考資料
相關文獻
相關文章
相關標籤/搜索