C語言學習筆記.docx_第1頁
C語言學習筆記.docx_第2頁
C語言學習筆記.docx_第3頁
C語言學習筆記.docx_第4頁
C語言學習筆記.docx_第5頁
已閱讀5頁,還剩21頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

在VS2012中的主程序必須是帶有類型標識符的,不然編譯不能通過。例如:#include main (void) printf(歡迎來到C語言世界!n)以上這個程序是編譯同步過的,要寫成如下:#include int main (void) printf(歡迎來到C語言世界!n)Visual Studio 2012 命令行上面編譯命令:cl /EHsc basic.cpp常量 整數 十進制: 傳統寫法 十六進制: 前面加0x或者0X 八進制: 前面加0例一:# include int main(void) int m = 0256, n = 256; /0256為八進制,256為十進制 printf (%o %o n, m , n); return 0;輸出結果為:256 400 浮點數 字符書籍:林銳 高質量C/C+編程機械工業出版社 Turbo C 2.0 實用大全進制和printfprintf (%X) /十六進制 大寫輸出,輸出格式為:十六進制數字printf (%#X) /帶前綴的 十六進制,輸出格式為:0x十六進制數字int main(void) int m = 666, n = 888; printf (%dn, m , n); return 0;輸出結果是:666& 區地址符scanf用法1 _ 不含輸入控制符的用法# include int main (void) int i; scanf(%d, &i); prinf(i =%dn, i); return 0;scanf用法2 _ 含輸入控制符的用法# include int main (void) int i; scanf(m%d, &i); /檢測有m開頭輸入后數據才是合法輸入 如:123 非法 m123 輸出123 prinf(i =%dn, i); return 0;sacnf用法3 _ 一次給多個變量鍵盤賦值.swf# include int main (void) int i,j; scanf(%d %d, &i, &j); prinf(i =%d j = %dn, i, j); return 0;如何編寫高質量的scanf 的代碼。1.在寫scanf代碼前最好用printf顯示提示信息。2.在寫scanf最好不要使用非輸入控制符,不要用/n。流程控制:(學習C語言的重點) 1.什么事流程控制 程序代碼執行的順序 2.流程控制的分類 順序 選擇 循環if的簡單用法: # inclued int main(void) if(1) printf(AAAA/n); /會輸出AAAA if(0) printf(AAAA/n); /不會輸出AAAA一些常見的需要算法知識的C語言程序:判斷一個數字是否是素數判斷一個數字是否是回文數編程實現求一個十進制數字的二進制形式求一個數字的每位是奇數的數字取出來組合形成的新數字求一個數字倒過來的數字如何看懂一個程序,分三步:1. 流程2. 每個語句的功能3. 試數如何學習一些需要算法的程序【如何掌握一個程序】1.嘗試自己去編程解決它但要意識到大部分人都是自己無法解決的,這時不要氣餒, 也不要自卑, 如果十五分鐘還想不出來, 此時我建議您就可以看答案了2.如果解決不了, 就看答案關鍵是把答案看懂, 這個要花很大的精力,也是我們學習的重點,看懂一個程序要分三步: 流程、每個語句的功能、 試數3.看懂之后嘗試自己去修改程序,并且知道修改之后程序的輸出結果的含義不建議看懂程序之后就立即自己敲程序4.照著答案去敲5.調試錯誤6.不看答案,自己獨立把答案敲出來7.如果程序實在無法徹底理解, 就把它背會,不過無法徹底理解的程序非常少, 我自己幾乎沒有碰到過數據類型的強制轉換:/* 功能:比較輸入數字的大小,并且進行排序 目的: 掌握If的用法 時間:2013-1-31*/# include int main (void) int a, b, c; int t; /t 變量為轉換時候的中間變量 printf (請輸入第一個數:); scanf (%d, &a); printf (請輸入第二個數:); scanf (%d, &b); printf (請輸入第三個數:); scanf (%d, &c); /比較三個數字的大小,a為最大,b為中間,c為最小。 /將 符號就可以將三個數字按照從小到的的順序進行排列。 if (a b) t = a; a = b; b = t; if (a c) t = a; a = c; c = t; if (b bc-*/for的用法:/* 功能:求1+2+3+.+100的和 目的: for的簡單的用法 時間:2013年1月31日13:08:02*/# include int main(void) int i; int sum = 0; /定義此變量的時候一定要將定義的變量賦值為零, /不然定義的變的里面將是一個垃圾值,使計算的結果不正確。 for (i = 1; i = 100; +i) sum = sum + i; printf(1+2+3+.+100=%d, sum); return 0;注意:再學習了If和For命令之后,不要將for循環與if判斷命令混淆。 if是判斷指令,而for是循環指令/*功能:理解數據間進行運算是必要的類型轉換時間:2013年2月2日12:34:18*/# include int main (void)int i;float sum = 0;for (i = 1; i 回文數的理解: 擴展:對一個整型數據進行倒敘排列/*功能:判定一個從鍵盤輸入的數字是否是回文數 回文數:順序寫和倒敘寫都是同一個數字。 如:121 212 因此判斷一個回文數即使將數字的順序進 行倒敘排列后,判讀值是與輸入數相同。 同-則 是 不同-則 不是目的:掌握回文數的理解和方法的實現,并進一步 對數字的倒敘排列進行理解。時間:2013年2月3日16:28:21*/# include int main(void) int i, j = 0; int val; /定義輸入待判斷的數 int temp = 0; printf (請輸入一個數字: ); scanf (%d, &val); printf (n); i = val; /將輸入數字進行倒敘排列,用于對比是否是回文數 while (i) /此程序有多個parintf,用于詳細觀察程序的每一 /步執行的結果而寫的輸出語句 printf (計算前val=%dn, val); printf (計算前i=%dn, i); printf (計算前temp=%dn, temp); temp = 10 * temp + i % 10; i /= 10; +j; /用于詳細觀察程序的每一步執行的結果而寫的輸出語句 printf (第%d次計算后temp=%d i=%dnn, j, temp, i); /*試數:1計算前val=123 /輸入值不變 計算前i=123 計算前temp=0 第1次計算后temp=3 / temp = 10 * temp + i % 10 i=12 / i /= 102計算前val=123 /輸入值不變 計算前i=12 計算前temp=3 第2次計算后temp=32 / temp = 10 * temp + i % 10 i=1 / i /= 103計算前val=123 /輸入值不變 計算前i=1 計算前temp=32 第3次計算后temp=321 / temp = 10 * temp + i % 10 i=0 / i /= 10 計算結果的temp值是: 321 */ /將已經進行倒敘排列輸入的數輸出 printf (計算結果的值是: %dnn, temp); /將輸入數與最終計算出的結果進行對比,判斷是否是回文數 if (val = temp) printf (%d是一個回文數!n, val); else printf (%d不一個回文數!n, val); printf (開始還原為輸入數n); /這段程序的目的是用for實現將計算出判斷是否為回文數的值還原為輸入數。 printf (n); i = temp; /清零 temp ,用于for 循環時的反向計算 j = 0; /清零 j 用于for循環時輸出準確的計算次數 for (temp = 0; i != 0; i /= 10 ) /此程序有多個parintf,用于詳細觀察程序的每一 /步執行的結果而寫的輸出語句 printf (計算前val=%dn, val); printf (計算前i=%dn, i); temp = 10 * temp + i % 10; +j; /計算 for 循環運行的次數 printf (第%d次計算后temp=%d i=%dnn, j, temp, i); printf (計算結果的值是: %d, temp); return 0;/*總結:輸入一個數能夠將數字經過兩次運算后重新還原成原來的數。如輸入:123 經過 While 運算后是 321 再經過 for 運算后是 123 */函數函數的調用必須匹配為什么需要函數: 避免了寫重復性的代碼 有利于程序的模塊化什么叫函數: 邏輯上:能夠完成特定功能的獨立代碼 物理上:能夠接受數據當然也可以不接受數據 能夠對接受數據進行處理 能將數據處理的結果進行傳遞 總結:函數是個工具,為了解決大量類似的問題而設計的 函數可以當作是一個黑匣子。例子:int cont(void) /括號中的void表示該函數不能接收數據 int表示函數會返回int類型的數據 return 10;void cont(void) /函數名前面的void表示該函數沒有返回值 括號中的void表示該函數不能接收數據如何定義函數: 格式: 函數的返回值 函數的名字(函數的形參列表) 函數執行體 1.函數定義的本質是詳細的描述函數之所以能夠實現某個特定的功能 的具體方法。 2.return 表達式的含義: 1終止被調用函數,向主函數返回表達式的值 2如果表達式為空,則只終止函數,不向被調 用的函數返回任何值 3break是用來終止循環和switch,return是 用來終止函數。例子:void f() return; /終止函數,不會向主函數返回任何值int f() return 10; /1.終止函數 2.向主函數返回10 3.函數的返回值的類型也稱為函數的類型,因為,如果函數名前的返回類 型和函數執行的 return 表達式中的類型如果不同,則最終函數的返 回值的類型以函數前的返回值類型為準。例子:# include /定義int類型的函數 fint f()return 10.5;int main()double a;a = f();printf(%dn, a) /最終的輸出結果是:double類型的10,即 10.000000,說明 f 函數返回的值是將浮點型 的10.5強制輸出為 int 類型的10,而不是 10.5,因此說明當函數的返回與函數的類型發 生沖突(矛盾)時,以函數類型為準,因此 在構造(定義)函數時,應避免此類發生。return 0;函數的分類:有參函數 和 無參函數有返回值函數 和 無返回值函數值傳遞函數 和 地址傳遞函數庫函數 和 用戶函數普通函數 和 主函數(mian函數)一個程序必須有且只能有一個主函數,主函數可以調用普通函數,反之則不可以。普通函數可以互相調用。主函數是程序的入口也是出口。函數調用和定義: 1.順序:先定義后調用 2.如果函數調用寫在了函數的前面,就必須加前置聲明。 3.告訴編譯器即將可能出現的若干個的字母的組合所代表的是函數。 4.告訴編譯器函數的返回值和形參具體情況。 5.函數聲明是一個語句,末尾結束要加分號。如:int max(int a); 6.對庫函數的申明是通過“# include ”來實現的。形參和實參:形參和實參的個數必須相同。形參和實參的位置必須一一對應。形參和實參的類型必須兼容。函數的合理的設計:在軟件開發中合理的設計函數來解決實際問題的時候,一個函數額功能盡量獨立,單一,多學習,多模仿牛人的代碼。局部變量:在函數的內部定義的變量或者是形參叫局部變量。全局變量:不是定義在函數的內部的變量,即在程序定義了頭文件之后定義的變量,且全局變量所有的函數都可以不在聲明就直接使用,使用后如果為對變量進行清空和重置操作,下次使用此變量的時候還未上次使用后的值。全局變量和局部變量沖突問題:# include int i = 99;int f(int i) printf(i = %d,i);int main(void) f(8);程序執行結果是: i = 8在一個函數的內部定義的變量與全局定義的變量命名的重復(一樣)的時候,局部變量會把全局變量屏蔽掉,最終的輸出是局部變量定義后或者是執行的結果。注意:實參和形參永遠不是同一個變量。指針:指針就是地址,地址就是指針地址就是內存單元的編號指針變量是存放地址的變量指針和指針變量是兩個不同的概念但是要注意: 通常我們敘述時會把指針變量簡稱為指針,實際它們含義并不一樣例子程序:# include int main(void)int * p; /p是變量的名字, int * 表示p變量存放的是int類型變量的地址 /int * p; 不表示定義了一個名字叫做*p的變量 /int * p;應該這樣理解: p是變量名,p變量的數據類型是int * 類 型,所謂int * 類型 實際就是存放int變量地址的類型 int i = 3;int j;p = &i;/*1. p保存了i的地址, 因此p指向i2. p不是i,i也不是p,更準確的說: 修改p的值不影響i的 值,修改i的值也不會影響p的值3. 如果一個指針變量指向了某個普通變量, 則 *指針變量 就完全等同于 普通變量 例子:如果p是個指針變量,并且p存放了普通變量i的地址則p指向了普通變量i*p 就完全等同于 i或者說: 在所有出現*p的地方都可以替換成i在所有出現i的地方都可以替換成*p *p 就是以p的內容為地址的變量*/j = *p; /等價于 j = i;printf(i = %d, j = %dn, i, j);return 0;指針的重要性:1.表示一些復雜的數據結構2.快速的傳遞數據3.使函數返回一個以上的值4.能夠方便的處理字符串5.能直接訪問硬件6.是理解面向對象語言的引用基礎 總結:指針是C語言的靈魂指針的定義:地址:內存單元的編號 從零開始的非負整數 范圍: 指針: 指針就是地址,地址就是指針 地址就是內存單元的編號 指針變量是存放地址的變量 指針和指針變量是兩個不同的概念 但是要注意:通常我們敘述時會把指針變量簡稱為指針,實際它們含義并不一 指針的本質就是一個操作受限的非負整數指針的分類:1.基本類型的指針 例子:int * p; /p是變量的名字, int * 表示p變量存放的是int類型變量的地址 /int * p; 不表示定義了一個名字叫做*p的變量 /int * p;應該這樣理解: p是變量名,p變量的數據類型是int * 類 型,所謂int * 類型 實際就是存放int變量地址的類型 int i = 3; int j; p = &i;/*1. p保存了i的地址, 因此p指向i2. p不是i,i也不是p,更準確的說: 修改p的值不影響i的 值,修改i的值也不會影響p的值3. 如果一個指針變量指向了某個普通變量, 則 *指針變量 就完全等同于 普通變量 例子:如果p是個指針變量,并且p存放了普通變量i的地址則p指向了普通變量i*p 就完全等同于 i或者說: 在所有出現*p的地方都可以替換成i在所有出現i的地方都可以替換成*p *p 就是以p的內容為地址的變量*/j = *p; /等價于 j = i;printf(i = %d, j = %dn, i, j);2. 指針和數組: 指針和一維數組 數組名: 一維數組名是個指針常量 即 數組名是指針地址 它存放的時一維數組第一個元素的地址 例: int a9 printf(%#X, &a0) /數組a9的第一個元素的地址 printf(%#X, a) /數組a的內容 /* 最終輸出結果相同,證明了一維數組名是個指針常量 即 數組名是指針地址 它存放的時一維數組第一個元素的地址 */ 因此在設計函數的時候,要對數組進行操作或者要傳遞數組的內容的時候, 調用或者是接受數組的數據的函數必須定義為指針類型的變量。 例:# include void OutArr();void Arr();int main(void)int a9 = 1, 2, 3, 4, 5, 6, 7, 8, 9int b9 = 9, 8, 7, 6, 5, 4, 3, 2, 1printf(%d,a3);Arr(a, 9)return 0; /Arr函數就任意輸出任意一個一維數組的內容void OutArr(int * pArr, int len) /確定一個數組需要兩個 /參數,首地址和數組的長度 int i;for(i = 0; i len; +i)printf(%d , pArri); / 被調用函數內的 /*(pArr+i) 與 pArri等價 / 同樣也等價于調用函數 /(主函數)的 ai 和 *aireturn;void Arr(int * pArr, int * len)pArr3 = 88; return; 下標和指針的關系: 如果p是個指針變量,則 pi 永遠等價于*(p+i) 確定一個數組 即如果一個函數要處理一份一維數組,則需要接收該數組的哪些信息 數組名或是數組的首地址第一個元素的地址 數組長度 指針變量的運算: 不能相加 不能相乘 不能相加 也不能相除 如果兩個指針變量指向的是同一連續空間中的不同存儲單元 則這兩個指針變量才可以相減 例:# include int main(void) int a = 9; int b = 10; int a4; int b5; int * p; int * q; p = &a; q = &b; printf(%d, p - q); /無意義 q = &a3; q = &b4; printf(%d, p - q); /無意義 q = &a3; q = &b4; printf(兩個數組之間間隔%d個單元, p - q); /有意義 return 0;一個指針變量到底占幾個字節 預備知識: sizeof(數據類型) 功能:返回值就是該 數據類型 所占的字節數 例子:sizeof(int) = 4 sizeof(char) = 1 sizeof(double) = 8 sizeof(變量名) 功能:返回值就是該 變量 所占的字節數 假設 p指針 指向char類型變量(1個字節) 假設 q指針 指向int類型變量(4個字節) 假設 r指針 指向double 類型變量(8個字節) p q r 本身所占的字節數是否一樣 ? 答案:p q r 本身所占的字節數是一樣的 總結:一個指針變量無論指向的變量占幾個字 節,該指針變量都占4個字節 注意:一個變量的的地址使用的是該變量的首字節的地址 來表示 指針和二維數組專題: 動態內存分配: 傳統數組的缺點: 1.數組的長度必須事先制定,且正能是常整數,不能是變量 例: int a5; /ok int len = 5; int a len; /

溫馨提示

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

評論

0/150

提交評論