最新国产在线不卡AV,国产又爽又黄的视频免费看,精品综合久久久久久97,日韩欧美高清中文字幕免费一区二区

            科普

            關(guān)于c語言基礎(chǔ)知識(shí)教程 IT知識(shí)

            電腦知識(shí)優(yōu)爾供稿

            C語言在全世界普及推廣,無論在中國還是世界各國,C語言都是高等學(xué)校一門基本的計(jì)算機(jī)課程,C語言也在計(jì)算機(jī)領(lǐng)域發(fā)揮重要的作用。下面一起來看看9252兒童網(wǎng)小編為大家整理的c語言基礎(chǔ)知識(shí)教程,歡迎閱讀,僅供參考。

            c語言入門教程

            1.c語言入門教程--簡介

            C語言是一種計(jì)算機(jī)程序設(shè)計(jì)語言,它既具有高級語言的特點(diǎn),又具有匯編語言的特點(diǎn)。它由美國貝爾研究所的D.M.Ritchie于1972年推出,它可以作為工作系統(tǒng)設(shè)計(jì)語言,編寫系統(tǒng)應(yīng)用程序。它的應(yīng)用范圍廣泛,具備很強(qiáng)的數(shù)據(jù)處理能力,不僅僅是在軟件開發(fā)上,而且各類科研都需要用到C語言,適于編寫系統(tǒng)軟件,三維,二維圖形和動(dòng)畫,具體應(yīng)用比如單片機(jī)以及嵌入式系統(tǒng)開發(fā)。

            2.c語言入門教程--發(fā)展

            C語言之所以命名為C,是因?yàn)?C語言源自Ken Thompson發(fā)明的B語言,而 B語言則源自BCPL語言。

            1967年,劍橋大學(xué)的Martin Richards對CPL語言進(jìn)行了簡化,于是產(chǎn)生了BCPL(Basic Combined Programming Language)語言。

            1970年,美國貝爾實(shí)驗(yàn)室的 Ken Thompson,以BCPL語言為基礎(chǔ),設(shè)計(jì)出很簡單且很接近硬件的B語言(取BCPL的首字母)。并且他用B語言寫了第一個(gè)UNIX操作系統(tǒng)。

            1972年,美國貝爾實(shí)驗(yàn)室的 D.M.Ritchie 在B語言的基礎(chǔ)上最終設(shè)計(jì)出了一種新的語言,他取了BCPL的第二個(gè)字母作為這種語言的名字,這就是C語言。

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

            1978年由美國電話電報(bào)公司(AT&T)貝爾實(shí)驗(yàn)室正式發(fā)表了C語言。Brian Kernighan 和 Dennis Ritchie 出版了一本書,名叫《The C Programming Language》。這本書被 C語言開發(fā)者們稱為"K&R",很多年來被當(dāng)作 C語言的非正式的標(biāo)準(zhǔn)說明。人們稱這個(gè)版本的 C語言為"K&R C"。

            c語言宣傳圖1970到80年代,C語言被廣泛應(yīng)用,從大型主機(jī)到小型微機(jī),也衍生了C語言的很多不同版本。

            1983年美國國家標(biāo)準(zhǔn)局 (American National Standards Institute,簡稱ANSI)成立了一個(gè)委員會(huì),來制定 C語言標(biāo)準(zhǔn)。

            1989年 C語言標(biāo)準(zhǔn)被批準(zhǔn),被稱為 ANSI X3.159-1989 "Programming Language C"。這個(gè)版本的C語言標(biāo)準(zhǔn)通常被稱為ANSI C。

            1990年,國際標(biāo)準(zhǔn)化組織ISO(International Organization for Standards)接受了89 ANSI C 為I SO C 的標(biāo)準(zhǔn)(ISO9899-1990)。1994年,ISO修訂了C語言的標(biāo)準(zhǔn)。

            1999年,ISO又對C語言標(biāo)準(zhǔn)進(jìn)行修訂,在基本保留原來C語言特征的基礎(chǔ)上,針對應(yīng)該的需要,增加了一些功能,命名為ISO/IEC9899:1999。

            在ANSI標(biāo)準(zhǔn)化后,C語言的標(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語言新的國際標(biāo)準(zhǔn)草案:ISO/IEC 9899:2011,即C11。

            3.c語言入門教程--特性

            C語言是世界上最流行、使用最廣泛的高級程序設(shè)計(jì)語言之一。在操作系統(tǒng)和系統(tǒng)使用程序以及需要對硬件進(jìn)行操作的場合,用C語言明顯優(yōu)于其它高級語言,許多大型應(yīng)用軟件都是用C語言編寫的。C語言的主要特性有以下幾種:

            1.C是高級語言:它把高級語言的基本結(jié)構(gòu)和語句與低級語言的實(shí)用性結(jié)合起來。

            2.C是結(jié)構(gòu)式語言:結(jié)構(gòu)式語言的顯著特點(diǎn)是代碼及數(shù)據(jù)的分隔化,即程序的各個(gè)部分除了必要的信息交流外彼此獨(dú)立。

            3.C語言功能齊全:具有各種各樣的數(shù)據(jù)類型,并引入了指針概念,可使程序效率更高。而且計(jì)算功能、邏輯判斷功能也比較強(qiáng)大,可以實(shí)現(xiàn)決策目的的游戲。

            4.C語言適用范圍大:適合于多種操作系統(tǒng),如Windows、DOS、UNIX等等;也適用于多種機(jī)型。

            5.C語言應(yīng)用指針:可以直接進(jìn)行靠近硬件的操作,但是C的指針操作不做保護(hù),也給它帶來了很多不安全的因素。C++在這方面做了改進(jìn),在保留了指針操作的同時(shí)又增強(qiáng)了安全性。

            6.C語言創(chuàng)始人D.M.Ritchie6、C語言文件由數(shù)據(jù)序列組成:可以構(gòu)成二進(jìn)制文件或文本文件常用的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等。

            4.c語言入門教程--基礎(chǔ)知識(shí)

            數(shù)據(jù)類型----C的數(shù)據(jù)類型包括:整型、字符型、實(shí)型或浮點(diǎn)型、枚舉類型、數(shù)組類型、結(jié)構(gòu)體類型、共用體類型、指針類型和空類型。

            常量與變量----常量其值不可改變,符號常量名通常用大寫。變量是以某標(biāo)識(shí)符為名字,其值可以改變的量。變量在編譯時(shí)為其分配相應(yīng)存儲(chǔ)單元。

            數(shù)組----C++語言代碼如果一個(gè)變量名后面跟著一個(gè)有數(shù)字的中括號,這個(gè)聲明就是數(shù)組聲明。字符串也是一種數(shù)組。

            指針----如果一個(gè)變量聲明時(shí)在前面使用 * 號,表明這是個(gè)指針型變量。換句話說,該變量存儲(chǔ)一個(gè)地址,指針不僅可以是變量的地址,還可以是數(shù)組、數(shù)組元素、函數(shù)的地址。

            字符串----C語言的字符串其實(shí)就是char型數(shù)組,使用字符型并不需要引用庫,但是使用字符串就就需要C標(biāo)準(zhǔn)庫里面的一些用于對字符串進(jìn)行操作的函數(shù)。它們不同于字符數(shù)組。

            文件輸入/輸出----在C語言中,輸入和輸出是經(jīng)由標(biāo)準(zhǔn)庫中的一組函數(shù)來實(shí)現(xiàn)的。標(biāo)準(zhǔn)輸入/輸出有三個(gè)標(biāo)準(zhǔn)輸入/輸出是標(biāo)準(zhǔn)I/O庫預(yù)先定義的:stdin標(biāo)準(zhǔn)輸入、stdout標(biāo)準(zhǔn)輸出、stderr輸入輸出錯(cuò)誤。

            運(yùn)算----C語言的運(yùn)算非常靈活,功能十分豐富,運(yùn)算種類遠(yuǎn)多于其它程序設(shè)計(jì)語言。

            關(guān)鍵字----又稱為保留字,就是已被C語言本身使用,不能作其它用途使用的字。例如關(guān)鍵字不能用作變量名、函數(shù)名等標(biāo)識(shí)符。由ANSI標(biāo)準(zhǔn)定義的C語言關(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語言入門教程--語法結(jié)構(gòu)

            順序結(jié)構(gòu)

            順序結(jié)構(gòu)的程序設(shè)計(jì)是最簡單的,只要按照解決問題的順序?qū)懗鱿鄳?yīng)的語句就行,它的執(zhí)行順序是自上而下,依次執(zhí)行。順序結(jié)構(gòu)可以獨(dú)立使用構(gòu)成一個(gè)簡單的完整程序,常見的輸入、計(jì)算,輸出三步曲的程序就是順序結(jié)構(gòu)。

            選擇結(jié)構(gòu)

            選擇結(jié)構(gòu)的執(zhí)行是依據(jù)一定的條件選擇執(zhí)行路徑,而不是嚴(yán)格按照語句出現(xiàn)的物理順序。選擇結(jié)構(gòu)的程序設(shè)計(jì)方法的關(guān)鍵在于構(gòu)造合適的分支條件和分析程序流程,根據(jù)不同的程序流程選擇適當(dāng)?shù)倪x擇語句。

            循環(huán)結(jié)構(gòu)

            循環(huán)結(jié)構(gòu)可以減少源程序重復(fù)書寫的工作量,用來描述重復(fù)執(zhí)行某段算法的問題,這是程序設(shè)計(jì)中最能發(fā)揮計(jì)算機(jī)特長的程序結(jié)構(gòu),C語言中提供四種循環(huán),即goto循環(huán)、while循環(huán)、do while循環(huán)和for循環(huán)。

            模塊化程序結(jié)構(gòu)

            C語言的模塊化程序結(jié)構(gòu)用函數(shù)來實(shí)現(xiàn),即將復(fù)雜的C程序分為若干模塊,每個(gè)模塊都編寫成一個(gè)C函數(shù),然后通過主函數(shù)調(diào)用函數(shù)及函數(shù)調(diào)用函數(shù)來實(shí)現(xiàn)一大型問題的C程序編寫,因此常說:C程序=主函數(shù)+子函數(shù)。因此,對函數(shù)的定義、調(diào)用、值的返回等中要尤其注重理解和應(yīng)用,并通過上機(jī)調(diào)試加以鞏固。

            C語言入門基礎(chǔ)知識(shí)

            01、C語言程序的結(jié)構(gòu)認(rèn)識(shí)

            用一個(gè)簡單的c程序例子,介紹c語言的基本構(gòu)成、格式、以及良好的書寫風(fēng)格,使小伙伴對c語言有個(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)說明

            1、任何一個(gè)c語言程序都必須包括以下格式:main() { }——這是c語言的基本結(jié)構(gòu),任何一個(gè)程序都必須包含這個(gè)結(jié)構(gòu)。括號內(nèi)可以不寫任何內(nèi)容,那么該程序?qū)⒉粓?zhí)行任何結(jié)果。

            2、main()——在c語言中稱之為“主函數(shù)”,一個(gè)c程序有且僅有一個(gè)main函數(shù),任何一個(gè)c程序總是從main函數(shù)開始執(zhí)行,main函數(shù)后面的一對圓括號不能省略。

            3、被大括號{ }括起來的內(nèi)容稱為main函數(shù)的函數(shù)體,這部分內(nèi)容就是計(jì)算機(jī)要執(zhí)行的內(nèi)容。

            4、在{ }里面每一句話后面都有一個(gè)分號(;),在c語言中,我們把以一個(gè)分號結(jié)尾的一句話叫做一個(gè)c語言的語句,分號是語句結(jié)束的標(biāo)志。

            5、printf(“a=%d,b=%d,sum=%d\n”,a,b,sum); ——通過執(zhí)行這條c語言系統(tǒng)提供給我們直接使用的屏幕輸出函數(shù),用戶即可看到運(yùn)行結(jié)果,本程序運(yùn)行后,將在顯示器上顯示如下結(jié)果:a=20,b=15,sum=35。

            6、#include——注意:以#號開頭。不以分號結(jié)尾 這一行沒有分號,所以不是語句,在c語言中稱之為命令行,或者叫做“預(yù)編譯處理命令”。

            7、程序中以 /*開頭并且以*/結(jié)尾的部分表示程序的注釋部分,注釋可以添加在程序的任何位置,為了提高程序的可讀性而添加,但計(jì)算機(jī)在執(zhí)行主函數(shù)內(nèi)容時(shí)完全忽略注釋部分,換而言之就是計(jì)算機(jī)當(dāng)做注釋部分不存在于主函數(shù)中。

            02、C程序的生成過程

            C程序是先由源文件經(jīng)編譯生成目標(biāo)文件,然后經(jīng)過連接生成可執(zhí)行文件。

            源程序的擴(kuò)展名為 .c ,目標(biāo)程序的擴(kuò)展名為 .obj , 可執(zhí)行程序的擴(kuò)展名為 .exe 。

            03、標(biāo)識(shí)符

            在編寫程序時(shí),必須為函數(shù)、變量等命名,這個(gè)名字稱為標(biāo)識(shí)符。C語言中標(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語言庫函數(shù)相同,在程序中各種標(biāo)識(shí)符盡量不要重復(fù),以便區(qū)分。選擇變量名和其他標(biāo)識(shí)符時(shí),應(yīng)注意做到 “見名知義”。

            標(biāo)識(shí)符分為如下三類

            1、關(guān)鍵字

            關(guān)鍵字是具有特定含義的,專門用來說明c語言特定成分的一類標(biāo)識(shí)符,不能用作用戶的標(biāo)識(shí)符。

            2、預(yù)定義標(biāo)識(shí)符

            預(yù)定義標(biāo)識(shí)符在c語言中也有特定的含義,但可以用作用戶標(biāo)識(shí)符,預(yù)定義標(biāo)識(shí)符分為兩類:

            1)、庫函數(shù)名字,比如printf,scanf,sin,isdigit等 2)、編譯處理命令名,比如define,include

            3、用戶標(biāo)識(shí)符

            用戶根據(jù)需要自己定義的標(biāo)識(shí)符稱為用戶標(biāo)識(shí)符。無論如何自定義標(biāo)識(shí)符,都必須符合標(biāo)識(shí)符的三條命名規(guī)則。

            04 、常量

            在程序運(yùn)行中,其值不能被改變的量稱為常量。常量有5種類型:整型常量、實(shí)型常量、字符常量、字符串常量和符號常量。

            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ù)對應(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ù)組合就是對應(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ù)組合就是對應(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語言中沒有直接表示二進(jìn)制的整型常量,在c語言源程序中不會(huì)出現(xiàn)二進(jìn)制。)

            書寫方式如下:

            十進(jìn)制整型常量:123 , 0 ,-24 , 85L(長整型常量) 等 八進(jìn)制整型常量:051 ,-026 ,0773 等 十六進(jìn)制整型常量:0x55 , 0x1101 , 0x , 0x5AC0 , -0xFF。其中L為長整型。

            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)志是一對單引號‘ ’,c語言中的字符常量有兩類:

            1)由一對單引號括起來的一個(gè)字符,如‘a ’, ‘r’ ,‘#’。注意: ′a′ 和 ′A′ 是兩個(gè)不同的字符常量。

            2)由一對單引號括起來,以反斜杠\開頭,后跟若干數(shù)字或者字母,比如‘\n’,其中“\“是轉(zhuǎn)義的意思,后面跟不同的字符表示不同的意思,這類字符常量叫轉(zhuǎn)義字符。

            4.5 字符串常量

            C語言中,以雙引號括起來的,由若干個(gè)字符組成的序列即為字符串常量。

            例:“ni hao” “happy”等等。

            4.6 符號常量

            符號常量是由宏定義“#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); }

            說明:

            #define 是宏定義,此程序中所有出現(xiàn)PI的地方都代表3.,同時(shí)PI稱為符號常量。習(xí)慣上我們用大寫字母來表示符號常量,小寫字母表示變量,這樣比較容易區(qū)別。

            05、變量

            變量就是其值可以改變的量。變量要有變量名,在內(nèi)存中占據(jù)一定的存儲(chǔ)單元,存儲(chǔ)單元里存放的是該變量的值。不同類型的變量其存儲(chǔ)單元的大小不同,變量在使用前必須定義。

            5.1 整型變量

            整型變量分為4種:基本型(int)、短整型(short int 或short)、長整型(long int 或 long)和無符號型(unsigned int ,unsigned short,unsigned long)。

            不同的編譯系統(tǒng)對上述四種整型數(shù)據(jù)所占用的位數(shù)和數(shù)值范圍有不同的規(guī)定。

            類型說明符

            單詞signed來說明“有符號”(即有正負(fù)數(shù)之分),不寫signed也隱含說明為有符號,unsigned用來說明“無符號”(只表示正數(shù))。

            5.2 實(shí)型變量

            C語言中,實(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 字符變量

            字符變量用來存放字符常量,定義形式:

            char 變量名;

            其中關(guān)鍵字char定義字符型數(shù)據(jù)類型,占用一個(gè)字節(jié)的存儲(chǔ)單元。

            例:char cr1,cr2; cr1= ‘A’ , cr2=‘B’ ;

            將一個(gè)字符賦給一個(gè)字符變量時(shí),并不是將該字符本身存儲(chǔ)到內(nèi)存中,而是將該字符對應(yīng)的ASCII碼存儲(chǔ)到內(nèi)存單元中。

            由于在內(nèi)存中字符以ASCII碼存放,它的存儲(chǔ)形式和整數(shù)的存儲(chǔ)形式類似,所以C語言中字符型數(shù)據(jù)與整型數(shù)據(jù)之間可以通用,一個(gè)字符能用字符的形式輸出,也能用整數(shù)的形式輸出,字符數(shù)據(jù)也能進(jìn)行算術(shù)運(yùn)算,此時(shí)相當(dāng)于對它們的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)先級為:char < int < float < double 即左邊級別“低“的類型向右邊轉(zhuǎn)換。

            具體地說,若在表達(dá)式中優(yōu)先級最高的數(shù)據(jù)是double型,則此表達(dá)式中的其他數(shù)據(jù)均被轉(zhuǎn)換成double型,且計(jì)算結(jié)果也是double型;若在表達(dá)式中優(yōu)先級最高的數(shù)據(jù)是float型,則此表達(dá)式中的其他數(shù)據(jù)均被轉(zhuǎn)換成float型,且計(jì)算結(jié)果也是float型。

            在做賦值運(yùn)算時(shí),若賦值號左右兩邊的類型不同,則賦值號右邊的類型向左邊的類型轉(zhuǎn)換;當(dāng)右邊的類型高于左邊的類型時(shí),則在轉(zhuǎn)換時(shí)對右邊的數(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ùn)算符范圍很廣,可分為以下幾類:

            1、算術(shù)運(yùn)算符:用于各類數(shù)值運(yùn)算。包括加(+)、減(-)、乘(*)、除(/)、求余(%)、自增(++)、自減(--)共七種。

            2、賦值運(yùn)算符:用于賦值運(yùn)算,分為簡單賦值(=)、復(fù)合算術(shù)賦值(+=,-=,*=,/=,%=)和復(fù)合位運(yùn)算賦值(&=,|=,^=,>>=,<<=)三類共十一種。<="" span="">

            3、逗號運(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)算符:有括號(),下標(biāo)[],成員(→,.)等幾種。

            另外,按參與運(yùn)算的對象個(gè)數(shù),C語言運(yù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)。

            需要說明的是:當(dāng)運(yùn)算對象為負(fù)數(shù)時(shí),所得結(jié)果隨編譯器不同而不同,在vc中,結(jié)果的符號與被除數(shù)相同,比如:13%-2值為1,而-15%2值為-1。

            8.2 算術(shù)表達(dá)式和運(yùn)算符的優(yōu)先級與結(jié)合性

            算術(shù)表達(dá)式是用算術(shù)運(yùn)算符和括號將運(yùn)算量(也稱操作數(shù))連接起來的、符合C語言語法規(guī)則的表達(dá)式。運(yùn)算對象包括函數(shù)、常量和變量等。

            在計(jì)算機(jī)語言中,算術(shù)表達(dá)式的求值規(guī)律與數(shù)學(xué)中的四則運(yùn)算的規(guī)律類似,其運(yùn)算規(guī)則和要求如下。

            (1)在算術(shù)表達(dá)式中,可使用多層圓括號,但括號必須配對。運(yùn)算時(shí)從內(nèi)層圓括號開始,由內(nèi)向外依次計(jì)算各表達(dá)式的值。

            (2)在算術(shù)表達(dá)式中,對于不同優(yōu)先級的運(yùn)算符,可按運(yùn)算符的優(yōu)先級由高到低進(jìn)行運(yùn)算,若表達(dá)式中運(yùn)算符的優(yōu)先級相同,則按運(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ù)號運(yùn)算符,右邊是自增運(yùn)算符,負(fù)號運(yùn)算和自增運(yùn)算都是 “自右向左“結(jié)合的,相當(dāng)于 -(i++)。

            在循環(huán)語句中常用到自增(減)運(yùn)算符,在指針中也常用到該運(yùn)算符,考生要弄清楚“i++”和“++i”及“i--”和“--i”的區(qū)別,特別弄清楚表達(dá)式的值和變量的值。

            09、賦值運(yùn)算符與賦值表達(dá)式

            9.1 賦值運(yùn)算符與賦值表達(dá)式

            賦值符號 “=“就是賦值運(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、如果賦值號兩邊的運(yùn)算對象類型不一致,系統(tǒng)會(huì)自動(dòng)進(jìn)行類型轉(zhuǎn)換,轉(zhuǎn)換的規(guī)則:將賦值號右邊表達(dá)式的值的類型轉(zhuǎn)換成賦值號左邊變量的類型,

            例: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è)符號之間不可以有空格,復(fù)合賦值運(yùn)算符的優(yōu)先級與賦值運(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 逗號運(yùn)算符和逗號表達(dá)式

            在c語言中,逗號除了作為分隔符,還可以用作一種運(yùn)算符----逗號運(yùn)算符,用逗號運(yùn)算符將幾個(gè)表達(dá)式連接起來,例如a=b+c,a=b*c等稱為逗號表達(dá)式。

            一般形式為:

            表達(dá)式1 ,表達(dá)式2 ,表達(dá)式3 , …,表達(dá)式n

            例:x=2,y=3,z=4

            逗號表達(dá)式具有從左至右的結(jié)合性,即先求解表達(dá)式1,然后依次求解表達(dá)式2,直到表達(dá)式n的值。表達(dá)式n的值就是整個(gè)逗號表達(dá)式的值。上述的逗號表達(dá)式的值就是表達(dá)式z=4的值4.需要注意的是,逗號運(yùn)算符是所有運(yùn)算符中級別最低的。

            例:有如下程序段:

            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語言中的邏輯值

            C語言中的邏輯值只有兩個(gè):真(true)和假(flase)。用非零代表真,用零代表假。因此,對于任意一個(gè)表達(dá)式,如果它的值為零,就代表一個(gè)假值,如果它的值為非零,就代表一個(gè)真值。只要值不是零,不管是正數(shù),負(fù)數(shù),整數(shù),實(shí)數(shù),都代表一個(gè)真值。例如-5的邏輯值為真。

            10.2 逗號運(yùn)算符和逗號表達(dá)式

            “&&”和“||”的運(yùn)算對象有兩個(gè),故它們都是雙目運(yùn)算符,而!的運(yùn)算對象只有一個(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語言中,由&&或||組成的邏輯表達(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)行中就跳過(++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)算就是指對存儲(chǔ)單元中二進(jìn)制位的運(yùn)算。C語言提供6種位運(yùn)算符。

            11.2 位運(yùn)算

            位運(yùn)算符 & |~<< >> ∧ 按優(yōu)先級從高到低排列的順序是:

            位運(yùn)算符中求反運(yùn)算“~“優(yōu)先級最高,而左移和右移相同,居于第二,接下來的順序是按位與 “&“、按位異或 “∧“和按位或 “|“。順序?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)該說明的是,對于有符號數(shù),在右移時(shí),符號位將隨同移動(dòng)。當(dāng)為正數(shù)時(shí),最高位補(bǔ)0,而為負(fù)數(shù)時(shí),符號位為1,最高位是補(bǔ)0或是補(bǔ)1 取決于編譯系統(tǒng)的規(guī)定。

            例3:設(shè)二進(jìn)制數(shù)a是00 ,若通過異或運(yùn)算a∧b 使a的高4位取反,低4位不變,則二進(jìn)制數(shù)b是。

            解析:異或運(yùn)算常用來使特定位翻轉(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)算還可用來交換兩個(gè)值,不用臨時(shí)變量。

            C語言基礎(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.格式化輸出語句

            %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(" "); //輸出空格 } /* 觀察每行*號的數(shù)量,補(bǔ)全循環(huán)條件 */ for( k=0 ; k<2*i-1 ; k++ ) { printf("*"); //每行輸出的*號 } printf("\n"); //每次循環(huán)換行 } return 0;}

            8.臭名遠(yuǎn)揚(yáng)的goto語句

            很少使用

            #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語句 } } //執(zhí)行g(shù)otoLOOP:printf("結(jié)束for循環(huán)了...."); //請選擇合適位置添加標(biāo)識(shí)符 return 0;}

            9.形參與實(shí)參

            形參:形參是在定義函數(shù)名和函數(shù)體的時(shí)候使用的參數(shù),目的是用來接收調(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ù)等,無論實(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語句,該語句只能起到結(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語言根據(jù)變量的生存周期來劃分,可以分為靜態(tài)存儲(chǔ)方式和動(dòng)態(tài)存儲(chǔ)方式。

            靜態(tài)存儲(chǔ)方式:是指在程序運(yùn)行期間分配固定的存儲(chǔ)空間的方式。靜態(tài)存儲(chǔ)區(qū)中存放了在整個(gè)程序執(zhí)行過程中都存在的變量,如全局變量。

            動(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)場保護(hù)和返回地址等。

            12.2.存儲(chǔ)類型劃分

            C語言中存儲(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í)不賦初值的話,則對靜態(tài)局部變量來說,編譯時(shí)自動(dòng)賦初值0(對數(shù)值型變量)或空字符(對字符變量)

            為了提高效率,C語言允許將局部變量的值放在CPU中的寄存器中,這種變量叫“寄存器變量”,用關(guān)鍵字register作聲明。

            注意:只有局部自動(dòng)變量和形式參數(shù)可以作為寄存器變量;一個(gè)計(jì)算機(jī)系統(tǒng)中的寄存器數(shù)目有限,不能定義任意多個(gè)寄存器變量;局部靜態(tài)變量不能定義為寄存器變量。

            用extern聲明的的變量是外部變量,外部變量的意義是某函數(shù)可以調(diào)用在該函數(shù)之后定義的變量。

            #includ//來源公眾號:C語言與CPP編程int main(){ //定義外部局部變量 extern int x; return 0;}int x=100;

            13.內(nèi)部函數(shù)外部函數(shù) !

            在C語言中不能被其他源文件調(diào)用的函數(shù)稱為內(nèi)部函數(shù) ,內(nèi)部函數(shù)由static關(guān)鍵字來定義,因此又被稱為靜態(tài)函數(shù),形式為:

            static [數(shù)據(jù)類型] 函數(shù)名([參數(shù)])

            這里的static是對函數(shù)的作用范圍的一個(gè)限定,限定該函數(shù)只能在其所處的源文件中使用,因此在不同文件中出現(xiàn)相同的函數(shù)名稱的內(nèi)部函數(shù)是沒有問題的。

            在C語言中能被其他源文件調(diào)用的函數(shù)稱為外部函數(shù) ,外部函數(shù)由extern關(guān)鍵字來定義,形式為:

            extern [數(shù)據(jù)類型] 函數(shù)名([參數(shù)])

            C語言規(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ù)組名稱[長度n]

            數(shù)據(jù)類型 數(shù)組名稱[長度n] = {元素1,元素2,元素3,......};

            數(shù)據(jù)類型 數(shù)組名稱[] = {元素1,元素2,元素3,......};

            數(shù)類類型 數(shù)組名稱[長度n]; 數(shù)組名稱[0] = 元素1;數(shù)組名稱[1] = 元素2;...... 注意:1、數(shù)組的下標(biāo)均以0開始;2、數(shù)組在初始化的時(shí)候,數(shù)組內(nèi)元素的個(gè)數(shù)不能大于聲明的數(shù)組長度;3、如果采用第一種初始化方式,元素個(gè)數(shù)小于數(shù)組的長度時(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語言中,是沒有辦法直接定義子字符串?dāng)?shù)據(jù)類型的,需使用數(shù)組來定義所要的字符串,形式如下:

            char 字符串名稱[長度] = "字符串內(nèi)容";

            char 字符串名稱[長度] = {'字符串1','字符串2',....,'字符串n','\0'};

            注:

            []中的長度可以省略不寫;

            采用第二種方式最后一個(gè)元素必須是'\0',表示結(jié)束;

            第二種方式不能寫中文!; 輸出字符串時(shí),要使用:printf("%s",字符數(shù)組名);或puts(字符數(shù)組名);

            16.字符串函數(shù)

            strlen(s):獲取字符串s的長度;

            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ù)來分配空間,當(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 語句。struct 語句定義了一個(gè)包含多個(gè)成員的新的數(shù)據(jù)類型,struct 語句的格式如下:

            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è)分號之前,您可以指定一個(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è)句號。您可以使用 struct 關(guān)鍵字來定義結(jié)構(gòu)類型的變量。下面的實(shí)例演示了結(jié)構(gòu)的用法:

            #include#include//來源公眾號:C語言與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語言與C++學(xué)習(xí)路線

            23.排序算法

            十大經(jīng)典排序算法(動(dòng)態(tài)演示+代碼)

            24.查找算法

            九種查找算法

            25.面試知識(shí)

            C語言與C++面試知識(shí)總結(jié)

            26.字符串操作

            字符串操作的全面總結(jié)

            27. C語言常用標(biāo)準(zhǔn)庫解讀

            C語言常用標(biāo)準(zhǔn)庫解讀

            28. C語言最常用的貪心算法

            C語言最常用的貪心算法就這么被攻克了

            29. 常見的C語言內(nèi)存錯(cuò)誤及對策

            常見的C語言內(nèi)存錯(cuò)誤及對策

            30. C語言實(shí)現(xiàn)面向?qū)ο蟮脑?/p>

            C語言實(shí)現(xiàn)面向?qū)ο蟮脑?/p>

            31. C語言/C++內(nèi)存管理

            看完這篇你還能不懂C語言/C++內(nèi)存管理?

            32. 再談C語言指針

            再談指針:大佬給你撥開 C 指針的云霧

            C語言函數(shù)指針之回調(diào)函數(shù)

            C語言指針詳解(文末有福利)

            33. C語言預(yù)處理命令

            長文詳解:C語言預(yù)處理命令

            34. C語言高效編程與代碼優(yōu)化

            C語言高效編程與代碼優(yōu)化

            35. C語言結(jié)構(gòu)體

            C語言之結(jié)構(gòu)體就這樣被攻克了!值得收藏!

            36. 原碼, 反碼, 補(bǔ)碼 詳解

            原碼, 反碼, 補(bǔ)碼 詳解

            37. C語言宏定義

            簡述C語言宏定義的使用

            38. c語言之共用體union、枚舉、大小端模式

            c語言之共用體union、枚舉、大小端模式

              為你推薦