




已閱讀5頁,還剩40頁未讀, 繼續免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
C語言快速入門By-xp第一章 初識C程序31-1初始C語言31-2 C程序結構31-4必不可少之主函數31-5良好習慣之規范41-6程序解釋注釋4第二章 C中數據類型52-1有名有姓的C52-3變量及賦值62-4基本數據類型62-5格式化輸出語句72-7不可改變的常量82-8自動類型轉換92-9強制類型轉換9第三章 C中的運算符103-1運算符號是啥103-2算術運算符103-3自增與自減運算符113-5賦值運算符113-6關系運算符123-7邏輯運算符123-9三目運算符133-10運算符大比拼之優先級比較13第四章C程序結構語句144-1分支結構之簡單if語句144-2分支結構之簡單if-else語句154-3分支結構之多重if-else語句164-4分支結構之嵌套if-else語句174-6循環結構之while循環184-7循環結構之do-while循環194-8循環結構之for循環(一)204-9循環結構之for循環(二)214-10循環結構之三種循環比較224-12循環結構之多重循環234-13使用for循環打印99乘法表234-14結束語句之break語句244-15結束語句之continue語句254-16分支結構之switch語句254-17switch與if語句的應用274-19臭名遠揚之goto語句27第五章 函數的秘密285-1自創函數285-2函數調用295-3有參與無參295-4形參與實參305-5函數的返回值315-7遞歸函數(一)325-8遞歸函數(二)325-9遞歸函數練習335-10局部與全局335-11變量存儲類別345-13內部函數與外部函數355-14綜合練習36任務36第六章 數組376-1數組初體驗376-2數組的遍歷376-4數組作為函數參數386-5數組的應用(一)396-6數組的應用(二)396-7字符串與數組406-8字符串函數416-9多維數組426-11多維數組的遍歷42綜合練習43任務43第一章 初識C程序1-1初始C語言C語言一經出現就以其功能豐富、表達能力強、靈活方便、應用面廣等特點迅速在全世界普及和推廣。C語言不但執行效率高而且可移植性好,可以用來開發應用軟件、驅動、操作系統等。C語言也是其它眾多高級語言的鼻祖語言,所以說學習C語言是進入編程世界的必修課。這里我們也要開創我們編程生涯的開篇第一個C程序-HelloWorld:運行結果:1-2 C程序結構在上一小節中,我們已經接觸了C語言的第一個小程序,對C語言有了初步認識,接下來我們要看看C程序的具體結構。簡單來說,一個C程序就是由若干頭文件和函數組成?;仡櫳弦恍」澲兴鶎懙睦?,下面是對這個例子的一個分析:#include 就是一條預處理命令,它的作用是通知C語言編譯系統在對C程序進行正式編譯之前需做一些預處理工作。(關于預處理后面的課程會講)函數就是實現代碼邏輯的一個小的單元。注:在最新的C標準中,main函數前的類型為int而不是void1-4必不可少之主函數一個C程序有且只有一個主函數,即main函數。C程序就是執行主函數里的代碼,也可以說這個主函數就是C語言中的唯一入口。這個道理就好比每個電梯只有一扇門,要想乘坐電梯的話就必須從這扇門進入;而main前面的int就是主函數的類型,好比乘坐的這個電梯是什么材料做的。printf()是格式輸出函數,這里就記住它的功能就是在屏幕上輸出指定的信息,后面會有詳細的講解。例如:return是函數的返回值,根據函數類型的不同,返回的值也是不同的。n是轉義字符,在WIKI中可以查看轉義字符。注意:C程序一定是從主函數開始執行的。1-5良好習慣之規范在寫C語言程序的時候為了書寫清晰、便于閱讀、便于理解、便于維護,在編寫程序時應遵循以下規則:1、一個說明或一個語句占一行,例如:包含頭文件、一個可執行語句結束都需要換行;2、函數體內的語句要有明顯縮進,通常以按一下Tab鍵為一個縮進;3、括號要成對寫,如果需要刪除的話也要成對刪除;4、當一句可執行語句結束的時候末尾需要有分號;5、代碼中所有符號均為英文半角符號。以一個例子來看:1-6程序解釋注釋注釋是為了使別人能看懂你寫的程序,也為了使你在若干年后還能看得懂你曾經寫的程序而設定的。注釋是寫給程序員看的,不是寫給電腦看的。所以注釋的內容,C語言編譯器在編譯時會被自動忽略。C語言注釋方法有兩種: 多行注釋: /* 注釋內容 */ 單行注釋: /注釋一行以下是使用多行注釋與單行注釋的例子:運行結果:我們可以看出在該例子的運行結果中并沒有看到注釋的內容,正說明了注釋在編譯的時候會自動忽略掉。第二章 C中數據類型2-1有名有姓的C編程時給變量或者函數起的名字就是標識符,就好比我們慕課網的每一位童鞋都有姓名,姓名就是這位童鞋的標識符。C語言的標識符是不可以隨便起名字的,必須遵守一定的規則。C 語言規定,標識符可以是字母(AZ,az)、數字(09)、下劃線_組成的字符串,并且第一個字符必須是字母或下劃線。在使用標識符時還有注意以下幾點:(1)標識符的長度最好不要超過8位,因為在某些版本的C中規定標識符前8位有效,當兩個標識符前8位相同時,則被認為是同一個標識符。(2)標識符是嚴格區分大小寫的。例如Imooc和imooc 是兩個不同的標識符。(3)標識符最好選擇有意義的英文單詞組成做到見名知意,不要使用中文。(4)標識符不能是C語言的關鍵字。想了解更多C語言關鍵字的知識,請查閱WIKI。例如:2-3變量及賦值變量就是可以變化的量,而每個變量都會有一個名字(標識符)。變量占據內存中一定的存儲單元。使用變量之前必須先定義變量,要區分變量名和變量值是兩個不同的概念。就好比:住在房間里的客人與房間號是兩個不同的概念。變量定義的一般形式為:數據類型 變量名;多個類型相同的變量:數據類型 變量名, 變量名, 變量名.;變量名和標識符的命名規范完全相同。%d在后面會有詳細講解注意:在定義中不允許連續賦值,如int a=b=c=5;是不合法的。變量的賦值分為兩種方式:1.先聲明再賦值 2.聲明的同時賦值,例如:2-4基本數據類型在我們玩游戲的時候,游戲中的角色是有類型的,有敏捷型、力量型、法術型等等。同樣C語言中的數據也是有類型的,C語言中,數據類型可分為:基本數據類型,構造數據類型,指針類型,空類型四大類。如圖所示:這里我們先給大家講解基本數據類型中最簡單也是最常用的整型、實型與字符型。整型數據是指不帶小數的數字。生活中有很多信息適合使用整型數據來表示,比如:人的年齡、班級的人數、書的總頁數等等。因此整型的類型比較多:注:int、short int、long int是根據編譯環境的不同,所取范圍不同。而其中short int和long int至少是表中所寫范圍,但是int在表中是以16位編譯環境寫的取值范圍。另外c語言int的取值范圍在于他占用的字節數 ,不同的編譯器,規定是不一樣。ANSI標準定義int是占2個字節,TC是按ANSI標準的,它的int是占2個字節的。但是在VC里,一個int是占4個字節的。浮點數據是指帶小數的數字。生活中有很多信息適合使用浮點型數據來表示,比如:人的體重(單位:公斤)、商品價格、圓周率等等。因為精度的不同又分為3種:注:C語言中不存在字符串變量,字符串只能存在字符數組中,這個后面會講。2-5格式化輸出語句格式化輸出語句,也可以說是占位輸出,是將各種類型的數據按照格式化后的類型及指定的位置從計算機上顯示。這樣做的好處,是有利于計算機能夠準確的將我們所要類型數據給我們。其格式為:printf(輸出格式符,輸出項);C語言中的常用格式化符:當輸出語句中包含普通字符時,可以采用一下格式:printf(普通字符輸出格式符, 輸出項);例如:輸出結果為:a=10如果要輸出多個變量的并指定變量的位置時候,格式符還可以連用,變量之間需要用逗號隔開,如:輸出結果為:整數:10,小數:7.560000,字符:c注意:格式符的個數要與變量、常量或者表達式的個數一一對應2-7不可改變的常量在程序執行過程中,值不發生改變的量稱為常量。C語言的常量可以分為直接常量和符號常量。直接常量也稱為字面量,是可以直接拿來使用,無需說明的量,比如: 整型常量:13、0、-13; 實型常量:13.33、-24.4; 字符常量:a、M 字符串常量:”I love imooc!”下面的代碼分別打印這四種直接常量:在C語言中,可以用一個標識符來表示一個常量,稱之為符號常量。符號常量在使用之前必須先定義,其一般形式為:#define 標識符 常量值符號常量的標示符一般習慣使用大寫字母,變量的標示符一般習慣使用小寫字母,加以區分。下面是一個使用符號常量的小例子:運算結果為:圓周率:3.140000注意:常量是不可改變的2-8自動類型轉換有這么一個詞叫“貍貓換太子”,變量的數據類型就存在這樣的情況。數據類型存在自動轉換的情況,比如:自動轉換發生在不同數據類型運算時,在編譯的時候自動完成。自動轉換遵循的規則就好比小盒子可以放進大盒子里面一樣,下圖表示了類型自動轉換的規則。char類型數據轉換為int類型數據遵循ASCII碼中的對應值,ASCII碼請查看WIKI。注:字節小的可以向字節大的自動轉換,但字節大的不能向字節小的自動轉換2-9強制類型轉換強制類型轉換是通過定義類型轉換運算來實現的。其一般形式為:(數據類型) (表達式)其作用是把表達式的運算結果強制轉換成類型說明符所表示的類型,例如:輸入結果:在使用強制轉換時應注意以下問題:1、數據類型和表達式都必須加括號,如把(int)(x/2+y)寫成(int)x/2+y則成了把x轉換成int型之后再除2再與y相加了。2、轉換后不會改變原數據的類型及變量值,只在本次運算中臨時性轉換。3、強制轉換后的運算結果不遵循四舍五入原則。第三章 C中的運算符3-1運算符號是啥我們上小學的時候都學過各種運算,如:加法運算、乘法運算、混合運算等,而運算就要用到運算符,如:+、-、等等。在C語言中同樣有運算符,只是寫法可能有所不同。先說一下C語言中的運算是什么?C語言中的運算就是對數據進行操作、處理的過程。那么運算符又干什么的呢?運算符就是指定該運算的處理方式。那么C語言中又有哪些運算符呢?如下所示: 算術運算符 賦值運算符 關系運算符 邏輯運算符 三目運算符3-2算術運算符C語言基本算術運算符如下表:除法運算中注意:如果相除的兩個數都是整數的話,則結果也為整數,小數部分省略,如8/3 = 2;而兩數中有一個為小數,結果則為小數,如:9.0/2 = 4.500000。取余運算中注意:該運算只適合用兩個整數進行取余運算,如:10%3 = 1;而10.0%3則是錯誤的;運算后的符號取決于被模數的符號,如(-10)%3 = -1;而10%(-3) = 1。注:C語言中沒有乘方這個運算符,也不能用,等算術符號。另:關于自增自減運算符,會在下一小節講解。3-3自增與自減運算符自增運算符為“+”,其功能是使變量的值自增1;自減運算符為“-”,其功能是使變量值自減1。它們經常使用在循環中。自增自減運算符有以下幾種形式:注意:無論是a+還是+a都等同于a=a+1,在表達式執行完畢后a的值都自增了1,無論是a-還是-a都等同于a=a-1,在表達式執行完畢后a的值都自減少1。請分析如下代碼輸出結果:小伙伴們,別急著看運行結果,自己先想想看結果是什么?運行結果:3-5賦值運算符在前面的小節中接觸過簡單的賦值運算符“=”,如:那么C語言中的賦值運算符又是什么呢?C語言中賦值運算符分為簡單賦值運算符和復合賦值運算符,之前我們已經接觸過簡單賦值運算符“=”號了,下面講一下復合賦值運算符:復合賦值運算符就是在簡單賦值符“=”之前加上其它運算符構成,例如+=、-=、*=、/=、%=??匆粋€小例子:分析:定義整型變量a并賦值為3,a += 5;這個算式就等價于a = a+5;將變量a和5相加之后再賦值給a注意:復合運算符中運算符和等號之間是不存在空格的。3-6關系運算符本節的所講解的符號,大家在生活中應該都有用過,像我們去商場買東西,都會比較一下價格,是不是相等啊,哪家的貴,哪家的便宜啊。在C語言中程序中也存在這樣的比較,這個時候就需要用到關系運算符了。下面是C語言中的關系運算符:關系表達式的值是“真”和“假”,在C程序用整數1和0表示。如:其結果為:注意:=,=,=,!=這種符號之間不能存在空格。3-7邏輯運算符在數學中我們見過7x7 & x=5 & 75 ,運算結果為真;2) 或運算(|)參與運算的兩個變量只要有一個為真,結果就為真。 兩個量都為假時,結果為假。例如:5=5|58,運算結果為真;3) 非運算(!)參與運算的變量為真時,結果為假;參與運算量為假時,結果為真。例如:!(58),運算結果為真。3-9三目運算符我們購物的時候經常會說如果這個物品大于多少錢就不買了,條件就是大于多少錢,結果就是不買了。那么上面所說的能不能在C語言中表示出來呢?當然是可以了,不過C語言中,需要用到一個符號,這個符號就是三目運算符。C語言中的三目運算符:“?:”,其格式為:表達式1 ? 表達式2 : 表達式3;執行過程是:先判斷表達式1的值是否為真,如果是真的話執行表達式2;如果是假的話執行表達式3。用代碼來寫一下上面的例子:3-10運算符大比拼之優先級比較問:優先級是神馬?答:優先級就是在運算中運算的先后順序。那么我們來看看我們學習的各種運算符號的順序吧!優先級別為1的優先級最高,優先級別為10的優先級別最低。大家沒必要去死記運算符的優先級順序,記住最高優先級別的,在開發中就會無敵啦來看一看下面的例子:解析:C語言中運算符中最高等級的為(),因此執行過程為:1、先計算a3和a+3的結果,計算后算式為1*a-14%3;2、再計算1*a和14%3的結果,計算后算式為11-2;3、最后算出結果為9。第四章C程序結構語句4-1分支結構之簡單if語句還曾記得小時候,每當快考試的時候,家長總會說如果你能考得100分的話,就會給買個玩具。不難看出這是個判斷句,那么在C語言中,這種判斷語句該如何表達呢?這就要用到C語言中的分支結構語句中的if條件語句。簡單if語句的基本結構如下:其語義是:如果表達式的值為真,則執行其后的語句,否則不執行該語句。 其過程可表示為下圖那么考試成績如果為100分,給買玩具。用代碼就可以表示為:注意:if()后面沒有分號,直接寫4-2分支結構之簡單if-else語句考試之前,家長會說如果考100分就買玩具。那么我們會問那考不了100分呢,家長這時會說考不了也沒關系下次再接再厲,只是沒有獎勵了。那么像上面這種情況,在C語言中就要用到if-else語句了,簡單的if-else語句的基本結構如下:其語義是:如果表達式的值為真,則執行代碼塊1,否則執行代碼塊2。其執行過程可表示為下圖:那么考試成績如果為100分,給買玩具,否則沒有獎勵。用代碼可以表示為:注意:if()后面沒有分號,直接寫,else后面也沒有分號,直接寫4-3分支結構之多重if-else語句考試之前,家長說了,你如果考90分以上的話買玩具,如果考70到90之間請吃大餐,否則沒有獎勵。那么針對這種多重的條件的話,在C語言中就要用到多重if-else語句,其結構如下:其語義是:依次判斷表達式的值,當出現某個值為真時,則執行對應代碼塊,否則執行代碼塊n。 if-else-if語句的執行過程如下圖所示:那么上面家長所說的,用代碼實現如下:注意:當某一條件為真的時候,則不會向下執行該分支結構的其他語句。4-4分支結構之嵌套if-else語句考試之前,家長說了,你如果考90分以上的話會買玩具,否則沒有獎勵,如果能在獲得玩具的情況下獲取班級前三名的話會有大餐吃。那么想滿足這位家長所有說的,就需要用到C語言中嵌套if-else語句。嵌套if-else語句的意思,就是在if-else語句中,再寫if-else語句。其一般形式為:其執行過程為:上面家長所說的用代碼實習如下運行結果:吃大餐,買玩具4-6循環結構之while循環小明在英語測驗的時候,computer這個單詞寫錯了,小明為了記住該單詞,下狠心要抄寫10遍,然后小明苦兮兮的抄寫了10遍。這里我們就可以說小明在循環抄寫。那我們將這種反復不停的執行某個動作稱之謂循環,C語言中有三種循環結構,先看一下C語言while循環的結構其中表達式表示循環條件,執行代碼塊為循環體。while語句的語義是:計算表達式的值,當值為真(非0)時, 執行循環體代碼塊。其執行過程可用下圖表示:小明現在想偷懶了,不想手抄了,他用代碼實現如下:使用while語句應注意以下幾點:1、while語句中的表達式一般是關系表達或邏輯表達式,當表達式的值為假時不執行循環體,反之則循環體一直執行。2、一定要記著在循環體中改變循環變量的值,否則會出現死循環(無休止的執行)。3、循環體如果包括有一個以上的語句,則必須用括起來,組成復合語句。4-7循環結構之do-while循環小明英語測驗,“computer”這個單詞再一次寫錯了,小明又決定抄10遍,但是小明想“我寫一遍就能記住了,剩下的交給計算機幫我完成!”。對于小明這個想法,就可以用到C語言中的do-while循環,一般形式如下:do-while循環語句的語義是:它先執行循環中的執行代碼塊,然后再判斷while中表達式是否為真,如果為真則繼續循環;如果為假,則終止循環。因此,do-while循環至少要執行一次循環語句。其執行過程可用下圖表示:根據do-while語句的特點,小明的代碼實現如下:注意:使用do-while結構語句時,while括號后必須有分號。4-8循環結構之for循環(一)在C語言中還有一種更加靈活的循環,它完全可以秒殺前面兩種循環結構,因為它相對前兩種循環結構語法更直接、簡單。它的一般形式為:它的執行過程如下:第一步:執行表達式1,對循環變量做初始化;第二步:判斷表達式2,若其值為真(非0),則執行for循環體中執行代碼塊,然后向下執行;若其值為假(0),則結束循環;第三步:執行表達式3;第四步:執行for循環中執行代碼塊后執行第二步;第五步:循環結束,程序繼續向下執行。其執行過程可用下圖表示:例:小明下決心抄10遍computer這個單詞,用for循環實現如下:注意:for循環中的分號一定要寫4-9循環結構之for循環(二)在for循環中,表達式1是一個或多個賦值語句,它用來控制變量的初始值;表達式2是一個關系表達式,它決定什么時候退出循環;表達式3是循環變量的步進值,定義控制循環變量每循環一次后按什么方式變化。這三部分之間用分號(;)分開。使用for語句應該注意:1、for循環中的“表達式1、2、3”均可可以缺省,但分號(;)不能缺省。2、省略“表達式1(循環變量賦初值)”,表示不對循環變量賦初始值。如:3、省略“表達式2(循環條件)”,不做其它處理,循環一直執行(死循環)。如:4、省略“表達式3(循環變量增量)”,不做其他處理,循環一直執行(死循環)。如:注:死循環可以使用后面即將講到的break解決5、表達式1可以是設置循環變量的初值的賦值表達式,也可以是其他表達式。如:6、表達式1和表達式3可以是一個簡單表達式也可以是多個表達式以逗號分割。如:運行結果為7、表達式2一般是關系表達式或邏輯表達式,但也可是數值表達式或字符表達式,只要其值非零,就執行循環體。8、各表達式中的變量一定要在for循環之前定義。如:4-10循環結構之三種循環比較while、do-while和for三種循環在具體的使用場合上是有區別的,如下:1、在知道循環次數的情況下更適合使用for循環;2、在不知道循環次數的情況下適合使用while或者do-while循環,如果有可能一次都不循環應考慮使用while循環,如果至少循環一次應考慮使用do-while循環。但是從本質上講,while,do-while和for循環之間是可以相互轉換的,如:小明被老師罰抄10次computer這個單詞,分別用三種語法寫:三種循環結構輸出的結果是完全一樣的。你更喜歡哪種循環結構呢?4-12循環結構之多重循環在功能需求上,往往一個循環滿足不了,比如:循環用一個“*”輸出,得到一下圖形上面這個例子顯然我們用一個循環不是太容易實現,這個時候我們就要用到多重循環,多重循環就是在循環結構的循環體中又出現循環結構。在實際開發中一般最多用到三層重循環。因為循環層數越多,運行時間越長,程序越復雜,所以一般用2-3層多重循環就可以了。另外不同循環之間也是可以嵌套的。多重循環在執行的過程中,外層循環為父循環,內層循環為子循環,父循環一次,子循環需要全部執行完,直到跳出循環。父循環再進入下一次,子循環繼續執行.注:一個父循環可以有多個子循環那么上面這個用“*”輸出的矩形用多重循環實現如下:4-13使用for循環打印99乘法表請使用for循環,倒序打印9*9乘法表。打印結果如下圖所示:程序分析:觀察乘號兩邊的數字,前者是遞減,后者是遞增。4-14結束語句之break語句在我們生活中,可能會由于某中原因需要中斷當前的事情,并且不能繼續進行下去。如:小明今天籃球訓練,需要運球10次,當運到5次的時候,突然肚子疼無法堅持循環,這個時候就要停止訓練。我們可以將運球看成是一個循環,那么循環5次的時候,需要中斷不繼續訓練。在C語言中,可以使用break語句進行該操作,代碼實現如下:運行結果:使用break語句時注意以下幾點:1、在沒有循環結構的情況下,break不能用在單獨的if-else語句中。2、在多層循環中,一個break語句只跳出當前循環。4-15結束語句之continue語句在我們生活中,可能會由于某中原因需要中斷當前的事情,過一會還能繼續進行。如:小明今天籃球訓練,需要運球10次,當運到5次的時候,突然來電話了,然后接完電話回來繼續訓練。我們可以將運球看成是一個循環,那么循環5次的時候,需要中斷后繼續訓練。在C語言中,可以使用continue語句進行該操作,代碼實現如下:運行結果:continue語句的作用是結束本次循環開始執行下一次循環。break語句與continue語句的區別是:break是跳出當前整個循環,continue結束本次循環開始下一次循環。4-16分支結構之switch語句C語言還提供了一種用于多分支選擇的switch語句,它的用處也不少,例如:小明對自己每周的學習和生活制定了計劃方案,每天應該做什么都詳細規劃。switch語句結構如下其執行順序如下圖:例子代碼實現:在使用switch語句時還應注意以下幾點:1、在case后的各常量表達式的值不能相同,否則會出現錯誤。2、在case子句后如果沒有break;會一直往后執行一直到遇到break;才會跳出switch語句。運行結果:學英語學C語言好好休息3、switch后面的表達式語句只能是整型或者字符類型。4、在case后,允許有多個語句,可以不用括起來。5、各case和default子句的先后順序可以變動,而不會影響程序執行結果。6、default子句可以省略不用。4-17switch與if語句的應用請使用switch語句和if.else語句,計算2008年8月8日這一天,是該年中的第幾天。程序分析: 以5月1日為例,應該先把前4個月的天數加起來,然后再加上1天即本年的第幾天。特殊情況: 在計算閏年的時候,2月是29天。4-19臭名遠揚之goto語句大家平時出門的時候都會有個目的地,我今天要去哪哪哪,然后就去了。那么C語言中也有這樣的語句,就是goto語句,goto語句是一種無條件分支語句,goto 語句的使用格式為:goto 語句標號;其中語句標號是一個標識符,該標識符一般用英文大寫并遵守標識符命名規則,這個標識符加上一個“:”一起出現在函數內某處,執行goto語句后,程序將跳轉到該標號處并執行其后的語句。goto語句通常不用,主要因為它將使程序層次不清,且不易讀,但在特定情況下,可以使用goto語句來提高程序的執行速度,所以還是少用為妙。例如:用goto語句和if語句構成循環求10以內的數之和。運行結果為:sum=55第五章 函數的秘密5-1自創函數C語言提供了大量的庫函數(右側資料下載中有),比如stdio.h提供輸出函數,但是還是滿足不了我們開發中的一些邏輯,所以這個時候需要自己定義函數,自定義函數的一般形式:注意:1、包含的內容可以省略,數據類型說明省略,默認是int類型函數;參數省略表示該函數是無參函數,參數不省略表示該函數是有參函數;2、函數名稱遵循標識符命名規范;3、自定義函數盡量放在main函數之前,如果要放在main函數后面的話,需要在main函數之前先聲明自定義函數,聲明格式為:數據類型說明 函數名稱(參數);那現在我們就自定義一個sayHello()函數:5-2函數調用自定義的函數不是放在程序中擺著看的,我們需要用到自定義的函數的時候,就得調用它,那么在調用的時候就稱之為函數調用。在C語言中,函數調用的一般形式為:函數名(參數);注意:1、對無參函數調用的時候可以將包含的省略。2、中可以是常數,變量或其它構造類型數據及表達式,個參數之間用逗號分隔。比如上一小節中的例子可以修改為:運行結果為:慕課網的小伙伴們,大家好5-3有參與無參在函數中不需要函數參數的稱之為無參函數,在函數中需要函數參數的稱之為有參函數,有參和無參函數的一般形式如下:有參函數和無參函數的唯一區別在于:函數()中多了一個參數列表。下面看一個例子對比有參和無參函數:對應輸出結果:在該例子中,我們不難發現有參函數更為靈活,輸出的圖形可以隨著n的改變而隨意變動,只要在main函數中傳遞一個參數就可以了;而在無參函數中輸出的相對就比較固定,當需要改動的時候還需要到自定義的方法內改變循環變量的值。5-4形參與實參小明和小剛都說,要早起去鍛煉,但是呢,小明每天都在睡懶覺,他只是形式上說說而已;而小剛則每天都在堅持,他是在實際行動。C語言函數中的參數也和情景中的類似有兩種。函數的參數分為形參和實參兩種,形參是在定義函數名和函數體的時候使用的參數,目的是用來接收調用該函數時傳入的參數,就類似小明,說了的話而不實際行動;實參是在調用時傳遞該函數的參數,就如小剛能實際行動起來。函數的形參和實參具有以下特點: 形參只有在被調用時才分配內存單元,在調用結束時,即刻釋放所分配的內存單元。因此,形參只有在函數內部有效。函數調用結束返回主調函數后則不能再使用該形參變量。 實參可以是常量、變量、表達式、函數等,無論實參是何種類型的量,在進行函數調用時,它們都必須具有確定的值,以便把這些值傳送給形參。因此應預先用賦值等辦法使實參獲得確定值。 在參數傳遞時,實參和形參在數量上,類型上,順序上應嚴格一致,否則會發生類型不匹配”的錯誤。例如:以下函數multiDouble(int x)實現把x乘以2再返回給函數調用處。5-5函數的返回值小明碰到一道數學選擇題問小剛,小剛算了一會給小明說計算結果是100,應選A。那么小剛給小明的反饋就可以說是小剛的一個返回值。那么函數的返回值是指函數被調用之后,執行函數體中的程序段所取得的并返回給主調函數的值。函數的返回值要注意以下幾點:1. 函數的值只能通過return語句返回主調函數。return語句的一般形式為:return 表達式 或者為: return (表達式);2. 函數值的類型和函數定義中函數的類型應保持一致。如果兩者不一致,則以函數返回類型為準,自動進行類型轉換。就如小剛說選A,那么就返回一個字符型數據,用代碼表示就是:小剛說值為100,那么就返回一個整型數據,用代碼表示就是:3. 沒有返回值的函數,返回類型為void。如果小剛算了一會沒有返回結果的話,那么用代碼表示就是:注意:void函數中可以有執行代碼塊,但是不能有返回值,另void函數中如果有return語句,該語句只能起到結束函數運行的功能。其格式為:return;5-7遞歸函數(一)從前有座山啊,山里有座廟啊,廟里有個老和尚和一個小和尚,他們在干什么呢?老和尚在給小和尚講故事,講的什么呢?講的是從前有座山.看到這,大家都會問老師你不講課,你說這個老掉牙的故事干嗎?在這說這個故事是有意義的,大家在仔細讀讀這個故事,是不是老和尚在說一件事,當碰到一個條件的時候都會再重復的從頭說起呢?那么這就要給大家引入一個新的概念遞歸,遞歸就是一個函數在它的函數體內調用它自身。執行遞歸函數將反復調用其自身,每調用一次就進入新的一層。例如:計算n的階乘可以使用以下代碼:運行結果為:5的階乘=1205-8遞歸函數(二)我們對上一小節中求5的階乘這個例子進行一下剖析,看一看他的運算過程:程序在計算5的階乘的時候,先執行遞推,當n=1或者n=0的時候返回1,再回推將計算并返回。由此可以看出遞歸函數必須有結束條件。遞歸函數特點:1. 每一級函數調用時都有自己的變量,但是函數代碼并不會得到復制,如計算5的階乘時每遞推一次變量都不同;2. 每次調用都會有一次返回,如計算5的階乘時每遞推一次都返回進行下一次;3. 遞歸函數中,位于遞歸調用前的語句和各級被調用函數具有相同的執行順序;4. 遞歸函數中,位于遞歸調用后的語句的執行順序和各個被調用函數的順序相反;5. 遞歸函數中必須有終止語句。一句話總結遞歸:自我調用且有完成狀態。5-9遞歸函數練習有5個人坐在一起,問第5個人多少歲?他說比第4個人大2歲。問第4個人歲數,他說比第3個人大2歲。問第3個人,又說比第2人大兩歲。問第2個人,說比第1個人大兩歲。最后 問第1個人,他說是10歲。請問第5個人多大?程序分析:利用遞歸的方法,遞歸分為回推和遞推兩個階段。要想知道第5個人歲數,需知道第4人的歲數,依次類推,推到第1人(10歲),再往回推。5-10局部與全局C語言中的變量,按作用域范圍可分為兩種,即局部變量和全局變量。局部變量也稱為內部變量。局部變量是在函數內作定義說明的。其作用域僅限于函數內, 離開該函數后再使用這種變量是非法的。在復合語句中也可定義變量,其作用域只在復合語句范圍內。全局變量也稱為外部變量,它是在函數外部定義的變量。它不屬于哪一個函數,它屬于一個源程序文件。其作用域是整個源程序。5-11變量存儲類別C語言根據變量的生存周期來劃分,可以分為靜態存儲方式和動態存儲方式。靜態存儲方式:是指在程序運行期間分配固定的存儲空間的方式。靜態存儲區中存放了在整個程序執行過程中都存在的變量,如全局變量。動態存儲方式:是指在程序運行期間根據需要進行動態的分配存儲空間的方式。動態存儲區中存放的變量是根據程序運行的需要而建立和釋放的,通常包括:函數形式參數;自動變量;函數調用時的現場保護和返回地址等。C語言中存儲類別又分為四類:自動(auto)、靜態(static)、寄存器的(register)和外部的(extern)。1、用關鍵字auto定義的變量為自動變量,auto可以省略,auto不寫則隱含定為“自動存儲類別”,屬于動態存儲方式。如:2、用static修飾的為靜態變量,如果定義在函數內部的,稱之為靜態局部變量;如果定義在函數外部,稱之為靜態外部變量。如下為靜態局部變量:注意:靜態局部變量屬于靜態存儲類別,在靜態存儲區內分配存儲單元,在程序整個運行期間都不釋放;靜態局部變量在編譯時賦初值,即只賦初值一次;如果在定義局部變量時不賦初值的話,則對靜態局部變量來說,編譯時自動賦初值0(對數值型變量)或空字符(對字符變量)。3、為了提高效率,C語言允許將局部變量得值放在CPU中的寄存器中,這種變量叫“寄存器變量”,用關鍵字register作聲明。例如:注意:只有局部自動變量和形式參數可以作為寄存器變量;一個計算機系統中的寄存器數目有限,不能定義任意多個寄存器變量;局部靜態變量不能定義為寄存器變量。4、用extern聲明的的變量是外部變量,外部變量的意義是某函數可以調用在該函數之后定義的變量。如:5-13內部函數與外部函數人本身是有自己的特定方法的,比如當你說話的時候,不希望是別人讓你怎么說你就怎么說吧,那么這種不能被外人調用的方法稱謂人的內部方法。人本身還有一些可以調配的方法,比如當你家人跟你說,家里沒有鹽了,你去買袋鹽,去買鹽就是他人調用你的方法,那么能被外人調用的方法稱謂外部方法。在C語言中不能被其他源文件調用的函數稱謂內部函數,內部函數由static關鍵字來定義,因此又被稱謂靜態函數,形式為:static 數據類型 函數名(參數)這里的static是對函數的作用范圍的一個限定,限定該函數只能在其所處的源文件中使用,因此在不同文件中出現相同的函數名稱的內部函數是沒有問題的。在C語言中能被其他源文件調用的函數稱謂外部函數,外部函數由extern關鍵字來定義,形式為:extern 數據類型 函數名(參數)C語言規定,在沒有指定函數的作用范圍時,系統會默認認為是外部函數,因此當需要定義外部函數時extern也可以省略。5-14綜合練習北京市出租車打車計費規則如下:1. 每公里單價計費2.3元2. 起步價13元(包含3公里)3. 晚上23點(含)至次日凌晨5點(不含)打車,每公里單價計費加收20%。4. 每次乘車加收1元錢的燃油附加稅。小明每天上下班都要打車,公司和家的距離為12公里,上午上班時間為9點,下午下班時間為6點。請編寫一個小程序計算小明每天打車的總費用。任務本節為自由練習木有驗證,大家把代碼寫好能算出結果就OK?不會了怎么辦1、可以定義一個函數,將時間和距離當作參數傳遞進去2、在自定義函數中,先判斷是否要加收價錢3、判斷公里數然后計算價錢,最后在加1塊錢燃油費第六章 數組6-1數組初體驗生活中我們經常會用到容器,比如我們去超市購物需要使用購物袋裝購買的商品。同樣我們在程序中也需要容器,只不過該容器有點特殊,它在程序中是一塊連續的,大小固定并且里面的數據類型一致的內存空間,它還有個好聽的名字叫數組。可以將數組理解為大小固定,所放物品為同類的一個購物袋,在該購物袋中的物品是按一定順序放置的。我們來看一下如何聲明一個數組:數據類型 數組名稱長度;數組只聲明也不行啊,看一下數組是如何初始化的。說到初始化,C語言中的數組初始化是有三種形式的,分別是:1、數據類型 數組名稱長度n = 元素1,元素2元素n;2、數據類型 數組名稱 = 元素1,元素2元素n;3、數據類型 數組名稱長度n;數組名稱0 = 元素1; 數組名稱1 = 元素2; 數組名稱n = 元素n+1;我們將數據放到數組中之后又如何獲取數組中的元素呢?獲取數組元素時:數組名稱元素所對應下標;如:初始化一個數組 int arr3 = 1,2,3; 那么arr0就是元素1。注意:1、數組的下標均以0開始;2、數組在初始化的時候,數組內元素的個數不能大于聲明的數組長度;3、如果采用第一種初始化方式,元素個數小于數組的長度時,多余的數組元素初始化為0;4、在聲明數組后沒有進行初始化的時候,靜態(static)和外部(extern)類型的數組元素初始化元素為0,自動(auto)類型的數組的元素初始化值不確定。6-2數組的遍歷當我們去超市回來買了一堆東西,就想要是有個機器人能幫我把東西拿出來放好,就完美了。那么在程序中,數組就可以采用循環的方式將每個元素遍歷出來,而不用人為的每次獲取指定某個位置上的元素,例如我們用for循環遍歷一個數組:數組遍歷時要注意以下幾點:1、最好避免出現數組越界訪問,循環變量最好不要超出數組的長度,比如:2、C語言的數組長度一經聲明,長度就是固定,無法改變,并且C語言并不提供計算數組長度的方法。由于C語言是沒有檢查數組長度改變或者數組越界的這個機制,可能會在編輯器中編譯并通過,但是結果就不能肯定了,因此還是不要越界或者改變數組的長度6-4數組作為函數參數前面我們學過,變量可以當作參數是吧!這里數組也是可以當做函數的參數滴,???什么?你問數組咋當參數?請看下面知識。數組可以由整個數組當作函數的參數,也可以由數組中的某個元素當作函數的參數:1、整個數組當作函數參數,即把數組名稱傳入函數中,例如:2、數組中的元素當作函數參數,即把數組中的參數傳入函數中,例如:數組作為函數參數時注意以下事項:1、數組名作為函數實參傳遞時,函數定義處作為接收參數的數組類型形參既可以指定長度也可以不指定長度。2、數組元素作為函數實參傳遞時,數組元素類型必須與形參數據類型一致。6-5數組的應用(一)話說,小明(咋又是他)班級年終考試成績出來了,老師看著這一堆的數,犯愁了,我怎么找最高的分數呢。那么有數組在就好辦多了,我們可以將所有的成績放到
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《2025年校園教師勞動合同》
- 掛靠合作合同協議書范本
- 廢木材買賣合同協議書
- 工作室合作合同協議書
- 天貓店鋪轉讓合同協議書
- 2025年澳門勞務派遣合同樣本
- 2025 汽車銷售合同(分期付款)
- 2025終止合同協議書樣本【范本】
- 2025一次性餐具定制合同
- 2025「新合同法解析」合同訂立與履行中的關鍵要點
- T/CCMA 0137-2022防撞緩沖車
- 陜西省煙草專賣局(公司)筆試試題2024
- 2025年05月廣西百色干部學院公開招聘編外工作人員8人筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解
- 老年患者護理中的并發癥預防及處理措施
- 全國統一考試考務人員網上培訓考試試題及答案
- CJ/T 259-2007城鎮燃氣用二甲醚
- MOOC 隔網的智慧-乒羽兩項-西南交通大學 中國大學慕課答案
- JTT327-2016 公路橋梁伸縮裝置通用技術條件
- 端午放假通知海報模板
- 土石方場地平整施工組織方案
- 外周血單個核細胞分離方法探討
評論
0/150
提交評論