C語言和操作系統(tǒng)學(xué)習(xí)筆記_第1頁
C語言和操作系統(tǒng)學(xué)習(xí)筆記_第2頁
C語言和操作系統(tǒng)學(xué)習(xí)筆記_第3頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、深入理解計(jì)算機(jī)系統(tǒng)存儲(chǔ)器層次CPU主頻:3.2GHz高速緩存(110ns,一個(gè)周期)主存(10100ns)輔助(磁盤)(1byte/10ms,一次可以傳送大量字節(jié),幾十到幾百個(gè)周期)三級(jí)存儲(chǔ)(分鐘為單位)虛擬存儲(chǔ)虛擬頁(VP),物理頁(PA),頁表(PageTable),頁表?xiàng)l目(PTE,PageTableEntry),DRAM(虛擬存儲(chǔ)器緩存),SRAM(CPU和主存的緩存),MMU(存儲(chǔ)器管理單元),路旁轉(zhuǎn)換緩沖(TLB,TranslationLookasideBuffer)東芝sataliteL700筆記本進(jìn)入BIOS(ctrl+alt+del之后F12)Ubuntu15.10可能不適配

2、NVDIA顯卡(如:NVDIAGeForeGTX745)Day01C語言程序的絕大部分必須記錄在以.c作為擴(kuò)展名的文件里,這種文件叫源文件C語言程序里可以直接使用加減乘除四則運(yùn)算符號(hào)(+、-、*、/)每個(gè)獨(dú)立的計(jì)算步驟最后必須使用分毫結(jié)束,用分號(hào)結(jié)束的一個(gè)計(jì)算步驟叫一條語句任何C語言程序一個(gè)由大量的語句構(gòu)成C語言程序中,采用分組的方式管理所有的語句一組里的所有語句必須寫在一對大括號(hào)里可以吧一組里面的語句再次進(jìn)行分組絕大多數(shù)語句必須屆于某個(gè)分組任何語句不可以跨越分組不被其他大括號(hào)包含的大括號(hào)可以叫做頂級(jí)大括號(hào)頂級(jí)大括號(hào)可以用來表示函數(shù)(可以吧函數(shù)看成一組語句)每個(gè)函數(shù)必須有自己的名字,不用的函數(shù)

3、的名字必須不同任何C語言程序一對由一個(gè)活多個(gè)函數(shù)構(gòu)成C語言程序中必須有一個(gè)叫做main的函數(shù),這個(gè)函數(shù)叫做主函數(shù)C語言程序必須從主函數(shù)的第一條語句開始執(zhí)行當(dāng)主函數(shù)的最后一條語句結(jié)束的時(shí)候整個(gè)程序結(jié)束C語言程序允許一個(gè)函數(shù)的結(jié)束的時(shí)候遺留一個(gè)數(shù)字,這個(gè)數(shù)字叫做這個(gè)函數(shù)是返回值主函數(shù)需要有一個(gè)返回值,這個(gè)返回值表示主函數(shù)的工作結(jié)果。如果這個(gè)返回值是0,則表示一切正常,否則就表示出現(xiàn)非正常情況。C語言程序里預(yù)留了幾十個(gè)英文單詞,這些英文單詞叫做關(guān)鍵字。每一個(gè)關(guān)鍵字有特定的用途,不能隨便使用。Return就是一個(gè)關(guān)鍵字,它有兩個(gè)用途。主要用途是結(jié)束函數(shù)的執(zhí)行(任何時(shí)候一定會(huì)起到這個(gè)作用),輔助作用是用

4、來指定返回值數(shù)值(當(dāng)關(guān)鍵字后面有數(shù)字時(shí)起這個(gè)作用)根據(jù)數(shù)字在某個(gè)方面的區(qū)別把數(shù)字分成幾組,每組叫做一個(gè)數(shù)據(jù)類型每個(gè)數(shù)據(jù)類型有自己的名字整數(shù)類型是一種數(shù)據(jù)類型,它的名字是int,它里面包含幾乎所有不帶小數(shù)點(diǎn)的數(shù)字程序中所有數(shù)字必須有類型C語言程序中所有不帶小數(shù)點(diǎn)的數(shù)字默認(rèn)是整數(shù)類型每個(gè)函數(shù)必須明確表示它返回值的類型(把返回值類型名稱寫在函數(shù)名稱前面)C語言程序基本開發(fā)步驟:1、使用vi編寫以.c作為擴(kuò)展名的源文件2、使用gcc工具對源文件進(jìn)行翻譯得到名為a.out的文件(編譯)3、用命令./a.out執(zhí)行得到的文件能夠完成編譯工作的軟件叫編譯器不同編程語言有自己的編譯器Gcc是c語言的一種編譯器

5、MinGW軟件是windows里的gcc所有C語言程序中都會(huì)包含預(yù)處理指令預(yù)處理指令全都是以#作開頭,而且不是以;作結(jié)尾標(biāo)準(zhǔn)C階段遇到的預(yù)處理指令都可以把源文件內(nèi)容改變成其他內(nèi)容#include是一個(gè)預(yù)處理指令,它可以把其他文件內(nèi)容合并到當(dāng)前源文件中使用這個(gè)預(yù)處理指令的適合需要指定文件路徑,這個(gè)路徑對應(yīng)的文件會(huì)被包含到當(dāng)前源文件中這個(gè)路徑通常采用相對路徑:如果把路徑寫在中間表示相對路徑的起點(diǎn)是系統(tǒng)預(yù)先設(shè)定好的一下目錄如果把路徑寫在中間表示相對路徑的起點(diǎn)還包括當(dāng)前源文件所在的目錄gcc工作步驟:1、先處理所有預(yù)處理指令2、把修改后源文件內(nèi)容翻譯成計(jì)算機(jī)認(rèn)識(shí)的格式(也叫編譯)3、把編譯得到的不同部

6、分合并在一起(鏈接)gcc的選項(xiàng):-E只完成預(yù)處理指令的處理工作-c只完成預(yù)處理和編譯工作-o用來指定新文件名稱-std=c89/-std=c99用來指定編譯過程中遵循的版本(缺省情況下采用c89版本)程序中的文字信息必須加入到注釋的區(qū)域里,編譯器會(huì)忽略所有注釋以/做開頭一直到行尾的區(qū)域叫單行注釋以/*做開頭,以*/做結(jié)尾的區(qū)域叫多行注釋C語言程序中大量使用名稱區(qū)分不同內(nèi)容,這些名稱叫做標(biāo)識(shí)符標(biāo)識(shí)符最好米用有意義的英文單詞編寫標(biāo)識(shí)符命名規(guī)則:1、第一個(gè)字母只能是英文字母或者下劃線2、后面的字母可以是英文字母、下劃線或者阿拉伯?dāng)?shù)字字符3、標(biāo)識(shí)符中大小寫不同的字符被看作是不同的字符(大小寫敏感)4

7、、關(guān)鍵字不可以當(dāng)做標(biāo)識(shí)符使用5、標(biāo)識(shí)符長度沒有限制,但計(jì)算機(jī)只會(huì)截取前一段使用(c89規(guī)范中截取前31個(gè)字符,c99規(guī)范里截取前63個(gè)字符)C語言書寫規(guī)范:1、一行中最多包含一條語句2、不同層次的語句要使用縮進(jìn)區(qū)分開3、在合適的地方使用空格和空行提高程序的可讀性4、標(biāo)識(shí)符采用駝峰方式(區(qū)分大小寫XiAn)或者下劃線(xi-an)方式編寫C語言中提供了一組標(biāo)準(zhǔn)函數(shù),每個(gè)函數(shù)負(fù)責(zé)解決一個(gè)常見問題每個(gè)標(biāo)準(zhǔn)函數(shù)都有自己是名字在程序中編寫函數(shù)調(diào)用語句就可以使用某個(gè)函數(shù)了printf是一個(gè)標(biāo)準(zhǔn)函數(shù)的名字,這個(gè)標(biāo)準(zhǔn)函數(shù)可以把程序中的數(shù)字打印在終端窗口里;為了使用這個(gè)標(biāo)準(zhǔn)函數(shù)需要包含stdio.h文件。在pr

8、intf函數(shù)調(diào)用語句中使用占用符可以把雙引號(hào)里面的某個(gè)位置保留下來,在打印的適合先用某個(gè)數(shù)字填充這個(gè)位置然后再打印使用占位符可以打印編寫程序時(shí)還不知道的數(shù)字不同類型的數(shù)字應(yīng)該和不同的占位符配合使用和整數(shù)類型配合使用的占位符是%d可以在一條函數(shù)調(diào)用語句中使用多個(gè)占位符,有多少個(gè)占位符就應(yīng)該在雙引號(hào)后面提供多少個(gè)數(shù)字,數(shù)字之間使用逗號(hào)分開計(jì)算機(jī)內(nèi)存分成很多字節(jié),任意兩個(gè)的大小一樣每個(gè)字節(jié)可以用來存放一個(gè)數(shù)字??梢耘R時(shí)把幾個(gè)相鄰的字節(jié)合并用來記錄一個(gè)數(shù)字我們可以把內(nèi)存中用來記錄一個(gè)數(shù)字的區(qū)域叫做一個(gè)存儲(chǔ)區(qū)(一個(gè)存儲(chǔ)區(qū)一定是由一個(gè)或多個(gè)相鄰字節(jié)構(gòu)成的)每個(gè)字節(jié)有一個(gè)編號(hào),這個(gè)編號(hào)叫做這個(gè)字節(jié)的地址所有

9、字節(jié)的地址從0開始逐漸遞增只有通過地址才能找到字節(jié)一個(gè)存儲(chǔ)區(qū)也有地址,它的地址是它所包含的字節(jié)中最前邊的字節(jié)的地址C語言中可以使用變量代表一個(gè)存儲(chǔ)區(qū),這一可以簡化對存儲(chǔ)區(qū)的使用一個(gè)存儲(chǔ)區(qū)只能用來存儲(chǔ)一種類型的數(shù)字,因此存儲(chǔ)區(qū)是分類型的(變量也是)計(jì)算機(jī)可以根據(jù)變量計(jì)算出對應(yīng)存儲(chǔ)區(qū)的地址(變量可以代表存儲(chǔ)區(qū)的原因)變量和存儲(chǔ)區(qū)的對應(yīng)關(guān)系完全由計(jì)算機(jī)決定為了在程序中使用一個(gè)變量必須首先聲明它,變量聲明語句用來聲明變量變量聲明語句會(huì)讓計(jì)算機(jī)為變量分配一個(gè)存儲(chǔ)區(qū)變量聲明語句中不用包含變量的類型和名稱變量的使用方法:1、變量可以用來存儲(chǔ)一個(gè)數(shù)字2、從變量中獲得數(shù)字并進(jìn)行計(jì)算變量賦值語句可以向變量中存放一

10、個(gè)數(shù)字賦值語句需要采用賦值操作符(=)編寫賦值操作符要求左邊必須是一個(gè)能代表存儲(chǔ)區(qū)的內(nèi)容(左值)賦值操作符要求右邊必須是一個(gè)能代表數(shù)字的內(nèi)容賦值語句執(zhí)行完成后可以把右邊的數(shù)字記錄在左邊的存儲(chǔ)區(qū)里只要在程序中把代表存儲(chǔ)區(qū)的內(nèi)容當(dāng)作數(shù)字使用,計(jì)算機(jī)就會(huì)先從存儲(chǔ)區(qū)里獲得數(shù)字,然后再使用變量名稱在程序中既可以帶便存儲(chǔ)區(qū),也可以代表存儲(chǔ)區(qū)的數(shù)字(num=num)變量名稱在程序中代表什么是由環(huán)境決定的預(yù)習(xí):1變量2、scanf標(biāo)準(zhǔn)函數(shù)3數(shù)據(jù)類型作業(yè):1、假設(shè)有1克到127克之間的127個(gè)不同的整數(shù)重量,要求設(shè)計(jì)一套石去碼表示其中任何一個(gè)整數(shù)重量。(同樣重量的石去碼不能重復(fù),石去碼數(shù)量越少越好)24816-

11、Day01day02總結(jié):whoami查看當(dāng)前使用的賬號(hào)clear活除終端窗口里的文字信息pwdcdlstouchmkdirmkdirrmTab鍵cdls-l-Prm-rf補(bǔ)齊查看當(dāng)前目錄ls-als-la創(chuàng)建新文件創(chuàng)建新目錄qwe/asd兩個(gè)目錄一起創(chuàng)建出來tartarzcvfzxvf壓縮文件名.tar.gz路徑1路徑2壓縮文件名.tar.gz打包壓縮解包解壓nyynpndd(n為整數(shù),如果是1可省略)拷貝n行粘貼n次剪切n行(必須在正常模式下)(必須在正常模式下)(必須在正常模式下)(每次vi啟動(dòng)時(shí),都會(huì)從/.vimrc文件中獲得setnusetnonugccgccgcc-E-c-o-st

12、d=c89/-std=c99只完成預(yù)處理指令的處理工作(編譯)只完成預(yù)處理和編譯用來指定新文件名稱用來指定編譯過程中遵循的版本(缺省時(shí)采用chmodu+x(g+w/o-r)user/group/otherchmod664(二進(jìn)制后轉(zhuǎn)的十進(jìn)制數(shù))文件路徑修改操作屆性mv路徑1路徑2移動(dòng)(覆蓋)(也可以用來改名)cp路徑1路徑2拷貝(復(fù)制)ln-s路徑1路徑2(可以不存在,新建)鏈接(等同操作)echoabca.txt(重定義輸出)(abc覆蓋a.txt)echoabca.txt(追加)(abc加在a.txt后)ps(-aux系統(tǒng)所有進(jìn)程)查看當(dāng)前窗口進(jìn)程kill(-9強(qiáng)制結(jié)束)234(id號(hào))結(jié)

13、束進(jìn)程ctrl+c結(jié)束進(jìn)程(相當(dāng)亍kill-2自動(dòng)尋找死循環(huán))echoabca.txt重定義輸出echoabca.txt追加通配符:?(a?)代表a_vi/.vimrc查看set命令大量set命令并按順序執(zhí)行它們)代表以a開頭的*(a*)c89版本)Day03:可以在一條語句中聲明多個(gè)同類型變量,這個(gè)時(shí)候類型名稱寫一次就行了可以在聲明變量的語句中立刻對變量進(jìn)行賦值,這叫做變量的初始化c語言里所有變量都應(yīng)該初始化變量可以用來在程序中代表一個(gè)未知的固定數(shù)字變量可以用來代表一組相關(guān)數(shù)字(任何時(shí)候只使用其中某一個(gè)數(shù)字,使用過后就不再使用了)在printf()中用%,才會(huì)打印出%;Scanf()如果sc

14、anf函數(shù)調(diào)用語句的雙引號(hào)里有不是占位符的內(nèi)容,則用戶必須在輸入的時(shí)候把它們按照順序依次輸入,否則計(jì)算機(jī)就無法得到數(shù)字如果多次從鍵盤得到數(shù)字時(shí)某一次用戶輸入的格式錯(cuò)誤則后面的所有輸入都可能會(huì)錯(cuò)誤清理緩存區(qū)(有時(shí)前面輸入錯(cuò)誤,后面會(huì)都出錯(cuò),清理緩存后就好了)Scanf(%*An”);Scanf(%*c”);scanf(%*An”);scanf(%*c”);字符類型是一種數(shù)據(jù)類型,名稱是char這個(gè)類型中一個(gè)包含256個(gè)不同的數(shù)據(jù),每個(gè)數(shù)據(jù)可以代表一個(gè)字符(#)ASCII碼表中記錄所有256個(gè)數(shù)據(jù)兩種表示方式之間的對應(yīng)關(guān)系a97A65048所有字符數(shù)據(jù)分成兩組,每組128個(gè)字符其中一組里所有字符數(shù)

15、據(jù)兩種表示方式之間的對應(yīng)關(guān)系在所有計(jì)算機(jī)上都一樣(這組字符的整數(shù)表示方式范圍從0到127)另外一組中所有字符數(shù)據(jù)兩種表示方式之間的對應(yīng)關(guān)系在計(jì)算機(jī)上有可能不同(這組字符的整數(shù)表示方式范圍從-128到-1,也有可能從128到255)無符號(hào)字符類型也是一種數(shù)據(jù)類型無符號(hào)字符類型用unsignedchar表示這個(gè)數(shù)據(jù)類型里同樣包含那256個(gè)不同的字符,所有的字符數(shù)據(jù)的整數(shù)表示方式范圍固定從0到255)ASCII碼表中所有小型英文字符的整數(shù)表示方式是連續(xù)排列的,a的整數(shù)表示方式最小所有大寫英文字母和阿拉伯?dāng)?shù)字字符也都符合這個(gè)規(guī)律t-a=T-A3-0=3-0=d-aShort%hdUnsignedsho

16、rt%huLong%ldUnsignedlong%luInt%dUnsignedint%uFloat%f或者%gDouble%lf或者%lg%lf和f會(huì)保留小數(shù)后面無效的零%nd和%-nd%0nd也可以做站位符,(n同樣代表一個(gè)整數(shù))打印n個(gè)位子,無效位置用0%n,mf作浮點(diǎn)占位符,共n個(gè)位置,小數(shù)點(diǎn)占m位不同數(shù)據(jù)類型之間的區(qū)別是有它們是存儲(chǔ)區(qū)所包含的字節(jié)個(gè)數(shù)不同造成的Sizeof關(guān)鍵字可以用來計(jì)算一個(gè)變量或數(shù)據(jù)的存儲(chǔ)區(qū)所占的字節(jié)個(gè)數(shù)各種數(shù)據(jù)類型所包含的字節(jié)個(gè)數(shù):1個(gè)字節(jié)2個(gè)字節(jié)4個(gè)字節(jié)4個(gè)字節(jié)4個(gè)字節(jié)8個(gè)字節(jié)char(unsignedchar)short(unsignedshort)long

17、(unsifnedlong)int(unsignedint)floatdoubleSizeof關(guān)鍵字的小括號(hào)里可以寫任何能當(dāng)作數(shù)字使用的內(nèi)容(賦值語句也可以當(dāng)作數(shù)字)Sizeof關(guān)鍵字的小括號(hào)里如果修改了任何存儲(chǔ)區(qū)的內(nèi)容則這種修改不會(huì)真正生效(如:sizeof(num=10)不會(huì)真正賦值)計(jì)算機(jī)采用二進(jìn)制表示數(shù)字,二進(jìn)制里每個(gè)數(shù)位上只有0或1者兩種可能計(jì)算機(jī)里每個(gè)字節(jié)分成八段,每段可以用來記錄一個(gè)0或者1數(shù)字的二進(jìn)制表示方式中每個(gè)數(shù)位有一行編號(hào),最右邊數(shù)位的編號(hào)是0,向左依次遞增二進(jìn)制中每個(gè)數(shù)位上的1單獨(dú)代表一個(gè)數(shù)字,它的數(shù)值就是2的編號(hào)次方一個(gè)二進(jìn)制所代表的數(shù)值就是他里邊所有數(shù)位上的1所代表

18、的數(shù)值之和二進(jìn)制加一是計(jì)算規(guī)則是吧最右邊的0變成1,把它右邊的所有1都變成0二進(jìn)制轉(zhuǎn)十進(jìn)制方式:把所有1單獨(dú)轉(zhuǎn)換最后把轉(zhuǎn)換結(jié)果求和01110011=1+2+16+32+64=115預(yù)習(xí):1二進(jìn)制(八進(jìn)制十六進(jìn)制,負(fù)數(shù)的二進(jìn)制)2操作符作業(yè):1編寫程序計(jì)算給定長和寬的長方形的面積2編寫程序計(jì)算給定半徑的元的周長擴(kuò)展:crontab(任務(wù)調(diào)度)crontabT查看任務(wù)調(diào)度crontab-e修改任務(wù)調(diào)度可執(zhí)行的shell腳本viabc.shmkdirshellcdshelltoucha.txtlsTabc.sh(查看腳本問價(jià)操作屆性)chmod777abc.sh(修改腳本操作屆性,使其能被運(yùn)行)./

19、abc.sh執(zhí)行腳本,從而運(yùn)行里面步驟遠(yuǎn)程操作別id的電腦(有對方ip和密碼)(ftp也可以)telnet+ip(遠(yuǎn)程連接)/sbin/ifconfig查看本地ipIpconfig在windows下查看ip退出:exit(正常進(jìn)入)Quit(不正常進(jìn)入)服務(wù)器下:ftp43xlyxly下載:gat文件上傳:put文件退出:byeDay04十進(jìn)制轉(zhuǎn)二進(jìn)制兩種方法:第一種,首先把十進(jìn)制表示方法拆分成多個(gè)2的整數(shù)次方值和,然后把所有拆分結(jié)果單獨(dú)轉(zhuǎn)換成二進(jìn)制,最后把所有轉(zhuǎn)換結(jié)果合并就得到證個(gè)數(shù)字的二進(jìn)制57=32+16+8+1=00100000+00010000+00001000

20、+00000001=00111001第二種是不斷除以2取余,把所有余數(shù)按照從后向前的順序書寫得到轉(zhuǎn)換結(jié)果83410*12000*010000*050000*100000*01000000*1000000000113/2=56/2=28/2=14/2=7/2=3/2=1/2=01000111001110001通過上述方法計(jì)算得到的二進(jìn)制叫做源碼計(jì)算機(jī)里采用補(bǔ)碼計(jì)算數(shù)字非負(fù)數(shù)的源碼和補(bǔ)碼是一樣的八進(jìn)制也是一種表示數(shù)字的方式(可以看成是二進(jìn)制的簡寫方式)把二進(jìn)制的補(bǔ)碼從有向左每三個(gè)數(shù)位分成一組,把每一組用0到7之間的數(shù)字替換得到結(jié)果就是八進(jìn)制表小方法01010111010101111274分3分八進(jìn)

21、制可以直接在程序中使用八進(jìn)制方式表示數(shù)字,但是必須在數(shù)字前寫一個(gè)0采用%o做占位符可以把一個(gè)數(shù)字的八進(jìn)制表示方式打印在屏幕上十六進(jìn)制也是一種表示數(shù)字的方法(也可以看成是二進(jìn)制的簡寫方式)把二進(jìn)制補(bǔ)碼中所有數(shù)位從右向左每四個(gè)數(shù)位分成一組,每組用一字字符替代得到的結(jié)果就是十六進(jìn)制表示方式如果某一組的轉(zhuǎn)換結(jié)果在0到9之間則使用對應(yīng)的阿拉伯?dāng)?shù)字字符替換,如果在10到15之間則使用a到f替換。001011012d(十六進(jìn)制)可以在程序中使用十六進(jìn)制的方式表示數(shù)字,但是必須在前面寫上0x采用%x或者%X可以把一個(gè)數(shù)字的十六進(jìn)制表示方式打印在屏幕上-50-500000000-0000010110000000

22、0-00000101=11111111+1-00000101=11111111-00000101+1=11111010+1=11111011負(fù)數(shù)二進(jìn)制補(bǔ)碼計(jì)算方法:1計(jì)算出負(fù)數(shù)相反數(shù)的補(bǔ)碼2把第一步的結(jié)果中每個(gè)數(shù)位變成相反數(shù)值,然后在加一這種方法得到的結(jié)果直接是二進(jìn)制補(bǔ)碼無符號(hào)類型的二進(jìn)制補(bǔ)碼一定是非負(fù)數(shù)有符號(hào)類型的二進(jìn)制最左邊的數(shù)位可以用來盤點(diǎn)正負(fù),如果是0則是非負(fù)數(shù),如果是1則是負(fù)數(shù)這個(gè)數(shù)位叫做符號(hào)位不能直接把符號(hào)位替換成正負(fù)號(hào)所有有符號(hào)類型中有一個(gè)特殊的二進(jìn)制補(bǔ)碼,它最左邊的數(shù)位是1右邊全是0,這個(gè)補(bǔ)碼用來表示這個(gè)數(shù)據(jù)類型中最小的負(fù)數(shù)當(dāng)吧一個(gè)占地大的整數(shù)類型數(shù)據(jù)賦值給以個(gè)占地小的整數(shù)類型

23、存儲(chǔ)區(qū)的時(shí)候,計(jì)算機(jī)會(huì)保持二進(jìn)制內(nèi)容不變(會(huì)丟失一些數(shù)據(jù))當(dāng)把一個(gè)占地小的整數(shù)類型數(shù)據(jù)賦值給一個(gè)占地大的整數(shù)類型存儲(chǔ)區(qū)時(shí)會(huì)擴(kuò)充二進(jìn)制數(shù)位。原有的數(shù)字是有符號(hào)的,則擴(kuò)充出來的二進(jìn)制數(shù)位全是符號(hào)位。如果原有數(shù)字是無符號(hào)的,則擴(kuò)充出來的二進(jìn)制數(shù)位都是0C語言程序中使用加減乘除C語言中使用表示區(qū)余操作、,在C語言中可以做為操作符使用,它的左右和寫一個(gè)能當(dāng)數(shù)字使用的內(nèi)容使用這個(gè)操作符編寫的表達(dá)式可以當(dāng)數(shù)字使用,這個(gè)數(shù)字就是逗號(hào)操作符后面的那個(gè)數(shù)字逗號(hào)操作符的優(yōu)先級(jí)非常低,甚至比賦值操作符優(yōu)先級(jí)都低賦值操作符(=)可以把一個(gè)數(shù)字放在一個(gè)存儲(chǔ)區(qū)里賦值操作符左邊必須是一個(gè)能代表存儲(chǔ)區(qū)的內(nèi)容(左值)賦值操作符右

24、邊必須是可以當(dāng)數(shù)字使用的內(nèi)容賦值操作符的優(yōu)先級(jí)非常低,但是比逗號(hào)操作符高使用賦值操作符編寫的賦值語句可以當(dāng)作數(shù)字使用,這個(gè)數(shù)字就是賦值完成后的右邊的存儲(chǔ)區(qū)里的數(shù)字一條語句中可以包含多個(gè)賦操作符,它們的計(jì)算順序是先右后左只需要一個(gè)數(shù)字就可以配合使用的操作符叫單目操作符需要兩個(gè)數(shù)字配合使用的操作符叫雙目操作符需要三個(gè)數(shù)字配合使用的操作符叫三目操作符絕大多數(shù)雙目操作符可以和賦值操作符合并形成賦值操作符(+=-=%=)符合賦值操作符要求左邊是能代表存儲(chǔ)區(qū)的內(nèi)容,有邊是能當(dāng)數(shù)字使用的內(nèi)容復(fù)合賦值操作符也是爽目操作符所有復(fù)合賦值操作符的優(yōu)先級(jí)都和賦值操作符的優(yōu)先級(jí)一樣低自增+/自減-它們是單目操作符,它們

25、必須和一個(gè)存儲(chǔ)區(qū)配合使用這兩個(gè)操作符都可以采用前操作方式或后操作方式使用(i+i)不用在一條語句中隊(duì)同一個(gè)變量多次進(jìn)行自增自減計(jì)算,因?yàn)榻Y(jié)果不確定布爾類型數(shù)據(jù)只包含兩個(gè)數(shù)值,分別是真(true)和假(false)在C89規(guī)范中真用整數(shù)1表示,假用整數(shù)0表示整數(shù)也可以作為布爾值使用,0作為布爾值使用時(shí)是假,其他整數(shù)作為布爾值使用時(shí)是真邏輯操作符用來編寫邏輯表達(dá)式,邏輯表達(dá)式的計(jì)算結(jié)果只能是布爾值!是單目邏輯操作符,表示求反雙目邏輯操作符:=雙目邏輯操作符的優(yōu)先級(jí)比算術(shù)操作符的優(yōu)先級(jí)低C語言中所有邏輯表達(dá)式必須由一個(gè)或多個(gè)簡單邏輯表達(dá)式構(gòu)成(最多包含以個(gè)雙目邏輯操作符的表達(dá)式叫簡單邏輯表達(dá)式)&與

26、II或(!Gender&weight(height-110)|(Gender&weight(height-105)與(&)和或(|)都具有短路特性(前面的邏輯表達(dá)式如果能決定整個(gè)表達(dá)式的結(jié)果則不會(huì)去考慮后面的內(nèi)容)作業(yè):1、編寫程序從鍵盤上得到一個(gè)1到127之間的整數(shù),把它轉(zhuǎn)換成二進(jìn)制并把轉(zhuǎn)換結(jié)果打印在屏幕上(兩種方法)Day05位操作符可以直接對字節(jié)中的二進(jìn)制數(shù)位進(jìn)行操作是以個(gè)單目位操作符,它可以把字節(jié)中所有二進(jìn)制數(shù)位求反,叫求反操作符求反操作符不會(huì)修改原有數(shù)字內(nèi)容雙目為操作符包括按位與(&),按位或(|)以及按位異或(A)以上雙目操作符首先把兩個(gè)數(shù)字轉(zhuǎn)化二進(jìn)制補(bǔ)碼,然后把對應(yīng)數(shù)位上的數(shù)字進(jìn)

27、行操作(不對應(yīng)的數(shù)位之間不會(huì)互相影響)按位與會(huì)把對應(yīng)數(shù)位上的數(shù)字進(jìn)行與計(jì)算按位與可以用來把租借中某些二進(jìn)制數(shù)位活0;任何數(shù)位和0按位與后是0任何數(shù)位和1按位與后還是他本身a6501000001A9701100001Charch;Ch&=32/00100000;/11011111按位或把對應(yīng)數(shù)位上的數(shù)字進(jìn)行或計(jì)算(或0得本身,或1得1)1 00000011|500000101=700000111按位或可以把字節(jié)中某些二進(jìn)制數(shù)位設(shè)置成1按位異或把對應(yīng)上的數(shù)字進(jìn)行異或計(jì)算(異或0不變,異或1結(jié)果改變)0A0=03A5=000001100a1=1=61a1=0按位異或可以把某二進(jìn)制數(shù)位求反移位操作符也

28、是雙目操作符;可以把所有二進(jìn)制數(shù)位上的數(shù)字統(tǒng)一向左或向有移動(dòng)n個(gè)位置左移操作使用表示移位操作符左邊的數(shù)字是要進(jìn)行移位操作的數(shù)字,右邊的數(shù)字是移動(dòng)的位數(shù)移位操作不會(huì)修改原有的數(shù)字移位操作后一定會(huì)有些數(shù)字丟失,另外一些位置空出來左移時(shí)右邊空出的位置上一定補(bǔ)充0;右移時(shí)有符號(hào)類型數(shù)據(jù)左邊空出來的位置上一定補(bǔ)充符號(hào)位,無符號(hào)類型數(shù)據(jù)左邊空出來的位置上一定補(bǔ)充0在移動(dòng)過程中如果沒有丟失有效數(shù)據(jù)位,則左移n位相當(dāng)于乘以2的n次方,右移除以。取地址操作符(&)可以根據(jù)一個(gè)存儲(chǔ)區(qū)計(jì)算出它的地址這是一個(gè)單目操作符,它必須和一個(gè)存儲(chǔ)區(qū)配合使用使用%p做占位符把地址打印在屏幕上地址方式都是以十六進(jìn)制來寫的可以在地址

29、數(shù)據(jù)前使用*操作符獲得地址對應(yīng)的存儲(chǔ)區(qū)三目表達(dá)式可以根據(jù)一個(gè)布爾值從兩個(gè)計(jì)算規(guī)則中選擇一個(gè)作為最終結(jié)果三目表達(dá)式格式:布爾值?表達(dá)式1:表達(dá)式2如果布爾值是真則采用表達(dá)式1計(jì)算最終結(jié)果,如果是假則采用表達(dá)式2計(jì)算最終結(jié)果不要把賦值操作符寫在三目操作符的問號(hào)后面如果一個(gè)表達(dá)式中多個(gè)數(shù)據(jù)的類型不同,則計(jì)算機(jī)會(huì)首先把它們轉(zhuǎn)換成同一類型,然后在進(jìn)行計(jì)算這個(gè)轉(zhuǎn)換過程完全由計(jì)算機(jī)完成,這個(gè)過程叫隱式類型轉(zhuǎn)換隱式類型轉(zhuǎn)換過程中會(huì)把char,short都轉(zhuǎn)換成double當(dāng)不同類型占地大小不同時(shí)會(huì)把有符號(hào)類型轉(zhuǎn)換成武符號(hào)類型,整數(shù)類型轉(zhuǎn)換成浮點(diǎn)類型在C語言程序中可以隨時(shí)給一個(gè)數(shù)據(jù)指定新類型,者叫做強(qiáng)制類型轉(zhuǎn)換

30、強(qiáng)制類型轉(zhuǎn)換的實(shí)現(xiàn)方法是在數(shù)據(jù)前寫一對小括號(hào),小括號(hào)里寫數(shù)據(jù)類型名稱強(qiáng)制類型轉(zhuǎn)換不受規(guī)則約束,所以轉(zhuǎn)換過程中有可能造成數(shù)據(jù)丟失實(shí)現(xiàn)強(qiáng)制類型轉(zhuǎn)換的時(shí)候計(jì)算機(jī)會(huì)分配一個(gè)新的存儲(chǔ)區(qū),這個(gè)存儲(chǔ)區(qū)的類型是我們在小括號(hào)里指定的類型。計(jì)算機(jī)用原來的數(shù)據(jù)對這個(gè)存儲(chǔ)區(qū)進(jìn)行賦值,然后使用這個(gè)存儲(chǔ)區(qū)里的內(nèi)容進(jìn)行計(jì)算如果對一個(gè)存儲(chǔ)區(qū)的內(nèi)容做強(qiáng)制類型轉(zhuǎn)換則轉(zhuǎn)換過程不會(huì)修改原有存儲(chǔ)區(qū)里的數(shù)字流程控制語句可以讓程序中的語句不再從上到下執(zhí)行分支是一種流程控制語句,它可以從幾組語句中選擇一組執(zhí)行而忽略其他組使用if關(guān)鍵字可以編寫分支,在if分支中可以使用一個(gè)邏輯表達(dá)式的結(jié)果控制一組語句是否要執(zhí)行(括號(hào)為真執(zhí)行,位假不執(zhí)行)如果

31、有多個(gè)分支,在任何時(shí)候最多只會(huì)執(zhí)行其中一個(gè)分支,則可以使用else關(guān)鍵字把它們合并如果合并好的多個(gè)分支任何時(shí)候必然會(huì)執(zhí)行其中一組,則可以把最后一組的邏輯表達(dá)式省略合并好的分支中多個(gè)邏輯表達(dá)式之間有先后順序,只有當(dāng)前面的邏輯表達(dá)式為假才會(huì)考慮后面的邏輯表達(dá)式可以利用者一點(diǎn)在合并多個(gè)分支的時(shí)候簡化它們的邏輯表達(dá)式已經(jīng)合并好的分支不一定能當(dāng)作多個(gè)無關(guān)分支理解作業(yè):1編寫程序從用戶提供的三個(gè)數(shù)中找出最大數(shù)并打印2編寫程序從鍵盤得到小時(shí)、分鐘、秒,計(jì)算出下一秒的時(shí)間,并按照如下格式打印Hh:mm:ssDay06Switch-case語句也可以用來實(shí)現(xiàn)分支如果一個(gè)分支中包含有限個(gè)整數(shù),每個(gè)整數(shù)對應(yīng)一組專門

32、的語句,這種一般使用Switch-case語句Switch-case語句中在大括號(hào)內(nèi)部把所有整數(shù)都歹U舉出來,每個(gè)整數(shù)對應(yīng)的處理語句就可以卸載這個(gè)整數(shù)下面。每段必須用break;語句結(jié)束在大括號(hào)里可以編寫一組語句用來處理沒有處理沒有例句出來的數(shù)字,可以用default:來包括所有這些沒有歹U舉過的數(shù)字循環(huán)也是一直流程控制語句,它可以讓一組語句反復(fù)多次執(zhí)行For關(guān)鍵字可以用來編寫循環(huán)在for關(guān)鍵字編寫的循環(huán)中,可以采用一個(gè)變量代表一組相關(guān)數(shù)字,這個(gè)變量叫循環(huán)變量在循環(huán)的大括號(hào)里可以使用break;語句隨時(shí)終止循環(huán)的執(zhí)行Break;語句不會(huì)執(zhí)行后循環(huán)變量也不會(huì)再改變Continue;語句會(huì)直接跳轉(zhuǎn)

33、到循環(huán)大括號(hào)的末尾,中間的語句這次都不會(huì)執(zhí)行(只結(jié)束這次循環(huán),而不會(huì)像break那樣結(jié)束掉整個(gè)循環(huán))Break;和continue;語句通常寫在分支里假設(shè)有如下的for循環(huán)語句For(1;2;3)4它的執(zhí)行順序:【1、2】【4、3、2】【4、3、2】【4、3、2】第一組和其他所有組都不同循環(huán)嵌套可以解決復(fù)雜的循環(huán)問題首先把所有問題分組,為每組找一個(gè)代表數(shù)字使用一個(gè)循環(huán)描述所有組代表數(shù)字的變化過程在這個(gè)循環(huán)內(nèi)部再寫一個(gè)循環(huán)負(fù)責(zé)處理這一組內(nèi)部的所有任務(wù)內(nèi)循環(huán)的開始數(shù)字和結(jié)束數(shù)字可能是不固定的,需要根據(jù)外循環(huán)的循環(huán)變量計(jì)算得至U作業(yè):1編寫程序打印99懲罰表2假設(shè)一個(gè)面包店賣三種面包,重量分別是20

34、克,25克,30克,編寫程序吧所有能湊成200克的情況打印Day07For循環(huán)的多種寫法:1、當(dāng)大括號(hào)里只有一條語句時(shí),大括號(hào)可以省略2、小括號(hào)里可以使用逗號(hào)操作符3、在小括號(hào)里臨時(shí)定義循環(huán)變量(c99規(guī)范中才可以使用)。當(dāng)循環(huán)結(jié)束后臨時(shí)定義的循環(huán)變量不再能使用4、如果大括號(hào)里沒有語句則可以直接在小括號(hào)后用;結(jié)束,這種寫法叫空語句5、只保留小括號(hào)里之間的邏輯表達(dá)式6、可以省略小括號(hào)中間的邏輯表達(dá)式(這個(gè)時(shí)候計(jì)算機(jī)認(rèn)為這個(gè)邏輯表達(dá)式的結(jié)果永遠(yuǎn)是真,這種循環(huán)無法正常結(jié)束,所有叫死循環(huán))While循環(huán)也是一種實(shí)現(xiàn)循環(huán)的方式如何編寫循環(huán)的時(shí)候不知道循環(huán)要執(zhí)行多少次就可以考慮采用while格式編寫Whi

35、le循環(huán)和for循環(huán)可以互相替代,僅僅是兩種不同的編寫思路While循環(huán)格式:While(邏輯表達(dá)式1)反復(fù)執(zhí)行的語句2反復(fù)執(zhí)行大括號(hào)里由直到邏輯表達(dá)式為假時(shí)結(jié)束執(zhí)行順序:【1】【21】【21】【21】如果某一組最后編號(hào)為1的邏輯表達(dá)式結(jié)合為假則循環(huán)結(jié)束,否則啟動(dòng)下一組While循環(huán)也可以編寫空語句和死循環(huán)(把1作為邏輯表達(dá)式就可以實(shí)現(xiàn)死循環(huán))While循環(huán)中也可以使用break;和continue!;語句Dowhile也是編寫循環(huán)的方式,格式如下:Do2while(1);它按照如下順序分組執(zhí)行:【21】【21】【21】【21】【21】相當(dāng)于把while循環(huán)中第一組排除掉它的結(jié)束方式和whil

36、e循環(huán)一樣這種格式可以保證大括號(hào)里的語句至少執(zhí)行一次編寫程序是無法預(yù)知的數(shù)字叫隨機(jī)數(shù)計(jì)算機(jī)生成的隨機(jī)數(shù)叫偽隨機(jī)數(shù)Rand標(biāo)準(zhǔn)寒素可以用來獲得隨機(jī)數(shù)把函數(shù)調(diào)用語句當(dāng)數(shù)字使用就得到隨機(jī)數(shù)為了使用這個(gè)函數(shù)需要包含stdlib.h函數(shù)Srand標(biāo)準(zhǔn)函數(shù)可以用來設(shè)置隨機(jī)數(shù)種子這個(gè)函數(shù)把一個(gè)整數(shù)作為種子使用為了使用這個(gè)標(biāo)準(zhǔn)函數(shù)需要包含stdlib.h文件Srand函數(shù)調(diào)用語句只應(yīng)該在主函數(shù)的開始執(zhí)行一次Time標(biāo)準(zhǔn)函數(shù)可以用來獲得當(dāng)前時(shí)間把函數(shù)調(diào)用語句當(dāng)數(shù)字使用結(jié)束得到的時(shí)間(1970-00:00:00到現(xiàn)在的秒數(shù))為了使用這個(gè)標(biāo)準(zhǔn)函數(shù)需要包含time.h文件Goto也是流程控制語句,它可以指定任何一條語

37、句作為下一條語句不要使用got。語句數(shù)組可以代表內(nèi)存中一組連續(xù)的同類型存儲(chǔ)區(qū)數(shù)組需要先聲明再使用聲明數(shù)組時(shí)需要指定存儲(chǔ)區(qū)類型,數(shù)組名稱以及存儲(chǔ)區(qū)域個(gè)數(shù)數(shù)組創(chuàng)建后內(nèi)部所包含的存儲(chǔ)區(qū)個(gè)數(shù)不可以改變數(shù)組不可以當(dāng)作整體使用,一次只能使用其中某一個(gè)存儲(chǔ)區(qū)數(shù)組中每個(gè)存儲(chǔ)區(qū)有一個(gè)專門的編號(hào),這個(gè)編號(hào)叫下標(biāo)第一個(gè)存儲(chǔ)區(qū)的下表是0,向后依次遞增最大下標(biāo)是存儲(chǔ)區(qū)個(gè)數(shù)減一超過范圍的下標(biāo)不可以使用數(shù)組名稱不代表存儲(chǔ)區(qū),而只代表第一個(gè)存儲(chǔ)區(qū)的地址(數(shù)組名稱不可以被賦值)數(shù)組名稱加N可以計(jì)算出下標(biāo)位N的存儲(chǔ)區(qū)地址數(shù)組中下標(biāo)為N的存儲(chǔ)區(qū)還可以使用如下方式表小:*(數(shù)組名稱+N)可以使用一個(gè)for循環(huán)依次處理數(shù)組中每個(gè)存儲(chǔ)區(qū)

38、,循環(huán)中循環(huán)變量依次代表所有存儲(chǔ)區(qū)的下標(biāo)數(shù)組也應(yīng)該初始化初始化數(shù)組的時(shí)候需要提供多個(gè)初始化數(shù)據(jù),每個(gè)數(shù)據(jù)用來初始化一個(gè)存儲(chǔ)區(qū)所有初始化數(shù)據(jù)寫在一對大括號(hào)里,不同數(shù)據(jù)之間使用逗號(hào)分開初始化數(shù)據(jù)的使用順序是從前向后如果初始化的時(shí)候提供過多的初始化數(shù)據(jù)則多余的會(huì)被丟掉如果初始化數(shù)據(jù)過少則沒有對應(yīng)初始化數(shù)據(jù)的存儲(chǔ)區(qū)自動(dòng)被初始化成0如果初始化數(shù)據(jù)個(gè)數(shù)和存儲(chǔ)區(qū)個(gè)數(shù)一樣則可以省略數(shù)組聲明中存儲(chǔ)區(qū)個(gè)數(shù)可以采用sizeof關(guān)鍵字對數(shù)組名稱進(jìn)行計(jì)算,計(jì)算結(jié)果是數(shù)組中包含的字節(jié)個(gè)數(shù)Intarr5=;Sizeof(arr)=4*5=20聲明變長數(shù)組的時(shí)候可以使用變量表示數(shù)組中存儲(chǔ)區(qū)的個(gè)數(shù),這種數(shù)組只能在C99規(guī)范中使

39、用(變長數(shù)組只表示聲明是不確定長度,可一旦確定就不可以再改變了)intarrnum;/變長數(shù)組變長數(shù)組不可以初始化!Day08二位數(shù)組采用循環(huán)嵌套的處理方式對它每一個(gè)二位數(shù)組的初始化:二維數(shù)組既可以作為一個(gè)一維數(shù)組進(jìn)行初始化,也可以作為多個(gè)一維數(shù)組進(jìn)行初始化二維數(shù)組名稱加N跨越了N組存儲(chǔ)區(qū)的大小,結(jié)果是下標(biāo)為N那組第一個(gè)存儲(chǔ)區(qū)的地址對二維數(shù)組組名稱進(jìn)行sizeof計(jì)算結(jié)果是整個(gè)二維數(shù)組中所有存儲(chǔ)區(qū)的大小可以把二維數(shù)組名稱轉(zhuǎn)換成一維數(shù)組使用轉(zhuǎn)換方式是二維數(shù)組名稱后面加一個(gè)組下標(biāo)這個(gè)一維數(shù)組中包含組下標(biāo)對一維數(shù)組名稱進(jìn)行取地址操作結(jié)果可以看成是一個(gè)二維數(shù)組這個(gè)二位數(shù)組中只有一個(gè)分組,這個(gè)分組里包含

40、原來一維數(shù)組中所有存儲(chǔ)區(qū)Day09函數(shù)C語言中可以采用分組的方式管路所有的語句最簡單的分組方式可以把所有語句分成多個(gè)函數(shù),每個(gè)函數(shù)中包含多個(gè)語句所有C語言程序一定由一個(gè)或多個(gè)函數(shù)構(gòu)成每個(gè)函數(shù)有自己的名字,名字用來區(qū)分不同的函數(shù)C語言規(guī)定每個(gè)程序中必須包含一個(gè)叫做main的函數(shù),這個(gè)函數(shù)叫主函數(shù)多函數(shù)程序執(zhí)行的時(shí)候遵守如下規(guī)則:1、任何時(shí)候只能有一個(gè)函數(shù)工作2、任何時(shí)候也必然有一個(gè)函數(shù)在工作3、如果函數(shù)A在工作過程中停下來讓函數(shù)B開始工作,則函數(shù)B結(jié)束所有工作后必須要讓函數(shù)A繼續(xù)后面的工作如果函數(shù)A在工作過程中停下來讓函數(shù)B開始工作,則它們之間存在調(diào)用關(guān)系函數(shù)調(diào)用關(guān)系一定發(fā)生在兩個(gè)函數(shù)之間調(diào)用關(guān)

41、系中先開始工作的函數(shù)叫調(diào)用函數(shù),后開始工作的函數(shù)叫被調(diào)用函數(shù)函數(shù)A和函數(shù)B之間的調(diào)用只在函數(shù)B工作期間有效存儲(chǔ)區(qū)是有主人的存儲(chǔ)區(qū)的主人可以任意使用它所擁有的存儲(chǔ)區(qū)同一個(gè)主人的存儲(chǔ)區(qū)不可以重名,不同主人的存儲(chǔ)區(qū)可以重名聲明在函數(shù)內(nèi)部的存儲(chǔ)區(qū)它的主人是這個(gè)函數(shù)的某一次運(yùn)行過程絕大多數(shù)函數(shù)調(diào)用過程中存在雙方之間數(shù)據(jù)的傳遞數(shù)據(jù)傳遞有兩個(gè)完全相反的方向,它們分別使用不同的方法實(shí)現(xiàn)任何一個(gè)方向的數(shù)據(jù)傳遞都需要一組專門的存儲(chǔ)區(qū)來記錄要傳遞的數(shù)字所有這些存儲(chǔ)區(qū)的主人都是被調(diào)用函數(shù)從被調(diào)用函數(shù)向調(diào)用函數(shù)只能傳遞一個(gè)數(shù)據(jù),這個(gè)數(shù)據(jù)叫做被調(diào)用函數(shù)的返回值為此只需要準(zhǔn)備一個(gè)存儲(chǔ)區(qū)只能由被調(diào)用函數(shù)向這個(gè)存儲(chǔ)區(qū)里放數(shù)字被

42、調(diào)用函數(shù)只能在最后一條語句使用return關(guān)鍵組向這個(gè)存儲(chǔ)區(qū)放數(shù)字只有調(diào)用函數(shù)才能從這個(gè)存儲(chǔ)區(qū)里獲得數(shù)字把函數(shù)調(diào)用語句當(dāng)作數(shù)字使用就可以獲得這個(gè)數(shù)字這個(gè)存儲(chǔ)區(qū)的類型名稱要寫在函數(shù)名稱前面調(diào)用函數(shù)在得到返回值以后必須立刻使用或者轉(zhuǎn)存到其他存儲(chǔ)區(qū)一個(gè)函數(shù)可以選擇不使用返回值存儲(chǔ)區(qū),這時(shí)需要在函數(shù)名稱前寫void如果函數(shù)名稱前沒有寫數(shù)據(jù)類型名稱則計(jì)算機(jī)認(rèn)為函數(shù)使用一個(gè)整數(shù)類型的返回值存儲(chǔ)區(qū)如果沒有使用return關(guān)鍵字返回值存儲(chǔ)區(qū)賦值,則調(diào)用函數(shù)從這個(gè)存儲(chǔ)區(qū)里獲得的數(shù)字是隨機(jī)的在對返回值存儲(chǔ)區(qū)進(jìn)行賦值的時(shí)候最好保證數(shù)據(jù)和存儲(chǔ)區(qū)的類型一致Exit標(biāo)準(zhǔn)函數(shù)可以隨時(shí)結(jié)束一個(gè)程序的執(zhí)行;為了使用這個(gè)函數(shù)需要

43、包含stdlib.h文件為了把數(shù)據(jù)從調(diào)用函數(shù)傳遞給被調(diào)用函數(shù)需要被調(diào)用函數(shù)提供一組存儲(chǔ)區(qū)(這些存儲(chǔ)區(qū)的個(gè)數(shù)和類型都是任意的)為了使用這些存儲(chǔ)區(qū)需要被調(diào)用函數(shù)聲明一組變量這些變量必須聲明在函數(shù)名稱后面的小括號(hào)里面這些變量叫做形式參數(shù)函數(shù)名稱后面小括號(hào)里的內(nèi)容叫形式參數(shù)列表形式參數(shù)列表中每個(gè)形式參數(shù)都需要專門寫類型名稱,用逗號(hào)分隔不同的形式參數(shù)聲明函數(shù)調(diào)用語句中需要在小括號(hào)路位每個(gè)形式參數(shù)提供一個(gè)對應(yīng)的數(shù)字。被調(diào)用函數(shù)在工作的時(shí)候就可以通過形式參數(shù)獲得這些數(shù)字。這些數(shù)字叫實(shí)際參數(shù)如果存在多個(gè)實(shí)際參數(shù),一個(gè)實(shí)驗(yàn)逗號(hào)把它們分隔開所有可以當(dāng)作數(shù)字使用的內(nèi)容都可以作為實(shí)際參數(shù)使用形式參數(shù)和實(shí)際參數(shù)的存儲(chǔ)區(qū)

44、完全不同,對形式參數(shù)的修改不會(huì)影響實(shí)際參數(shù)如果函數(shù)名稱后面的小括號(hào)里什么都沒有則表示函數(shù)可以接受任意個(gè)數(shù)任意類型的實(shí)際參數(shù)在小括號(hào)里寫void表示函數(shù)沒有形式參數(shù)利用數(shù)組作為形式參數(shù)可以傳遞大量數(shù)據(jù),聲明在小括號(hào)里的數(shù)組就是形式參數(shù)地址數(shù)據(jù)可以作為實(shí)際參數(shù)和數(shù)組形式參數(shù)配合使用(大多數(shù)情況下使用數(shù)組名稱)數(shù)組作為形式參數(shù)使用時(shí)可以省略中括號(hào)里的數(shù)字,但是必須要另外提供一個(gè)形式參數(shù)表示數(shù)組中存儲(chǔ)區(qū)個(gè)數(shù)數(shù)組形式參數(shù)并不是數(shù)組,而是一個(gè)可以當(dāng)作數(shù)組使用的存儲(chǔ)區(qū)預(yù)習(xí):1、函數(shù)(數(shù)組形參,函數(shù)隱式聲明和顯示聲明)2、遞歸函數(shù)3、變量的生命周期和作用域4、程序的分段5、聲明變量時(shí)可以使用的關(guān)鍵字作業(yè):1、

45、編寫函數(shù)解決雞兔同籠問題,調(diào)用函數(shù)提供頭和腳的個(gè)數(shù),函數(shù)負(fù)責(zé)計(jì)算出兔子的個(gè)數(shù)2、編寫程序在屏幕上打印如下內(nèi)容1x9=92x8=173x7=214x6=245x5=25每行使用一個(gè)函數(shù)調(diào)用語句打印Day10Rabbit兔子chicken雞數(shù)組作為形式參數(shù)的時(shí)候,真正的形式參數(shù)并不是數(shù)組,而是一個(gè)可以作為數(shù)組使用的單個(gè)存儲(chǔ)區(qū)函數(shù)調(diào)用的時(shí)候,這個(gè)真正的形式參數(shù)只記錄了一個(gè)地址數(shù)據(jù)數(shù)組形式參數(shù)的名稱代表了這個(gè)存儲(chǔ)區(qū)數(shù)組作為形式參數(shù)的時(shí)候,數(shù)組名稱所代表的存儲(chǔ)區(qū)主人是被調(diào)用函數(shù),數(shù)組里所包含的所有存儲(chǔ)區(qū)主人一定不是被調(diào)用函數(shù)使用數(shù)組形式參數(shù)可以讓被調(diào)用函數(shù)使用其他主人的存儲(chǔ)區(qū)使用數(shù)組作為形式參數(shù)可以讓調(diào)

46、用函數(shù)和被調(diào)用函數(shù)共用同樣的存儲(chǔ)區(qū)使用數(shù)組形式參數(shù)可以實(shí)現(xiàn)雙向數(shù)據(jù)傳遞,這個(gè)參數(shù)叫輸入輸出參數(shù)普通變量作為形式參數(shù)只能吧數(shù)組從調(diào)用函數(shù)傳遞給被調(diào)用函數(shù),這個(gè)參數(shù)叫輸入?yún)?shù)被調(diào)用函數(shù)可以通過數(shù)組形參改變調(diào)用函數(shù)里的數(shù)組的數(shù)據(jù)函數(shù)可以分成函數(shù)聲明和函數(shù)體(大括號(hào)里的叫函數(shù)體,大括號(hào)前的叫函數(shù)聲明)函數(shù)聲明可以獨(dú)立作為一條語句,這個(gè)時(shí)候可以省略所有形式參數(shù)的名稱當(dāng)編譯器首先遇到函數(shù)調(diào)用語句時(shí)會(huì)猜測函數(shù)的格式,這個(gè)猜測的結(jié)果叫函數(shù)的隱式聲明所有函數(shù)的隱式聲明格式一樣,有一個(gè)整數(shù)類型的返回值存儲(chǔ)區(qū),可以接受任意個(gè)數(shù)任意類型的參數(shù)應(yīng)該把文件所有函數(shù)(主函數(shù))的聲明在文件開頭列出,這叫做函數(shù)的顯示聲明。顯示

47、聲明可以避免隱式聲明所帶來的問題會(huì)調(diào)用自己的函數(shù)叫遞歸函數(shù)適合采用遞歸方式解決的問題需要符合如下特征:1、問題比較復(fù)雜,難以找到直接解決的方法2、問題可以分解成幾個(gè)小問題,至少有一個(gè)小問題和原來問題的本質(zhì)一樣,只是稍微簡單一點(diǎn)編寫遞歸函數(shù)的步驟:1、用語句把問題的分解方式描述出來(假設(shè)遞歸函數(shù)已經(jīng)編寫好了)2、在函數(shù)的開頭編寫一個(gè)分支用來處理不可分解的情況(這個(gè)分支必須能直接結(jié)束函數(shù))采用遞歸函數(shù)解決問題的思路叫遞歸采用循環(huán)解決同樣問題的思路叫遞推程序中所有存儲(chǔ)區(qū)都有主人主人可以任意使用自己擁有的存儲(chǔ)區(qū)如果希望使用其他主人的存儲(chǔ)區(qū)需要使用特殊的手段,甚至無法實(shí)現(xiàn)如果一個(gè)存儲(chǔ)區(qū)對應(yīng)的變量聲明在一

48、對大括號(hào)里,則它的主人是這個(gè)大括號(hào)的一次運(yùn)行過程如果一對大括號(hào)在程序運(yùn)行過程中多次運(yùn)行,則會(huì)出現(xiàn)多個(gè)主人,每個(gè)主人擁有自己私有的存儲(chǔ)區(qū)聲明在所有大括號(hào)之外的變量,它的主人是整個(gè)程序的運(yùn)行過程在主人存在的時(shí)間范圍內(nèi),存儲(chǔ)區(qū)是存在的,是可以使用的,這個(gè)時(shí)間范圍叫做存儲(chǔ)區(qū)或變量的生命周期代表存儲(chǔ)區(qū)的變量只有在存儲(chǔ)區(qū)主人內(nèi)部所包含的語句中才可以使用,這些語句叫做存儲(chǔ)區(qū)或變量的作用域根據(jù)變量的生命周期和作用域,把變量分成三種:1、聲明在所有函數(shù)之外的變量叫全局變量,它是主人是整個(gè)程序的運(yùn)行過程,它的生命周期是整個(gè)程序運(yùn)行范圍,它的作用域包含程序中所有語句,沒有初始化的全局變量自動(dòng)被初始化成0。2、聲明在

49、函數(shù)內(nèi)部的變量叫局部變量,它的主人是函數(shù)的一次運(yùn)行過程,它的生命周期是函數(shù)一次執(zhí)行的時(shí)間范圍,它的作用域是函數(shù)內(nèi)部的所有語句3、函數(shù)內(nèi)部的大括號(hào)叫做語句塊,聲明在語句塊里的變量叫塊變量,它的主人是語句塊的一次執(zhí)行過程,它的生命周期是語句塊的執(zhí)行時(shí)間范圍,它的作用域是語句塊里的所有語句預(yù)習(xí):1、重名變量的使用2、程序分段3、聲明變量時(shí)可以使用的關(guān)鍵字4、指針變量作業(yè):編寫函數(shù)把一個(gè)數(shù)組中所有存儲(chǔ)區(qū)的內(nèi)容前后顛倒,然后在主函數(shù)里打印修改后的內(nèi)容(米用循環(huán)和遞歸兩種方式實(shí)現(xiàn))Day11全局變量,局部變量和塊變量時(shí)可以重名的如果一條語句使用了重名變量,則會(huì)優(yōu)先選擇作用域小的那個(gè)程序在內(nèi)存中是分段保存的

50、代碼段記錄程序語句轉(zhuǎn)換得到的數(shù)字,在運(yùn)行的時(shí)候這個(gè)段落的內(nèi)容不可以被修改全局段-包含生命周期是整個(gè)程序運(yùn)行期間的存儲(chǔ)區(qū),包含的存儲(chǔ)區(qū)個(gè)數(shù)在程序運(yùn)行期間固定不變棧局部變量,塊變量,形式參數(shù)和返回值的存儲(chǔ)區(qū)都被包含在這個(gè)段落里;當(dāng)一個(gè)函數(shù)開始運(yùn)行的時(shí)候,計(jì)算機(jī)會(huì)從這個(gè)段落中為這個(gè)函數(shù)分配必要的存儲(chǔ)區(qū),當(dāng)一個(gè)函數(shù)結(jié)束的時(shí)候,計(jì)算機(jī)會(huì)把這個(gè)段落中分配給這個(gè)函數(shù)的存儲(chǔ)區(qū)回收(回收時(shí)計(jì)算機(jī)不會(huì)修改存儲(chǔ)區(qū)的內(nèi)容)分配順序和回收順序剛好相反堆可以認(rèn)為大小是無限的,可以存放大量數(shù)據(jù);需要使用專門的函數(shù)調(diào)用語句才能從這個(gè)段落分配存儲(chǔ)區(qū);當(dāng)不再使用這個(gè)段落中存儲(chǔ)區(qū)的時(shí)候需要使用專門的函數(shù)調(diào)用語句把它們還給計(jì)算機(jī)如果

51、沒有把這個(gè)段落中存儲(chǔ)區(qū)還給計(jì)算機(jī)則會(huì)導(dǎo)致內(nèi)存泄露聲明變量時(shí)可以使用的關(guān)鍵字1、auto關(guān)鍵字用來聲明自動(dòng)變量,所有局部變量都是自動(dòng)變量,不需要特別聲明2、static關(guān)鍵字用來聲明靜態(tài)變量,所有靜態(tài)變量的生命周期都是整個(gè)程序運(yùn)行期問;沒有初始化的靜態(tài)變量自動(dòng)被初始化成0;靜態(tài)全局變量的作用域只包含聲明它的那個(gè)文件中所有語句;不論靜態(tài)變量的初始化語句寫在哪里,它只會(huì)在程序開始的時(shí)候執(zhí)行一次初始化(靜態(tài)變量不能在別的文件里執(zhí)行)3、const關(guān)鍵字用來聲明不可賦值的變量。這種變量只能在聲明的時(shí)候進(jìn)行賦值;但可以用scanf改變4、volatile關(guān)鍵字用來聲明多變的變量指針才旨針變量專門用來記錄地

52、址數(shù)據(jù)指針變量的主要用途是幫我們找到某一個(gè)存儲(chǔ)區(qū)可以把指針變量當(dāng)作種子文件來理解指針變量和種子文件的區(qū)別:1、任何時(shí)候指針變量只能幫我們找到另外一個(gè)存儲(chǔ)區(qū)2、指針變量在不同的時(shí)候可以幫我們找到不同的存儲(chǔ)區(qū)只有把指針和另外存儲(chǔ)區(qū)捆綁后才可以通過指針找到這個(gè)存儲(chǔ)區(qū)只要把存儲(chǔ)區(qū)的地址記錄在指針變量里就可以實(shí)現(xiàn)它們的捆綁指針也分類型,不同類型的指針適合跟不同類型的存儲(chǔ)區(qū)進(jìn)行捆綁指針變量可以用來代表四個(gè)不同的內(nèi)容:1、不加*的指針可以代表指針本身的存儲(chǔ)區(qū)或這個(gè)存儲(chǔ)區(qū)里的地址數(shù)據(jù)2、加了*以后可以代表捆綁存儲(chǔ)區(qū)或捆綁存儲(chǔ)區(qū)里的數(shù)據(jù)Null代表空地址,它的數(shù)值是數(shù)字0;記錄空地址的指針叫空指針除了空指針以外

53、沒有捆綁的指針叫野指針;程序中禁止出現(xiàn)野指針沒有初始化的指針都是野指針指針初始化語句中*沒有參與賦值過程,它僅僅代表指針類型指針在不同的時(shí)候可以和不同的存儲(chǔ)區(qū)捆綁,使用指針的時(shí)候應(yīng)該關(guān)注捆綁存儲(chǔ)區(qū)域的使用方式,而不是它的來源在我們的計(jì)算機(jī)里所有指針變量的大小都是四個(gè)字節(jié)不同類型的指針之間互相賦值不會(huì)導(dǎo)致地址數(shù)據(jù)丟失(大小一樣)不同類型指針之間進(jìn)行強(qiáng)制類型轉(zhuǎn)換也不會(huì)導(dǎo)致地址數(shù)據(jù)丟失指針的類型決定了通過指針找到的捆綁存儲(chǔ)區(qū)的類型不同類型指針可以記錄同樣的地址,但是通過它們找到的捆綁存儲(chǔ)區(qū)的類型不同,所以數(shù)值也可以不同無類型指針用void*表示這種指針沒有聲明捆綁存儲(chǔ)類型,它只表示里面存儲(chǔ)了一個(gè)地址

54、數(shù)據(jù)這種指針可以記錄任何地址數(shù)據(jù)不可以在這種指針前加*表示捆綁存儲(chǔ)區(qū)(無類型)只有先強(qiáng)制類型轉(zhuǎn)換成有類型指針后才可以加*(如:*(int*)p_vd=10)這種指針通常用來記錄來源不明并且有多種可能性的地址數(shù)據(jù)指針可以加減一個(gè)整數(shù),計(jì)算結(jié)果還是一個(gè)地址數(shù)據(jù)指針加減整數(shù)N實(shí)際地址數(shù)據(jù)的變化時(shí)N個(gè)捆綁存儲(chǔ)區(qū)的大小兩個(gè)同類型的指針之間可以進(jìn)行減法操作計(jì)算結(jié)果是一個(gè)整數(shù)這個(gè)整數(shù)代表兩個(gè)地址之間可以容納的捆綁存儲(chǔ)區(qū)個(gè)數(shù)把數(shù)組名稱賦值給指針后可以用這個(gè)指針代替數(shù)組名稱這個(gè)時(shí)候可以認(rèn)為指針間接和數(shù)組中每個(gè)存儲(chǔ)區(qū)實(shí)現(xiàn)了捆綁指針可以和數(shù)組中每個(gè)存儲(chǔ)區(qū)捆綁,捆綁好以后就可以代替下標(biāo)表示這個(gè)捆綁存儲(chǔ)區(qū)預(yù)習(xí):1、指針

55、2、字符申作業(yè):1、使用指針把數(shù)組中所有存儲(chǔ)區(qū)的內(nèi)容前后顛倒Day12可以使用指針作為循環(huán)變量依次處理數(shù)組中每個(gè)存儲(chǔ)區(qū)數(shù)組作為函數(shù)形式參數(shù)的時(shí)候真正的形式參數(shù)就是一個(gè)指針,指針和數(shù)組名稱的差異:1、指針可以被賦值,數(shù)組名稱不可以被賦值2、對指針進(jìn)行sizeof計(jì)算結(jié)果是4,對數(shù)組名稱進(jìn)行sizeof計(jì)算結(jié)果是數(shù)組中包含的字節(jié)個(gè)數(shù)3、對數(shù)組名稱取地址的結(jié)果是二維數(shù)組,對指針取地址結(jié)果是指針本身存儲(chǔ)區(qū)的地址聲明指針時(shí)也可以使用const關(guān)鍵字,使用方法有如下兩種:1、const關(guān)鍵字寫在指針類型前面,例如:constint*p_num=NULL;不可以通過這個(gè)指針對它的輻綁存儲(chǔ)區(qū)進(jìn)行賦值2、con

56、st關(guān)鍵字寫在指針變量名稱前,例如:int*constp_num=NULL;這種指針本身不可以被賦值,只能在初始化的時(shí)候捆綁如果一個(gè)函數(shù)在執(zhí)行過程中不會(huì)修改指針形式參數(shù)所捆綁的存儲(chǔ)區(qū)內(nèi)容,則應(yīng)該在指針形式參數(shù)前加const關(guān)鍵字使用指針作為形式參數(shù)可以讓被調(diào)用函數(shù)使用其他主人的存儲(chǔ)區(qū)(存儲(chǔ)區(qū)的聲明周期包含被調(diào)用函數(shù)的執(zhí)行時(shí)間)函數(shù)調(diào)用語句中可以使用任何地址數(shù)據(jù)和指針類型形式參數(shù)配合使用如果函數(shù)的指針形式參數(shù)不能確定類型,就可以采用void*類型的指針當(dāng)使用void*類型的指針形式參數(shù)時(shí)需要通過其他途徑知道指針的類型指針也可以作為函數(shù)的返回值使用使用指針作為函數(shù)的返回值可以間接從被調(diào)用函數(shù)通過返

57、回值向調(diào)用函數(shù)傳遞多個(gè)數(shù)據(jù)當(dāng)指針作為返回值的時(shí)候,絕不可以把局部變量和塊變量的地址賦值給指針類型的返回值字符串C語言中使用一組連續(xù)的字符類型存儲(chǔ)區(qū)記錄文字信息所有文字信息最后必須放一個(gè)ASCII碼的字符(用0表示)表示結(jié)束位置符合以上要求的一組字符類型存儲(chǔ)區(qū)叫一個(gè)字符申0字符前的內(nèi)容是要記錄的文字信息所有字符申都可以使用一個(gè)字符類型指針表示(這個(gè)指針要求和第一個(gè)字符類型存儲(chǔ)區(qū)捆綁)字符申乂分為兩種:一種字符申叫字符申字面值,例如:“abc”“$&八”等;編譯器在編譯的時(shí)候會(huì)自動(dòng)在字符申字面值后面加0字符,編譯器會(huì)自動(dòng)用第一個(gè)字符類型存儲(chǔ)區(qū)的地址替換掉值字符申字面值的內(nèi)容在程序執(zhí)行過程中不可以修改編譯器會(huì)把字符申字面值中所有存儲(chǔ)區(qū)放在一個(gè)專門的段落里,這個(gè)段落里的所有內(nèi)容在程序執(zhí)行的時(shí)候都不可以修改內(nèi)容一樣的字符申字面值在計(jì)算機(jī)里只保存一份兩個(gè)字符申字面值連著寫在一起,則編譯器會(huì)自動(dòng)把它們合并成一個(gè)第二種:字符數(shù)組也可以用來表示字符申只有包含0字符的字符數(shù)組才能當(dāng)字符申使用可以采用字符申字面值對字符數(shù)組進(jìn)行初始化,這個(gè)時(shí)候會(huì)把0字符也初始化到字符數(shù)組中。初始化完成后字符數(shù)組可以當(dāng)字符申使用。當(dāng)使用字符申字面值對字符數(shù)組完成初始化以后,它們的存儲(chǔ)區(qū)之間完全無關(guān),僅僅是內(nèi)容

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論