c語言

c語言

通用程序設計語言
C語言是一門通用計算機編程語言,應用廣泛。C語言的設計目标是提供一種能以簡易的方式編譯、處理低級存儲器、産生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。盡管C語言提供了許多低級處理的功能,但仍然保持着良好跨平台的特性,以一個标準規格寫出的C語言程序可在許多電腦平台上進行編譯,甚至包含一些嵌入式處理器(單片機或稱MCU)以及超級電腦等作業平台。二十世紀八十年代,為了避免各開發廠商用的C語言語法産生差異,由美國國家标準局為C語言訂定了一套完整的國際标準語法,稱為ANSIC,作為C語言最初的标準。
    中文名:C語言 外文名:C language 别名: 上線時間:1972年 軟件語言:英文 類别:高級語言 創始人:丹尼斯·裡奇 發源:B語言 主要編譯器:Visual C++、Clang、GCC、Turbo C等 影響語言:C++、C#、D、Java、JavaScript、Object、PHP、Python、Objective-C、Swift等 是否區分大小寫:是

發展曆史

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語言,使其更成熟。

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

1973年初,C語言的主體完成。Thompson和Ritchie迫不及待地開始用它完全重寫了UNIX。此時,編程的樂趣使他們已經完全忘記了那個"Space Travel",一門心思地投入到了UNIX和C語言的開發中。随着UNIX的發展,C語言自身也在不斷地完善。直到今天,各種版本的UNIX内核和周邊工具仍然使用C語言作為最主要的開發語言,其中還有不少繼承Thompson和Ritchie之手的代碼。

C++語言代碼

在開發中,他們還考慮把UNIX移植到其他類型的計算機上使用。C語言強大的移植性(Portability)在此顯現。機器語言和彙編語言都不具有移植性,為x86開發的程序,不可能在Alpha,SPARC和ARM等機器上運行。而C語言程序則可以使用在任意架構的處理器上,隻要那種架構的處理器具有對應的C語言編譯器和庫,然後将C源代碼編譯、連接成目标二進制文件之後即可運行。

1977年,Dennis M.Ritchie發表了不依賴于具體機器系統的C語言編譯文本《可移植的C語言編譯程序》。

C語言繼續發展,在1982年,很多有識之士和美國國家标準協會為了使這個語言健康地發展下去,決定成立C标準委員會,建立C語言的标準。委員會由硬件廠商,編譯器及其他軟件工具生産商,軟件設計師,顧問,學術界人士,C語言作者和應用程序員組成。1989年,ANSI發布了第一個完整的C語言标準——ANSI X3.159—1989,簡稱“C89”,不過人們也習慣稱其為“ANSI C”。C89在1990年被國際标準組織ISO(International Organization for Standardization)一字不改地采納,ISO官方給予的名稱為:ISO/IEC 9899,所以ISO/IEC9899:1990也通常被簡稱為“C90”。1999年,在做了一些必要的修正和完善後,ISO發布了新的C語言标準,命名為ISO/IEC 9899:1999,簡稱“C99”。在2011年12月8日,ISO又正式發布了新的标準,稱為ISO/IEC9899:2011,簡稱為“C11”。

編程開發

編譯器

GCC,GNU組織開發的開源免費的編譯器

MinGW,Windows操作系統下的GCC

Clang,開源的BSD協議的基于LLVM的編譯器

VisualC++::cl.exe,MicrosoftVC++自帶的編譯器

集成開發環境

(IDE)

CodeBlocks,開源免費的C/C++IDE

CodeLite,開源、跨平台的C/C++集成開發環境

OrwellDev-C++,可移植的C/C++IDE

C-Free

LightTable

VisualStdio系列

HelloWorld

下面是一個在标準輸出設備(stdout)上,印出"Hello,world!"字符串的簡單程序。類似的程序,通常作為初學編程語言時的第一個程序。

語言标準

K&RC

起初,C語言沒有官方标準。1978年由美國電話電報公司(AT&T)貝爾實驗室正式發表了C語言。布萊恩·柯林漢(BrianKernighan)和丹尼斯·裡奇(DennisRitchie)出版了一本書,名叫《TheCProgrammingLanguage》。這本書被C語言開發者們稱為K&R,很多年來被當作C語言的非正式的标準說明。人們稱這個版本的C語言為K&RC。

K&RC主要介紹了以下特色:

結構體(struct)類型

長整數(longint)類型

無符号整數(unsignedint)類型

把運算符=+和=-改為+=和-=。因為=+和=-會使得編譯器不知道使用者要處理i=-10還是i=-10,使得處理上産生混淆。

即使在後來ANSIC标準被提出的許多年後,K&RC仍然是許多編譯器的最準要求,許多老舊的編譯器仍然運行K&RC的标準。

ANSIC/C89标準

1970到80年代,C語言被廣泛應用,從大型主機到小型微機,也衍生了C語言的很多不同版本。

1983年,美國國家标準協會(ANSI)成立了一個委員會X3J11,來制定C語言标準。

1989年,美國國家标準協會(ANSI)通過了C語言标準,被稱為ANSIX3.159-1989"ProgrammingLanguageC"。因為這個标準是1989年通過的,所以一般簡稱C89标準。有些人也簡稱ANSIC,因為這個标準是美國國家标準協會(ANSI)發布的。

1990年,國際标準化組織(ISO)和國際電工委員會(IEC)把C89标準定為C語言的國際标準,命名為ISO/IEC9899:1990-Programminglanguages--C

。因為此标準是在1990年發布的,所以有些人把簡稱作C90标準。不過大多數人依然稱之為C89标準,因為此标準與ANSIC89标準完全等同。

1994年,國際标準化組織(ISO)和國際電工委員會(IEC)發布了C89标準修訂版,名叫ISO/IEC9899:1990/Cor1:1994

,有些人簡稱為C94标準。

1995年,國際标準化組織(ISO)和國際電工委員會(IEC)再次發布了C89标準修訂版,名叫ISO/IEC9899:1990/Amd1:1995-CIntegrity

,有些人簡稱為C95标準。

C99标準

1999年1月,國際标準化組織(ISO)和國際電工委員會(IEC)發布了C語言的新标準,名叫ISO/IEC9899:1999-Programminglanguages--C

,簡稱C99标準。這是C語言的第二個官方标準。

在C99中包括的特性有:

增加了對編譯器的限制,比如源程序每行要求至少支持到4095字節,變量名函數名的要求支持到63字節(extern要求支持到31)。

增強了預處理功能。例如:

增加了新關鍵字restrict,inline,_Complex,_Imaginary,_Bool

支持不定長的數組,即數組長度可以在運行時決定,比如利用變量作為數組長度。聲明時使用inta[var]的形式。不過考慮到效率和實現,不定長數組不能用在全局,或struct與union裡。

變量聲明不必放在語句塊的開頭,for語句提倡寫成for(inti=0;i<100;++i)的形式,即i隻在for語句塊内部有效。

允許采用(type_name){xx,xx,xx}類似于C++的構造函數的形式構造匿名的結構體。

複合字面量:初始化結構的時候允許對特定的元素賦值,形式為:

structtest{inta,b;}foo[]={.a={1},.a=2};

structtest{inta,b,c,d;}foo={.a=1,.c=3,4,.b=5};//3,4是對.c,.d賦值的

格式化字符串中,利用u支持unicode的字符。

支持16進制的浮點數的描述。

printfscanf的格式化串增加了對longlongint類型的支持。

浮點數的内部數據描述支持了新标準,可以使用#pragma編譯器指令指定。

除了已有的__line____file__以外,增加了__func__得到當前的函數名。

允許編譯器化簡非常數的表達式。

修改了/%處理負數時的定義,這樣可以給出明确的結果,例如在C89中-22/7=-3,-22%7=-1,也可以-22/7=-4,-22%7=6。而C99中明确為-22/7=-3,-22%7=-1,隻有一種結果。

取消了函數返回類型默認為int的規定。

允許struct定義的最後一個數組不指定其長度,寫做[](flexiblearraymember)。

constconstinti将被當作constinti處理。

增加和修改了一些标準頭文件,比如定義bool的,定義一些标準長度的int的,定義複數的,定義寬字符的,類似于泛型的數學函數,浮點數相關的。在增加了va_copy用于複制...的參數。裡增加了structtmx,對structtm做了擴展。

輸入輸出對寬字符以及長整數等做了相應的支持。

C11标準

語言特點

基本特性

1、高級語言:它是把高級語言的基本結構和語句與低級語言的實用性結合起來的工作單元。

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

4、代碼級别的跨平台:由于标準的存在,使得幾乎同樣的C代碼可用于多種操作系統,如Windows、DOS、UNIX等等;也适用于多種機型。C語言對編寫需要進行硬件操作的場合,優于其它高級語言。

5、使用指針:可以直接進行靠近硬件的操作,但是C的指針操作不做保護,也給它帶來了很多不安全的因素。C++在這方面做了改進,在保留了指針操作的同時又增強了安全性,受到了一些用戶的支持,但是,由于這些改進增加語言的複雜度,也為另一部分所诟病。Java則吸取了C++的教訓,取消了指針操作,也取消了C++改進中一些備受争議的地方,在安全性和适合性方面均取得良好的效果,但其本身解釋在虛拟機中運行,運行效率低于C++/C。一般而言,C,C++,java被視為同一系的語言,它們長期占據着程序使用榜的前三名。

特有特點

C語言是一個有結構化程序設計、具有變量作用域(variable scope)以及遞歸功能的過程式語言。

C語言傳遞參數均是以值傳遞(pass by value),另外也可以傳遞指針(a pointer passed by value)。

不同的變量類型可以用結構體(struct)組合在一起。

隻有32個保留字(reserved keywords),使變量、函數命名有更多彈性。

部份的變量類型可以轉換,例如整型和字符型變量。

通過指針(pointer),C語言可以容易的對存儲器進行低級控制。

預編譯處理(preprocessor)讓C語言的編譯更具有彈性。

優缺點

優點

1、簡潔緊湊、靈活方便

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

2、運算符豐富

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

3、數據類型豐富

C語言的數據類型有:整型、實型、字符型、數組類型、指針類型、結構體類型、共用體類型等。能用來實現各種複雜的數據結構的運算。并引入了指針概念,使程序效率更高。

4、表達方式靈活實用

C語言提供多種運算符和表達式值的方法,對問題的表達可通過多種途徑獲得,其程序設計更主動、靈活。它語法限制不太嚴格,程序設計自由度大,如對整型量與字符型數據及邏輯型數據可以通用等。

5、允許直接訪問物理地址,對硬件進行操作

由于C語言允許直接訪問物理地址,可以直接對硬件進行操作,因此它既具有高級語言的功能,又具有低級語言的許多功能,能夠像彙編語言一樣對位(bit)、字節和地址進行操作,而這三者是計算機最基本的工作單元,可用來寫系統軟件。

6、生成目标代碼質量高,程序執行效率高

C語言描述問題比彙編語言迅速,工作量小、可讀性好,易于調試、修改和移植,而代碼質量與彙編語言相當。C語言一般隻比彙編程序生成的目标代碼效率低10%~20%。

7、可移植性好

C語言在不同機器上的C編譯程序,86%的代碼是公共的,所以C語言的編譯程序便于移植。在一個環境上用C語言編寫的程序,不改動或稍加改動,就可移植到另一個完全不同的環境中運行。

8、表達力強

C語言有豐富的數據結構和運算符。包含了各種數據結構,如整型、數組類型、指針類型和聯合類型等,用來實現各種數據結構的運算。C語言的運算符有34種,範圍很寬,靈活使用各種運算符可以實現難度極大的運算。

C語言能直接訪問硬件的物理地址,能進行位(bit)操作。兼有高級語言和低級語言的許多優點。

它既可用來編寫系統軟件,又可用來開發應用軟件,已成為一種通用程序設計語言。

另外C語言具有強大的圖形功能,支持多種顯示器和驅動器。且計算功能、邏輯判斷功能強大。

缺點

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

2、C語言的語法限制不太嚴格,對變量的類型約束不嚴格,影響程序的安全性,對數組下标越界不作檢查等。從應用的角度,C語言比其他高級語言較難掌握。也就是說,對用C語言的人,要求對程序設計更熟練一些。

C11新特性

1、對齊處理(Alignment)的标準化(包括_Alignas标志符,alignof運算符,aligned_alloc函數以及頭文件)。

2、_Noreturn函數标記,類似于gcc的__attribute__(noreturn)。

3、_Generic關鍵字。

4、多線程(Multithreading)支持,包括:_Thread_local存儲類型标識符,;頭文件,裡面包含了線程的創建和管理函數。

5、增強的Unicode的支持,基于CUnicode技術報告ISO/IEC TR 19769:2004,增強了對Unicode的支持。包括為UTF-16/UTF-32編碼增加了char16_t和char32_t數據類型,提供了包含unicode字符串轉換函數的頭文件.

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類型修飾符和頭文件。

語言組成

基本構成

數據類型

C的數據類型包括:整型、字符型、實型或浮點型(單精度和雙精度)、枚舉類型、數組類型、結構體類型、共用體類型、指針類型和空類型。

常量與變量

常量其值不可改變,符号常量名通常用大寫。

變量是以某标識符為名字,其值可以改變的量。标識符是以字母或下劃線開頭的一串由字母、數字或下劃線構成的序列,請注意第一個字符必須為字母或下劃線,否則為不合法的變量名。變量在編譯時為其分配相應存儲單元。

數組

如果一個變量名後面跟着一個有數字的中括号,這個聲明就是數組聲明。字符串也是一種數組。它們以ASCII的NULL作為數組的結束。要特别注意的是,方括内的索引值是從0算起的。

運算

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

關鍵字

關鍵字又稱為保留字,就是已被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

基本數據類型

void:聲明函數無返回值或無參數,聲明無類型指針,顯示丢棄運算結果。(C89标準新增)

char:字符型類型數據,屬于整型數據的一種。(K&R時期引入)

int:整型數據,表示範圍通常為編譯器指定的内存字節長。(K&R時期引入)

float:單精度浮點型數據,屬于浮點數據的一種。(K&R時期引入)

double:雙精度浮點型數據,屬于浮點數據的一種。(K&R時期引入)

_Bool:布爾型(C99标準新增)

_Complex:複數的基本類型(C99标準新增)

_Imaginary:虛數,與複數基本類型相似,沒有實部的純虛數(C99标準新增)

_Generic:提供重載的接口入口(C11标準新增)

類型修飾關鍵字

short:修飾int,短整型數據,可省略被修飾的int。(K&R時期引入)

long:修飾int,長整型數據,可省略被修飾的int。(K&R時期引入)

long long:修飾int,超長整型數據,可省略被修飾的int。(C99标準新增)

signed:修飾整型數據,有符号數據類型。(C89标準新增)

unsigned:修飾整型數據,無符号數據類型。(K&R時期引入)

restrict:用于限定和約束指針,并表明指針是訪問一個數據對象的唯一且初始的方式。(C99标準新增)

複雜類型關鍵字

struct:結構體聲明。(K&R時期引入)

union:聯合體聲明。(K&R時期引入)

enum:枚舉聲明。(C89标準新增)

typedef:聲明類型别名。(K&R時期引入)

sizeof:得到特定類型或特定類型變量的大小。(K&R時期引入)

inline:内聯函數用于取代宏定義,會在任何調用它的地方展開。(C99标準新增)

存儲級别關鍵字

auto:指定為自動變量,由編譯器自動分配及釋放。通常在棧上分配。與static相反。當變量未指定時默認為auto。(K&R時期引入)

static:指定為靜态變量,分配在靜态變量區,修飾函數時,指定函數作用域為文件内部。(K&R時期引入)

register:指定為寄存器變量,建議編譯器将變量存儲到寄存器中使用,也可以修飾函數形參,建議編譯器通過寄存器而不是堆棧傳遞參數。(K&R時期引入)

extern:指定對應變量為外部變量,即标示變量或者函數的定義在别的文件中,提示編譯器遇到此變量和函數時在其他模塊中尋找其定義。(K&R時期引入)

const:指定變量不可被當前線程改變(但有可能被系統或其他線程改變)。(C89标準新增)

volatile:指定變量的值有可能會被系統或其他線程改變,強制編譯器每次從内存中取得該變量的值,阻止編譯器把該變量優化成寄存器變量。(C89标準新增)

流程控制關鍵字

跳轉結構

return:用在函數體中,返回特定值(如果是void類型,則不返回函數值)。(K&R時期引入)

continue:結束當前循環,開始下一輪循環。(K&R時期引入)

break:跳出當前循環或switch結構。(K&R時期引入)

goto:無條件跳轉語句。(K&R時期引入)

分支結構

if:條件語句,後面不需要放分号。(K&R時期引入)

else:條件語句否定分支(與if連用)。(K&R時期引入)

switch:開關語句(多重分支語句)。(K&R時期引入)

case:開關語句中的分支标記,與switch連用。(K&R時期引入)

default:開關語句中的“其他”分支,可選。(K&R時期引入)

編譯

#define預編譯宏

#if 表達式 #else if 表達式 #else #endif條件編譯

#ifdef 宏 #else #endif 條件編譯

#ifndef 宏 #else #endif 條件編譯與條件編譯

語法結構

順序結構

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

例如:順序結構可以獨立使用構成一個簡單的完整程序,常見的輸入、計算,輸出三步曲的程序就是順序結構,例如計算圓的面積,其程序的語句順序就是輸入圓的半徑r,計算s=3.14159*r*r,輸出圓的面積s。不過大多數情況下順序結構都是作為程序的一部分,與其它結構一起構成一個複雜的程序,例如分支結構中的複合語句、循環結構中的循環體等。

選擇結構

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

循環結構

循環結構可以減少源程序重複書寫的工作量,用來描述重複執行某段算法的問題,這是程序設計中最能發揮計算機特長的程序結構,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程序設計成模塊化結構。

具體内容:

for循環

for循環結構是c語言中最具有特色的循環語句,使用最為靈活方便,它的一般形式為:

for(表達式1;表達式2;表達式3)循環體語句。(其中;不能省略)

表達式

表達式1為初值表達式,用于在循環開始前為循環變量賦初值。

表達式2是循環控制邏輯表達式,它控制循環執行的條件,決定循環的次數。

表達式3為循環控制變量修改表達式,它使for循環趨向結束。

循環體語句是在循環控制條件成立的情況下被反複執行的語句。

但是在整個for循環過程中,表達式1隻計算一次,表達式2和表達式3則可能計算多次,也可能一次也不計算。循環體可能多次執行,也可能一次都不執行。

先執行表達式2,然後執行循環結構,最後表達式3,一直這樣循環下去。

for循環語句是c語言種功能最為強大的語句,甚至在一定程度上可以代替其他的循環語句。

程序結構

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

經典錯誤

voidmain()的用法并不是任何标準制定的。C語言标準語法是intmain,任何實現都必須支持intmain(void){/*...*/}和intmain(intargc,char*argv[]){/*...*/}。

類似于a+=a++;或者(i++)+(i++)+(i++)屬于未定義行為,并不是說c語言中還未定義這種行為,它早有定論,它的結果取決于編譯器實現,不要寫這樣的代碼!

考試介紹

特點

全國計算機等級考試(NationalComputerRankExamination,簡稱NCRE),是經原國家教育委員會(現教育部)批準,由教育部考試中心主辦,面向社會,用于考查應試人員計算機應用知識與技能的全國性計算機水平考試體系。其中二級考試中包含了C語言的科目。

1、全國計算機等級考試二級考試科目;

2、C語言廣泛應用于數控機械、電子、通信、自動控制等領域;

3、C語言簡潔緊湊、靈活方便、算符豐富、據結構豐富;

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

5、語言适用範圍大,可移植性好,C語言有一個突出的優點就是适合于多種操作系統。

題庫

《計算機等級考試題庫(二級C語言程序設計)》系計算機等級考試寶典試題輔導軟件,适用于計算機等級考試寶典,軟件試題庫設計緊扣最新計算機等級考試寶典大綱、考試教材,符合計算機等級考試寶典題型與考試科目,複習輔導資料、考試資料豐富,免費試用、試題庫巨大(注冊版試題量達7百多題、19萬多字)。

輔導軟件收錄計算機等級考試寶典考前沖刺、曆年試題,試題輔導軟件囊括了目前所有的最新計算機等級考試寶典科目:程序填空題、改錯題、編程題、考前沖刺、曆年真題,并提供專業級的計算機等級考試寶典解題方法、答題技巧、考試要點精解。通過全面、針對性強的強化考試輔導訓練、考前培訓,提高您計算機等級考試寶典的應試能力,輔導您考試成功。我們免費提供計算機等級考試寶典報名時間、報名地點、報考條件、考試時間、成績查詢、合格分數線。

圖形編程

基于TC中的graphics.h

TurboC提供了非常豐富的圖形函數,所有圖形函數的原型均在graphics.h中,本節主要介紹圖形模式的初始化、獨立圖形程序的建立、基本圖形功能、圖形窗口以及圖形模式下的文本輸出等函數。另外,使用圖形函數時要确保有顯示器圖形驅動程序*BGI,同時将集成開發環境Options/Linker中的Graphicslib選為on,隻有這樣才能保證正确使用圖形函數。

圖形模式的初始化不同的顯示器适配器有不同的圖形分辨率。即是同一顯示器适配器,在不同模式下也有不同分辨率。因此,在屏幕作圖之前,必須根據顯示器适配器種類将顯示器設置成為某種圖形模式,在未設置圖形模式之前,微機系統默認屏幕為文本模式(80列,25行字符模式),此時所有圖形函數均不能工作。設置屏幕為圖形模式,可用下列圖形初始化函數:

voidfarinitgraph(intfar*gdriver,intfar*gmode,char*path);

其中gdriver和gmode分别表示圖形驅動器和模式,path是指圖形驅動程序所在的目錄路徑。有關圖形驅動器、圖形模式的符号常數及對應的分辨率見下表。

圖形驅動程序由TurboC出版商提供,文件擴展名為。BGI。根據不同的圖形适配器有不同的圖形驅動程序。例如對于EGA、VGA圖形适配器就調用驅動程序EGAVGA.BGI。

初學注意事項

初學C語言的朋友應該首先了解C語言關鍵的核心概念(結構化、三個執行流程、優先級、指針、文件、共用體、函數、作用域、重載等),隻有弄明白了這些才能在今後的學習中遊刃有餘的把握C語言的精髓。這幾個概念就像邏輯線一樣,把整個C語言的體系貫穿起來,給人一種“結構化”的思想體系。下面簡要談一下這幾個核心概念。

1、從宏觀角度來看,結構化是C語言的編程思想基礎,就是說C語言每一個功能模塊就是一個結構,每一個結構實現一個運算或一個算法,這個結構就用大括号表示“{}”,大括号裡面的就是算法。尤其注意的是大括号的“}”括在那裡,就決定在哪裡結束算法功能。這些是初學者經常犯的錯誤,往往會把算法功能的結束點弄錯。

2、三個執行流程就是順序流程、條件流程、循環流程。三個流程都是計算機通用的執行流程,是必須了解的流程,每一個算法都基于這三個流程執行順序。

3、優先級是對多個函數并列時候優先算法的特權,沒有注意優先級的順序就會把算法出錯,這些優先級是必須記住的。

4、指針是C語言的重要特點,是對運算速度加快運算的重要精髓。它是對數據地址的操作,而不是對數據的操作。

5、文件和共用體是很簡單的概念,不用多說了。文件顧名思義和日常概念一樣,學過數據軟件的都對共用體了解不是太難。

6、從微觀角度來看,函數是C語言的驅動機制,所有的語句都由函數驅動來實現的。記住函數命令和相關的配置參數,就能好好的利用C的優勢。注意的是,函數不能記錯,不然你将得出錯的結果。如果能學會調試,那就會更深一層了解函數功能的作用。

經典教材

TheCProgrammingLanguage

本書是由C語言的設計者BrianW.Kernighan和DennisM.Ritchie編寫的一部介紹标準C語言及其程序設計方法的權威性經典着作。全面、系統地講述了C語言的各個特性及程序設計的基本方法,包括基本概念、類型和表達式、控制流、函數與程序結構、指針與數組、結構、輸入與輸出、UNIX系統接口、标準庫等内容。

本書原着即為C語言的設計者之一DennisM.Ritchie和著名的計算機科學家BrianW.Kernighan合着的一本介紹C語言的權威經典着作。人們熟知的“hello,World”程序就是由本書首次引入的,現在,這一程序已經成為所有程序設計語言入門的第一課。原着第2版根據1987年制定的ANSIC标準做了适當的修訂,引入了最新的語言形式,并增加了新的示例,通過簡潔的描述、典型的示例,作者全面、系統、準确地講述了C語言的各個特性以及程序設計的基本方法。對于計算機從業人員來說,本書是一本必讀的程序設計語言方面的參考書。

ExpertCProgramming

《C專家編程》展示了最優秀的C程序員所使用的編碼技巧,并專門開辟了一章對C++的基礎知識進行了介紹。

書中C的曆史、語言特性、聲明、數組、指針、鍊接、運行時、内存以及如何進一步學習C++等問題進行了細緻的講解和深入的分析。全書撷取幾十幾個實例進行講解,對C程序員具有非常高的實用價值。

CTrapsandpitfall

作者以自己1985年在貝爾實驗室時發表的一篇論文為基礎,結合自己的工作經驗擴展成為這本對C程序員具有珍貴價值的經典着作。寫作本書的出發點不是要批判C語言,而是要幫助C程序員繞過編程過程中的陷阱和障礙。

全書分為8章,分别從詞法分析、語法語義、連接、庫函數、預處理器、可移植性缺陷等幾個方面分析了C編程中可能遇到的問題。最後,作者用一章的篇幅給出了若幹具有實用價值的建議。

PointersonC

本書提供與C語言編程相關的全面資源和深入讨論。本書通過對指針的基礎知識和高級特性的探讨,幫助程序員把指針的強大功能融入到自己的程序中去。

全書共18章,複蓋了數據、語句、操作符和表達式、指針、函數、數組、字符串、結構和聯合等幾乎所有重要的C編程話題。書中給出了很多編程技巧和提示,每章後面有針對性很強的練習,附錄部分則給出了部分練習的解答。

CAReferenceManual

本書是關于C語言的詳盡的參考手冊。最新的第5版增加了對C99标準的介紹,更加符合當前讀者學習C語言的需要

全書分為兩大部分,共24章。第一部分讨論了C語言的所有語言特征,包括詞法、預處理機制、聲明、類型、表達式、語句以及函數等基本語言特性。第二部分讨論了C語言的标準庫,根據它們不同的功能分别詳細介紹。為幫助讀者理解相關概念,本書在讨論C語言及其标準庫的各方面問題時,提供了許多實例和解釋。在第一部分的各章中還提供了練習題,書後則給出了主要練習的解答。這些練習的主要目的是幫助讀者理解C語言的基本機制及其重要細節,其中并不涉及複雜的程序設計技術與問題。

CPrimerPlu

本書全面講述了C語言編程的相關概念和知識。

全書共17章。第1.2章學習C語言編程所需的預備知識。第3到15章介紹了C語言的相關知識,包括數據類型、格式化輸入輸出、運算符、表達式、流程控制語句、函數、數組和指針、字符串操作、内存管理、位操作等等,知識内容都針對C99标準;另外,第10章強化了對指針的讨論,第12章引入了動态内存分配的概念,這些内容更加适合讀者的需求。第16章和第17章讨論了C預處理器和C庫函數、高級數據表示(數據結構)方面的内容。附錄給出了各章後面複習題、編程練習的答案和豐富的C編程參考資料。

C程序設計

譚浩強教授著、清華大學出版社出版的《C程序設計》是一本公認的學習C語言程序設計的經典教材。根據C語言的發展和計算機教學的需要,作者在《C程序設計

(第三版)》的基礎上進行了修訂。本書按照C語言的新标準C99進行介紹,所有程序都符合C99的規定,使編寫程序更加規範;對C語言和程序設計的基本概

念和要點講解透徹,全面而深入;按照作者提出的“提出問題—解決問題—歸納分析”三部曲進行教學、組織教材;本書的每個例題都按以下幾個步驟展開:提出任

務—解題思路—編寫程序—運行程序—程序分析—有關說明。符合讀者認知規律,容易入門與提高。本書内容先進,體系合理,概念清晰,講解詳盡,降低台階,分散難點,例題豐富,深入淺出,文字流暢,通俗易懂,是初學者學習C程序設計的理想教材,可作為高等學校各專業的正式教材,也是一本自學的好教材。本書還配有輔助教材《C程序設計(第四版)學習輔導》。

C語言程序設計線上課程教學模式

為應對新型冠狀病毒肺炎疫情,許多高校積極響應國家要求,做出了延遲開學的決定,同時鼓勵教師遠程授課、學生在家學習的舉措。在此背景下,廣大高校教師積極探索有效的線上教學方式,利用各種線上教學工具完成教學工作,保證教學質量。本文以C語言程序設計為例,結合所使用的的線上教學工具,探讨疫情期間線上課程教學實施方式。

相關詞條

相關搜索

其它詞條