字母C的發展史
符號起源
字母C的產生可能是由於一個投擲棒的符號,在古埃及的象形文字裡
(1)並很早出現在閃族的書面當中-大約在公元前1500年的西奈半島。
(2)大約在公元前1000年,在比布魯斯(古地中海港市,位於現黎巴嫩貝魯特以北的朱拜勒,公元前第二個千年成為繁華的腓尼基城)和腓尼基的其他一些地方以及迦南的中心,這個符號是特定的線性形式。
(3)對於全部的線性形式來說。在閃族的語言中這個符號叫做gimel或是gaml,,意思是throwing stick(投擲棒)。希臘人重新改變的閃族人的命名稱之為gamma。後來,當希臘人開始用從左到右書寫代替從右到左書寫的時候,他們從翻轉了字母。
(4)除此之外,這個gamma符號用來做發音g。羅馬人把這個符號應用到拉丁文裡,但是他們把它了變圓滑。
(5)起初他們把這個符號用於發音g和k。後來他們區分了這兩種發音的寫法。C的原型被用來做k發音,而由C加了一條而變成的G被用來做g的發音。這倆個符號沒有改變的被應用到了英語當中.
字母的含意
在數學及計算機科學中,表示十六進制的12
MS-DOS(2.0或以後版本)及微軟視窗作業系統稱第一個實體硬盤上的可開機(active)主分割中的邏輯磁盤為“C:”或“c:”,系統檔案都是分別放在此磁盤的DOS、Windows或Winnt子目錄中
大寫C代表
在化學中,表示碳的化學符號
在樂理中,表示:
音階中的C音
調號中於C音開始的音樂的C大調及C小調
拍子記號中的4/4拍子
在羅馬數字中表示100
在國際單位制的電荷中表示庫侖
在計算機科學中,有C語言、C++、C#、Objective-C等
在營養學中,表示維生素C
在生物化學中,表示胞嘧啶,是構成DNA的四種核苷酸結構之一
在物理學中,表示電容
在數學中,表示:
復數
不定積分解之常數項
圓周
在機率中,組合會以C表示。
字母c的發展史
1.5V干電池的標准尺寸之一
溫度的單位攝氏(℃)
在寶石學中,鑽石的鑒定標准簡稱“4C”,分別代表切割(Cut)、色澤(Colour)、淨度(Clarity)和重量(Carat)
在電子商貿術語中,有C2C、B2C等的交易形式,C表示“Consumer”
在印刷四分色模式(CMYK)中,表示青色(Cyan)
在橋牌的叫牌過程中,C表示梅花牌(Club),如“2梅花”記作“2C”
在評核制度中,C表示“常”
在DVD及數位電視中,CC代表隱藏字幕(Closed Caption)。
小寫c代表
在物理學中,代表真空中的光速,為299,792,458米每秒
在小寫字母中劃一豎線表示“分”(貨幣),¢
在國際單位制詞頭,c表示centi,即一百分之一(10-2)
在小寫字母外圍劃一圓圈:?表示版權所有
在代數學中,常表示常數
在幾何學中,表示截距(intercept)
在文件或電子郵件上,cc表示“副本抄送”
在度量衡中,cc是“立方厘米”(cubiccentimetre)的縮寫
其他
在網絡語言中,c經常被用來替代“see”,如“ic”即“I see”,“cu”即“see you”
在香港的茶餐廳中 ,侍應常將“凍”(Cold)省作“C”。例如“C0T”即“凍、檸(零)、茶(TEA)”。
字符編碼
字符編碼 ASCII Unicode EBCDIC 摩斯電碼
大寫C 67 0043 195 —·—·
小寫c 99 0063 131
參看
C的變體
¢(一分貨幣)
?(版權)
其他字母中的相近字母
Γγ(希臘字母Gamma)
計算機程序設計語言C
中文名: c語言
類別: 計算機程序設計語言
創始人: D.M.Ritchie
創始時間: 1972年
發源: BCPL語言
常用編譯軟件: GCC, Microsoft Visual C++等
C語言是一種計算機程序設計語言,它既具有高級語言的特點,又具有匯編語言的特點。它由美國貝爾研究所的D.M.Ritchie於1972年推出,1978年後,C語言已先後被移植到大、中、小及微型機上,它可以作為工作系統設計語言,編寫系統應用程序,也可以作為應用程序設計語言,編寫不依賴計算機硬件的應用程序。它的應用范圍廣泛,具備很強的數據處理能力,不僅僅是在軟件開發上,而且各類科研都需要用到C語言,適於編寫系統軟件,三維,二維圖形和動畫,具體應用比如單片機以及嵌入式系統開發。
C語言是1972年由美國的Dennis Ritchie設計發明的,並首
c語言宣傳圖[1]
次在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語言繪圖能力強,具有可移植性,並具備很強的數據處理能力,因此適於編寫系統軟件,三維,二維圖形和動畫。它是數值計算的高級語言。
常用的編譯軟件有Microsoft Visual C++,Borland C++,gcc(linux系統下最常用的編譯器),Watcom C++ ,Borland C++, Borland C++ Builder,Borland C++ 3.1 for DOS,Watcom C++ 11.0 for DOS,GNU DJGPP C++, Lccwin32 C Compiler 3.1,Microsoft C,High C等
C語言之所以命名為C,是因為 C語言源自Ken Thompson發
C語言創始人D.M.Ritchie[5]
明的B語言,而 B語言則源自BCPL語言。
1967年,劍橋大學的Martin Richards對CPL語言進行了簡化,於是產生了BCPL(Basic Combined Programming Language)語言。
1970年,美國貝爾實驗室的 Ken Thompson。以BCPL語言為基礎,設計出很簡單且很接近硬件的B語言(取BCPL的首字母)。並且他用B語言寫了第一個UNIX操作系統。
1972年,美國貝爾實驗室的 D.M.Ritchie 在B語言的基礎上最終設計出了一種新的語言,他取了BCPL的第二個字母作為這種語言的名字,這就是C語言。
1977年,Dennis M.Ritchie發表了不依賴於具體機器系統的C語言編譯文本《可移植的C語言編譯程序》。[6]K&R C
1978年由美國電話電報公司(AT&T)貝爾實驗室正式發表了C語言。Brian Kernighan 和 Dennis Ritchie 出版了一本書,名叫《The C Programming Language》。這本書被 C語言開發者們稱為"K&R",很多年來被當作 C語言的非正式的標准說明。人們稱這個版本的 C語言為"K&R C"。[6]ANSI C
1970到80年代,C語言被廣泛應用,從大型主機到小型微機,也衍生了C語言的很多不同版本。
1983年美國國家標准局 (American National Standards Institute,簡稱ANSI)成立了一個委員會,來制定 C語言標准。[7]1989年 C語言標准被批准,被稱為 ANSI X3.159-1989 "Programming Language C"。這個版本的C語言標准通常被稱為ANSI C。
C99
1990年,國際標准化組織ISO(International Organization for Standards)接受了89 ANSI C 為I SO C 的標准(ISO9899-1990)。1994年,ISO修訂了C語言的標准。
1995年,ISO對C90做了一些修訂,即“1995基准增補1(ISO/IEC/9899/AMD1:1995)”。[8]1999年,ISO又對C語言標准進行修訂,在基本保留原來C語言特征的基礎上,針對應該的需要,增加了一些功能,命名為ISO/IEC9899:1999。
在ANSI標准化後,C語言的標准在一段相當的時間內都保持不變,盡管C繼續在改進。(實際上,NormativeAmendment1在1995年已經開發了一個新的C語言版本。但是這個版本很少為人所知。)它被ANSI於2000年3月采用。[9]C11
2001年和2004年先後進行了兩次技術修正。
2011年12月8日,ISO正式公布C語言新的國際標准草案:ISO/IEC 9899:2011,即C11
基本特性
C++語言代碼
1、C是高級語言:它把高級語言的基本結構和語句與低級語言的實用性結合起來。C 語言可以像匯編語言一樣對位、字節和地址進行操作,而這三者是計算機最基本的工作單元。[12]2、C是結構式語言:結構式語言的顯著特點是代碼及數據的分隔化,即程序的各個部分除了必要的信息交流外彼此獨立。這種結構化方式可使程序層次清晰,便於使用、維護以及調試。C 語言是以函數形式提供給用戶的,這些函數可方便的調用,並具有多種循環、條件語句控制程序流向,從而使程序完全結構化。[12]3、C語言功能齊全:具有各種各樣的數據類型,並引入了指針概念,可使程序效率更高。而且計算功能、邏輯判斷功能也比較強大,可以實現決策目的的游戲。[12]4、C語言適用范圍大:適合於多種操作系統,如Windows、DOS、UNIX等等;也適用於多種機型。C語言對編寫需要硬件進行操作的場合,優於其它高級語言,有一些大型應用軟件也是用C語言編寫的。[12]5、C語言應用指針:可以直接進行靠近硬件的操作,但是C的指針操作不做保護,也給它帶來了很多不安全的因素。C++在這方面做了改進,在保留了指針操作的同時又增強了安全性,受到了一些用戶的支持,但是,由於這些改進增加語言的復雜度,也為另一部分所诟病。Java則吸取了C++的教訓,取消了指針操作,也取消了C++改進中一些備受爭議的地方,在安全性和適合性方面均取得良好的效果,但其本身解釋在虛擬機中運行,運行效率低於C++/C。一般而言,C,C++,java被視為同一系的語言,它們長期占據著程序使用榜的前三名。[13]6、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,xcode(mac os x)等。[14]新特性
1、對齊處理(Alignment)的標准化(包括_Alignas標志符,alignof運算符,aligned_alloc函數以及<stdalign.h>頭文件。
2、_Noreturn 函數標記,類似於 gcc 的 __attribute__((noreturn))。
3、_Generic關鍵字。
4、多線程(Multithreading)支持,包括:_Thread_local存儲類型標識符,<threads.h>;頭文件,裡面包含了線程的創建和管理函數。
5、增強的Unicode的支持,基於C Unicode技術報告ISO/IEC TR 19769:2004,增強了對Unicode的支持。包括為UTF-16/UTF-32編碼增加了char16_t和char32_t數據類型,提供了包含unicode字符串轉換函數的頭文件<uchar.h>.
6、刪除了 gets() 函數,使用一個新的更安全的函數gets_s()替代。
7、增加了邊界檢查函數接口,定義了新的安全的函數,例如 fopen_s(),strcat_s() 等等。
8、增加了更多浮點處理宏。
9、匿名結構體/聯合體支持,這個在gcc早已存在,C11將其引入標准。
10、靜態斷言(Static assertions),_Static_assert(),在解釋 #if 和 #error 之後被處理。
11、新的 fopen() 模式,(“…x”),類似 POSIX 中的 O_CREAT|O_EXCL,在文件鎖中比較常用。
12、新增 quick_exit() 函數作為第三種終止程序的方式。當 exit()失敗時可以做最少的清理工作。
13、_Atomic類型修飾符和<stdatomic.h>頭文件。
優缺點
優點
1、簡潔緊湊、靈活方便
C語言一共只有32個關鍵字,9種控制語句,程序書寫形式自由,區分大小寫。把高級語言的基本結構和語句與低級語言的實用性結合起來。C 語言可以像匯編語言一樣對位、字節和地址進行操作,而這三者是計算機最基本的工作單元。[15]
title
2、運算符豐富
C語言的運算符包含的范圍很廣泛,共有34種運算符。C語言把括號、賦值、強制類型轉換等都作為運算符處理。從而使C語言的運算類型極其豐富,表達式類型多樣化。靈活使用各種運算符可以實現在其它高級語言中難以實現的運算。[15]3、數據類型豐富
C語言的數據類型有:整型、實型、字符型、數組類型、指針類型、結構體類型、共用體類型等。能用來實現各種復雜的數據結構的運算。並引入了指針概念,使程序效率更高。[16]4、表達方式靈活實用
C語言提供多種運算符和表達式值的方法,對問題的表達可通過多種途徑獲得,其程序設計更主動、靈活。它語法限制不太嚴格,程序設計自由度大,如對整型量與字符型數據及邏輯型數據可以通用等。[17]5、允許直接訪問物理地址,對硬件進行操作
由於C語言允許直接訪問物理地址,可以直接對硬件進行操作,因此它既具有高級語言的功能,又具有低級語言的許多功能,能夠像匯編語言一樣對位(bit)、字節和地址進行操作,而這三者是計算機最基本的工作單元,可用來寫系統軟件。[18]6、生成目標代碼質量高,程序執行效率高
C語言描述問題比匯編語言迅速,工作量小、可讀性好,易於調試、修改和移植,而代碼質量與匯編語言相當。C語言一般只比匯編程序生成的目標代碼效率低10%~20%。[17]7、可移植性好
C語言在不同機器上的C編譯程序,86%的代碼是公共的,所以C語言的編譯程序便於移植。在一個環境上用C語言編寫的程序,不改動或稍加改動,就可移植到另一個完全不同的環境中運行。[17]8、表達力強
C語言有豐富的數據結構和運算符。包含了各種數據結構,如整型、數組類型、指針類型和聯合類型等,用來實現各種數據結構的運算。C語言的運算符有34種,范圍很寬,靈活使用各種運算符可以實現難度極大的運算。
C語言能直接訪問硬件的物理地址,能進行位(bit)操作。兼有高級語言和低級語言的許多優點。
它既可用來編寫系統軟件,又可用來開發應用軟件,已成為一種通用程序設計語言。
另外C語言具有強大的圖形功能,支持多種顯示器和驅動器。且計算功能、邏輯判斷功能強大。
[17]缺點
1. C語言的缺點主要表現在數據的封裝性上,這一點使得C在數據的安全性上有很大缺陷,這也是C和C++的一大區別。
2. C語言的語法限制不太嚴格,對變量的類型約束不嚴格,影響程序的安全性,對數組下標越界不作檢查等。從應用的角度,C語言比其他高級語言較難掌握。也就是說,對用C語言的人,要求對程序設計更熟練一些
基礎語法
數據類型
C的數據類型包括:整型、字符型、實型或浮點型(單精度和雙精度)、枚舉類型、數組類型、結構體類型、共用體類型、指針類型和空類型。[20]
title
常量與變量
常量其值不可改變,符號常量名通常用大寫。
變量是以某標識符為名字,其值可以改變的量。標識符是以字母或下劃線開頭的一串由字母、數字或下劃線構成的序列,請注意第一個字符必須為字母或下劃線,否則為不合法的變量名。變量在編譯時為其分配相應存儲單元。
數組
如果一個變量名後面跟著一個有數字的中括號,這個聲明就是數組聲明。字符串也是一種數組。它們以ASCII的NULL作為數組的結束。要特別注意的是,方括內的索引值是從0算起的。[21]指針
如果一個變量聲明時在前面使用 * 號,表明這是個指針型變量。換句話說,該變量存儲一個地址,而 *(此處特指單目運算符 * ,下同。C語言中另有 雙目運算符 *) 則是取內容操作符,意思是取這個內存地址裡存儲的內容。指針是 C 語言區別於其他同時代高級語言的主要特征之一。
指針不僅可以是變量的地址,還可以是數組、數組元素、函數的地址。通過指針作為形式參數可以在函數的調用過程得到一個以上的返回值(不同於return(z)這樣的僅能得到一個返回值。
指針是一把雙刃劍,許多操作可以通過指針自然的表達,但是不正確的或者過分的使用指針又會給程序帶來大量潛在的錯誤。[21]字符串
C語言的字符串其實就是char型數組,所以使用字符串並不需要引用庫。但是C標准庫確實包含了一些用於對字符串進行操作的函數,使得它們看起來就像字符串而不是數組。使用這些函數需要引用頭文件<string.h>。[22]文件輸入/輸出
在C語言中,輸入和輸出是經由標准庫中的一組函數來實現的。在ANSI/ISO C中,這些函數被定義在頭文件<stdio.h>;中。
標准輸入/輸出
有三個標准輸入/輸出是標准I/O庫預先定義的:
stdin標准輸入
stdout標准輸出
stderr輸入輸出錯誤[20]運算
C語言的運算非常靈活,功能十分豐富,運算種類遠多於其它程序設計語言。在表達式方面較其它程序語言更為簡潔,如自加、自減、逗號運算和三目運算使表達式更為簡單,但初學者往往會覺的這種表達式難讀,關鍵原因就是對運算符和運算順序理解不透不全。當多種不同運算組成一個運算表達式,即一個運算式中出現多種運算符時,運算的優先順序和結合規則顯得十分重要。在學習中,對此合理進行分類,找出它們與數學中所學到運算之間的不同點之後,記住這些運算也就不困難了,有些運算符在理解後更會牢記心中,將來用起來得心應手,而有些可暫時放棄不記,等用到時再記不遲。
先要明確運算符按優先級不同分類,《C程序設計》運算符可分為15種優先級,從高到低,優先級為1 ~ 15,除第2.13級和第14級為從右至左結合外,其它都是從左至右結合,它決定同級運算符的運算順序。[23]關鍵字
關鍵字又稱為保留字,就是已被C語言本身使用,不能作其它用途使用的字。例如關鍵字不能用作變量名、函數名等標識符
由ANSI標准定義的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[24]一、數據類型關鍵字
基本數據類型
void:聲明函數無返回值或無參數,聲明無類型指針,顯示丟棄運算結果。
char:字符型類型數據,屬於整型數據的一種。
int:整型數據,表示范圍通常為編譯器指定的內存字節長。
float:單精度浮點型數據,屬於浮點數據的一種。
double:雙精度浮點型數據,屬於浮點數據的一種。
_Bool:布爾型
_Complex:復數的基本類型
_Imaginary:虛數,與復數基本類型相似,沒有實部的純虛數。
_Generic:C11中提供重載的接口入口。
類型修飾關鍵字
short:修飾int,短整型數據,可省略被修飾的int。
long:修飾int,長整型數據,可省略被修飾的int。
signed:修飾整型數據,有符號數據類型。
unsigned:修飾整型數據,無符號數據類型。
restrict:用於限定和約束指針,並表明指針是訪問一個數據對象的唯一且初始的方式。
復雜類型關鍵字
struct:結構體聲明。
union:共用體聲明。
enum:枚舉聲明。
typedef:聲明類型別名。
sizeof:得到特定類型或特定類型變量的大小。
inline:內聯函數用於取代宏定義,會在任何調用它的地方展開。
存儲級別關鍵字
auto:指定為自動變量,由編譯器自動分配及釋放。通常在棧上分配。
static:指定為靜態變量,分配在靜態變量區,修飾函數時,指定函數作用域為文件內部。
register:指定為寄存器變量,建議編譯器將變量存儲到寄存器中使用,也可以修飾函數形參,建議編譯器通過寄存器而不是堆棧傳遞參數。
extern:指定對應變量為外部變量,即標示變量或者函數的定義在別的文件中,提示編譯器遇到此變量和函數時在其他模塊中尋找其定義。
const:與volatile合稱“cv特性”,指定變量不可被當前線程/進程改變(但有可能被系統或其他線程/進程改變)。
volatile:與const合稱“cv特性”,指定變量的值有可能會被系統或其他進程/線程改變,強制編譯器每次從內存中取得該變量的值。
二、流程控制關鍵字
跳轉結構
return:用在函數體中,返回特定值(如果是void類型,則不返回函數值)。
continue:結束當前循環,開始下一輪循環。
break:跳出當前循環或switch結構。
goto:無條件跳轉語句。
分支結構
if:條件語句,後面不需要放分號。
else:條件語句否定分支(與if連用)。
switch:開關語句(多重分支語句)。
case:開關語句中的分支標記,與switch連用。
default:開關語句中的“其他”分支,可選。
循環結構
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⑴ 2; 的執行順序是1->2->1...循環,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。不過大多數情況下順序結構都是作為程序的一部分,與其它結構一起構成一個復雜的程序,例如分支結構中的復合語句、循環結構中的循環體等。[25]選擇結構
順序結構的程序雖然能解決計算、輸出等問題,但不能做判斷再選擇。對於要先做判斷再選擇的問題就要使用選擇結構。選擇結構的執行是依據一定的條件選擇執行路徑,而不是嚴格按照語句出現的物理順序。選擇結構的程序設計方法的關鍵在於構造合適的分支條件和分析程序流程,根據不同的程序流程選擇適當的選擇語句。選擇結構適合於帶有邏輯或關系比較等條件判斷的計算,設計這類程序時往往都要先繪制其程序流程圖,然後根據程序流程寫出源程序,這樣做把程序設計分析與語言分開,使得問題簡單化,易於理解。程序流程圖是根據解題分析所繪制的程序執行流程圖。[26]循環結構
循環結構可以減少源程序重復書寫的工作量,用來描述重復執行某段算法的問題,這是程序設計中最能發揮計算機特長的程序結構,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程序設計成模塊化結構。[27]預編譯與條件編譯
#define 預編譯宏
#if 表達式 #else if 表達式 #else #endif 條件編譯
#ifdef 宏 #else #endif 條件編譯
#ifndef 宏 #else #endif 條件編譯
模塊化程序結構
C語言的模塊化程序結構用函數來實現,即將復雜的C程序分為若干模塊,每個模塊都編寫成一個C函數,然後通過主函數調用函數及函數調用函數來實現一大型問題的C程序編寫,因此常說:C程序=主函數+子函數。因此,對函數的定義、調用、值的返回等中要尤其注重理解和應用,並通過上機調試加以鞏固。[28]判斷語句(選擇結構) 循環語句(循環結構) 跳轉語句(循環結構:是否循環)
if 語句:“如果”語句 while 語句:“當…”語句 goto 語句:“轉舵”語句
if—else 語句:“若…(則)…否則…”語句 do—while 語句:“做…當…(時候)”語句 break 語句:“中斷”(循環)語句
switch 語句:“切換”語句 for 語句:條件語句(即“(做)…為了…”語句) continue 語句:“繼續”語句(結束本次循環,繼續下一次循環)
switch—case:“切換—情況”語句
return 語句:“返回饋”語句
字符表
所有的轉義字符和所對應的意義:[1]轉義字符 意義 ASCII碼值(十進制)
\a 響鈴(BEL) 007
\b 退格(BS) ,將當前位置移到前一列 008
\f 換頁(FF),將當前位置移到下頁開頭 012
\n 換行(LF) ,將當前位置移到下一行開頭 010
\r 回車(CR) ,將當前位置移到本行開頭 013
\t 水平制表(HT) (跳到下一個TAB位置) 009
\v 垂直制表(VT) 011
\\ 代表一個反斜線字符''\' 092
\' 代表一個單引號(撇號)字符 039
\" 代表一個雙引號字符 034
\0 空字符(NULL) 000
\ddd 1到3位八進制數所代表的任意字符 三位八進制
\xhh 1到2位十六進制所代表的任意字符 二位十六進制
運算符號
()、 []、 -> 、 .、 !、 ++、 -- 圓括號、方括號、指針、成員、邏輯非、自加、自減
++ 、 -- 、 * 、 & 、 ~ 、 ! 、 + 、 - 、 sizeof、(cast) 單目運算符
* 、 / 、 % 算術運算符
+ 、 - 算術運算符
<< 、 >> 位運算符
< 、 <= 、 > 、 >= 關系運算符
== 、 != 關系運算符號
& 位與
^ 位異或
| 位或
&& 邏輯與
|| 邏輯或
? 、 : 條件運算符
= 、 += 、 -= 、 *= 、 /= 、 %= 、 &= 、 |= 、 ^= 賦值運算符
, 順序運算符
比較特別的是,比特右移(>>)運算符可以是算術(左端補最高有效位)或是邏輯(左端補 0)位移。例如,將 11100011 右移 3 比特,算術右移後成為 11111100,邏輯右移則為 00011100。因算術比特右移較適於處理帶負號整數,所以幾乎所有的編譯器都是算術比特右移。
運算符的優先級從高到低大致是:單目運算符、算術運算符、關系運算符、邏輯運算符、條件運算符、賦值運算符(=)和逗號運算符。[29]程序結構
1.一個C語言源程序可以由一個或多個源文件組成。[30]2.每個源文件可由一個或多個函數組成。
3.一個源程序不論由多少個文件組成,都有一個且只能有一個main函數,即主函數。
4.源程序中可以有預處理命令(包括include 命令,ifdef、ifndef命令、define命令),預處理命令通常應放在源文件或源程序的最前面。
5.每一個說明,每一個語句都必須以分號結尾。但預處理命令,函數頭和花括號“}”之後不能加分號。(結構體、聯合體、枚舉型的聲明的“}”後要加“;”。)
6.標識符,關鍵字之間必須至少加一個空格以示間隔。若已有明顯的間隔符,也可不再加空格來間隔。[31]書寫規則
一個說明或一個語句占一行。
用{} 括起來的部分,通常表示了程序的某一層次結構。{}一般與該結構語句的第一個字母對齊,並單獨占一行。
低一層次的語句或說明可比高一層次的語句或說明縮進若干格後書寫。以便看起來更加清晰,增加程序的可讀性。在編程時應力求遵循這些規則,以養成良好的編程風格。[31]經典錯誤
void main()的用法並不是任何標准制定的,是Microsoft制定的。大部分編譯器不支持這種寫法。C語言正確的語法是int main()或int main(int argc, char *argv[])。在 C++ 標准中,雖然 main 的標准型態應是int,但編譯器實現中也可以自行定義型態,不過,所有實現均應接受 int main()的。如果堅持使用void main()會使C程序失去跨平台的移植特性