關(guān)于c語(yǔ)言基礎(chǔ)知識(shí)教程 IT知識(shí)
電腦知識(shí) 由優(yōu)爾供稿C語(yǔ)言在全世界普及推廣,無(wú)論在中國(guó)還是世界各國(guó),C語(yǔ)言都是高等學(xué)校一門基本的計(jì)算機(jī)課程,C語(yǔ)言也在計(jì)算機(jī)領(lǐng)域發(fā)揮重要的作用。下面一起來(lái)看看9252兒童網(wǎng)小編為大家整理的c語(yǔ)言基礎(chǔ)知識(shí)教程,歡迎閱讀,僅供參考。
c語(yǔ)言入門教程
1.c語(yǔ)言入門教程--簡(jiǎn)介
C語(yǔ)言是一種計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言,它既具有高級(jí)語(yǔ)言的特點(diǎn),又具有匯編語(yǔ)言的特點(diǎn)。它由美國(guó)貝爾研究所的D.M.Ritchie于1972年推出,它可以作為工作系統(tǒng)設(shè)計(jì)語(yǔ)言,編寫系統(tǒng)應(yīng)用程序。它的應(yīng)用范圍廣泛,具備很強(qiáng)的數(shù)據(jù)處理能力,不僅僅是在軟件開發(fā)上,而且各類科研都需要用到C語(yǔ)言,適于編寫系統(tǒng)軟件,三維,二維圖形和動(dòng)畫,具體應(yīng)用比如單片機(jī)以及嵌入式系統(tǒng)開發(fā)。
2.c語(yǔ)言入門教程--發(fā)展
C語(yǔ)言之所以命名為C,是因?yàn)?C語(yǔ)言源自Ken Thompson發(fā)明的B語(yǔ)言,而 B語(yǔ)言則源自BCPL語(yǔ)言。
1967年,劍橋大學(xué)的Martin Richards對(duì)CPL語(yǔ)言進(jìn)行了簡(jiǎn)化,于是產(chǎn)生了BCPL(Basic Combined Programming Language)語(yǔ)言。
1970年,美國(guó)貝爾實(shí)驗(yàn)室的 Ken Thompson,以BCPL語(yǔ)言為基礎(chǔ),設(shè)計(jì)出很簡(jiǎn)單且很接近硬件的B語(yǔ)言(取BCPL的首字母)。并且他用B語(yǔ)言寫了第一個(gè)UNIX操作系統(tǒng)。
1972年,美國(guó)貝爾實(shí)驗(yàn)室的 D.M.Ritchie 在B語(yǔ)言的基礎(chǔ)上最終設(shè)計(jì)出了一種新的語(yǔ)言,他取了BCPL的第二個(gè)字母作為這種語(yǔ)言的名字,這就是C語(yǔ)言。
1977年,Dennis M.Ritchie發(fā)表了不依賴于具體機(jī)器系統(tǒng)的C語(yǔ)言編譯文本《可移植的C語(yǔ)言編譯程序》。
1978年由美國(guó)電話電報(bào)公司(AT&T)貝爾實(shí)驗(yàn)室正式發(fā)表了C語(yǔ)言。Brian Kernighan 和 Dennis Ritchie 出版了一本書,名叫《The C Programming Language》。這本書被 C語(yǔ)言開發(fā)者們稱為"K&R",很多年來(lái)被當(dāng)作 C語(yǔ)言的非正式的標(biāo)準(zhǔn)說(shuō)明。人們稱這個(gè)版本的 C語(yǔ)言為"K&R C"。
c語(yǔ)言宣傳圖1970到80年代,C語(yǔ)言被廣泛應(yīng)用,從大型主機(jī)到小型微機(jī),也衍生了C語(yǔ)言的很多不同版本。
1983年美國(guó)國(guó)家標(biāo)準(zhǔn)局 (American National Standards Institute,簡(jiǎn)稱ANSI)成立了一個(gè)委員會(huì),來(lái)制定 C語(yǔ)言標(biāo)準(zhǔn)。
1989年 C語(yǔ)言標(biāo)準(zhǔn)被批準(zhǔn),被稱為 ANSI X3.159-1989 "Programming Language C"。這個(gè)版本的C語(yǔ)言標(biāo)準(zhǔn)通常被稱為ANSI C。
1990年,國(guó)際標(biāo)準(zhǔn)化組織ISO(International Organization for Standards)接受了89 ANSI C 為I SO C 的標(biāo)準(zhǔn)(ISO9899-1990)。1994年,ISO修訂了C語(yǔ)言的標(biāo)準(zhǔn)。
1999年,ISO又對(duì)C語(yǔ)言標(biāo)準(zhǔn)進(jìn)行修訂,在基本保留原來(lái)C語(yǔ)言特征的基礎(chǔ)上,針對(duì)應(yīng)該的需要,增加了一些功能,命名為ISO/IEC9899:1999。
在ANSI標(biāo)準(zhǔn)化后,C語(yǔ)言的標(biāo)準(zhǔn)在一段相當(dāng)?shù)臅r(shí)間內(nèi)都保持不變,盡管C繼續(xù)在改進(jìn)。它被ANSI于2000年3月采用。
2001年和2004年先后進(jìn)行了兩次技術(shù)修正。2011年12月8日,ISO正式公布C語(yǔ)言新的國(guó)際標(biāo)準(zhǔn)草案:ISO/IEC 9899:2011,即C11。
3.c語(yǔ)言入門教程--特性
C語(yǔ)言是世界上最流行、使用最廣泛的高級(jí)程序設(shè)計(jì)語(yǔ)言之一。在操作系統(tǒng)和系統(tǒng)使用程序以及需要對(duì)硬件進(jìn)行操作的場(chǎng)合,用C語(yǔ)言明顯優(yōu)于其它高級(jí)語(yǔ)言,許多大型應(yīng)用軟件都是用C語(yǔ)言編寫的。C語(yǔ)言的主要特性有以下幾種:
1.C是高級(jí)語(yǔ)言:它把高級(jí)語(yǔ)言的基本結(jié)構(gòu)和語(yǔ)句與低級(jí)語(yǔ)言的實(shí)用性結(jié)合起來(lái)。
2.C是結(jié)構(gòu)式語(yǔ)言:結(jié)構(gòu)式語(yǔ)言的顯著特點(diǎn)是代碼及數(shù)據(jù)的分隔化,即程序的各個(gè)部分除了必要的信息交流外彼此獨(dú)立。
3.C語(yǔ)言功能齊全:具有各種各樣的數(shù)據(jù)類型,并引入了指針概念,可使程序效率更高。而且計(jì)算功能、邏輯判斷功能也比較強(qiáng)大,可以實(shí)現(xiàn)決策目的的游戲。
4.C語(yǔ)言適用范圍大:適合于多種操作系統(tǒng),如Windows、DOS、UNIX等等;也適用于多種機(jī)型。
5.C語(yǔ)言應(yīng)用指針:可以直接進(jìn)行靠近硬件的操作,但是C的指針操作不做保護(hù),也給它帶來(lái)了很多不安全的因素。C++在這方面做了改進(jìn),在保留了指針操作的同時(shí)又增強(qiáng)了安全性。
6.C語(yǔ)言創(chuàng)始人D.M.Ritchie6、C語(yǔ)言文件由數(shù)據(jù)序列組成:可以構(gòu)成二進(jìn)制文件或文本文件常用的C語(yǔ)言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等。
4.c語(yǔ)言入門教程--基礎(chǔ)知識(shí)
數(shù)據(jù)類型----C的數(shù)據(jù)類型包括:整型、字符型、實(shí)型或浮點(diǎn)型、枚舉類型、數(shù)組類型、結(jié)構(gòu)體類型、共用體類型、指針類型和空類型。
常量與變量----常量其值不可改變,符號(hào)常量名通常用大寫。變量是以某標(biāo)識(shí)符為名字,其值可以改變的量。變量在編譯時(shí)為其分配相應(yīng)存儲(chǔ)單元。
數(shù)組----C++語(yǔ)言代碼如果一個(gè)變量名后面跟著一個(gè)有數(shù)字的中括號(hào),這個(gè)聲明就是數(shù)組聲明。字符串也是一種數(shù)組。
指針----如果一個(gè)變量聲明時(shí)在前面使用 * 號(hào),表明這是個(gè)指針型變量。換句話說(shuō),該變量存儲(chǔ)一個(gè)地址,指針不僅可以是變量的地址,還可以是數(shù)組、數(shù)組元素、函數(shù)的地址。
字符串----C語(yǔ)言的字符串其實(shí)就是char型數(shù)組,使用字符型并不需要引用庫(kù),但是使用字符串就就需要C標(biāo)準(zhǔn)庫(kù)里面的一些用于對(duì)字符串進(jìn)行操作的函數(shù)。它們不同于字符數(shù)組。
文件輸入/輸出----在C語(yǔ)言中,輸入和輸出是經(jīng)由標(biāo)準(zhǔn)庫(kù)中的一組函數(shù)來(lái)實(shí)現(xiàn)的。標(biāo)準(zhǔn)輸入/輸出有三個(gè)標(biāo)準(zhǔn)輸入/輸出是標(biāo)準(zhǔn)I/O庫(kù)預(yù)先定義的:stdin標(biāo)準(zhǔn)輸入、stdout標(biāo)準(zhǔn)輸出、stderr輸入輸出錯(cuò)誤。
運(yùn)算----C語(yǔ)言的運(yùn)算非常靈活,功能十分豐富,運(yùn)算種類遠(yuǎn)多于其它程序設(shè)計(jì)語(yǔ)言。
關(guān)鍵字----又稱為保留字,就是已被C語(yǔ)言本身使用,不能作其它用途使用的字。例如關(guān)鍵字不能用作變量名、函數(shù)名等標(biāo)識(shí)符。由ANSI標(biāo)準(zhǔn)定義的C語(yǔ)言關(guān)鍵字共32個(gè):
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
5.c語(yǔ)言入門教程--語(yǔ)法結(jié)構(gòu)
順序結(jié)構(gòu)
順序結(jié)構(gòu)的程序設(shè)計(jì)是最簡(jiǎn)單的,只要按照解決問題的順序?qū)懗鱿鄳?yīng)的語(yǔ)句就行,它的執(zhí)行順序是自上而下,依次執(zhí)行。順序結(jié)構(gòu)可以獨(dú)立使用構(gòu)成一個(gè)簡(jiǎn)單的完整程序,常見的輸入、計(jì)算,輸出三步曲的程序就是順序結(jié)構(gòu)。
選擇結(jié)構(gòu)
選擇結(jié)構(gòu)的執(zhí)行是依據(jù)一定的條件選擇執(zhí)行路徑,而不是嚴(yán)格按照語(yǔ)句出現(xiàn)的物理順序。選擇結(jié)構(gòu)的程序設(shè)計(jì)方法的關(guān)鍵在于構(gòu)造合適的分支條件和分析程序流程,根據(jù)不同的程序流程選擇適當(dāng)?shù)倪x擇語(yǔ)句。
循環(huán)結(jié)構(gòu)
循環(huán)結(jié)構(gòu)可以減少源程序重復(fù)書寫的工作量,用來(lái)描述重復(fù)執(zhí)行某段算法的問題,這是程序設(shè)計(jì)中最能發(fā)揮計(jì)算機(jī)特長(zhǎng)的程序結(jié)構(gòu),C語(yǔ)言中提供四種循環(huán),即goto循環(huán)、while循環(huán)、do while循環(huán)和for循環(huán)。
模塊化程序結(jié)構(gòu)
C語(yǔ)言的模塊化程序結(jié)構(gòu)用函數(shù)來(lái)實(shí)現(xiàn),即將復(fù)雜的C程序分為若干模塊,每個(gè)模塊都編寫成一個(gè)C函數(shù),然后通過(guò)主函數(shù)調(diào)用函數(shù)及函數(shù)調(diào)用函數(shù)來(lái)實(shí)現(xiàn)一大型問題的C程序編寫,因此常說(shuō):C程序=主函數(shù)+子函數(shù)。因此,對(duì)函數(shù)的定義、調(diào)用、值的返回等中要尤其注重理解和應(yīng)用,并通過(guò)上機(jī)調(diào)試加以鞏固。
C語(yǔ)言入門基礎(chǔ)知識(shí)
01、C語(yǔ)言程序的結(jié)構(gòu)認(rèn)識(shí)
用一個(gè)簡(jiǎn)單的c程序例子,介紹c語(yǔ)言的基本構(gòu)成、格式、以及良好的書寫風(fēng)格,使小伙伴對(duì)c語(yǔ)言有個(gè)初步認(rèn)識(shí)。
例1:計(jì)算兩個(gè)整數(shù)之和的c程序:
#include main() { int a,b,sum; a=20; /*定義變量a,b,sum為整型變量*/ b=15; /*把整數(shù)20賦值給整型變量a*/ sum=a+b; /*把整數(shù)15賦值給整型變量b*/ printf(“a=%d,b=%d,sum=%d\n”,a,b,sum); /*把兩個(gè)數(shù)之和賦值給整型變量sum*/ }
重點(diǎn)說(shuō)明
1、任何一個(gè)c語(yǔ)言程序都必須包括以下格式:main() { }——這是c語(yǔ)言的基本結(jié)構(gòu),任何一個(gè)程序都必須包含這個(gè)結(jié)構(gòu)。括號(hào)內(nèi)可以不寫任何內(nèi)容,那么該程序?qū)⒉粓?zhí)行任何結(jié)果。
2、main()——在c語(yǔ)言中稱之為“主函數(shù)”,一個(gè)c程序有且僅有一個(gè)main函數(shù),任何一個(gè)c程序總是從main函數(shù)開始執(zhí)行,main函數(shù)后面的一對(duì)圓括號(hào)不能省略。
3、被大括號(hào){ }括起來(lái)的內(nèi)容稱為main函數(shù)的函數(shù)體,這部分內(nèi)容就是計(jì)算機(jī)要執(zhí)行的內(nèi)容。
4、在{ }里面每一句話后面都有一個(gè)分號(hào)(;),在c語(yǔ)言中,我們把以一個(gè)分號(hào)結(jié)尾的一句話叫做一個(gè)c語(yǔ)言的語(yǔ)句,分號(hào)是語(yǔ)句結(jié)束的標(biāo)志。
5、printf(“a=%d,b=%d,sum=%d\n”,a,b,sum); ——通過(guò)執(zhí)行這條c語(yǔ)言系統(tǒng)提供給我們直接使用的屏幕輸出函數(shù),用戶即可看到運(yùn)行結(jié)果,本程序運(yùn)行后,將在顯示器上顯示如下結(jié)果:a=20,b=15,sum=35。
6、#include——注意:以#號(hào)開頭。不以分號(hào)結(jié)尾 這一行沒有分號(hào),所以不是語(yǔ)句,在c語(yǔ)言中稱之為命令行,或者叫做“預(yù)編譯處理命令”。
7、程序中以 /*開頭并且以*/結(jié)尾的部分表示程序的注釋部分,注釋可以添加在程序的任何位置,為了提高程序的可讀性而添加,但計(jì)算機(jī)在執(zhí)行主函數(shù)內(nèi)容時(shí)完全忽略注釋部分,換而言之就是計(jì)算機(jī)當(dāng)做注釋部分不存在于主函數(shù)中。
02、C程序的生成過(guò)程
C程序是先由源文件經(jīng)編譯生成目標(biāo)文件,然后經(jīng)過(guò)連接生成可執(zhí)行文件。
源程序的擴(kuò)展名為 .c ,目標(biāo)程序的擴(kuò)展名為 .obj , 可執(zhí)行程序的擴(kuò)展名為 .exe 。
03、標(biāo)識(shí)符
在編寫程序時(shí),必須為函數(shù)、變量等命名,這個(gè)名字稱為標(biāo)識(shí)符。C語(yǔ)言中標(biāo)識(shí)符的命名規(guī)則如下:
標(biāo)識(shí)符只能由字母、數(shù)字、下劃線組成;
標(biāo)識(shí)符的第一個(gè)字母必須是字母和下劃線;
標(biāo)識(shí)符區(qū)分大小寫字母,如If和if是兩個(gè)完全不同的標(biāo)識(shí)符。
合法標(biāo)識(shí)符如下:A6, b_3 , _mn 非法的標(biāo)識(shí)符如下:ab#12 , 8m , tr3:4 , yes no
標(biāo)識(shí)符不能與程序中具有特殊意義的關(guān)鍵字相同,不能與用戶編制的函數(shù)名、C語(yǔ)言庫(kù)函數(shù)相同,在程序中各種標(biāo)識(shí)符盡量不要重復(fù),以便區(qū)分。選擇變量名和其他標(biāo)識(shí)符時(shí),應(yīng)注意做到 “見名知義”。
標(biāo)識(shí)符分為如下三類
1、關(guān)鍵字
關(guān)鍵字是具有特定含義的,專門用來(lái)說(shuō)明c語(yǔ)言特定成分的一類標(biāo)識(shí)符,不能用作用戶的標(biāo)識(shí)符。
2、預(yù)定義標(biāo)識(shí)符
預(yù)定義標(biāo)識(shí)符在c語(yǔ)言中也有特定的含義,但可以用作用戶標(biāo)識(shí)符,預(yù)定義標(biāo)識(shí)符分為兩類:
1)、庫(kù)函數(shù)名字,比如printf,scanf,sin,isdigit等 2)、編譯處理命令名,比如define,include
3、用戶標(biāo)識(shí)符
用戶根據(jù)需要自己定義的標(biāo)識(shí)符稱為用戶標(biāo)識(shí)符。無(wú)論如何自定義標(biāo)識(shí)符,都必須符合標(biāo)識(shí)符的三條命名規(guī)則。
04 、常量
在程序運(yùn)行中,其值不能被改變的量稱為常量。常量有5種類型:整型常量、實(shí)型常量、字符常量、字符串常量和符號(hào)常量。
4.1 數(shù)值轉(zhuǎn)換
數(shù)值的四種表現(xiàn)形式:
①:二進(jìn)制:所有數(shù)字由0,1構(gòu)成,逢二進(jìn)一,二進(jìn)制數(shù)中不會(huì)出現(xiàn)2。
②:八進(jìn)制:以數(shù)字0(注意不是以字母O,o)開頭,所有數(shù)字由0~7構(gòu)成,逢八進(jìn)一,八進(jìn)制數(shù)中不會(huì)出現(xiàn)8。例:0112,0123,077等
③:十進(jìn)制:所有數(shù)字由0~9構(gòu)成,逢十進(jìn)一,十進(jìn)制數(shù)中不會(huì)出現(xiàn)10。例:0,12,-15等
④:十六進(jìn)制:以0x或者0X(數(shù)字0加字母x)開頭,所有數(shù)字由0~9,A~F(或者a~f)構(gòu)成,逢十六進(jìn)一(其中A、B、C、D、E、F分別代表10、11、12、13、14、15) 例:0x4A、0X14c7等
在計(jì)算機(jī)內(nèi)部,數(shù)字均以二進(jìn)制形式表示和存放,用戶輸入的普通十進(jìn)制數(shù)字都要被計(jì)算機(jī)轉(zhuǎn)換成二進(jìn)制才能在計(jì)算機(jī)內(nèi)部存儲(chǔ),同樣計(jì)算機(jī)的運(yùn)算結(jié)果也為二進(jìn)制,一般要將其轉(zhuǎn)換成十進(jìn)制數(shù)再輸出給用戶閱讀,這種轉(zhuǎn)換通常由計(jì)算機(jī)自動(dòng)實(shí)現(xiàn)。
1)將十進(jìn)制轉(zhuǎn)換二進(jìn)制、八進(jìn)制和十六進(jìn)制
除法:將十進(jìn)制數(shù)除以2,記錄余數(shù),得到的商繼續(xù)除以2,直到商為0,然后將各次相處所得的余數(shù)從后往前逆序排列,所得余數(shù)數(shù)字序列就是該十進(jìn)制數(shù)對(duì)應(yīng)的二進(jìn)制數(shù)。八進(jìn)制和十六進(jìn)制轉(zhuǎn)換方法同上。
例:十進(jìn)制數(shù)13轉(zhuǎn)換成二進(jìn)制數(shù)的值為1101,轉(zhuǎn)換八進(jìn)制為015,轉(zhuǎn)換成十六進(jìn)制為D.
2)將二進(jìn)制、八進(jìn)制和十六進(jìn)制轉(zhuǎn)換成十進(jìn)制
乘積求和:將二進(jìn)制的每一位從低位到高位(右邊為低位,左邊為高位)分別乘以20,21,22。。。。,然后將這些值求和。
3)二進(jìn)制與八進(jìn)制、十六進(jìn)制數(shù)之間的相互轉(zhuǎn)換
①:二進(jìn)制轉(zhuǎn)八進(jìn)制:從右往左每三位一組轉(zhuǎn)換成十進(jìn)制數(shù),將所得數(shù)據(jù)組合就是對(duì)應(yīng)的八進(jìn)制數(shù)(注意:高位不足三位補(bǔ)零)。例:(010 110 111)2=(267)8
②:二進(jìn)制轉(zhuǎn)十六進(jìn)制:從右往左每四位一組轉(zhuǎn)換成十進(jìn)制數(shù),將所得數(shù)據(jù)組合就是對(duì)應(yīng)的十六進(jìn)制數(shù)(注意:高位不足四位補(bǔ)零)。例:(0101 1011)2=(5B)16
③:八進(jìn)制轉(zhuǎn)化二進(jìn)制:每一位數(shù)字轉(zhuǎn)換為三位二進(jìn)制數(shù)字 例:(13)8=(001 011)2= (注意:去掉前面的兩個(gè)00,因?yàn)?在高位沒有意義) ④:十六進(jìn)制轉(zhuǎn)化二進(jìn)制:每一位數(shù)字轉(zhuǎn)換為四位二進(jìn)制數(shù)字 例:(E3)16=(1110 0011)2
4.2 數(shù)形常量
整型常量有3種形式:十進(jìn)制整型常量、八進(jìn)制整型常量和十六進(jìn)制整型常量。
(注意:c語(yǔ)言中沒有直接表示二進(jìn)制的整型常量,在c語(yǔ)言源程序中不會(huì)出現(xiàn)二進(jìn)制。)
書寫方式如下:
十進(jìn)制整型常量:123 , 0 ,-24 , 85L(長(zhǎng)整型常量) 等 八進(jìn)制整型常量:051 ,-026 ,0773 等 十六進(jìn)制整型常量:0x55 , 0x1101 , 0x , 0x5AC0 , -0xFF。其中L為長(zhǎng)整型。
4.3 實(shí)型常量
實(shí)型常量有兩種表示形式:小數(shù)形式和指數(shù)形式。
小數(shù)形式:5.4 0.074 -23.0 指數(shù)形式:5.4e0 4.3e-3 -3.3e4
1)小數(shù)部分為0的實(shí)型常量,可以寫為453.0 或453。
2)用小數(shù)表示時(shí),小數(shù)點(diǎn)的兩邊必須有數(shù),不能寫成“ .453“和“453.“,而應(yīng)該寫成“0.453“和“453.0“。
3)用指數(shù)寫法時(shí),e前必須有數(shù)字,e后面的指數(shù)必須為整數(shù)(注意:整數(shù)階碼可以是正數(shù),負(fù)數(shù),也可以是八進(jìn)制數(shù)、十六進(jìn)制數(shù),但必須為整數(shù))。
4.4 字符常量
字符常量的標(biāo)志是一對(duì)單引號(hào)‘ ’,c語(yǔ)言中的字符常量有兩類:
1)由一對(duì)單引號(hào)括起來(lái)的一個(gè)字符,如‘a ’, ‘r’ ,‘#’。注意: ′a′ 和 ′A′ 是兩個(gè)不同的字符常量。
2)由一對(duì)單引號(hào)括起來(lái),以反斜杠\開頭,后跟若干數(shù)字或者字母,比如‘\n’,其中“\“是轉(zhuǎn)義的意思,后面跟不同的字符表示不同的意思,這類字符常量叫轉(zhuǎn)義字符。
4.5 字符串常量
C語(yǔ)言中,以雙引號(hào)括起來(lái)的,由若干個(gè)字符組成的序列即為字符串常量。
例:“ni hao” “happy”等等。
4.6 符號(hào)常量
符號(hào)常量是由宏定義“#define“定義的常量,在C程序中可用標(biāo)識(shí)符代表一個(gè)常量。
例:計(jì)算圓的面積的c程序。
#include
#define PI 3. main() {float r,s; r=12.5; S=PI *r*r; printf(“s= %f ”,s); }
說(shuō)明:
#define 是宏定義,此程序中所有出現(xiàn)PI的地方都代表3.,同時(shí)PI稱為符號(hào)常量。習(xí)慣上我們用大寫字母來(lái)表示符號(hào)常量,小寫字母表示變量,這樣比較容易區(qū)別。
05、變量
變量就是其值可以改變的量。變量要有變量名,在內(nèi)存中占據(jù)一定的存儲(chǔ)單元,存儲(chǔ)單元里存放的是該變量的值。不同類型的變量其存儲(chǔ)單元的大小不同,變量在使用前必須定義。
5.1 整型變量
整型變量分為4種:基本型(int)、短整型(short int 或short)、長(zhǎng)整型(long int 或 long)和無(wú)符號(hào)型(unsigned int ,unsigned short,unsigned long)。
不同的編譯系統(tǒng)對(duì)上述四種整型數(shù)據(jù)所占用的位數(shù)和數(shù)值范圍有不同的規(guī)定。
類型說(shuō)明符
單詞signed來(lái)說(shuō)明“有符號(hào)”(即有正負(fù)數(shù)之分),不寫signed也隱含說(shuō)明為有符號(hào),unsigned用來(lái)說(shuō)明“無(wú)符號(hào)”(只表示正數(shù))。
5.2 實(shí)型變量
C語(yǔ)言中,實(shí)型變量分為單精度類型( float )和雙精度類型( double )兩種。
如:float a , b ; double m ;
在vc中,float 型數(shù)據(jù)在內(nèi)存中占4個(gè)字節(jié)(32位),double型數(shù)據(jù)占8個(gè)字節(jié)。單精度實(shí)數(shù)提供7位有效數(shù)字,雙精度實(shí)數(shù)提供15~16位有效數(shù)字。實(shí)型常量不分float型和double型,一個(gè)實(shí)型常量可以賦給一個(gè)float 型或double型變量,但變量根據(jù)其類型截取實(shí)型常量中相應(yīng)的有效數(shù)字。
注意:實(shí)型變量只能存放實(shí)型值,不能用整型變量存放實(shí)型值,也不能用實(shí)型變量存放整型值。
5.3 字符變量
字符變量用來(lái)存放字符常量,定義形式:
char 變量名;
其中關(guān)鍵字char定義字符型數(shù)據(jù)類型,占用一個(gè)字節(jié)的存儲(chǔ)單元。
例:char cr1,cr2; cr1= ‘A’ , cr2=‘B’ ;
將一個(gè)字符賦給一個(gè)字符變量時(shí),并不是將該字符本身存儲(chǔ)到內(nèi)存中,而是將該字符對(duì)應(yīng)的ASCII碼存儲(chǔ)到內(nèi)存單元中。
由于在內(nèi)存中字符以ASCII碼存放,它的存儲(chǔ)形式和整數(shù)的存儲(chǔ)形式類似,所以C語(yǔ)言中字符型數(shù)據(jù)與整型數(shù)據(jù)之間可以通用,一個(gè)字符能用字符的形式輸出,也能用整數(shù)的形式輸出,字符數(shù)據(jù)也能進(jìn)行算術(shù)運(yùn)算,此時(shí)相當(dāng)于對(duì)它們的ASCII碼進(jìn)行運(yùn)算。
06、類型的自動(dòng)轉(zhuǎn)換和強(qiáng)制轉(zhuǎn)換
當(dāng)同一表達(dá)式中各數(shù)據(jù)的類型不同時(shí),編譯程序會(huì)自動(dòng)把它們轉(zhuǎn)變成同一類型后再進(jìn)行計(jì)算。轉(zhuǎn)換優(yōu)先級(jí)為:char < int < float < double 即左邊級(jí)別“低“的類型向右邊轉(zhuǎn)換。
具體地說(shuō),若在表達(dá)式中優(yōu)先級(jí)最高的數(shù)據(jù)是double型,則此表達(dá)式中的其他數(shù)據(jù)均被轉(zhuǎn)換成double型,且計(jì)算結(jié)果也是double型;若在表達(dá)式中優(yōu)先級(jí)最高的數(shù)據(jù)是float型,則此表達(dá)式中的其他數(shù)據(jù)均被轉(zhuǎn)換成float型,且計(jì)算結(jié)果也是float型。
在做賦值運(yùn)算時(shí),若賦值號(hào)左右兩邊的類型不同,則賦值號(hào)右邊的類型向左邊的類型轉(zhuǎn)換;當(dāng)右邊的類型高于左邊的類型時(shí),則在轉(zhuǎn)換時(shí)對(duì)右邊的數(shù)據(jù)進(jìn)行截取。
除自動(dòng)轉(zhuǎn)換外,還有強(qiáng)制轉(zhuǎn)換,表示形式是:( 類型 )(表達(dá)式);
例:(int)(a+b)
討論:當(dāng)a值賦值為3.4,b值賦值為2.7,(int)(a+b)和(int)a+b的值分別為多少?
07、C運(yùn)算符認(rèn)識(shí)
C語(yǔ)言的運(yùn)算符范圍很廣,可分為以下幾類:
1、算術(shù)運(yùn)算符:用于各類數(shù)值運(yùn)算。包括加(+)、減(-)、乘(*)、除(/)、求余(%)、自增(++)、自減(--)共七種。
2、賦值運(yùn)算符:用于賦值運(yùn)算,分為簡(jiǎn)單賦值(=)、復(fù)合算術(shù)賦值(+=,-=,*=,/=,%=)和復(fù)合位運(yùn)算賦值(&=,|=,^=,>>=,<<=)三類共十一種。<="" span="">
3、逗號(hào)運(yùn)算符:用于把若干表達(dá)式組合成一個(gè)表達(dá)式(,)。
4、關(guān)系運(yùn)算符:用于比較運(yùn)算。包括大于(>)、小于(<)、等于(==)、 大于等于(="">=)、小于等于(<=)和不等于(!=)六種。<="" span="">
5、邏輯運(yùn)算符:用于邏輯運(yùn)算。包括與(&&)、或(||)、非(!)三種。
6、條件運(yùn)算符:這是一個(gè)三目運(yùn)算符,用于條件求值(?:)。
7、位操作運(yùn)算符:參與運(yùn)算的量,按二進(jìn)制位進(jìn)行運(yùn)算。包括位與(&)、位或(|)、位非(~)、位異或(^)、左移(<<)、右移(>>)六種。
8、指針運(yùn)算符:用于取內(nèi)容(*)和取地址(&)二種運(yùn)算。
9、求字節(jié)數(shù)運(yùn)算符:用于計(jì)算數(shù)據(jù)類型所占的字節(jié)數(shù)(sizeof)。
10、特殊運(yùn)算符:有括號(hào)(),下標(biāo)[],成員(→,.)等幾種。
另外,按參與運(yùn)算的對(duì)象個(gè)數(shù),C語(yǔ)言運(yùn)算符可分為:?jiǎn)文窟\(yùn)算符 (如 !)、雙目運(yùn)算符 (如+,- )和三目運(yùn)算符 (如 ? :)。
08、算術(shù)運(yùn)算符和算術(shù)表達(dá)式
8.1 基本的算數(shù)運(yùn)算符
(1)+(加法運(yùn)算符或正值運(yùn)算符,如2+5)。
(2)-(減法運(yùn)算符或負(fù)值運(yùn)算符,如4-2)。
(3)*(乘法運(yùn)算符,如3*8)。
(4)/(除法運(yùn)算符,如11/5)。
/的運(yùn)算分為兩種情況:
a、“除”的左右兩邊都為整數(shù)時(shí),所得結(jié)果必然是整數(shù)(注意:僅取整數(shù)部分,不是四舍五入)比如:5/2的值為2,不是2.5,1/2的值為0。
b、“除”的左右兩邊至少有一個(gè)是實(shí)型數(shù)據(jù)(即小數(shù))時(shí),所得結(jié)果為實(shí)型數(shù)據(jù)。比如:5/2.0的值為2.5,7.0/2.0的值為3.5.
(5)%(模運(yùn)算符或稱求余運(yùn)算符,%兩側(cè)均應(yīng)為整型數(shù)據(jù),如9%7的值為2)。
需要說(shuō)明的是:當(dāng)運(yùn)算對(duì)象為負(fù)數(shù)時(shí),所得結(jié)果隨編譯器不同而不同,在vc中,結(jié)果的符號(hào)與被除數(shù)相同,比如:13%-2值為1,而-15%2值為-1。
8.2 算術(shù)表達(dá)式和運(yùn)算符的優(yōu)先級(jí)與結(jié)合性
算術(shù)表達(dá)式是用算術(shù)運(yùn)算符和括號(hào)將運(yùn)算量(也稱操作數(shù))連接起來(lái)的、符合C語(yǔ)言語(yǔ)法規(guī)則的表達(dá)式。運(yùn)算對(duì)象包括函數(shù)、常量和變量等。
在計(jì)算機(jī)語(yǔ)言中,算術(shù)表達(dá)式的求值規(guī)律與數(shù)學(xué)中的四則運(yùn)算的規(guī)律類似,其運(yùn)算規(guī)則和要求如下。
(1)在算術(shù)表達(dá)式中,可使用多層圓括號(hào),但括號(hào)必須配對(duì)。運(yùn)算時(shí)從內(nèi)層圓括號(hào)開始,由內(nèi)向外依次計(jì)算各表達(dá)式的值。
(2)在算術(shù)表達(dá)式中,對(duì)于不同優(yōu)先級(jí)的運(yùn)算符,可按運(yùn)算符的優(yōu)先級(jí)由高到低進(jìn)行運(yùn)算,若表達(dá)式中運(yùn)算符的優(yōu)先級(jí)相同,則按運(yùn)算符的結(jié)合方向進(jìn)行運(yùn)算。
(3)如果一個(gè)運(yùn)算符兩側(cè)的操作數(shù)類型不同,則先利用自動(dòng)轉(zhuǎn)換或強(qiáng)制類型轉(zhuǎn)換,使兩者具有相同類型,然后進(jìn)行運(yùn)算。
8.3 自增自減運(yùn)算符
作用:使變量的值增1或減1。
如:++i,--i (在使用i之前,先使i的值加1、減1)。i++,i-- (在使用i之后,使i的值加1、減1)。
(1)只有變量才能用自增運(yùn)算符 (++)和自減運(yùn)算符(--),而常量或表達(dá)式不能用,如10++或(x+y)++都是不合法的。
(2)++和--的結(jié)合方向是“自右向左“,如 -i++ ,i的左邊是負(fù)號(hào)運(yùn)算符,右邊是自增運(yùn)算符,負(fù)號(hào)運(yùn)算和自增運(yùn)算都是 “自右向左“結(jié)合的,相當(dāng)于 -(i++)。
在循環(huán)語(yǔ)句中常用到自增(減)運(yùn)算符,在指針中也常用到該運(yùn)算符,考生要弄清楚“i++”和“++i”及“i--”和“--i”的區(qū)別,特別弄清楚表達(dá)式的值和變量的值。
09、賦值運(yùn)算符與賦值表達(dá)式
9.1 賦值運(yùn)算符與賦值表達(dá)式
賦值符號(hào) “=“就是賦值運(yùn)算符,作用是將一個(gè)數(shù)據(jù)賦給一個(gè)變量或?qū)⒁粋€(gè)變量的值賦給另一個(gè)變量,由賦值運(yùn)算符組成的表達(dá)式稱為賦值表達(dá)式。一般形式為:變量名 = 表達(dá)式。
在程序中可以多次給一個(gè)變量賦值,每賦一次值,與它相應(yīng)的存儲(chǔ)單元中的數(shù)據(jù)就被更新一次,內(nèi)存中當(dāng)前的數(shù)據(jù)就是最后一次所賦值的那個(gè)數(shù)據(jù)。
例:a=12; 此表達(dá)式讀作“將10的值賦值給變量a”。
a、如果賦值號(hào)兩邊的運(yùn)算對(duì)象類型不一致,系統(tǒng)會(huì)自動(dòng)進(jìn)行類型轉(zhuǎn)換,轉(zhuǎn)換的規(guī)則:將賦值號(hào)右邊表達(dá)式的值的類型轉(zhuǎn)換成賦值號(hào)左邊變量的類型,
例:int y=3.5;在變量y中最終存儲(chǔ)的是整數(shù)3。
b、 可以將復(fù)制表達(dá)式的值再賦值給變量,形成連續(xù)賦值。
例如:x=y=25 是一個(gè)連續(xù)賦值表達(dá)式,x=y=25 等價(jià)于x=(y=25),所以表達(dá)式x=y=25 最終的值為25 。
9.2 復(fù)合的賦值運(yùn)算符
在賦值運(yùn)算符之前加上其他運(yùn)算符可以構(gòu)成復(fù)合賦值運(yùn)算符。其中與算術(shù)運(yùn)算有關(guān)的復(fù)合運(yùn)算符是:+=,-=,*=,/=,%= 。
兩個(gè)符號(hào)之間不可以有空格,復(fù)合賦值運(yùn)算符的優(yōu)先級(jí)與賦值運(yùn)算符的相同。表達(dá)式n+=1等價(jià)于n=n+1,作用是取變量n中的值增1再賦給變量n,其他復(fù)合的賦值運(yùn)算符的運(yùn)算規(guī)則依次類推。
如求表達(dá)a+=a-=a*a 的值,其中a的初值為12 。
步驟:
先進(jìn)行“a-=a*a“運(yùn)算,相當(dāng)于a=a-a*a=12-144=-132 。(2)再進(jìn)行“a+=-132“運(yùn)算,相當(dāng)于 a=a+(-132)==-264 。
9.3 逗號(hào)運(yùn)算符和逗號(hào)表達(dá)式
在c語(yǔ)言中,逗號(hào)除了作為分隔符,還可以用作一種運(yùn)算符----逗號(hào)運(yùn)算符,用逗號(hào)運(yùn)算符將幾個(gè)表達(dá)式連接起來(lái),例如a=b+c,a=b*c等稱為逗號(hào)表達(dá)式。
一般形式為:
表達(dá)式1 ,表達(dá)式2 ,表達(dá)式3 , …,表達(dá)式n
例:x=2,y=3,z=4
逗號(hào)表達(dá)式具有從左至右的結(jié)合性,即先求解表達(dá)式1,然后依次求解表達(dá)式2,直到表達(dá)式n的值。表達(dá)式n的值就是整個(gè)逗號(hào)表達(dá)式的值。上述的逗號(hào)表達(dá)式的值就是表達(dá)式z=4的值4.需要注意的是,逗號(hào)運(yùn)算符是所有運(yùn)算符中級(jí)別最低的。
例:有如下程序段:
main()
{
int a=2,b=4,c=6,x,y;
y=(x=a+b),(b+c);
printf("y=%d,x=%d",y,x);
}
程序顯示結(jié)果為:y=6,x=6
討論:將y=(x=a+b),(b+c);改為y=((x=a+b),b+c) 的程序結(jié)果?
10、關(guān)系運(yùn)算符和關(guān)系表達(dá)式
10.1 C語(yǔ)言中的邏輯值
C語(yǔ)言中的邏輯值只有兩個(gè):真(true)和假(flase)。用非零代表真,用零代表假。因此,對(duì)于任意一個(gè)表達(dá)式,如果它的值為零,就代表一個(gè)假值,如果它的值為非零,就代表一個(gè)真值。只要值不是零,不管是正數(shù),負(fù)數(shù),整數(shù),實(shí)數(shù),都代表一個(gè)真值。例如-5的邏輯值為真。
10.2 逗號(hào)運(yùn)算符和逗號(hào)表達(dá)式
“&&”和“||”的運(yùn)算對(duì)象有兩個(gè),故它們都是雙目運(yùn)算符,而!的運(yùn)算對(duì)象只有一個(gè),因此它是單目運(yùn)算符。邏輯運(yùn)算舉例如下:
(1)a&&b: 當(dāng)&&兩邊都為“真”時(shí),表達(dá)式a&&b的值才是真。
值得注意的是:在數(shù)學(xué)中,關(guān)系式0
(2)a||b: 當(dāng)||兩邊有一個(gè)為“真”時(shí),表達(dá)式a||b的值就是真。
(3)!a: 表示取反,如果a為真,則!A為假,反之亦然。例如!-5的值就為0。
在C語(yǔ)言中,由&&或||組成的邏輯表達(dá)式,在某些特定情況下會(huì)產(chǎn)生“短路“現(xiàn)象。
(1)x && y && z ,只有當(dāng)x為真(非0)時(shí),才需要判別y的值;只有x和y都為真時(shí),才需要去判別z的值;只要x為假就不必判別y和z,整個(gè)表達(dá)式的值為0。口訣:“一假必假”。
例:
(!5==1)&&(++i==0) (!5==1)表達(dá)式的值為0,所以計(jì)算機(jī)運(yùn)行中就跳過(guò)(++i==0)此表達(dá)式,(!5==1)&&(++i==0)表達(dá)式的值為0。
(2)x||y||z ,只要x的值為真(非零),就不必判別y和z的值 ,整個(gè)表達(dá)式的值為1,只有x的值為假,才需要判別y的值,只有x和y的值同時(shí)為假才需要判別z的值,口訣:“一真必真”。
11、位運(yùn)算
11.1 位運(yùn)算符
在計(jì)算機(jī)中,數(shù)據(jù)都是以二進(jìn)制數(shù)形式存放的,位運(yùn)算就是指對(duì)存儲(chǔ)單元中二進(jìn)制位的運(yùn)算。C語(yǔ)言提供6種位運(yùn)算符。
11.2 位運(yùn)算
位運(yùn)算符 & |~<< >> ∧ 按優(yōu)先級(jí)從高到低排列的順序是:
位運(yùn)算符中求反運(yùn)算“~“優(yōu)先級(jí)最高,而左移和右移相同,居于第二,接下來(lái)的順序是按位與 “&“、按位異或 “∧“和按位或 “|“。順序?yàn)閪 << >> & ∧ | 。
例1:左移運(yùn)算符“<<”是雙目運(yùn)算符。其功能把“<< ”左邊的運(yùn)算數(shù)的各二進(jìn)位全部左移若干位,由“<<”右邊的數(shù)指定移動(dòng)的位數(shù),高位丟棄,低位補(bǔ)0。="" <="" span="">
例如:a<<4 指把a(bǔ)的各二進(jìn)位向左移動(dòng)4位。如a=00000011(十進(jìn)制3),左移4位后為00(十進(jìn)制48)。
例2:右移運(yùn)算符“>>”是雙目運(yùn)算符。其功能是把“>> ”左邊的運(yùn)算數(shù)的各二進(jìn)位全部右移若干位,“>>”右邊的數(shù)指定移動(dòng)的位數(shù)。
例如:設(shè) a=15, a>>2 表示把右移為十進(jìn)制3)。
應(yīng)該說(shuō)明的是,對(duì)于有符號(hào)數(shù),在右移時(shí),符號(hào)位將隨同移動(dòng)。當(dāng)為正數(shù)時(shí),最高位補(bǔ)0,而為負(fù)數(shù)時(shí),符號(hào)位為1,最高位是補(bǔ)0或是補(bǔ)1 取決于編譯系統(tǒng)的規(guī)定。
例3:設(shè)二進(jìn)制數(shù)a是00 ,若通過(guò)異或運(yùn)算a∧b 使a的高4位取反,低4位不變,則二進(jìn)制數(shù)b是。
解析:異或運(yùn)算常用來(lái)使特定位翻轉(zhuǎn),只要使需翻轉(zhuǎn)的位與1進(jìn)行異或操作就可以了,因?yàn)樵瓟?shù)中值為1的位與1進(jìn)行異或運(yùn)算得0 ,原數(shù)中值為0的位與1進(jìn)行異或運(yùn)算結(jié)果得1。而與0進(jìn)行異或的位將保持原值。異或運(yùn)算還可用來(lái)交換兩個(gè)值,不用臨時(shí)變量。
C語(yǔ)言基礎(chǔ)知識(shí)總結(jié)
1.入門程序
#includeint main(){ printf("Hello World!"); return 0;}
2.數(shù)據(jù)類型
數(shù)據(jù)類型:
1.基本數(shù)據(jù)類型:
1.1. 整型:int 4個(gè)字節(jié)
1.2. 字符型:char 1個(gè)字節(jié)
1.3. 實(shí)型(浮點(diǎn)型)
1.3.1.單精度型:float 4個(gè)字節(jié)
1.3.2.雙精度型:double 8個(gè)字節(jié)
2.構(gòu)造類型:
2.1.枚舉類型
2.2.數(shù)組類型
2.3.結(jié)構(gòu)體類型
2.4.共用體類型
3.指針類型:
4.空類型:
3.格式化輸出語(yǔ)句
%d:十進(jìn)制整數(shù);
%c:單個(gè)字符;
%s:字符串;
%f:6位小數(shù);
#includeint main(){ int age = 18; float height = 1.85; char unit = 'm'; printf("小明今年%d歲\n", age); printf("小明身高%f%c\n", height, unit); printf("小明現(xiàn)在在慕課網(wǎng)上學(xué)習(xí)IT技術(shù)\n"); return 0;}
4.常量
值不發(fā)生改變的量成為常量;
定義字符常量(注意后面沒有;)
#include#define POCKETMONEY 10 //定義常量及常量值int main(){ printf("小明今天又得到%d元零花錢\n", POCKETMONEY); return 0;}
5.運(yùn)算符
5.1.算數(shù)運(yùn)算符:+,-,*,/,%,++,--;前++/--,先運(yùn)算,再取值.后++/--,先取值,再運(yùn)算;
5.2.賦值運(yùn)算符:
5.3.關(guān)系運(yùn)算符;
5.4.邏輯運(yùn)算符;
5.5.三目運(yùn)算符:
表達(dá)式1 ? 表達(dá)式2 : 表達(dá)式3;
6.水仙花數(shù)計(jì)算
輸出所有三位數(shù)的水仙花數(shù)字
所謂“水仙花數(shù)”是指一個(gè)三位數(shù),其各位數(shù)字立方和等于該數(shù),如:153就是一個(gè)水仙花數(shù),153=111+555+333。
#includeint main(){ //定義三位數(shù)num,個(gè)位數(shù)sd,十位數(shù)td,百位數(shù)hd int num, sd, td, hd; //循環(huán)所有三位數(shù) for( num=100 ; num<1000 ; num++ ) { //獲取三位數(shù)字num百位上的數(shù)字 hd = num/100 ; //獲取三位數(shù)字num十位上的數(shù)字 td = num/10%10 ; //獲取三位數(shù)字num個(gè)位上的數(shù)字 sd = num%10 ; //水仙花數(shù)的條件是什么? if(num ==hd*hd*hd+td*td*td+sd*sd*sd ) { printf("水仙花數(shù)字:%d\n", num); } } return 0;}
7.打印正三角形的*
#includeint main(){ int i, j, k; for(i=1; i<5; i++) { /* 觀察每行的空格數(shù)量,補(bǔ)全循環(huán)條件 */ for( j=i ; j<5 ; j++ ) { printf(" "); //輸出空格 } /* 觀察每行*號(hào)的數(shù)量,補(bǔ)全循環(huán)條件 */ for( k=0 ; k<2*i-1 ; k++ ) { printf("*"); //每行輸出的*號(hào) } printf("\n"); //每次循環(huán)換行 } return 0;}
8.臭名遠(yuǎn)揚(yáng)的goto語(yǔ)句
很少使用
#includeint main(){ int sum = 0; int i; for(i=1; i<=10; i++) { printf("%d\n", i); if(i==3){ goto LOOP;//滿足條件就執(zhí)行g(shù)oto語(yǔ)句 } } //執(zhí)行g(shù)otoLOOP:printf("結(jié)束for循環(huán)了...."); //請(qǐng)選擇合適位置添加標(biāo)識(shí)符 return 0;}
9.形參與實(shí)參
形參:形參是在定義函數(shù)名和函數(shù)體的時(shí)候使用的參數(shù),目的是用來(lái)接收調(diào)用該函數(shù)時(shí)傳入的參數(shù);
實(shí)參:實(shí)參是在調(diào)用時(shí)傳遞該函數(shù)的參數(shù)。
函數(shù)的形參和實(shí)參具有以下特點(diǎn):
形參只有在被調(diào)用時(shí)才分配內(nèi)存單元,在調(diào)用結(jié)束時(shí),即刻釋放所分配的內(nèi)存單元。因此,形參只有在函數(shù)內(nèi)部有效。函數(shù)調(diào)用結(jié)束返回主調(diào)函數(shù)后則不能再使用該形參變量。
實(shí)參可以是常量、變量、表達(dá)式、函數(shù)等,無(wú)論實(shí)參是何種類型的量,在進(jìn)行函數(shù)調(diào)用時(shí),它們都必須具有確定的值,以便把這些值傳送給形參。因此應(yīng)預(yù)先用賦值等辦法使實(shí)參獲得確定值。
在參數(shù)傳遞時(shí),實(shí)參和形參在數(shù)量上,類型上,順序上應(yīng)嚴(yán)格一致,否則會(huì)發(fā)生類型不匹配”的錯(cuò)誤。
10.函數(shù)返回值注意
注意:void函數(shù)中可以有執(zhí)行代碼塊,但是不能有返回值,另void函數(shù)中如果有return語(yǔ)句,該語(yǔ)句只能起到結(jié)束函數(shù)運(yùn)行的功能。其格式為:return;
11.遞歸
#includeint getPeachNumber(int n) //這里要定義n,要不編譯器會(huì)報(bào)錯(cuò)!{ int num; if(n==10) { return 1; } else { num = (getPeachNumber(n+1)+1)*2; printf("第%d天所剩桃子%d個(gè)\n", n, num); } return num;}int main(){ int num = getPeachNumber(1); printf("猴子第一天摘了:%d個(gè)桃子。\n", num); return 0;}
12.變量存儲(chǔ)類別 !
12.1.生存周期劃分存儲(chǔ)方式
C語(yǔ)言根據(jù)變量的生存周期來(lái)劃分,可以分為靜態(tài)存儲(chǔ)方式和動(dòng)態(tài)存儲(chǔ)方式。
靜態(tài)存儲(chǔ)方式:是指在程序運(yùn)行期間分配固定的存儲(chǔ)空間的方式。靜態(tài)存儲(chǔ)區(qū)中存放了在整個(gè)程序執(zhí)行過(guò)程中都存在的變量,如全局變量。
動(dòng)態(tài)存儲(chǔ)方式:是指在程序運(yùn)行期間根據(jù)需要進(jìn)行動(dòng)態(tài)的分配存儲(chǔ)空間的方式。動(dòng)態(tài)存儲(chǔ)區(qū)中存放的變量是根據(jù)程序運(yùn)行的需要而建立和釋放的,通常包括:函數(shù)形式參數(shù);自動(dòng)變量;函數(shù)調(diào)用時(shí)的現(xiàn)場(chǎng)保護(hù)和返回地址等。
12.2.存儲(chǔ)類型劃分
C語(yǔ)言中存儲(chǔ)類別又分為四類:自動(dòng)(auto)、靜態(tài)(static)、寄存器的(register)和外部的(extern) ;
用關(guān)鍵字auto定義的變量為自動(dòng)變量,auto可以省略,auto不寫則隱含定為“自動(dòng)存儲(chǔ)類別”,屬于動(dòng)態(tài)存儲(chǔ)方式。
用static修飾的為靜態(tài)變量,如果定義在函數(shù)內(nèi)部的,稱之為靜態(tài)局部變量;如果定義在函數(shù)外部,稱之為靜態(tài)外部變量。
注意:靜態(tài)局部變量屬于靜態(tài)存儲(chǔ)類別,在靜態(tài)存儲(chǔ)區(qū)內(nèi)分配存儲(chǔ)單元,在程序整個(gè)運(yùn)行期間都不釋放;靜態(tài)局部變量在編譯時(shí)賦初值,即只賦初值一次;如果在定義局部變量時(shí)不賦初值的話,則對(duì)靜態(tài)局部變量來(lái)說(shuō),編譯時(shí)自動(dòng)賦初值0(對(duì)數(shù)值型變量)或空字符(對(duì)字符變量)
為了提高效率,C語(yǔ)言允許將局部變量的值放在CPU中的寄存器中,這種變量叫“寄存器變量”,用關(guān)鍵字register作聲明。
注意:只有局部自動(dòng)變量和形式參數(shù)可以作為寄存器變量;一個(gè)計(jì)算機(jī)系統(tǒng)中的寄存器數(shù)目有限,不能定義任意多個(gè)寄存器變量;局部靜態(tài)變量不能定義為寄存器變量。
用extern聲明的的變量是外部變量,外部變量的意義是某函數(shù)可以調(diào)用在該函數(shù)之后定義的變量。
#includ//來(lái)源公眾號(hào):C語(yǔ)言與CPP編程int main(){ //定義外部局部變量 extern int x; return 0;}int x=100;
13.內(nèi)部函數(shù)外部函數(shù) !
在C語(yǔ)言中不能被其他源文件調(diào)用的函數(shù)稱為內(nèi)部函數(shù) ,內(nèi)部函數(shù)由static關(guān)鍵字來(lái)定義,因此又被稱為靜態(tài)函數(shù),形式為:
static [數(shù)據(jù)類型] 函數(shù)名([參數(shù)])
這里的static是對(duì)函數(shù)的作用范圍的一個(gè)限定,限定該函數(shù)只能在其所處的源文件中使用,因此在不同文件中出現(xiàn)相同的函數(shù)名稱的內(nèi)部函數(shù)是沒有問題的。
在C語(yǔ)言中能被其他源文件調(diào)用的函數(shù)稱為外部函數(shù) ,外部函數(shù)由extern關(guān)鍵字來(lái)定義,形式為:
extern [數(shù)據(jù)類型] 函數(shù)名([參數(shù)])
C語(yǔ)言規(guī)定,在沒有指定函數(shù)的作用范圍時(shí),系統(tǒng)會(huì)默認(rèn)認(rèn)為是外部函數(shù),因此當(dāng)需要定義外部函數(shù)時(shí)extern也可以省略。extern可以省略; 14.數(shù)組 數(shù)組:一塊連續(xù)的,大小固定并且里面的數(shù)據(jù)類型一致的內(nèi)存空間, 數(shù)組的聲明:數(shù)據(jù)類型 數(shù)組名稱[長(zhǎng)度n]
數(shù)據(jù)類型 數(shù)組名稱[長(zhǎng)度n] = {元素1,元素2,元素3,......};
數(shù)據(jù)類型 數(shù)組名稱[] = {元素1,元素2,元素3,......};
數(shù)類類型 數(shù)組名稱[長(zhǎng)度n]; 數(shù)組名稱[0] = 元素1;數(shù)組名稱[1] = 元素2;...... 注意:1、數(shù)組的下標(biāo)均以0開始;2、數(shù)組在初始化的時(shí)候,數(shù)組內(nèi)元素的個(gè)數(shù)不能大于聲明的數(shù)組長(zhǎng)度;3、如果采用第一種初始化方式,元素個(gè)數(shù)小于數(shù)組的長(zhǎng)度時(shí),多余的數(shù)組元素初始化為0;4、在聲明數(shù)組后沒有進(jìn)行初始化的時(shí)候,靜態(tài)(static)和外部(extern)類型的數(shù)組元素初始化元素為0,自動(dòng)(auto)類型的數(shù)組的元素初始化值不確定。
15.數(shù)組遍歷
#includeint main(){ int arr[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; int i; for(i=0;i<10;i++) { printf("%d\n",arr[i]); } return 0;}
數(shù)組的冒泡排序
冒泡排序的思想:相鄰元素兩兩比較,將較大的數(shù)字放在后面,直到將所有數(shù)字全部排序。
字符串與數(shù)組
在C語(yǔ)言中,是沒有辦法直接定義子字符串?dāng)?shù)據(jù)類型的,需使用數(shù)組來(lái)定義所要的字符串,形式如下:
char 字符串名稱[長(zhǎng)度] = "字符串內(nèi)容";
char 字符串名稱[長(zhǎng)度] = {'字符串1','字符串2',....,'字符串n','\0'};
注:
[]中的長(zhǎng)度可以省略不寫;
采用第二種方式最后一個(gè)元素必須是'\0',表示結(jié)束;
第二種方式不能寫中文!; 輸出字符串時(shí),要使用:printf("%s",字符數(shù)組名);或puts(字符數(shù)組名);
16.字符串函數(shù)
strlen(s):獲取字符串s的長(zhǎng)度;
strcmp(s1,s2):比較字符串;比較的時(shí)候會(huì)把字符串轉(zhuǎn)換成ASCII碼再進(jìn)行比較,返回結(jié)果為0表示s1和s2的ASCII碼值相等,返回結(jié)果為1表示s1比s2的ASCII碼大,返回結(jié)果為-1表示s1比s2的ACSII碼小;
strcpy(s1,s2):字符串拷貝;s2會(huì)取代s1中的內(nèi)容;
strcat(s1,s2)將s2拼接到s1后面;注意:s1的length要足夠才可以!
atoi(s1)將字符串轉(zhuǎn)為整數(shù)!
17.多維數(shù)組
數(shù)據(jù)類型 數(shù)組名稱[常量表達(dá)式1]...[常量表達(dá)式n];
多維數(shù)組的初始化與一維數(shù)組的初始化類似也是分兩種:
數(shù)據(jù)類型 數(shù)組名稱[常量表達(dá)式1][常量表達(dá)式2]...[常量表達(dá)式n] = {{值1,..,值n},{值1,..,值n},...,{值1,..,值n}};
數(shù)據(jù)類型 數(shù)組名稱[常量表達(dá)式1][常量表達(dá)式2]...[常量表達(dá)式n]; 數(shù)組名稱[下標(biāo)1][下標(biāo)2]...[下標(biāo)n] = 值;
多維數(shù)組初始化要注意以下事項(xiàng):
采用第一種始化時(shí)數(shù)組聲明必須指定列的維數(shù)。因?yàn)橄到y(tǒng)會(huì)根據(jù)數(shù)組中元素的總個(gè)數(shù)來(lái)分配空間,當(dāng)知道元素總個(gè)數(shù)以及列的維數(shù)后,會(huì)直接計(jì)算出行的維數(shù);
采用第二種初始化時(shí)數(shù)組聲明必須同時(shí)指定行和列的維數(shù)。
18.多維度數(shù)組的遍歷
使用嵌套循環(huán)
注意:多維數(shù)組的每一維下標(biāo)均不能越界!
19.結(jié)構(gòu)體
C 數(shù)組允許定義可存儲(chǔ)相同類型數(shù)據(jù)項(xiàng)的變量,結(jié)構(gòu)是 C 編程中另一種用戶自定義的可用的數(shù)據(jù)類型,它允許您存儲(chǔ)不同類型的數(shù)據(jù)項(xiàng)。
結(jié)構(gòu)用于表示一條記錄,假設(shè)您想要跟蹤圖書館中書本的動(dòng)態(tài),您可能需要跟蹤每本書的下列屬性:
Title
Author
Subject
Book ID
定義結(jié)構(gòu)
為了定義結(jié)構(gòu),您必須使用 struct 語(yǔ)句。struct 語(yǔ)句定義了一個(gè)包含多個(gè)成員的新的數(shù)據(jù)類型,struct 語(yǔ)句的格式如下:
struct tag { member-list member-list member-list ...} variable-list ;
tag 是結(jié)構(gòu)體標(biāo)簽。
member-list 是標(biāo)準(zhǔn)的變量定義,比如 int i; 或者 float f,或者其他有效的變量定義。
variable-list 結(jié)構(gòu)變量,定義在結(jié)構(gòu)的末尾,最后一個(gè)分號(hào)之前,您可以指定一個(gè)或多個(gè)結(jié)構(gòu)變量。下面是聲明 Book 結(jié)構(gòu)的方式:
struct Books{ char title[50]; char author[50]; char subject[100]; int book_id;} book;
在一般情況下,tag、member-list、variable-list 這 3 部分至少要出現(xiàn) 2 個(gè)。以下為實(shí)例:
//此聲明聲明了擁有3個(gè)成員的結(jié)構(gòu)體,分別為整型的a,字符型的b和雙精度的c//同時(shí)又聲明了結(jié)構(gòu)體變量s1//這個(gè)結(jié)構(gòu)體并沒有標(biāo)明其標(biāo)簽struct { int a; char b; double c;} s1; //此聲明聲明了擁有3個(gè)成員的結(jié)構(gòu)體,分別為整型的a,字符型的b和雙精度的c//結(jié)構(gòu)體的標(biāo)簽被命名為SIMPLE,沒有聲明變量struct SIMPLE{ int a; char b; double c;};//用SIMPLE標(biāo)簽的結(jié)構(gòu)體,另外聲明了變量t1、t2、t3struct SIMPLE t1, t2[20], *t3; //也可以用typedef創(chuàng)建新類型typedef struct{ int a; char b; double c; } Simple2;//現(xiàn)在可以用Simple2作為類型聲明新的結(jié)構(gòu)體變量Simple2 u1, u2[20], *u3;
訪問結(jié)構(gòu)成員
為了訪問結(jié)構(gòu)的成員,我們使用成員訪問運(yùn)算符(.)。成員訪問運(yùn)算符是結(jié)構(gòu)變量名稱和我們要訪問的結(jié)構(gòu)成員之間的一個(gè)句號(hào)。您可以使用 struct 關(guān)鍵字來(lái)定義結(jié)構(gòu)類型的變量。下面的實(shí)例演示了結(jié)構(gòu)的用法:
#include#include//來(lái)源公眾號(hào):C語(yǔ)言與CPP編程 struct Books{ char title[50]; char author[50]; char subject[100]; int book_id;}; int main( ){ struct Books Book1; /* 聲明 Book1,類型為 Books */ struct Books Book2; /* 聲明 Book2,類型為 Books */ /* Book1 詳述 */ strcpy( Book1.title, "C Programming"); strcpy( Book1.author, "Nuha Ali"); strcpy( Book1.subject, "C Programming Tutorial"); Book1.book_id = 6495407; /* Book2 詳述 */ strcpy( Book2.title, "Telecom Billing"); strcpy( Book2.author, "Zara Ali"); strcpy( Book2.subject, "Telecom Billing Tutorial"); Book2.book_id = 6495700; /* 輸出 Book1 信息 */ printf( "Book 1 title : %s\n", Book1.title); printf( "Book 1 author : %s\n", Book1.author); printf( "Book 1 subject : %s\n", Book1.subject); printf( "Book 1 book_id : %d\n", Book1.book_id); /* 輸出 Book2 信息 */ printf( "Book 2 title : %s\n", Book2.title); printf( "Book 2 author : %s\n", Book2.author); printf( "Book 2 subject : %s\n", Book2.subject); printf( "Book 2 book_id : %d\n", Book2.book_id); return 0;}
20.共用體
共用體是一種特殊的數(shù)據(jù)類型,允許您在相同的內(nèi)存位置存儲(chǔ)不同的數(shù)據(jù)類型。您可以定義一個(gè)帶有多成員的共用體,但是任何時(shí)候只能有一個(gè)成員帶有值。共用體提供了一種使用相同的內(nèi)存位置的有效方式。
#include#includeunion Data{ int i; float f; char str[20];}; int main( ){ union Data data; printf( "Memory size occupied by data : %d\n", sizeof(data)); return 0;}
21.指針
#includeint main (){ int var = 20; /* 實(shí)際變量的聲明 */ int *ip; /* 指針變量的聲明 */ ip = &var; /* 在指針變量中存儲(chǔ) var 的地址 */ printf("Address of var variable: %p\n", &var ); /* 在指針變量中存儲(chǔ)的地址 */ printf("Address stored in ip variable: %p\n", ip ); /* 使用指針訪問值 */ printf("Value of *ip variable: %d\n", *ip ); return 0;}
22.文件讀寫
寫入文件
#includeint main(){ FILE *fp = NULL; fp = fopen("/tmp/test.txt", "w+"); fprintf(fp, "This is testing for fprintf...\n"); fputs("This is testing for fputs...\n", fp); fclose(fp);}
讀取文件
#includeint main(){ FILE *fp = NULL; char buff[255]; fp = fopen("/tmp/test.txt", "r"); fscanf(fp, "%s", buff); printf("1: %s\n", buff ); fgets(buff, 255, (FILE*)fp); printf("2: %s\n", buff ); fgets(buff, 255, (FILE*)fp); printf("3: %s\n", buff ); fclose(fp); }
C語(yǔ)言與C++學(xué)習(xí)路線
23.排序算法
十大經(jīng)典排序算法(動(dòng)態(tài)演示+代碼)
24.查找算法
九種查找算法
25.面試知識(shí)
C語(yǔ)言與C++面試知識(shí)總結(jié)
26.字符串操作
字符串操作的全面總結(jié)
27. C語(yǔ)言常用標(biāo)準(zhǔn)庫(kù)解讀
C語(yǔ)言常用標(biāo)準(zhǔn)庫(kù)解讀
28. C語(yǔ)言最常用的貪心算法
C語(yǔ)言最常用的貪心算法就這么被攻克了
29. 常見的C語(yǔ)言內(nèi)存錯(cuò)誤及對(duì)策
常見的C語(yǔ)言內(nèi)存錯(cuò)誤及對(duì)策
30. C語(yǔ)言實(shí)現(xiàn)面向?qū)ο蟮脑?/p>
C語(yǔ)言實(shí)現(xiàn)面向?qū)ο蟮脑?/p>
31. C語(yǔ)言/C++內(nèi)存管理
看完這篇你還能不懂C語(yǔ)言/C++內(nèi)存管理?
32. 再談C語(yǔ)言指針
再談指針:大佬給你撥開 C 指針的云霧
C語(yǔ)言函數(shù)指針之回調(diào)函數(shù)
C語(yǔ)言指針詳解(文末有福利)
33. C語(yǔ)言預(yù)處理命令
長(zhǎng)文詳解:C語(yǔ)言預(yù)處理命令
34. C語(yǔ)言高效編程與代碼優(yōu)化
C語(yǔ)言高效編程與代碼優(yōu)化
35. C語(yǔ)言結(jié)構(gòu)體
C語(yǔ)言之結(jié)構(gòu)體就這樣被攻克了!值得收藏!
36. 原碼, 反碼, 補(bǔ)碼 詳解
原碼, 反碼, 補(bǔ)碼 詳解
37. C語(yǔ)言宏定義
簡(jiǎn)述C語(yǔ)言宏定義的使用
38. c語(yǔ)言之共用體union、枚舉、大小端模式
c語(yǔ)言之共用體union、枚舉、大小端模式
- 有關(guān)c語(yǔ)言入門基礎(chǔ)知識(shí)有哪些
- 有關(guān)IT常用基礎(chǔ)知識(shí)有哪些
- 關(guān)于c語(yǔ)言基本知識(shí)有哪些
- 關(guān)于c語(yǔ)言的常用知識(shí)點(diǎn)有哪些
- 有關(guān)c語(yǔ)言的基礎(chǔ)知識(shí)有哪些
- 關(guān)于c語(yǔ)言程序設(shè)計(jì)知識(shí)點(diǎn)有哪些
- 有關(guān)c語(yǔ)言??贾R(shí)點(diǎn)有哪些
- 關(guān)于必備IT基礎(chǔ)知識(shí)有哪些
- 有關(guān)java面試基礎(chǔ)知識(shí)
- 關(guān)于學(xué)習(xí)java需要哪些基礎(chǔ)知識(shí)
- 關(guān)于c語(yǔ)言程序設(shè)計(jì)基礎(chǔ)知識(shí)
- 有關(guān)java工程師需要掌握哪些知識(shí)