郝斌c語言視頻教程筆記.doc_第1頁
郝斌c語言視頻教程筆記.doc_第2頁
郝斌c語言視頻教程筆記.doc_第3頁
郝斌c語言視頻教程筆記.doc_第4頁
郝斌c語言視頻教程筆記.doc_第5頁
已閱讀5頁,還剩96頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

郝斌 c語言視頻教程為什么學習 c語言: Fortran語言主要用于科學計算,在第三代語言中,以 1980年為分水嶺,分為結構化和面向對象語言。 Basic語言是 vb的前生,pascal語言一般是用于教學。 C語言是最重要的,其他的語言一般很少用了。結構化的代表語言是 c語言。結構化語言的數據和操作是分離的,導致在寫大項目的時候,會出現各種各樣莫名其妙的問題。在面向對象的語言中 c+是最復雜的語言。由于 c+語言太復雜,sun公司對 c+進行了改裝,產生了 java語言。而 c#是由微軟開發的,和 java相似,幾乎一模一樣。在高級語言的執行速度上,c是最快的, c+其次,而 java和 c#是最后的。Java和 c#流行,主要的一個原因是可以跨平臺。 C語言的發展和過程:C語言的特點:優點:代碼量小,速度快,功能強大。缺點:危險性高,開發周期長,可移植性弱。危險性高:寫同一個程序,在 java中會報錯,而在 c中不會報錯,為什么呢,因為 c認為程序你想怎么寫就怎么寫,c語言認為你寫的程序不是很離譜,他都認為你寫的這個程序有特殊的含義??梢灾苯油ㄟ^,而 java則不可以。開發周期長:c語言是面向過程的語言,面向過程的語言的特點就是在開發大項目的時候,很容易崩潰,現在市場上的語言分三塊 C/c+:單純的學習 c是什么都做不了的。 Java C# 可移植性不強:這是針對 java來說的,因為 java的可移植性太強了,所以就感覺說 c的可移植性不強。金山公司最主要是靠 wps辦公軟件來發展的。 Wps是 c語言開發的,三大系統:windows,unix,linux Windows內核是 c語言寫的,而外殼是 c+寫的。Java永遠不可能寫操作系統。因為 java運行速度太慢了。而 linux和 unix都是純 c寫的。操作系統控制了硬件,如果說操作系統的運行速度慢,那么當我們在運行軟件的時候,運行速度會更慢。為什么使用 c語言寫操作系統呢,首先是因為 c的運行速度快,然后是因為 c可以直接控制硬件,而其他語言不可以。沒有指針的語言是不能直接訪問硬件的。 C語言的應用領域:驅動一般是用 c和匯編來寫的。數據庫一般是用 c和 c+來寫的 C語言的重要性:病毒最基本的是要感染系統,數據結構,c,c+這三門語言是必須要學習的。牛人牛語:怎樣學習 c語言參考資料“王爽寫的 c+也很不錯學習的目標: C語言的關鍵字:C語言程序的格式:第二講:(14)c語言編譯知識 1. Cpu,內存條,硬盤,顯卡,主板,顯示器之間的關系。 Cpu不能直接處理硬盤上的數據,必須要先調入內存中。 2. Hello,word程序是如何運行起來的。 3.什么是數據類型數據類型就是數據的分類,可以分為 a:基本數據類型:整形整形 int -4 短整形 short int -2 長整形 long int -8 浮點型單精度浮點數 float:存儲范圍小 -4 雙精度浮點數 double:存儲范圍大 -8 字符 char:c語言中是沒有字符串的。-1 B:符合類型:就是把基本類型拼湊在一起。結構體枚舉共用體什么是變量變量的本質是內存中一段存儲空間, 4. Cpu,內存條,vc+6.0,操作系統之間的關系。 5.變量為什么必須初始(即賦值)所謂的初始化就是賦值的意思,軟件運行與內存關系(垃圾數據) 1.軟件在運行前需要向操作系統申請存儲空間,在內存空間足夠空閑時,操作系統將分配一段內存空間并將該外存中軟件拷貝一份存入該內存空間中,并啟動該軟件運行。 2.在軟件運行期間,該軟件所占內存空間不再分配給其他軟件。 3.當該軟件運行完畢后,操作系統將回收該內存空間(注意:操作系統并不清空該內存空間遺留下來的數據),以便再次分配給其他軟件使用。綜上所訴,一個軟件所分配到的空間中極可能存在著以前其他軟件使用過后的殘留數據,這些數據被稱之為垃圾數據,所以通常情況下我們為一個變量,為一個數組,分配好存儲空間之前都要對該內存空間初始化。 6.如何定義變量數據類型,變量名稱=賦予的值等價于數據類型變量名變量名 = 要賦予的值舉例子: Int I = 3;等價于 int i;I = 3; Int i,j;等價于 int i;int j; Int i,j=3 等價于 int i; int j;j=3 Int I =3, j = 5;等價于 int i; int j;I = 3;j = 5; 7.什么是進制我們規定八進制前面加 0(零),十六進制前面加 0x。常用計數制對照表:Printf的基本用法: 8.常量在 c中是如何表示的當個字符使用單引號括起來,多個字符串使用雙引號括起來。在 c中,默認是 double類型的。在后面加 F表示當做 float來處理。 9.常量是以什么樣的二進制代碼存儲在我們的計算機中。編碼:整數是以補碼的形式轉換為二進制代碼存儲在計算機中的,浮點數是以 ieee754標準轉換為二進制代碼存儲在計算機中的。字符的本質實際也是與整數的存儲方式相同。第三次課:代碼規范化可以參考林銳高質量 c/c+編程 代碼的規范化非常的重要,是學習一門編程語言的基礎。代碼規范化的好處 1:整齊,別人和自己都容易看懂。 2:代碼規范了,代碼不容易出錯。 3:一般的程序可以分為三塊: a:定義變量 b:對變量進行操作 c:輸出值什么是字節存儲數據的單位,并且是硬件所能訪問的最小單位。內存中存儲的最小單位是字節,但是硬件控制的時候不能精確到位,只能精確到字節,是通過地址總線來控制的,而精確到位是通過軟件來控制的,叫做位運算符來精確到位的。不同類型數據之間相互賦值的問題不同數據類型之間最好不要相互轉換。如果需要明白這個知識點,那么需要明白補碼。什么是 ASCII碼以 char定義變量的時候,只能使用單引號括起一個字符才是正確的。在上圖中注釋的最后一樣是重復定義了 ch的值,是錯誤的,而下面的 ch = c是指把 c賦值給 ch,是正確的。上圖中輸出的值是 98 Ascll碼規定了 ch是以那個值去保存, ascii碼不是一個值,而是一種規定,規定了不同的字符是以那個整數值去表示。字符本質上與整數的存儲方式相同【字符的存儲】基本的輸入和輸出函數的用法:第三次課 Printf()將變量的內容輸出到顯示器上。四種用法輸什么是輸出控制符,什么是非輸出控制符輸出控制符包含如下:Printf為什么需要輸出控制符: 01組成的代碼可以表示數據也可以表示指令。必須要有輸出控制符告訴他怎么去解讀。01組成的代碼表示的是數據的話,那么同樣的 01代碼組合以不同的格式輸出就會有不同的輸出結果,所以必須要有輸出控制符。在上圖中,int x =47,如果前面加 0(零)表示的是八進制,如果前面加 0x(零 x)則表示的是十六進制,而在輸出的時候,則是 o(字母 o)表示八進制, ox(字母 o, x)表示十六進制。非輸出控制符:非輸出控制符在輸出的時候會原樣輸出。Scanf()通過鍵盤將數據輸入到變量中有兩種用法:示例:非輸入控制符:在輸入的時候也會原樣輸入。但是一般我們在使用 scanf的時候,我們一般都不使用非輸入控制符。給多個變量賦值:需要記住,非控制符需要原樣輸入。如何使用 scanf編寫出高質量代碼運算符:算術運算符:加(+),減()乘(*)除(/)取余(%)關系運算符: , =, , 關系邏輯賦值。取余的結果的正負只和被除數有關。第四節流程控制:什么是流程控制程序代碼執行的順序。 流程控制的分類順序執行選擇執行定義:某些代碼可能執行,可能不執行,有選擇的執行某些代碼。分類:if If最簡單的用法:如果想控制多個語句的執行或者不執行,那么需要使用 括起來。3.ifelse的用法: ifelseifelse的用法:C錯誤的 ifelseifelse語句:在上圖中,當執行到哈哈那句時,下面的 else將會被算作另外一個語句來執行,而在我們的 c語言中,沒有以 else開頭的語句。所以會出錯。 If實例:If常見的問題:變量的替換:求三個數字的大?。篊語言常見誤區:素數:只能被 1和自己整除的數,如 1,5,9等?;匚臄担赫鴮懞偷怪鴮懸粯拥臄怠H?1221,121,等編程實現求一個十進制數字的二進制形式 : 求一個數字的每位是奇數的數字取出來組合形成的新數字。求一個數字到過來的數字。 1:如果不懂,那么就看答案。看懂答案在敲。沒錯誤了,在嘗試改。如何看懂一個程序: 1. 流程:2. 每個語句的功能: 3.試數:對一些小算法的程序: 1. 嘗試自己編程結局。 2. 解決不了,看答案。 3. 關鍵是把答案看懂。 4. 看懂之后嘗試自己修改程序,且知道修改之后程序的不同輸出結果的含義。 5. 照著答案去敲 6. 調試錯誤 7. 不看答案,自己獨立把程序編出 8. 如果程序實在是徹底無法了解,就把他背會。空語句的問題:在上圖中,最終的結果會是 AAAA,BBBB,程序也不會報錯,為什么呢,因為在程序執行的時候,會在;哪里認為是一個空語句。也就是說,如果 if成立,那么執行空語句。 If常見錯誤解析(重點)上面這個程序是錯誤的,為什么呢,在該程序中,總的有 4個語句,而在以 else開頭的那個語句中是有錯誤的,因為在 c語言中是沒有以 else開頭的這種語法。在上面這個程序中,最終的值是 AAAA,雖說后面的 31也滿足條件,但是當 32滿足條件后,該 if語句就會終止,后面的語句是不會在執行的。既然 7行要寫表達式,就要寫 if。循環的定義,分類。定義:某些代碼會被重復執行。分類:for 在上圖中,先執行 1,在執行 2,2如果成立,標志著循環成立,那么在執行 4,最后在執行 3,3執行完后代表一次循環完成,然后在執行 2.以此類推。1永遠只執行一次。 +i=i+1求 1-10的所有奇數的和:求 1-12之間的所有能被 3整除的數字之和:For所控制的語句:在上圖中,for默認只能控制一個語句,但是如果要控制多個語句時候,那么需要使用把語句括起來。求 1+1/2+1/3.1/100的和在上圖中,重點是強制數據類型轉換也就是 (float)(i)那句:如果把 print那句換為下面這句會怎么樣呢:也是錯的,為什么呢,因為 i是整形,1也是整形,所以不管你怎么轉換也是整形啊,如果想要這樣寫的話,那么我們需要把 1改成 1.0也可以的。也就是:試數詳細步驟舉例:浮點數存?。呵?1-100之間所有奇數的和:求 1-100之間的奇數的個數:求 1-100之間奇數的平均值:求 1-100之間的奇數之和,在求 1-100之間的偶數之和:多個 fou循環的嵌套使用:整體是兩個語句。上圖中,先執行 1,在執行 2,如果 2成立,執行 4,在執行 5,如果 5成立執行 A,在執行 6,在執行 5,如果 5不成立,意味著里面的循環結束,然后執行 3,在執行 2,如果 2成立又執行 4,在執行 5,如果 5成立在執行 6,在執行 5,如果 5不成立,在執行 3,在執行 2,如果 2不成立,意味著本次循環結束,在執行 B,在上圖中,需要注意的是,如果 2成立的話,那么每次 4都需要執行。進制之間的轉換:如 234為 5進制,那么轉換成 10進制是多少: 2x5x5+3x5+4的值就是轉換成的 10進制。 234e是 16進制,轉換成 2進制是多少: 2x16x16x16+3x16x16+4x16+12的值就是轉換成 10進制的值。注意上面的規律。那么把十進制轉換成 r進制呢,其實很簡單,就是把 10 進制數除以 r,知道商是 0的時候。然后取余數,余數倒序排列:瑣碎的運算符:自增:自減:和自增一樣。三目運算符:最終的輸出結果是 1. 逗號表達式:最終結果是 6. 上圖中,逗號是個順序點,即所有的副作用必須在下個語句前生效,其最后結果為 1,j+2只是產生臨時值,并沒有把 j+2的值賦個 j。如果寫成 j+=2,那最后的值則變為 5. For的嵌套使用舉例:上例中輸出的結果是 9個哈哈,1個嘻嘻。在上圖中,整個程序分成 3個語句,輸出的結果是 3個嘿嘿,3個哈哈,1個嘻嘻。其結果是:While 1:執行的順序: 2:與 for的相互比較:用 for來求 1-100之和:用 while實現 1-100之和。只需要把 for語句替換為: For和 while是可以相互轉換的,可以用下面的表達式來表示: While和 for在邏輯上完全等價,但是 for在邏輯上更強。更容易理解,更不容易出錯。推薦多使用 for。3:while舉例:試數:通過上面的試數,應該能很快的理解回文數的算法。4:什么時候使用 while,什么時候使用 for:沒法說,用多了就自然而然知道了 Dowhile 一元二次方程:Switch的用法:電梯程序:Case是程序的入口,當進入程序后,程序會從上往下執行,如果有 break,那么會中斷程序,如果沒有,那么會一直執行。Break的用法:在多層循環中,Break只能終止他最近的循環。在多層 switch中, break也是只能終止距離他最近的 switch。 Break只能用于循環,不能用于 if。如果用于 if,必須要當循環中嵌套 if的時候。 Continue的用法:上圖中,如果執行 continue,那么 C,D將不會被執行,會執行 3. 在上圖中,如果執行了 continue,那么后面的 C,D將不再執行,而會去執行表達式。數組:數組的使用:為什么需要數組 1:為了解決大量同類型數據的存儲和使用問題。 2:用數組可以模擬現實世界。 Int a25:一維數組,可以當做一個線性結構。 Int a86:可以當做一個平面,意思是 8行 6列。有 48 個元素。 Int a345:可以當做一個立體。 Int a3456:可以當做一個四維空間。數組的分類一維數組怎樣定義一維數組: 為 n個變量分配存儲空間:數組分配的內存空間是連續的。 所有的變量類型必須相同:數組不可能第一個元素是整形,第二個元素是浮點型。所有變量所占用的字節必須相等。例子: int 5有關一維數組的操作初始化:上圖中 a5前面如果沒有加上數據類型,那么這里的 a5不是指一個數組,其中的 5只的是下標。上圖中,數組的 5個元素不是用 a來代表的,是用 a0,a1a4來代表的,所以說數組名 a代表的不是數組的 5個元素,數組的名字代表的是數組的第一個元素的地址。賦值把一個數組元素給全部倒過來:排序/小值倒置查找插入刪除二維數組:二維數組的初始化:輸出二維數組內容:多維數組: 是否存在多維數組:不存在,因為內存是線性一維的,在內存中是不分行,也不分列的。 N維數組可以當做每個元素是 n-1維數組的一維數組。函數:為什么需要函數:避免了重復性操作。有利于程序的模塊化。什么叫做函數邏輯上:能夠完成特定功能的獨立的代碼塊。物理上:能夠接收數據【也可以不接收數據】,能夠對接收的數據進行處理【也可以不對數據進行處理】,能夠將數據處理的結果返【也可以沒有返回值】。 總結:函數是個工具,他是為了解決大量類似問題而設計的,函數可以當做一個黑匣子。如何定義函數函數的返回值,函數的名字(函數的形參列表) 函數的執行體 函數定義的本質:詳細描述函數之所以能夠實現某個特定功能的具體方法。 return表達式的含義: Return是終止被調函數,向主調函數返回表達式的值,如果表達式為空,則只終止函數,不向被主函數返回任何值。 Break是用來終止循環和 switch的。而 return是用來終止函數的。 函數返回值的類型,也稱為函數的類型,因為如果函數名前的返回值類型和函數執行體中的 return表達式中表達式的類型不同的話,則最終函數返回值的類型以函數名前的返回值類型為準。例:在上圖中,函數的返回值以函數前的數值類型為準。函數的分類有參函數和無參函數。有返回值和無返回值。庫函數和用戶自定義函數。普通函數和主函數( main函數) 1:一個程序有且只有一個主函數,主函數可以調用普 2:通函數,普通函數不能調用主函數。 3:普通函數可以相互調用。 4:主函數是程序的入口,也是函數的出口。 5:值傳遞函數和地址傳遞函數。判斷一個數是否是素數:使用函數判斷一個數是否是素數:函數和程序的調用應該注意的地方:函數的聲明:當函數沒有返回值時,那么規范的寫法是要在函數中寫明 void的。在上圖中,第一個 void表示沒有返回值,而第二個 void表示不接收形參,也就是函數不接收數據。如果想把函數卸載程序的后面,那么需要寫函數聲明:函數聲明的含義是告訴編譯器 f是個函數名。如果不加函數聲明,那么編譯器在編譯到 f的時候,不知道 f是個什么,如果加了函數聲明,那么編譯器編譯到 f的時候,就知道 f是個函數。需要注意的是,調用語句需要放在定義語句的后面,也就是說,定義函數的語句要放在調用語句的前面。如果函數調用卸載了函數定義的前面,則必須加函數前置聲明,函數前置聲明的作用是: 1:告訴編譯器即將可能出現的若干個字母代表的是一個函數。 2:告訴編譯器即將可能出現的若干個字母所代表的函數的形參和返回值的具體情況。 3:函數聲明必須是一個語句,也就是在函數聲明后需加分號。 4:對庫函數的聲明也就是系統函數。是通過 #include來實現的。形參和實參: 1:形參和實參個數是一一對應的。2:形參和實參的位置也是一一對應的。 3:形參和實參的數據類型需要相互兼容。如何在軟件開發中合理的設計函數來解決實際問題。求 1到某個數字之間的數是否是素數,并將他輸出:合理設計函數 1 合理設計函數 2:合理設計函數 3:合理的設計函數 4:合理設計函數 5:常用的系統函數和如何通過書籍來學習函數: Turboc2.0實用大全機械工業出版社遞歸:棧:相當于一個杯子,變量的作用域和存儲方式:全局變量和局部變量:局部變量:局部變量的使用范圍只能在本函數內部使用。全部變量:全局變量和局部變量命名沖突的問題:在同一個范圍之內不能定義兩個一樣的局部變量:在一個函數內部,如果定義的局部函數的名字和全局變量名一樣時,局部變量會屏蔽掉全局變量:上例中最終的輸出結果是 8,因為局部變量把全局變量給屏蔽掉了。指針:內存的存儲是以一個字節為一個編號,也就是 8位合在一起給一個編號,不是 0,1就給編號。內存分為很多個單元,每個單元就會分配一個編號。地址:內存單元的一個編號。而指針和地址一個概念的。也就是說指針就是地址。普通變量:只能存放一個值。指針變量:同樣是一個變量,但是指針變量存放其他變量的地址。 *p代表的是 p所指向的那個變量。在上圖中*p和 i是同一個東西,但是*p和 p不是同一個東西。在上圖中,int * p是一個聲明,開頭的 int * 是他的數據類型。P是變量的名字。不能理解我定義了一個整形變量,這個整形變量的名字叫做 *p。所謂 int *類型,實際就是存放 int 變量地址的類型。普通變量沒地址,當然不能指向。 *p代表的是以 p的內容為地址的變量。解析:p的內容是一個地址,在上圖中, p的內容就是 i的地址,以 i的內容為地址的變量當然就是 i了。指針和指針變量:指針就是地址,地址就是指針。地址就是內存單元的編號,指針變量:存放地址的變量。而指針只是一個值,這個值是內存單元的一個編號。指針變量才是一個變量,他里面才可以存放數據。指針和指針變量是兩個不同的概念,但是需要注意的是,通常我們在敘述時會把指針變量簡稱為指針,實際他們含義并不一樣。指針的重要性:指針的分類:指針的定義: 地址:內存單元的編號,是一個從 0開始的非負整數。范圍:cpu對內存是通過控制、數據、地址三條總線來進行控制的??刂疲篶up會先把內存中的數據讀入,進行處理后,在返回給內存,然后內存在把數據寫入硬盤。數據:用于數據的傳輸,不管是把內存中的數據發送給 cpu,還是把 cpu的數據寫如內存條,都是由數據線來完成的,但是數據傳輸的方向則是由控制線來控制的。地址:地址線則是確定數據要寫入內存中的那個單元。所謂的一個單元就是一個字節。一條地址總線能控制 2的 1次方,一般的機器有 32個地址線,最終能夠控制 2的 32個單元,而每個單元是八位,而最終我們的內存能夠存儲 2的 32次方 x8位。則換算為 G的話,之中大小為 4G.那么地址總線的范圍則是 4G大。指針:指針就是地址,地址就是指針,指針變量就是存放內存單元編號的變量。指針變量和指針是兩個不同的概念。指針的本質就是一個操作受限的非負整數。指針不能進行算術運算。但是能相減?;绢愋偷闹羔槪篒nt *p:p只能存放 int類型的地址。 P = &i:把 i的地址賦給 p。然后 p就指向了 i,*p就等于 i。其實就是 1:該語句保存了 i的地址。2:p保存了 i的地址,所以 p指向 i。3:p既然指向 i,*p就是 i。 p的內容為地址的變量。 p是有指向的,p里面是個垃圾值, *p則是說以 p的內容為地址的變量。因為不知道 p的值是多少,所以不知道 *p到底代表的是那個變量。而 *p = i,i=5,最終的結果就是把 5賦給了一個所不知道的單元。上圖中,第一個 error是數據類型不符合,不能相互轉換。*q代表的是整形,因為*q代表的是以 q的地址為內容的變量。而 p是地址( int *)類型。第二個 error 同樣有錯,因為 q沒有賦值。經典指針程序-互換兩個數字: 1:先用函數來互換:最終的輸出結果沒有互換,因為函數的 a,b已經執行完成,分配給內存的空間已經釋放了,所以最終 a,b 的值還是主函數 a,b的值?;Q的是形參的 a,b。和主函數沒有關系。在上圖中,輸出的值也是沒有互換的,輸出的同樣是 3 ,5,需要注意的是,互換的只是 pq的內容,局部函數變化了,但是主函數

溫馨提示

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

評論

0/150

提交評論