C語言筆記
C語言一經(jīng)出現(xiàn)就以其功能豐富、表達(dá)能力強(qiáng)、靈活方便、應(yīng)用面廣等特點(diǎn)迅速在全世界普及和推廣。C語言不但執(zhí)行效率高而且可移植性好,可以用來開發(fā)應(yīng)用軟件、驅(qū)動(dòng)、操作系統(tǒng)等。C語言也是其它眾多高級(jí)語言的鼻祖語言,所以說學(xué)習(xí)C語言是進(jìn)入編程世界的必修課。Hello World
#include
注:在最新的C標(biāo)準(zhǔn)中,main函數(shù)前的類型為
int
而不是void
C語言的具體結(jié)構(gòu)
簡單來說,一個(gè)C程序就是由若干頭文件
和函數(shù)
組成。#include
就是一條預(yù)處理命令, 它的作用是通知C語言編譯系統(tǒng)在對(duì)C程序進(jìn)行正式編譯之前需做一些預(yù)處理工作。-
函數(shù)
就是實(shí)現(xiàn)代碼邏輯的一個(gè)小的單元。
必不可少之主函數(shù)
一個(gè)C程序有且只有一個(gè)主函數(shù),即main
函數(shù)。C程序就是執(zhí)行主函數(shù)里的代碼,也可以說這個(gè)主函數(shù)就是C語言中的唯一入口。- 而main前面的int就是主函數(shù)的類型.
-
printf()
是格式輸出函數(shù),這里就記住它的功能就是在屏幕上輸出指定的信息 - return是函數(shù)的返回值,根據(jù)函數(shù)類型的不同,返回的值也是不同的。
- 是轉(zhuǎn)義字符中的換行符。(注意:C程序一定是從主函數(shù)開始執(zhí)行的)
良好習(xí)慣之規(guī)范
- 一個(gè)說明或一個(gè)語句占一行,例如:包含頭文件、一個(gè)可執(zhí)行語句結(jié)束都需要換行。
- 函數(shù)體內(nèi)的語句要有明顯縮進(jìn),通常以按一下Tab鍵為一個(gè)縮進(jìn)。
- 括號(hào)要成對(duì)寫,如果需要?jiǎng)h除的話也要成對(duì)刪除。
- 當(dāng)一句可執(zhí)行語句結(jié)束的時(shí)候末尾需要有分號(hào)。
- 代碼中所有符號(hào)均為英文半角符號(hào)。
程序解釋——注釋
注釋是寫給程序員看的,不是寫給電腦看的。C語言注釋方法有兩種:
多行注釋:/* 注釋內(nèi)容 */
單行注釋://注釋一行
有名有姓的C(標(biāo)識(shí)符)
C語言規(guī)定,標(biāo)識(shí)符可以是字母(A~Z,a~z)
、數(shù)字(0~9)
、下劃線_
組成的字符串,并且第一個(gè)字符必須是字母或下劃線。在使用標(biāo)識(shí)符時(shí)還有注意以下幾點(diǎn):
- 標(biāo)識(shí)符的長度最好不要超過8位,因?yàn)樵谀承┌姹镜腃中規(guī)定標(biāo)識(shí)符前8位有效,當(dāng)兩個(gè)標(biāo)識(shí)符前8位相同時(shí),則被認(rèn)為是同一個(gè)標(biāo)識(shí)符。
-
標(biāo)識(shí)符是嚴(yán)格區(qū)分大小寫的。例如
Imooc
和imooc
是兩個(gè)不同的標(biāo)識(shí)符。 - 標(biāo)識(shí)符最好選擇有意義的英文單詞組成做到"見名知意",不要使用中文。
- 標(biāo)識(shí)符不能是C語言的關(guān)鍵字。想了解更多C語言關(guān)鍵字的知識(shí)。
變量及賦值
變量就是可以變化的量,而每個(gè)變量都會(huì)有一個(gè)名字(標(biāo)識(shí)符)。變量占據(jù)內(nèi)存中一定的存儲(chǔ)單元。使用變量之前必須先定義變量,要區(qū)分變量名和變量值是兩個(gè)不同的概念。變量定義的一般形式為:數(shù)據(jù)類型 變量名;
多個(gè)類型相同的變量:數(shù)據(jù)類型 變量名, 變量名, 變量名...;注意:在定義中不允許連續(xù)賦值,如
int a=b=c=5;
是不合法的。變量的賦值分為兩種方式:- 先聲明再賦值
- 聲明的同時(shí)賦值
基本數(shù)據(jù)類型
C語言中,數(shù)據(jù)類型可分為:- 基本數(shù)據(jù)類型
- 構(gòu)造數(shù)據(jù)類型
- 指針類型
- 空類型四大類
-
int
short int
long int
是根據(jù)編譯環(huán)境的不同,所取范圍不同。 -
而其中
short int
和long int
至少是表中所寫范圍, 但是int
在表中是以16位編譯環(huán)境寫的取值范圍。 -
另外 c語言
int
的取值范圍在于他占用的字節(jié)數(shù) ,不同的編譯器,規(guī)定是不一樣。 -
ANSI標(biāo)準(zhǔn)定義
int
是占2個(gè)字節(jié),TC是按ANSI標(biāo)準(zhǔn)的,它的int
是占2個(gè)字節(jié)的。但是在VC里,一個(gè)int
是占4個(gè)字節(jié)的。
生活中有很多信息適合使用浮點(diǎn)型數(shù)據(jù)來表示,比如:人的體重(單位:公斤)、商品價(jià)格、圓周率等等。因?yàn)榫鹊牟煌址譃?種(float,double,long double):注:C語言中不存在字符串變量,字符串只能存在字符數(shù)組中,這個(gè)后面會(huì)講。
格式化輸出語句
格式化輸出語句,也可以說是占位輸出,是將各種類型的數(shù)據(jù)按照格式化后的類型及指定的位置從計(jì)算機(jī)上顯示。其格式為:printf("輸出格式符",輸出項(xiàng))
;當(dāng)輸出語句中包含普通字符時(shí),可以采用一下格式:printf("普通字符輸出格式符", 輸出項(xiàng));注意:格式符的個(gè)數(shù)要與變量、常量或者表達(dá)式的個(gè)數(shù)一一對(duì)應(yīng)
不可改變的常量
在程序執(zhí)行過程中,值不發(fā)生改變的量稱為常量。mtianyan: C語言的常量可以分為直接常量和符號(hào)常量。-
直接常量也稱為字面量,是可以直接拿來使用,無需說明的量,比如:
- 整型常量:13、0、-13;
- 實(shí)型常量:13.33、-24.4;
- 字符常量:‘a(chǎn)’、‘M’
- 字符串常量:”I love imooc!”
#define 標(biāo)識(shí)符 常量值
#include
符號(hào)常量不可以被改變。
自動(dòng)類型轉(zhuǎn)換
數(shù)據(jù)類型存在自動(dòng)轉(zhuǎn)換的情況. 自動(dòng)轉(zhuǎn)換發(fā)生在不同數(shù)據(jù)類型運(yùn)算時(shí),在編譯的時(shí)候自動(dòng)完成。char
類型數(shù)據(jù)轉(zhuǎn)換為int
類型數(shù)據(jù)遵循ASCII
碼中的對(duì)應(yīng)值.注:字節(jié)小的可以向字節(jié)大的自動(dòng)轉(zhuǎn)換,但字節(jié)大的不能向字節(jié)小的自動(dòng)轉(zhuǎn)換
char可以轉(zhuǎn)換為int,int可以轉(zhuǎn)換為double,char可以轉(zhuǎn)換為double。但是不可以反向。
強(qiáng)制類型轉(zhuǎn)換
強(qiáng)制類型轉(zhuǎn)換是通過定義類型轉(zhuǎn)換運(yùn)算來實(shí)現(xiàn)的。其一般形式為:(數(shù)據(jù)類型) (表達(dá)式)其作用是把表達(dá)式的運(yùn)算結(jié)果強(qiáng)制轉(zhuǎn)換成類型說明符所表示的類型在使用強(qiáng)制轉(zhuǎn)換時(shí)應(yīng)注意以下問題:
-
數(shù)據(jù)類型和表達(dá)式都必須加括號(hào), 如把
(int)(x/2+y)
寫成(int)x/2+y
則成了把x
轉(zhuǎn)換成int
型之后再除2
再與y
相加了。 - 轉(zhuǎn)換后不會(huì)改變原數(shù)據(jù)的類型及變量值,只在本次運(yùn)算中臨時(shí)性轉(zhuǎn)換。
- 強(qiáng)制轉(zhuǎn)換后的運(yùn)算結(jié)果不遵循四舍五入原則。
運(yùn)算符號(hào)
C語言中運(yùn)算符:※ 算術(shù)運(yùn)算符 ※ 賦值運(yùn)算符 ※ 關(guān)系運(yùn)算符 ※ 邏輯運(yùn)算符 ※ 三目運(yùn)算符
算術(shù)運(yùn)算符
c語言基本運(yùn)算符:除法運(yùn)算中注意:
如果相除的兩個(gè)數(shù)都是整數(shù)的話,則結(jié)果也為整數(shù),小數(shù)部分省略,如8/3 = 2
;
而兩數(shù)中有一個(gè)為小數(shù),結(jié)果則為小數(shù),如:9.0/2 = 4.500000
。
mtianyan:取余運(yùn)算中注意:
該運(yùn)算只適合用兩個(gè)整數(shù)進(jìn)行取余運(yùn)算,如:10%3 = 1
;
mtianyan: notes: 而10.0%3則是錯(cuò)誤的;運(yùn)算后的符號(hào)取決于被模數(shù)的符號(hào),如mtianyan:(-10)%3 = -1;
而10%(-3) = 1;
%%
表示這里就是一個(gè)%
符.注:C語言中沒有乘方這個(gè)運(yùn)算符,也不能用×, ÷
等算術(shù)符號(hào)。自增與自減運(yùn)算符
-
自增運(yùn)算符為
++
,其功能是使變量的值自增1 -
自減運(yùn)算符為
--
,其功能是使變量值自減1。
賦值運(yùn)算符
C語言中賦值運(yùn)算符分為簡單賦值運(yùn)算符和復(fù)合賦值運(yùn)算符簡單賦值運(yùn)算符=
號(hào)了,下面講一下復(fù)合賦值運(yùn)算符:復(fù)合賦值運(yùn)算符就是在簡單賦值符=
之前加上其它運(yùn)算符構(gòu)成。
例如+=、-=、*=、/=、%=
分析:定義整型變量a并賦值為3,a += 5;
這個(gè)算式就等價(jià)于a = a+5;
將變量a和5相加之后再賦值給a。注意:復(fù)合運(yùn)算符中運(yùn)算符和等號(hào)之間是不存在空格的。關(guān)系運(yùn)算符
C語言中的關(guān)系運(yùn)算符:關(guān)系表達(dá)式的值是真
和假
,在C程序用整數(shù)1
和0
表示。注意:>=, <=, ==, !=
這種符號(hào)之間不能存在空格。邏輯運(yùn)算符
C語言中的邏輯運(yùn)算符:邏輯運(yùn)算的值也是有兩種分別為真
和假
,C語言中用整型的1和0來表示。其求值規(guī)則如下:-
與運(yùn)算
&&
參與運(yùn)算的兩個(gè)變量都為真時(shí),結(jié)果才為真,否則為假。例如:5>=5 && 7>5 ,運(yùn)算結(jié)果為真;
-
或運(yùn)算
||
參與運(yùn)算的兩個(gè)變量只要有一個(gè)為真,結(jié)果就為真。兩個(gè)量都為假時(shí),結(jié)果為假。例如:5>=5||5>8,運(yùn)算結(jié)果為真;
-
非運(yùn)算
!
參與運(yùn)算的變量為真時(shí),結(jié)果為假;參與運(yùn)算量為假時(shí),結(jié)果為真。例如:!(5>8),運(yùn)算結(jié)果為真。
三目運(yùn)算符
C語言中的三目運(yùn)算符:?:
,其格式為:表達(dá)式1 ? 表達(dá)式2 : 表達(dá)式3;執(zhí)行過程是:
先判斷表達(dá)式1的值是否為真,如果是真的話執(zhí)行表達(dá)式2;如果是假的話執(zhí)行表達(dá)式3。
#include
運(yùn)算符大比拼之優(yōu)先級(jí)比較
各種運(yùn)算符號(hào)的順序:優(yōu)先級(jí)別為1的優(yōu)先級(jí)最高,優(yōu)先級(jí)別為10的優(yōu)先級(jí)別最低。分支結(jié)構(gòu)之簡單if語句
C語言中的分支結(jié)構(gòu)語句中的if條件
語句。簡單if語句的基本結(jié)構(gòu)如下:if(表達(dá)式) { 執(zhí)行代碼塊; }其語義是:如果表達(dá)式的值為真,則執(zhí)行其后的語句,否則不執(zhí)行該語句。注意:
if()
后面沒有分號(hào),直接寫{}
分支結(jié)構(gòu)之簡單if-else語句
簡單的if-else
語句的基本結(jié)構(gòu):語義是: 如果表達(dá)式的值為真,則執(zhí)行代碼塊1,否則執(zhí)行代碼塊2。注意:
if()
后面沒有分號(hào),直接寫{},else后面也沒有分號(hào),直接寫{}
分支結(jié)構(gòu)之多重if-else語句
C語言中多重if-else
語句,其結(jié)構(gòu)如下:語義是:依次判斷表達(dá)式的值,當(dāng)出現(xiàn)某個(gè)值為真時(shí),則執(zhí)行對(duì)應(yīng)代碼塊,否則執(zhí)行代碼塊n。注意:當(dāng)某一條件為真的時(shí)候,則不會(huì)向下執(zhí)行該分支結(jié)構(gòu)的其他語句。分支結(jié)構(gòu)之嵌套if-else語句
C語言中嵌套if-else
語句。嵌套if-else
語句的意思,就是在if-else
語句中,再寫if-else
語句。其一般形式為:循環(huán)結(jié)構(gòu)之while循環(huán)
反復(fù)不停的執(zhí)行某個(gè)動(dòng)作就是江湖人稱的循環(huán)。C語言中有三種循環(huán)結(jié)構(gòu),先看一下C語言while循環(huán)的結(jié)構(gòu)其中表達(dá)式表示循環(huán)條件,執(zhí)行代碼塊為循環(huán)體。
while語句的語義是:計(jì)算表達(dá)式的值,當(dāng)值為真(非0)
時(shí), 執(zhí)行循環(huán)體代碼塊。
- while語句中的表達(dá)式一般是關(guān)系表達(dá)或邏輯表達(dá)式,當(dāng)表達(dá)式的值為假時(shí)不執(zhí)行循環(huán)體,反之則循環(huán)體一直執(zhí)行。
- 一定要記著在循環(huán)體中改變循環(huán)變量的值,否則會(huì)出現(xiàn)死循環(huán)(無休止的執(zhí)行)。
-
循環(huán)體如果包括有一個(gè)以上的語句,則必須用
{}
括起來,組成復(fù)合語句。
循環(huán)結(jié)構(gòu)之do-while循環(huán)
C語言中的do-while
循環(huán),一般形式如下:do-while循環(huán)語句的語義是:它先執(zhí)行循環(huán)中的執(zhí)行代碼塊,然后再判斷while中表達(dá)式是否為真,如果為真則繼續(xù)循環(huán);如果為假,則終止循環(huán)。因此,do-while循環(huán)至少要執(zhí)行一次循環(huán)語句。注意:mtianyan: 使用
do-while
結(jié)構(gòu)語句時(shí),while括號(hào)后必須有分號(hào)。循環(huán)結(jié)構(gòu)之for循環(huán)(一)
c語言中for循環(huán)一般形式:它的執(zhí)行過程如下:- 執(zhí)行表達(dá)式1,對(duì)循環(huán)變量做初始化;
- 判斷表達(dá)式2,若其值為真(非0),則執(zhí)行for循環(huán)體中執(zhí)行代碼塊,然后向下執(zhí)行;若其值為假(0),則結(jié)束循環(huán);
- 執(zhí)行表達(dá)式3,(i++)等對(duì)于循環(huán)變量進(jìn)行操作的語句;
- 執(zhí)行for循環(huán)中執(zhí)行代碼塊后執(zhí)行第二步;第一步初始化只會(huì)執(zhí)行一次。
- 循環(huán)結(jié)束,程序繼續(xù)向下執(zhí)行。
循環(huán)結(jié)構(gòu)之for循環(huán)(二)
在for循環(huán)中:- 表達(dá)式1是一個(gè)或多個(gè)賦值語句,它用來控制變量的初始值;
- 表達(dá)式2是一個(gè)關(guān)系表達(dá)式,它決定什么時(shí)候退出循環(huán);
- 表達(dá)式3是循環(huán)變量的步進(jìn)值,定義控制循環(huán)變量每循環(huán)一次后按什么方式變化。
-
這三部分之間用分號(hào)
;
分開。
-
for循環(huán)中的“表達(dá)式1、2、3”均可不寫為空,但兩個(gè)分號(hào)
(;;)
不能缺省。 - 省略“表達(dá)式1(循環(huán)變量賦初值)”,表示不對(duì)循環(huán)變量賦初始值。
- 省略“表達(dá)式2(循環(huán)條件)”,不做其它處理,循環(huán)一直執(zhí)行(死循環(huán))。
- 省略“表達(dá)式3(循環(huán)變量增減量)”,不做其他處理,循環(huán)一直執(zhí)行(死循環(huán))。
- 表達(dá)式1可以是設(shè)置循環(huán)變量的初值的賦值表達(dá)式,也可以是其他表達(dá)式。
- 表達(dá)式1和表達(dá)式3可以是一個(gè)簡單表達(dá)式也可以是多個(gè)表達(dá)式以逗號(hào)分割。
- 表達(dá)式2一般是關(guān)系表達(dá)式或邏輯表達(dá)式,但也可是數(shù)值表達(dá)式或字符表達(dá)式,只要其值非零,就執(zhí)行循環(huán)體。
- 各表達(dá)式中的變量一定要在for循環(huán)之前定義。
怎么獲得一個(gè)數(shù)的百位,十位和個(gè)位
-
百位數(shù):
num/100
可以獲得,因?yàn)?/span>int
是整數(shù)型,小數(shù)部分會(huì)省略。比如765/100
的結(jié)果是7
-
十位數(shù):
num%100/10
。比如765%100
先得到65
,65/10
得到6
-
個(gè)位數(shù):
num%10
。765%10
得到5
循環(huán)結(jié)構(gòu)之三種循環(huán)比較
while, do-while和for三種循環(huán)在具體的使用場合上是有區(qū)別的,如下:
- 在知道循環(huán)次數(shù)的情況下更適合使用for循環(huán);
- 在不知道循環(huán)次數(shù)的情況下適合使用while或者do-while循環(huán):
- 如果有可能一次都不循環(huán)應(yīng)考慮使用while循環(huán)
- 如果至少循環(huán)一次應(yīng)考慮使用do-while循環(huán)。
循環(huán)結(jié)構(gòu)之多重循環(huán)
多重循環(huán)就是在循環(huán)結(jié)構(gòu)的循環(huán)體中又出現(xiàn)循環(huán)結(jié)構(gòu)。在實(shí)際開發(fā)中一般最多用到三層重循環(huán)。因?yàn)檠h(huán)層數(shù)越多,運(yùn)行時(shí)間越長,程序越復(fù)雜,所以一般用2-3層多重循環(huán)就可以了。另外不同循環(huán)之間也是可以嵌套的。多重循環(huán)在執(zhí)行的過程中,外層循環(huán)為父循環(huán),內(nèi)層循環(huán)為子循環(huán),
父循環(huán)一次,子循環(huán)需要全部執(zhí)行完,直到跳出循環(huán)。父循環(huán)再進(jìn)入下一次,子循環(huán)繼續(xù)執(zhí)行...mtianyan: 打印三角形星星堆
#include
使用for循環(huán)打印9×9乘法表
#include
結(jié)束語句之break語句
那么循環(huán)5次的時(shí)候,需要中斷不繼續(xù)訓(xùn)練。在C語言中,可以使用break
語句進(jìn)行該操作.使用break
語句時(shí)注意以下幾點(diǎn):
- 在沒有循環(huán)結(jié)構(gòu)的情況下,break不能用在單獨(dú)的if-else語句中。
- 在多層循環(huán)中,一個(gè)break語句只跳出當(dāng)前循環(huán)。
結(jié)束語句之continue語句
那么循環(huán)5次的時(shí)候,需要中斷后繼續(xù)訓(xùn)練。在C語言中,可以使用continue
語句進(jìn)行該操作continue語句的作用是結(jié)束本次循環(huán)開始執(zhí)行下一次循環(huán)。break語句與continue語句的區(qū)別是:
break是跳出當(dāng)前整個(gè)循環(huán),continue是結(jié)束本次循環(huán)開始下一次循環(huán)。
分支結(jié)構(gòu)之switch語句
switch語句結(jié)構(gòu)如下:mtianyan:switch
語句時(shí)還應(yīng)注意以下幾點(diǎn):- 在case后的各常量表達(dá)式的值不能相同,否則會(huì)出現(xiàn)錯(cuò)誤。
- 在case子句后如果沒有break;會(huì)一直往后執(zhí)行一直到遇到break;才會(huì)跳出switch語句。
- switch后面的表達(dá)式語句只能是整型或者字符類型。
- 在case后,允許有多個(gè)語句,可以不用{}括起來。
- 各case和default子句的先后順序可以變動(dòng),而不會(huì)影響程序執(zhí)行結(jié)果。
-
default
子句可以省略不用。
mtianyan: switch與if語句的應(yīng)用(計(jì)算是該年的第幾天)
#include
臭名遠(yuǎn)揚(yáng)之goto語句
C語言中也有這樣的語句,就是goto
語句,goto語句是一種無條件分支語句.goto 語句的使用格式為:
goto 語句標(biāo)號(hào);
自創(chuàng)函數(shù)
C語言提供了大量的庫函數(shù): 比如stdio.h
提供輸出函數(shù)自定義函數(shù)的一般形式:注意:-
[]
包含的內(nèi)容可以省略,數(shù)據(jù)類型說明省略,默認(rèn)是int
類型函數(shù); 參數(shù)省略表示該函數(shù)是無參函數(shù),參數(shù)不省略表示該函數(shù)是有參函數(shù); - 函數(shù)名稱遵循標(biāo)識(shí)符命名規(guī)范;
-
mtianyan: 自定義函數(shù)盡量放在
main
函數(shù)之前,如果要放在main函數(shù)后面的話, 需要在main函數(shù)之前先聲明自定義函數(shù),聲明格式為:
[數(shù)據(jù)類型說明] 函數(shù)名稱([參數(shù)]);
函數(shù)調(diào)用
我們需要用到自定義的函數(shù)的時(shí)候,就得調(diào)用它,那么在調(diào)用的時(shí)候就稱之為函數(shù)調(diào)用。在C語言中,函數(shù)調(diào)用的一般形式為:函數(shù)名([參數(shù)]);注意:
- 對(duì)無參函數(shù)調(diào)用的時(shí)候可以將
[]
包含的省略。
-
[]
中可以是常數(shù),變量或其它構(gòu)造類型數(shù)據(jù)及表達(dá)式,多個(gè)參數(shù)之間用逗號(hào)分隔。
有參與無參
在函數(shù)中不需要函數(shù)參數(shù)的稱之為無參函數(shù),在函數(shù)中需要函數(shù)參數(shù)的稱之為有參函數(shù)。有參和無參函數(shù)的一般形式如下:有參函數(shù)和無參函數(shù)的唯一區(qū)別在于:函數(shù)()
中多了一個(gè)參數(shù)列表。- 有參函數(shù)更為靈活,輸出的內(nèi)容可以隨著n的改變而隨意變動(dòng),只要在main函數(shù)中傳遞一個(gè)參數(shù)就可以了
- 而在無參函數(shù)中輸出的相對(duì)就比較固定,當(dāng)需要改動(dòng)的時(shí)候還需要到自定義的方法內(nèi)改變循環(huán)變量的值。
mtianyan: 形參與實(shí)參
函數(shù)的參數(shù)分為形參和實(shí)參兩種。- 形參是在定義函數(shù)名和函數(shù)體的時(shí)候使用的參數(shù),目的是用來接收調(diào)用該函數(shù)時(shí)傳入的參數(shù)。
就類似小明,說了的話而不實(shí)際行動(dòng);
- 實(shí)參是在調(diào)用時(shí)傳遞該函數(shù)的參數(shù)。
就如小剛能實(shí)際行動(dòng)起來。函數(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ò)誤。
函數(shù)的返回值
函數(shù)的返回值是指函數(shù)被調(diào)用之后,執(zhí)行函數(shù)體中的程序段所取得的并返回給主調(diào)函數(shù)的值。函數(shù)的返回值要注意以下幾點(diǎn):-
函數(shù)的值只能通過
return
語句返回主調(diào)函數(shù)。
return語句的一般形式為:
return 表達(dá)式 或者為:return (表達(dá)式);
- 函數(shù)值的類型和函數(shù)定義中函數(shù)的類型應(yīng)保持一致。
notes: 如果兩者不一致,則以函數(shù)返回類型為準(zhǔn),自動(dòng)進(jìn)行類型轉(zhuǎn)換。
-
沒有返回值的函數(shù),返回類型為
void
。
void
函數(shù)中可以有執(zhí)行代碼塊,但是不能有返回值.
mtianyan:void
函數(shù)中如果有return
語句,該語句只能起到結(jié)束函數(shù)運(yùn)行的功能。其格式為:return;
遞歸函數(shù)(一)
遞歸就是一個(gè)函數(shù)在它的函數(shù)體內(nèi)調(diào)用它自身。執(zhí)行遞歸函數(shù)將反復(fù)調(diào)用其自身,每調(diào)用一次就進(jìn)入新的一層。注意遞歸函數(shù)必須有結(jié)束條件
遞歸函數(shù)(二)
5的階乘這個(gè)例子進(jìn)行一下剖析,看一看他的運(yùn)算過程:程序在計(jì)算5的階乘的時(shí)候,先執(zhí)行遞推,當(dāng)n=1或者n=0的時(shí)候返回1,再回推將計(jì)算并返回。由此可以看出遞歸函數(shù)必須有結(jié)束條件。遞歸函數(shù)特點(diǎn):- 每一級(jí)函數(shù)調(diào)用時(shí)都有自己的變量,但是函數(shù)代碼并不會(huì)得到復(fù)制,如計(jì)算5的階乘時(shí)每遞推一次變量都不同;
- 每次調(diào)用都會(huì)有一次返回,如計(jì)算5的階乘時(shí)每遞推一次都返回進(jìn)行下一次;
- 遞歸函數(shù)中,位于遞歸調(diào)用前的語句和各級(jí)被調(diào)用函數(shù)具有相同的執(zhí)行順序;
- 遞歸函數(shù)中,位于遞歸調(diào)用后的語句的執(zhí)行順序和各個(gè)被調(diào)用函數(shù)的順序相反;
- 遞歸函數(shù)中必須有終止語句。
任務(wù) 猴子第一天摘下N個(gè)桃子,當(dāng)時(shí)就吃了一半,還不過癮,就又多吃了一個(gè)。第二天又將剩下的桃子吃掉一半,又多吃了一個(gè)。以后每天都吃前一天剩下的一半零一個(gè)。到第10天在想吃的時(shí)候就剩一個(gè)桃子了,問第一天共摘下來多少個(gè)桃子?并反向打印每天所剩桃子數(shù)。
#include
遞歸demo。
有5個(gè)人坐在一起,問第5個(gè)人多少歲?他說比第4個(gè)人大2歲。問第4個(gè)人歲數(shù),他說比第3個(gè)人大2歲。問第3個(gè)人,又說比第2人大兩歲。問第2個(gè)人,說比第1個(gè)人大兩歲。最后 問第1個(gè)人,他說是10歲。請(qǐng)問第5個(gè)人多大?程序分析: 利用遞歸的方法,遞歸分為回推和遞推兩個(gè)階段。要想知道第5個(gè)人歲數(shù),需知道第4人的歲數(shù),依次類推,推到第1人(10歲),再往回推。
#include
局部與全局
C語言中的變量,按作用域范圍可分為兩種,即局部變量和全局變量。- 局部變量也稱為內(nèi)部變量。局部變量是在函數(shù)內(nèi)作定義說明的。其作用域僅限于函數(shù)內(nèi), 離開該函數(shù)后再使用這種變量是非法的。在復(fù)合語句中也可定義變量,其作用域只在復(fù)合語句范圍內(nèi)。
- 全局變量也稱為外部變量,它是在函數(shù)外部定義的變量。它不屬于哪一個(gè)函數(shù),它屬于一個(gè)源程序文件。其作用域是整個(gè)源程序。
變量存儲(chǔ)類別
mtianyan: 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ù)和返回地址等。
內(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是對(duì)函數(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也可以省略。
外部函數(shù)練習(xí)
hello.c
#include
test.c
#include
綜合練習(xí)
北京市出租車打車計(jì)費(fèi)規(guī)則如下:
- 每公里單價(jià)計(jì)費(fèi)2.3元
- 起步價(jià)13元(包含3公里)
- 晚上23點(diǎn)(含)至次日凌晨5點(diǎn)(不含)打車,每公里單價(jià)計(jì)費(fèi)加收20%。
- 每次乘車加收1元錢的燃油附加稅。 小明每天上下班都要打車,公司和家的距離為12公里,上午上班時(shí)間為9點(diǎn),下午下班時(shí)間為6點(diǎn)。 請(qǐng)編寫一個(gè)小程序計(jì)算小明每天打車的總費(fèi)用。
#include
數(shù)組初體驗(yàn)
程序中也需要容器,只不過該容器有點(diǎn)特殊,它在程序中是一塊連續(xù)的,大小固定并且里面的數(shù)據(jù)類型一致的內(nèi)存空間,它還有個(gè)好聽的名字叫數(shù)組。可以將數(shù)組理解為大小固定,所放物品為同類的一個(gè)購物袋,在該購 物袋中的物品是按一定順序放置的。我們來看一下如何聲明一個(gè)數(shù)組:數(shù)據(jù)類型 數(shù)組名稱[長度];數(shù)組只聲明也不行啊,看一下數(shù)組是如何初始化的。說到初始化,C語言中的數(shù)組初始化是有三種形式的,分別是:
- 數(shù)據(jù)類型 數(shù)組名稱[長度n] = {元素1,元素2…元素n};
- 數(shù)據(jù)類型 數(shù)組名稱[] = {元素1,元素2…元素n};
- 數(shù)據(jù)類型 數(shù)組名稱[長度n]; 數(shù)組名稱[0] = 元素1; 數(shù)組名稱[1] = 元素2; 數(shù)組名稱[n-1] = 元素n;
獲取數(shù)組元素時(shí):數(shù)組名稱[元素所對(duì)應(yīng)下標(biāo)];如:初始化一個(gè)數(shù)組
int arr[3] = {1,2,3};
那么arr[0]就是元素1。注意:- 數(shù)組的下標(biāo)均以0開始;
- 數(shù)組在初始化的時(shí)候,數(shù)組內(nèi)元素的個(gè)數(shù)不能大于聲明的數(shù)組長度;
- mtianyan: 如果采用第一種初始化方式,元素個(gè)數(shù)小于數(shù)組的長度時(shí),多余的數(shù)組元素初始化為0;
- 在聲明數(shù)組后沒有進(jìn)行初始化的時(shí)候,靜態(tài)(static)和外部(extern)類型的數(shù)組元素初始化元素為0,自動(dòng)(auto)類型的數(shù)組的元素初始化值不確定。
數(shù)組的遍歷
數(shù)組就可以采用循環(huán)的方式將每個(gè)元素遍歷出來,而不用人為的每次獲取指定某個(gè)位置上的元素,例如我們用for循環(huán)遍歷一個(gè)數(shù)組:注意以下幾點(diǎn):- 最好避免出現(xiàn)數(shù)組越界訪問,循環(huán)變量最好不要超出數(shù)組的長度.
- C語言的數(shù)組長度一經(jīng)聲明,長度就是固定,無法改變,并且C語言并不提供計(jì)算數(shù)組長度的方法。
intlength=sizeof(arr)/sizeof(arr[0]);
數(shù)組作為函數(shù)參數(shù)
數(shù)組可以由整個(gè)數(shù)組當(dāng)作函數(shù)的參數(shù),也可以由數(shù)組中的某個(gè)元素當(dāng)作函數(shù)的參數(shù):- 整個(gè)數(shù)組當(dāng)作函數(shù)參數(shù),即把數(shù)組名稱傳入函數(shù)中,例如:
- 數(shù)組中的元素當(dāng)作函數(shù)參數(shù),即把數(shù)組中的參數(shù)傳入函數(shù)中,例如:
- 數(shù)組名作為函數(shù)實(shí)參傳遞時(shí),函數(shù)定義處作為接收參數(shù)的數(shù)組類型形參既可以指定長度也可以不指定長度。
- 數(shù)組元素作為函數(shù)實(shí)參傳遞時(shí),數(shù)組元素類型必須與形參數(shù)據(jù)類型一致。
mtianyan: 數(shù)組的應(yīng)用(一)[冒泡排序]
以升序排序?yàn)槔芭菖判虻乃枷耄合噜徳貎蓛杀容^,將較大的數(shù)字放在后面,直到將所有數(shù)字全部排序。就像小學(xué)排隊(duì)時(shí)按大小個(gè)排一樣,將一個(gè)同學(xué)拉出來和后面的比比,如果高就放后面,一直把隊(duì)伍排好。
#include
數(shù)組的應(yīng)用(二)[數(shù)組查找功能]
當(dāng)我們購物之后,拎著購物袋回到家,會(huì)一一檢查購物袋中的物品看是否缺少或者都是想購之物。那么應(yīng)用到程序中,可以使用數(shù)組查找功能,看看是否存在該數(shù)據(jù),如果存在并返回該元素的下標(biāo)。#include
字符串與數(shù)組
C語言中,是沒有辦法直接定義字符串?dāng)?shù)據(jù)類型的,但是我們可以使用數(shù)組來定義我們所要的字符串。一般有以下兩種格式:- char 字符串名稱[長度] = "字符串值";
- char 字符串名稱[長度] = {'字符1','字符2',...,'字符n',''};
- []中的長度是可以省略不寫的;
- 采用第2種方式的時(shí)候最后一個(gè)元素必須是'',''表示字符串的結(jié)束標(biāo)志;
-
采用第2種方式的時(shí)候在數(shù)組中不能寫中文。 在輸出字符串的時(shí)候要使用:
printf(“%s”,字符數(shù)組名字);
或者puts(字符數(shù)組名字)
;。
mtianyan:字符串函數(shù)
常用的字符串函數(shù)如下(strlen,strcmp,strcpy,strcat,atoi):使用字符串函數(shù)注意以下事項(xiàng):- strlen()獲取字符串的長度,在字符串長度中是不包括‘’而且漢字和字母的長度是不一樣的。比如:
- strcmp()在比較的時(shí)候會(huì)把字符串先轉(zhuǎn)換成ASCII碼再進(jìn)行比較,返回的結(jié)果為0表示s1和s2的ASCII碼相等,返回結(jié)果為1表示s1比s2的ASCII碼大,返回結(jié)果為-1表示s1比s2的ASCII碼小,例如:
- strcpy()拷貝之后會(huì)覆蓋原來字符串且不能對(duì)字符串常量進(jìn)行拷貝,比如:
- strcat在使用時(shí)s1與s2指的內(nèi)存空間不能重疊,且s1要有足夠的空間來容納要復(fù)制的字符串,如:
多維數(shù)組
多維數(shù)組的定義格式是: 數(shù)據(jù)類型 數(shù)組名稱[常量表達(dá)式1][常量表達(dá)式2]...[常量表達(dá)式n];定義了一個(gè)名稱為num,數(shù)據(jù)類型為int的二維數(shù)組。其中第一個(gè)[3]表示第一維下標(biāo)的長度,就像購物時(shí)分類存放的購物;第二個(gè)[3]表示第二維下標(biāo)的長度,就像每個(gè)購物袋中的元素。多維數(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í)數(shù)組聲明必須指定列的維數(shù)。mtianyan: 因?yàn)橄到y(tǒng)會(huì)根據(jù)數(shù)組中元素的總個(gè)數(shù)來分配空間,當(dāng)知道元素總個(gè)數(shù)以及列的維數(shù)后,會(huì)直接計(jì)算出行的維數(shù);
- 采用第二種初始化時(shí)數(shù)組聲明必須同時(shí)指定行和列的維數(shù)。
二維數(shù)組定義的時(shí)候,可以不指定行的數(shù)量,但是必須指定列的數(shù)量。
多維數(shù)組的遍歷
多維數(shù)組也是存在遍歷的,和一維數(shù)組遍歷一樣,也是需要用到循環(huán)。不一樣的就是多維數(shù)組需要采用嵌套循環(huán)。注意:多維數(shù)組的每一維下標(biāo)均不能越界。綜合練習(xí):
#include
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
-
C語言
+關(guān)注
關(guān)注
180文章
7598瀏覽量
136197 -
變量
+關(guān)注
關(guān)注
0文章
613瀏覽量
28329 -
數(shù)組
+關(guān)注
關(guān)注
1文章
415瀏覽量
25908
原文標(biāo)題:辛苦整理的C語言筆記,一學(xué)就會(huì)
文章出處:【微信號(hào):巧學(xué)模電數(shù)電單片機(jī),微信公眾號(hào):巧學(xué)模電數(shù)電單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
自己辛苦整理的西鐵城晶振資料卻被別人占有
最氣憤的莫過于自己辛苦整理合成的資料被被人占位一己之用,而且享受到的好處還遠(yuǎn)遠(yuǎn)趕超我這個(gè)辛苦付出的人 今天是星期一,
發(fā)表于 11-19 09:05
C語言自動(dòng)整理軟件
有時(shí)候我們寫程序會(huì)有自己的書寫風(fēng)格,但是別人不一定能習(xí)慣,我在網(wǎng)上找了一個(gè)軟件:C語言自動(dòng)整理軟件。感覺不錯(cuò),至少可以在給別人代碼的時(shí)候
發(fā)表于 09-25 15:37
C語言代碼自動(dòng)整理工具
C語言編程時(shí)自動(dòng)按照C語言規(guī)則自動(dòng)整理,讓你養(yǎng)成編程良好風(fēng)格!
發(fā)表于 01-11 14:52
?32次下載
Keil軟件“C語言”與“匯編”混編 —— 相關(guān)知識(shí)整理
Keil軟件“C語言”與“匯編”混編 —— 相關(guān)知識(shí)整理
發(fā)表于 09-21 14:15
?5次下載
C語言整理注釋刪除工具應(yīng)用程序免費(fèi)下載
本文檔的主要內(nèi)容詳細(xì)介紹的是C語言整理注釋刪除工具應(yīng)用程序免費(fèi)下載。
發(fā)表于 12-11 17:49
?15次下載
2019年最新的C語言基礎(chǔ)知識(shí)合集整理
不管是班科生還是非班科生,在學(xué)習(xí)C語言的路途上是否感覺到困難,不知道如何入手C語言呢??那么接下來小編為大家整理了
STM32中重要的C語言知識(shí)點(diǎn)整理
說在前面的話 一位初學(xué)單片機(jī)的小伙伴讓我推薦C語言書籍,因?yàn)?b class='flag-5'>C語言基礎(chǔ)比較差,想把C
初學(xué)者福利!花兩天時(shí)間整理的STM32中的一些C語言知識(shí)點(diǎn)
說在前面的話一位初學(xué)單片機(jī)的小伙伴讓我推薦C語言書籍,因?yàn)?b class='flag-5'>C語言基礎(chǔ)比較差,想把C
發(fā)表于 11-30 13:36
?12次下載
C語言和STM32學(xué)習(xí)的一些學(xué)習(xí)筆記
自己總結(jié)的一些C語言和STM32F1學(xué)習(xí)的一些筆記,適合想快速了解學(xué)習(xí)C
發(fā)表于 03-24 14:53
?36次下載
評(píng)論