一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

全面的C語(yǔ)言入門(mén)筆記整理

STM32嵌入式開(kāi)發(fā) ? 來(lái)源:STM32嵌入式開(kāi)發(fā) ? 作者:STM32嵌入式開(kāi)發(fā) ? 2022-04-25 14:56 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

C語(yǔ)言一經(jīng)出現(xiàn)就以其功能豐富、表達(dá)能力強(qiáng)、靈活方便、應(yīng)用面廣等特點(diǎn)迅速在全世界普及和推廣。C語(yǔ)言不但執(zhí)行效率高而且可移植性好,可以用來(lái)開(kāi)發(fā)應(yīng)用軟件、驅(qū)動(dòng)、操作系統(tǒng)等。C語(yǔ)言也是其它眾多高級(jí)語(yǔ)言的鼻祖語(yǔ)言,所以說(shuō)學(xué)習(xí)C語(yǔ)言是進(jìn)入編程世界的必修課。

hello,world

#include int main(){/*在雙引號(hào)中間輸入Hello World*/printf("Hello World");return 0; }

注:在最新的C標(biāo)準(zhǔn)中,main函數(shù)前的類型為int而不是void

c語(yǔ)言的具體結(jié)構(gòu)

簡(jiǎn)單來(lái)說(shuō),一個(gè)C程序就是由若干頭文件函數(shù)組成。

2b271fa4-c446-11ec-bce3-dac502259ad0.png

#include 就是一條預(yù)處理命令, 它的作用是通知C語(yǔ)言編譯系統(tǒng)在對(duì)C程序進(jìn)行正式編譯之前需做一些預(yù)處理工作。

  • 函數(shù)就是實(shí)現(xiàn)代碼邏輯的一個(gè)小的單元。

必不可少之主函數(shù)

一個(gè)C程序有且只有一個(gè)主函數(shù),即main函數(shù)。

2b39ad7c-c446-11ec-bce3-dac502259ad0.png

C程序就是執(zhí)行主函數(shù)里的代碼,也可以說(shuō)這個(gè)主函數(shù)就是C語(yǔ)言中的唯一入口。

  • main前面的int就是主函數(shù)的類型.

  • printf()格式輸出函數(shù),這里就記住它的功能就是在屏幕上輸出指定的信息

  • return是函數(shù)的返回值,根據(jù)函數(shù)類型的不同,返回的值也是不同的。

  • 是轉(zhuǎn)義字符中的換行符。(注意:C程序一定是從主函數(shù)開(kāi)始執(zhí)行的)

良好習(xí)慣之規(guī)范

  1. 一個(gè)說(shuō)明或一個(gè)語(yǔ)句占一行,例如:包含頭文件、一個(gè)可執(zhí)行語(yǔ)句結(jié)束都需要換行

  2. 函數(shù)體內(nèi)的語(yǔ)句要有明顯縮進(jìn),通常以按一下Tab鍵為一個(gè)縮進(jìn)。

  3. 括號(hào)要成對(duì)寫(xiě),如果需要?jiǎng)h除的話也要成對(duì)刪除

  4. 當(dāng)一句可執(zhí)行語(yǔ)句結(jié)束的時(shí)候末尾需要有分號(hào)。

  5. 代碼中所有符號(hào)均為英文半角符號(hào)。

2b4aa852-c446-11ec-bce3-dac502259ad0.png

程序解釋——注釋

注釋是寫(xiě)給程序員看的,不是寫(xiě)給電腦看的。

C語(yǔ)言注釋方法有兩種:

多行注釋:/* 注釋內(nèi)容 */

單行注釋://注釋一行

有名有姓的C(標(biāo)識(shí)符)

C語(yǔ)言規(guī)定,標(biāo)識(shí)符可以是字母(A~Z,a~z)、數(shù)字(0~9)、下劃線_組成的字符串,并且第一個(gè)字符必須是字母或下劃線。在使用標(biāo)識(shí)符時(shí)還有注意以下幾點(diǎn):

  1. 標(biāo)識(shí)符的長(zhǎng)度最好不要超過(guò)8位,因?yàn)樵谀承┌姹镜腃中規(guī)定標(biāo)識(shí)符前8位有效,當(dāng)兩個(gè)標(biāo)識(shí)符前8位相同時(shí),則被認(rèn)為是同一個(gè)標(biāo)識(shí)符。

  1. 標(biāo)識(shí)符是嚴(yán)格區(qū)分大小寫(xiě)的。例如Imoocimooc是兩個(gè)不同的標(biāo)識(shí)符。

  2. 標(biāo)識(shí)符最好選擇有意義的英文單詞組成做到"見(jiàn)名知意",不要使用中文。

  3. 標(biāo)識(shí)符不能是C語(yǔ)言的關(guān)鍵字。想了解更多C語(yǔ)言關(guān)鍵字的知識(shí)。

變量及賦值

變量就是可以變化的量,而每個(gè)變量都會(huì)有一個(gè)名字(標(biāo)識(shí)符)。變量占據(jù)內(nèi)存中一定的存儲(chǔ)單元。使用變量之前必須先定義變量,要區(qū)分變量名變量值是兩個(gè)不同的概念。

2b55edb6-c446-11ec-bce3-dac502259ad0.png

變量定義的一般形式為:數(shù)據(jù)類型 變量名;

多個(gè)類型相同的變量:數(shù)據(jù)類型 變量名, 變量名, 變量名...;

2b6864dc-c446-11ec-bce3-dac502259ad0.png

注意:在定義中不允許連續(xù)賦值,如int a=b=c=5;是不合法的。

變量的賦值分為兩種方式:

  1. 先聲明再賦值

  2. 聲明的同時(shí)賦值

基本數(shù)據(jù)類型

C語(yǔ)言中,數(shù)據(jù)類型可分為:

  1. 基本數(shù)據(jù)類型

  2. 構(gòu)造數(shù)據(jù)類型

  3. 指針類型

  4. 空類型四大類

2b74653e-c446-11ec-bce3-dac502259ad0.png

最常用的整型, 實(shí)型與字符型(char,int,float,double):

2b8cfe82-c446-11ec-bce3-dac502259ad0.png

整型數(shù)據(jù)是指不帶小數(shù)的數(shù)字(int,short int,long int, unsigned int, unsigned short int,unsigned long int):

2b997dd8-c446-11ec-bce3-dac502259ad0.png

注:

  • intshort intlong int根據(jù)編譯環(huán)境的不同,所取范圍不同。

  • 而其中short intlong int至少是表中所寫(xiě)范圍, 但是int在表中是以16位編譯環(huán)境寫(xiě)的取值范圍。

  • 另外 c語(yǔ)言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ù)是指帶小數(shù)的數(shù)字。

生活中有很多信息適合使用浮點(diǎn)型數(shù)據(jù)來(lái)表示,比如:人的體重(單位:公斤)、商品價(jià)格、圓周率等等。

因?yàn)榫鹊牟煌址譃?種(float,double,long double):

2ba7a87c-c446-11ec-bce3-dac502259ad0.png

注:C語(yǔ)言中不存在字符串變量,字符串只能存在字符數(shù)組中,這個(gè)后面會(huì)講。

格式化輸出語(yǔ)句

格式化輸出語(yǔ)句,也可以說(shuō)是占位輸出,是將各種類型的數(shù)據(jù)按照格式化后的類型及指定的位置從計(jì)算機(jī)上顯示。

其格式為:printf("輸出格式符",輸出項(xiàng));

2bb37440-c446-11ec-bce3-dac502259ad0.png

當(dāng)輸出語(yǔ)句中包含普通字符時(shí),可以采用一下格式:

printf("普通字符輸出格式符", 輸出項(xiàng));

2bc910d4-c446-11ec-bce3-dac502259ad0.png

注意:格式符個(gè)數(shù)要與變量、常量或者表達(dá)式的個(gè)數(shù)一一對(duì)應(yīng)

不可改變的常量

在程序執(zhí)行過(guò)程中,值不發(fā)生改變的量稱為常量。

mtianyan: C語(yǔ)言的常量可以分為直接常量和符號(hào)常量。

  • 直接常量也稱為字面量,是可以直接拿來(lái)使用,無(wú)需說(shuō)明的量,比如:

    • 整型常量:13、0、-13;

    • 實(shí)型常量:13.33、-24.4;

    • 字符常量:‘a(chǎn)’、‘M’

    • 字符串常量:”I love imooc!”

2bdce55a-c446-11ec-bce3-dac502259ad0.png

在C語(yǔ)言中,可以用一個(gè)標(biāo)識(shí)符來(lái)表示一個(gè)常量,稱之為符號(hào)常量。符號(hào)常量在使用之前必須先定義,其一般形式為:


	

#define 標(biāo)識(shí)符 常量值

#include #define POCKETMONEY 10    

//定義常量及常量值int main(){// POCKETMONEY = 12;  

//小明私自增加零花錢(qián)對(duì)嗎?printf("小明今天又得到%d元零花錢(qián)

", POCKETMONEY);return 0;  }

	

符號(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)完成。

2bef4af6-c446-11ec-bce3-dac502259ad0.png

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)換是通過(guò)定義類型轉(zhuǎn)換運(yùn)算來(lái)實(shí)現(xiàn)的。其一般形式為:

(數(shù)據(jù)類型) (表達(dá)式)

其作用是把表達(dá)式的運(yùn)算結(jié)果強(qiáng)制轉(zhuǎn)換成類型說(shuō)明符所表示的類型

在使用強(qiáng)制轉(zhuǎn)換時(shí)應(yīng)注意以下問(wèn)題:

  1. 數(shù)據(jù)類型和表達(dá)式都必須加括號(hào), 如把(int)(x/2+y)寫(xiě)成(int)x/2+y則成了把x轉(zhuǎn)換成int型之后再除2再與y相加了。

  2. 轉(zhuǎn)換后不會(huì)改變?cè)瓟?shù)據(jù)的類型及變量值,只在本次運(yùn)算中臨時(shí)性轉(zhuǎn)換。

  3. 強(qiáng)制轉(zhuǎn)換后的運(yùn)算結(jié)果不遵循四舍五入原則。

運(yùn)算符號(hào)

C語(yǔ)言中運(yùn)算符:

※ 算術(shù)運(yùn)算符
※ 賦值運(yùn)算符
※ 關(guān)系運(yùn)算符
※ 邏輯運(yùn)算符
※ 三目運(yùn)算符

算術(shù)運(yùn)算符

c語(yǔ)言基本運(yùn)算符:

2bfeafb4-c446-11ec-bce3-dac502259ad0.png

除法運(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),如(-10)%3 = -1;10%(-3) = 1;

mtianyan:%%表示這里就是一個(gè)%符.

注:C語(yǔ)言中沒(méi)有乘方這個(gè)運(yùn)算符,也不能用×, ÷等算術(shù)符號(hào)。

自增與自減運(yùn)算符

  • 自增運(yùn)算符為++,其功能是使變量的值自增1

  • 自減運(yùn)算符為--,其功能是使變量值自減1。

它們經(jīng)常使用在循環(huán)中。自增自減運(yùn)算符有以下幾種形式:

2c11b14a-c446-11ec-bce3-dac502259ad0.png

賦值運(yùn)算符

C語(yǔ)言中賦值運(yùn)算符分為簡(jiǎn)單賦值運(yùn)算符復(fù)合賦值運(yùn)算符

簡(jiǎn)單賦值運(yùn)算符=號(hào)了,下面講一下復(fù)合賦值運(yùn)算符:

復(fù)合賦值運(yùn)算符就是在簡(jiǎ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語(yǔ)言中的關(guān)系運(yùn)算符:

2c24b02e-c446-11ec-bce3-dac502259ad0.png

關(guān)系表達(dá)式的值是,在C程序用整數(shù)10表示。

注意:>=, <=, ==, !=這種符號(hào)之間不能存在空格

邏輯運(yùn)算符

C語(yǔ)言中的邏輯運(yùn)算符:

2c31b47c-c446-11ec-bce3-dac502259ad0.png

邏輯運(yùn)算的值也是有兩種分別為,C語(yǔ)言中用整型的1和0來(lái)表示。其求值規(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ǔ)言中的三目運(yùn)算符:?:,其格式為:

表達(dá)式1 ? 表達(dá)式2 : 表達(dá)式3;

執(zhí)行過(guò)程是:

先判斷表達(dá)式1的值是否為真,如果是真的話執(zhí)行表達(dá)式2;如果是假的話執(zhí)行表達(dá)式3。


	
#include int main(){//定義小編兜里的錢(qián)double money =12.0      ; 

//定義打車回家的費(fèi)用double cost =11.5       

;  printf("小編能不能打車回家呢:"); 

//輸出y小編就打車回家了,輸出n小編就不能打車回家printf("%c


",money>=cost?'y':'n'                        

);return 0;}

運(yùn)算符大比拼之優(yōu)先級(jí)比較

各種運(yùn)算符號(hào)的順序:

2c42ae3a-c446-11ec-bce3-dac502259ad0.png

優(yōu)先級(jí)別為1的優(yōu)先級(jí)最高,優(yōu)先級(jí)別為10的優(yōu)先級(jí)別最低。

分支結(jié)構(gòu)之簡(jiǎn)單if語(yǔ)句

C語(yǔ)言中的分支結(jié)構(gòu)語(yǔ)句中的if條件語(yǔ)句。

簡(jiǎn)單if語(yǔ)句的基本結(jié)構(gòu)如下:

if(表達(dá)式)
{
執(zhí)行代碼塊;
}

其語(yǔ)義是:如果表達(dá)式的值為真,則執(zhí)行其后的語(yǔ)句,否則不執(zhí)行該語(yǔ)句。

注意:if()后面沒(méi)有分號(hào),直接寫(xiě){}

分支結(jié)構(gòu)之簡(jiǎn)單if-else語(yǔ)句

簡(jiǎn)單的if-else語(yǔ)句的基本結(jié)構(gòu):

2c5046ee-c446-11ec-bce3-dac502259ad0.png

語(yǔ)義是: 如果表達(dá)式的值為真,則執(zhí)行代碼塊1,否則執(zhí)行代碼塊2。

注意:

if()后面沒(méi)有分號(hào),直接寫(xiě){},else后面也沒(méi)有分號(hào),直接寫(xiě){}

分支結(jié)構(gòu)之多重if-else語(yǔ)句

C語(yǔ)言中多重if-else語(yǔ)句,其結(jié)構(gòu)如下:

2c5b609c-c446-11ec-bce3-dac502259ad0.png

語(yǔ)義是:依次判斷表達(dá)式的值,當(dāng)出現(xiàn)某個(gè)值為真時(shí),則執(zhí)行對(duì)應(yīng)代碼塊,否則執(zhí)行代碼塊n。

注意:當(dāng)某一條件為真的時(shí)候,則不會(huì)向下執(zhí)行該分支結(jié)構(gòu)的其他語(yǔ)句。

分支結(jié)構(gòu)之嵌套if-else語(yǔ)句

C語(yǔ)言中嵌套if-else語(yǔ)句。嵌套if-else語(yǔ)句的意思,就是在if-else語(yǔ)句中,再寫(xiě)if-else語(yǔ)句。其一般形式為:

2c667702-c446-11ec-bce3-dac502259ad0.png

循環(huán)結(jié)構(gòu)之while循環(huán)

反復(fù)不停的執(zhí)行某個(gè)動(dòng)作就是江湖人稱的循環(huán)

C語(yǔ)言中有三種循環(huán)結(jié)構(gòu),先看一下C語(yǔ)言while循環(huán)的結(jié)構(gòu)

2c75ab64-c446-11ec-bce3-dac502259ad0.png

其中表達(dá)式表示循環(huán)條件,執(zhí)行代碼塊為循環(huán)體。

while語(yǔ)句的語(yǔ)義是:計(jì)算表達(dá)式的值,當(dāng)值為真(非0)時(shí), 執(zhí)行循環(huán)體代碼塊。

  1. while語(yǔ)句中的表達(dá)式一般是關(guān)系表達(dá)或邏輯表達(dá)式,當(dāng)表達(dá)式的值為假時(shí)不執(zhí)行循環(huán)體,反之則循環(huán)體一直執(zhí)行。

  2. 一定要記著在循環(huán)體中改變循環(huán)變量的值,否則會(huì)出現(xiàn)死循環(huán)(無(wú)休止的執(zhí)行)。

  3. 循環(huán)體如果包括有一個(gè)以上的語(yǔ)句,則必須用{}括起來(lái),組成復(fù)合語(yǔ)句。

循環(huán)結(jié)構(gòu)之do-while循環(huán)

C語(yǔ)言中的do-while循環(huán),一般形式如下:

2c83364e-c446-11ec-bce3-dac502259ad0.png

do-while循環(huán)語(yǔ)句的語(yǔ)義是:

它先執(zhí)行循環(huán)中的執(zhí)行代碼塊,然后再判斷while中表達(dá)式是否為真,如果為真則繼續(xù)循環(huán);如果為假,則終止循環(huán)。因此,do-while循環(huán)至少要執(zhí)行一次循環(huán)語(yǔ)句。

注意:mtianyan: 使用do-while結(jié)構(gòu)語(yǔ)句時(shí),while括號(hào)后必須有分號(hào)。

循環(huán)結(jié)構(gòu)之for循環(huán)(一)

c語(yǔ)言中for循環(huán)一般形式:

2c8ea95c-c446-11ec-bce3-dac502259ad0.png

它的執(zhí)行過(guò)程如下:

  1. 執(zhí)行表達(dá)式1,對(duì)循環(huán)變量做初始化;

  2. 判斷表達(dá)式2,若其值為真(非0),則執(zhí)行for循環(huán)體中執(zhí)行代碼塊,然后向下執(zhí)行;若其值為假(0),則結(jié)束循環(huán);

  3. 執(zhí)行表達(dá)式3,(i++)等對(duì)于循環(huán)變量進(jìn)行操作的語(yǔ)句;

  4. 執(zhí)行for循環(huán)中執(zhí)行代碼塊后執(zhí)行第二步;第一步初始化只會(huì)執(zhí)行一次。

  5. 循環(huán)結(jié)束,程序繼續(xù)向下執(zhí)行。

注意:for循環(huán)中的兩個(gè)分號(hào)一定要寫(xiě)

循環(huán)結(jié)構(gòu)之for循環(huán)(二)

在for循環(huán)中:

  • 表達(dá)式1是一個(gè)或多個(gè)賦值語(yǔ)句,它用來(lái)控制變量的初始值;

  • 表達(dá)式2是一個(gè)關(guān)系表達(dá)式,它決定什么時(shí)候退出循環(huán);

  • 表達(dá)式3是循環(huán)變量的步進(jìn)值,定義控制循環(huán)變量每循環(huán)一次后按什么方式變化。

  • 這三部分之間用分號(hào);分開(kāi)。

使用for語(yǔ)句應(yīng)該注意

  1. for循環(huán)中的“表達(dá)式1、2、3”均可不寫(xiě)為空,但兩個(gè)分號(hào)(;;)不能缺省。

  2. 省略“表達(dá)式1(循環(huán)變量賦初值)”,表示不對(duì)循環(huán)變量賦初始值。

  3. 省略“表達(dá)式2(循環(huán)條件)”,不做其它處理,循環(huán)一直執(zhí)行(死循環(huán))。

  4. 省略“表達(dá)式3(循環(huán)變量增減量)”,不做其他處理,循環(huán)一直執(zhí)行(死循環(huán))。

  5. 表達(dá)式1可以是設(shè)置循環(huán)變量的初值的賦值表達(dá)式,也可以是其他表達(dá)式。

  6. 表達(dá)式1和表達(dá)式3可以是一個(gè)簡(jiǎn)單表達(dá)式也可以是多個(gè)表達(dá)式以逗號(hào)分割。
    2c9b33fc-c446-11ec-bce3-dac502259ad0.png

  7. 表達(dá)式2一般是關(guān)系表達(dá)式邏輯表達(dá)式,但也可是數(shù)值表達(dá)式或字符表達(dá)式,只要其值非零,就執(zhí)行循環(huán)體。

  8. 各表達(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先得到6565/10得到6

  • 個(gè)位數(shù):num%10。765%10得到5

循環(huán)結(jié)構(gòu)之三種循環(huán)比較

while, do-while和for三種循環(huán)在具體的使用場(chǎng)合上是有區(qū)別的,如下:

  1. 知道循環(huán)次數(shù)的情況下更適合使用for循環(huán);

  1. 在不知道循環(huán)次數(shù)的情況下適合使用while或者do-while循環(huán):

  • 如果有可能一次都不循環(huán)應(yīng)考慮使用while循環(huán)

  • 如果至少循環(huán)一次應(yīng)考慮使用do-while循環(huán)。

但是從本質(zhì)上講,while,do-while和for循環(huán)之間是可以相互轉(zhuǎ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í)際開(kāi)發(fā)中一般最多用到三層重循環(huán)。

因?yàn)檠h(huán)層數(shù)越多,運(yùn)行時(shí)間越長(zhǎng),程序越復(fù)雜,所以一般用2-3層多重循環(huán)就可以了。另外不同循環(huán)之間也是可以嵌套的。

多重循環(huán)在執(zhí)行的過(guò)程中,外層循環(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í)行...

2caa3f46-c446-11ec-bce3-dac502259ad0.png

mtianyan: 打印三角形星星堆


	
#include int main(){int i, j, k;for(i=1; i<5; i++)    

{/* 觀察每行的空格數(shù)量,補(bǔ)全循環(huán)條件 */for(j=i; j<5; j++)          

{printf(" ");    

//輸出空格        

}/* 觀察每行*號(hào)的數(shù)量,補(bǔ)全循環(huán)條件 */for( k=0;k<2*i-1;k++)         

{printf("*");   

//每行輸出的*號(hào)        

}printf("

");     

//每次循環(huán)換行    

}return 0;}

使用for循環(huán)打印9×9乘法表

#include int main(){ // 定義相乘數(shù)字i,j以及結(jié)果resultint i, j, result;for(i=9;i>=1;i--)     

{for(j=1;j<=i;j++)        

{printf("%d*%d=%d ",i,j,result=i*j);        

}printf("

");     

}return 0;}

結(jié)束語(yǔ)句之break語(yǔ)句

那么循環(huán)5次的時(shí)候,需要中斷不繼續(xù)訓(xùn)練。在C語(yǔ)言中,可以使用break語(yǔ)句進(jìn)行該操作.

使用break語(yǔ)句時(shí)注意以下幾點(diǎn):

  1. 在沒(méi)有循環(huán)結(jié)構(gòu)的情況下,break不能用在單獨(dú)的if-else語(yǔ)句中。

  1. 在多層循環(huán)中,一個(gè)break語(yǔ)句只跳出當(dāng)前循環(huán)。

結(jié)束語(yǔ)句之continue語(yǔ)句

那么循環(huán)5次的時(shí)候,需要中斷后繼續(xù)訓(xùn)練。在C語(yǔ)言中,可以使用continue語(yǔ)句進(jìn)行該操作

continue語(yǔ)句的作用是結(jié)束本次循環(huán)開(kāi)始執(zhí)行下一次循環(huán)。

break語(yǔ)句與continue語(yǔ)句的區(qū)別是:

break是跳出當(dāng)前整個(gè)循環(huán),continue是結(jié)束本次循環(huán)開(kāi)始下一次循環(huán)。

分支結(jié)構(gòu)之switch語(yǔ)句

switch語(yǔ)句結(jié)構(gòu)如下:

2cc4a8ae-c446-11ec-bce3-dac502259ad0.png

mtianyan:switch語(yǔ)句時(shí)還應(yīng)注意以下幾點(diǎn):

  1. 在case后的各常量表達(dá)式的值不能相同,否則會(huì)出現(xiàn)錯(cuò)誤。

  2. 在case子句后如果沒(méi)有break;會(huì)一直往后執(zhí)行一直到遇到break;才會(huì)跳出switch語(yǔ)句。

  3. switch后面的表達(dá)式語(yǔ)句只能是整型或者字符類型。

  4. 在case后,允許有多個(gè)語(yǔ)句,可以不用{}括起來(lái)。

  5. 各case和default子句的先后順序可以變動(dòng),而不會(huì)影響程序執(zhí)行結(jié)果。

  6. default子句可以省略不用。

mtianyan: switch與if語(yǔ)句的應(yīng)用(計(jì)算是該年的第幾天)


	
#include 

int main() 

{ 

/* 定義需要計(jì)算的日期 */

    int date = 0;
    int year = 2008;
    int month = 8;
    int day = 8;
    switch(month)
    {
case 12:date+=30;
case 11:date+=31;
case 10:date+=30;
case 9:date+=31;
case 8:date+=31;
case 7:date+=30;
case 6:date+=31;
case 5:date+=30;
case 4:date+=31;
case 3:
if((year%4==0&&year%100!=0)||year%400==0)
        {
            date+=29;
        }
else
        {
            date+=28;
        }case 2:
        date+=31;
case 1:
        date+=day;
        printf("%d年%d月%d日是該年的第%d天",year,month,day,date);
break;
default:
        printf("error");
break;
    }
return 0;
}

正確: continue只能用在循環(huán)體內(nèi)

臭名遠(yuǎn)揚(yáng)之goto語(yǔ)句

C語(yǔ)言中也有這樣的語(yǔ)句,就是goto語(yǔ)句,goto語(yǔ)句是一種無(wú)條件分支語(yǔ)句.

goto 語(yǔ)句的使用格式為:

goto 語(yǔ)句標(biāo)號(hào);

2cd4e836-c446-11ec-bce3-dac502259ad0.png

自創(chuàng)函數(shù)

C語(yǔ)言提供了大量的庫(kù)函數(shù): 比如stdio.h提供輸出函數(shù)

自定義函數(shù)的一般形式:

2ce20570-c446-11ec-bce3-dac502259ad0.png

注意:

  1. []包含的內(nèi)容可以省略,數(shù)據(jù)類型說(shuō)明省略,默認(rèn)是int類型函數(shù); 參數(shù)省略表示該函數(shù)是無(wú)參函數(shù),參數(shù)不省略表示該函數(shù)是有參函數(shù);

  2. 函數(shù)名稱遵循標(biāo)識(shí)符命名規(guī)范;

  3. mtianyan: 自定義函數(shù)盡量放在main函數(shù)之前,如果要放在main函數(shù)后面的話, 需要在main函數(shù)之前先聲明自定義函數(shù),聲明格式為:

[數(shù)據(jù)類型說(shuō)明] 函數(shù)名稱([參數(shù)]);

函數(shù)調(diào)用

我們需要用到自定義的函數(shù)的時(shí)候,就得調(diào)用它,那么在調(diào)用的時(shí)候就稱之為函數(shù)調(diào)用。

在C語(yǔ)言中,函數(shù)調(diào)用的一般形式為:

函數(shù)名([參數(shù)]);

注意:

  1. 對(duì)無(wú)參函數(shù)調(diào)用的時(shí)候可以將[]包含的省略。

  1. []中可以是常數(shù),變量或其它構(gòu)造類型數(shù)據(jù)及表達(dá)式,多個(gè)參數(shù)之間用逗號(hào)分隔。

有參與無(wú)參

在函數(shù)中不需要函數(shù)參數(shù)的稱之為無(wú)參函數(shù),在函數(shù)中需要函數(shù)參數(shù)的稱之為有參函數(shù)。

有參和無(wú)參函數(shù)的一般形式如下:

2cec02dc-c446-11ec-bce3-dac502259ad0.png

有參函數(shù)和無(wú)參函數(shù)的唯一區(qū)別在于:函數(shù)()中多了一個(gè)參數(shù)列表。

  • 有參函數(shù)更為靈活,輸出的內(nèi)容可以隨著n的改變而隨意變動(dòng),只要在main函數(shù)中傳遞一個(gè)參數(shù)就可以了

  • 而在無(wú)參函數(shù)中輸出的相對(duì)就比較固定,當(dāng)需要改動(dòng)的時(shí)候還需要到自定義的方法內(nèi)改變循環(huán)變量的值。

mtianyan: 形參與實(shí)參

函數(shù)的參數(shù)分為形參實(shí)參兩種。

  • 形參是在定義函數(shù)名和函數(shù)體的時(shí)候使用的參數(shù),目的是用來(lái)接收調(diào)用該函數(shù)時(shí)傳入的參數(shù)。

就類似小明,說(shuō)了的話而不實(shí)際行動(dòng);

  • 實(shí)參是在調(diào)用時(shí)傳遞該函數(shù)的參數(shù)。

就如小剛能實(shí)際行動(dòng)起來(lái)。

函數(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ù)等。

無(wú)論實(shí)參是何種類型的量,在進(jìn)行函數(shù)調(diào)用時(shí),它們都必須具有確定的值,以便把這些值傳送給形參。因此應(yīng)預(yù)先用賦值等辦法使實(shí)參獲得確定值。

  • 在參數(shù)傳遞時(shí),實(shí)參和形參在數(shù)量上,類型上,順序上應(yīng)嚴(yán)格一致,否則會(huì)發(fā)生類型不匹配的錯(cuò)誤。

2cffeb9e-c446-11ec-bce3-dac502259ad0.png

函數(shù)的返回值

函數(shù)的返回值是指函數(shù)被調(diào)用之后,執(zhí)行函數(shù)體中的程序段所取得的并返回給主調(diào)函數(shù)的值。關(guān)于return詳細(xì)介紹,點(diǎn)擊閱讀:C語(yǔ)言中return的各種用法。

函數(shù)的返回值要注意以下幾點(diǎn):

  • 函數(shù)的值只能通過(guò)return語(yǔ)句返回主調(diào)函數(shù)。

return語(yǔ)句的一般形式為:

return 表達(dá)式   或者為:return (表達(dá)式);
  • 函數(shù)值的類型和函數(shù)定義中函數(shù)的類型應(yīng)保持一致。

notes: 如果兩者不一致,則以函數(shù)返回類型為準(zhǔn),自動(dòng)進(jìn)行類型轉(zhuǎn)換。

  • 沒(méi)有返回值的函數(shù),返回類型void。

注意:

void函數(shù)中可以有執(zhí)行代碼塊,但是不能有返回值.

mtianyan:void函數(shù)中如果有return語(yǔ)句,該語(yǔ)句只能起到結(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)算過(guò)程:

2d18df46-c446-11ec-bce3-dac502259ad0.jpg

程序在計(jì)算5的階乘的時(shí)候,先執(zhí)行遞推,當(dāng)n=1或者n=0的時(shí)候返回1,再回推將計(jì)算并返回。由此可以看出遞歸函數(shù)必須有結(jié)束條件。

遞歸函數(shù)特點(diǎn):

  1. 每一級(jí)函數(shù)調(diào)用時(shí)都有自己的變量,但是函數(shù)代碼并不會(huì)得到復(fù)制,如計(jì)算5的階乘時(shí)每遞推一次變量都不同;

  2. 每次調(diào)用都會(huì)有一次返回,如計(jì)算5的階乘時(shí)每遞推一次都返回進(jìn)行下一次;

  3. 遞歸函數(shù)中,位于遞歸調(diào)用前的語(yǔ)句和各級(jí)被調(diào)用函數(shù)具有相同的執(zhí)行順序;

  4. 遞歸函數(shù)中,位于遞歸調(diào)用后的語(yǔ)句的執(zhí)行順序和各個(gè)被調(diào)用函數(shù)的順序相反;

  5. 遞歸函數(shù)中必須有終止語(yǔ)句。

一句話總結(jié)遞歸:自我調(diào)用且有完成狀態(tài)

任務(wù)
猴子第一天摘下N個(gè)桃子,當(dāng)時(shí)就吃了一半,還不過(guò)癮,就又多吃了一個(gè)。第二天又將剩下的桃子吃掉一半,又多吃了一個(gè)。以后每天都吃前一天剩下的一半零一個(gè)。到第10天在想吃的時(shí)候就剩一個(gè)桃子了,問(wèn)第一天共摘下來(lái)多少個(gè)桃子?并反向打印每天所剩桃子數(shù)。


	
#include int getPeachNumber(int n){int num;   

if(n==10)    

{return 1;          

} else    

{        

num = (getPeachNumber(n+1)+1)*2;  

printf("第%d天所剩桃子%d個(gè)

", n, num);     

}return num;}int main(){int num = getPeachNumber(1);printf("猴子第一天摘了:%d個(gè)桃子。

", num);return 0;}

	

遞歸demo。

有5個(gè)人坐在一起,問(wèn)第5個(gè)人多少歲?他說(shuō)比第4個(gè)人大2歲。問(wèn)第4個(gè)人歲數(shù),他說(shuō)比第3個(gè)人大2歲。問(wèn)第3個(gè)人,又說(shuō)比第2人大兩歲。問(wèn)第2個(gè)人,說(shuō)比第1個(gè)人大兩歲。最后 問(wèn)第1個(gè)人,他說(shuō)是10歲。請(qǐng)問(wèn)第5個(gè)人多大?

程序分析:
利用遞歸的方法,遞歸分為回推和遞推兩個(gè)階段。要想知道第5個(gè)人歲數(shù),需知道第4人的歲數(shù),依次類推,推到第1人(10歲),再往回推。


	
#include  int dfs(int n) 

{return n == 1 ? 10 : dfs(n - 1) + 2;}int main(){

printf("第5個(gè)人的年齡是%d歲", dfs(5)); return 0;} 

	

局部與全局

C語(yǔ)言中的變量,按作用域范圍可分為兩種,即局部變量和全局變量。

  • 局部變量也稱為內(nèi)部變量。局部變量是在函數(shù)內(nèi)作定義說(shuō)明的。其作用域僅限于函數(shù)內(nèi), 離開(kāi)該函數(shù)后再使用這種變量是非法的。在復(fù)合語(yǔ)句中也可定義變量,其作用域只在復(fù)合語(yǔ)句范圍內(nèi)。

  • 全局變量也稱為外部變量,它是在函數(shù)外部定義的變量。它不屬于哪一個(gè)函數(shù),它屬于一個(gè)源程序文件。其作用域是整個(gè)源程序。

變量存儲(chǔ)類別

mtianyan: C語(yǔ)言根據(jù)變量的生存周期來(lái)劃分,可以分為靜態(tài)存儲(chǔ)方式和動(dòng)態(tài)存儲(chǔ)方式。

  • 靜態(tài)存儲(chǔ)方式:是指在程序運(yùn)行期間分配固定的存儲(chǔ)空間的方式。靜態(tài)存儲(chǔ)區(qū)中存放了在整個(gè)程序執(zhí)行過(guò)程中都存在的變量,如全局變量。

  • 動(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)場(chǎng)保護(hù)和返回地址等。

C語(yǔ)言中存儲(chǔ)類別又分為四類:

  • 自動(dòng)(auto)、

  • 靜態(tài)(static)、

  • 寄存器的(register)

  • 外部的(extern)。

1、用關(guān)鍵字auto定義的變量為自動(dòng)變量,auto可以省略,auto不寫(xiě)則隱含定為“自動(dòng)存儲(chǔ)類別”,屬于動(dòng)態(tài)存儲(chǔ)方式。如:

2d245d76-c446-11ec-bce3-dac502259ad0.png

2、用static修飾的為靜態(tài)變量,如果定義在函數(shù)內(nèi)部的,稱之為靜態(tài)局部變量;如果定義在函數(shù)外部,稱之為靜態(tài)外部變量。如下為靜態(tài)局部變量:

2d305d60-c446-11ec-bce3-dac502259ad0.png

注意:靜態(tài)局部變量屬于靜態(tài)存儲(chǔ)類別,在靜態(tài)存儲(chǔ)區(qū)內(nèi)分配存儲(chǔ)單元,在程序整個(gè)運(yùn)行期間都不釋放;靜態(tài)局部變量在編譯時(shí)賦初值,即只賦初值一次;如果在定義局部變量時(shí)不賦初值的話,則對(duì)靜態(tài)局部變量來(lái)說(shuō),編譯時(shí)自動(dòng)賦初值0(對(duì)數(shù)值型變量)或空字符(對(duì)字符變量)。

3、為了提高效率,C語(yǔ)言允許將局部變量得值放在CPU中的寄存器中,這種變量叫“寄存器變量”,用關(guān)鍵字register作聲明。例如:

2d3c48aa-c446-11ec-bce3-dac502259ad0.png

mtianyan: 注意:只有局部自動(dòng)變量和形式參數(shù)可以作為寄存器變量;一個(gè)計(jì)算機(jī)系統(tǒng)中的寄存器數(shù)目有限,不能定義任意多個(gè)寄存器變量;局部靜態(tài)變量不能定義為寄存器變量。

4、用extern聲明的的變量是外部變量,外部變量的意義是某函數(shù)可以調(diào)用在該函數(shù)之后定義的變量。如:

2d4822ba-c446-11ec-bce3-dac502259ad0.png

內(nèi)部函數(shù)與外部函數(shù)

  • 在C語(yǔ)言中不能被其他源文件調(diào)用的函數(shù)稱謂內(nèi)部函數(shù) ,內(nèi)部函數(shù)由static關(guān)鍵字來(lái)定義,因此又被稱謂靜態(tài)函數(shù),形式為:
    static [數(shù)據(jù)類型] 函數(shù)名([參數(shù)])

  • 這里的static是對(duì)函數(shù)的作用范圍的一個(gè)限定,限定該函數(shù)只能在其所處的源文件中使用,因此在不同文件中出現(xiàn)相同的函數(shù)名稱的內(nèi)部函數(shù)是沒(méi)有問(wèn)題的。

  • 在C語(yǔ)言中能被其他源文件調(diào)用的函數(shù)稱謂外部函數(shù) ,外部函數(shù)由extern關(guān)鍵字來(lái)定義,形式為:
    extern [數(shù)據(jù)類型] 函數(shù)名([參數(shù)])

  • C語(yǔ)言規(guī)定,在沒(méi)有指定函數(shù)的作用范圍時(shí),系統(tǒng)會(huì)默認(rèn)認(rèn)為是外部函數(shù),因此當(dāng)需要定義外部函數(shù)時(shí)extern也可以省略。

靜態(tài)變量只賦值一次

外部函數(shù)練習(xí)

hello.c

#include #include "test.c"   

//引用test.c文件extern void printLine()     

//這里定義的方法對(duì)嗎?{printf("**************

");   

}int main(){    

say();return 0;}

	

test.c


	
#include void printLine();static void say(){printLine();printf("I love imooc

");printf("good good study!

");printf("day day up!

");printLine();}


	

對(duì)于hello.c來(lái)說(shuō),直接引入了test.c文件。那么就可以調(diào)用testc中的static方法say()
而對(duì)于test.c并沒(méi)有引入,可以通過(guò)聲明來(lái)調(diào)用另一個(gè)源文件中暴露出來(lái)的方法。

綜合練習(xí)

北京市出租車打車計(jì)費(fèi)規(guī)則如下:

  1. 每公里單價(jià)計(jì)費(fèi)2.3元

  2. 起步價(jià)13元(包含3公里)

  3. 晚上23點(diǎn)(含)至次日凌晨5點(diǎn)(不含)打車,每公里單價(jià)計(jì)費(fèi)加收20%。

  4. 每次乘車加收1元錢(qián)的燃油附加稅。
    小明每天上下班都要打車,公司和家的距離為12公里,上午上班時(shí)間為9點(diǎn),下午下班時(shí)間為6點(diǎn)。
    請(qǐng)編寫(xiě)一個(gè)小程序計(jì)算小明每天打車的總費(fèi)用。

#include 


float taxifee(int clock,int miles){float money;if(miles<=3)    

{        

money=14;printf("費(fèi)用為14

");    

}else    

{if(clock>=23 || clock<5)        

{            

money=13+1+2.3*(miles-3)*1.2;printf("夜間車費(fèi)為:%f

",money);        

}else        

{            

money=13+1+2.3*(miles-3);printf("日間車費(fèi)為:%f

",money);        

}    

}

return money;    

}int main(){printf("打的總費(fèi)用:%.1f

",taxifee(9,12)+taxifee(18,12));return 0;}

	

數(shù)組初體驗(yàn)

程序中也需要容器,只不過(guò)該容器有點(diǎn)特殊,它在程序中是一塊連續(xù)的,大小固定并且里面的數(shù)據(jù)類型一致的內(nèi)存空間,它還有個(gè)好聽(tīng)的名字叫數(shù)組??梢詫?shù)組理解為大小固定,所放物品為同類的一個(gè)購(gòu)物袋,在該購(gòu)
物袋中的物品是按一定順序放置的。

我們來(lái)看一下如何聲明一個(gè)數(shù)組:

數(shù)據(jù)類型 數(shù)組名稱[長(zhǎng)度];

數(shù)組只聲明也不行啊,看一下數(shù)組是如何初始化的。說(shuō)到初始化,C語(yǔ)言中的數(shù)組初始化是有三種形式的,分別是:

  1. 數(shù)據(jù)類型 數(shù)組名稱[長(zhǎng)度n] = {元素1,元素2…元素n};

  2. 數(shù)據(jù)類型 數(shù)組名稱[] = {元素1,元素2…元素n};

  3. 數(shù)據(jù)類型 數(shù)組名稱[長(zhǎng)度n]; 數(shù)組名稱[0] = 元素1; 數(shù)組名稱[1] = 元素2; 數(shù)組名稱[n-1] = 元素n;

我們將數(shù)據(jù)放到數(shù)組中之后又如何獲取數(shù)組中的元素呢?

獲取數(shù)組元素時(shí):數(shù)組名稱[元素所對(duì)應(yīng)下標(biāo)];

如:初始化一個(gè)數(shù)組int arr[3] = {1,2,3};那么arr[0]就是元素1。

注意:

  1. 數(shù)組的下標(biāo)均以0開(kāi)始;

  2. 數(shù)組在初始化的時(shí)候,數(shù)組內(nèi)元素的個(gè)數(shù)不能大于聲明的數(shù)組長(zhǎng)度;

  3. mtianyan: 如果采用第一種初始化方式,元素個(gè)數(shù)小于數(shù)組的長(zhǎng)度時(shí),多余的數(shù)組元素初始化為0;

  4. 在聲明數(shù)組后沒(méi)有進(jìn)行初始化的時(shí)候,靜態(tài)(static)和外部(extern)類型的數(shù)組元素初始化元素為0,自動(dòng)(auto)類型的數(shù)組的元素初始化值不確定。

數(shù)組的遍歷

數(shù)組就可以采用循環(huán)的方式將每個(gè)元素遍歷出來(lái),而不用人為的每次獲取指定某個(gè)位置上的元素,例如我們用for循環(huán)遍歷一個(gè)數(shù)組:

2d5e9d06-c446-11ec-bce3-dac502259ad0.png

注意以下幾點(diǎn):

  1. 最好避免出現(xiàn)數(shù)組越界訪問(wèn),循環(huán)變量最好不要超出數(shù)組的長(zhǎng)度.

  2. C語(yǔ)言的數(shù)組長(zhǎng)度一經(jīng)聲明,長(zhǎng)度就是固定,無(wú)法改變,并且C語(yǔ)言并不提供計(jì)算數(shù)組長(zhǎng)度的方法

由于C語(yǔ)言是沒(méi)有檢查數(shù)組長(zhǎng)度改變或者數(shù)組越界的這個(gè)機(jī)制,可能會(huì)在編輯器中編譯并通過(guò),但是結(jié)果就不能肯定了,因此還是不要越界或者改變數(shù)組的長(zhǎng)度

c語(yǔ)言獲取數(shù)組長(zhǎng)度


	
int length = sizeof(arr)/sizeof(arr[0]);

	

數(shù)組作為函數(shù)參數(shù)

數(shù)組可以由整個(gè)數(shù)組當(dāng)作函數(shù)的參數(shù),也可以由數(shù)組中的某個(gè)元素當(dāng)作函數(shù)的參數(shù):

  1. 整個(gè)數(shù)組當(dāng)作函數(shù)參數(shù),即把數(shù)組名稱傳入函數(shù)中,例如:

2d6f7cb6-c446-11ec-bce3-dac502259ad0.png

  1. 數(shù)組中的元素當(dāng)作函數(shù)參數(shù),即把數(shù)組中的參數(shù)傳入函數(shù)中,例如:

2d7c5b5c-c446-11ec-bce3-dac502259ad0.png

數(shù)組作為函數(shù)參數(shù)時(shí)注意以下事項(xiàng):

  1. 數(shù)組名作為函數(shù)實(shí)參傳遞時(shí),函數(shù)定義處作為接收參數(shù)的數(shù)組類型形參既可以指定長(zhǎng)度也可以不指定長(zhǎng)度。

  2. 數(shù)組元素作為函數(shù)實(shí)參傳遞時(shí),數(shù)組元素類型必須與形參數(shù)據(jù)類型一致。

mtianyan: 數(shù)組的應(yīng)用(一)[冒泡排序]

以升序排序?yàn)槔芭菖判虻乃枷耄合噜徳貎蓛杀容^,將較大的數(shù)字放在后面,直到將所有數(shù)字全部排序。就像小學(xué)排隊(duì)時(shí)按大小個(gè)排一樣,將一個(gè)同學(xué)拉出來(lái)和后面的比比,如果高就放后面,一直把隊(duì)伍排好。

#include int main(){double arr[]={1.78, 1.77, 1.82, 1.79, 1.85, 1.75, 1.86, 1.77, 1.81, 1.80};int i,j;printf("

************排隊(duì)前*************

");for(i=0;i<10;i++)    

{if(i != 9)   

printf("%1.2f, ", arr[i]);  

//%1.2f表示小數(shù)點(diǎn)前一位,小數(shù)點(diǎn)后精確到兩位elseprintf("%1.2f", arr[i]);    

//%1.2f表示小數(shù)點(diǎn)前一位,小數(shù)點(diǎn)后精確到兩位    

}for(i=8; i>=0; i--)    

{for(j=0;j<=i;j++)        

{if( arr[j]>arr[j+1])      

//當(dāng)前面的數(shù)比后面的數(shù)大時(shí)            

{double temp;    

//定義臨時(shí)變量temp                

temp=arr[j];//將前面的數(shù)賦值給temp                

arr[j]=arr[j+1];             

//前后之?dāng)?shù)顛倒位置                

arr[j+1]=temp;//將較大的數(shù)放在后面                

}                         

}                    

}printf("

************排隊(duì)后*************

");for(i=0;i<10;i++)    

{if(i != 9)   

printf("%1.2f, ", arr[i]);  

//%1.2f表示小數(shù)點(diǎn)前一位,小數(shù)點(diǎn)后精確到兩位     

elseprintf("%1.2f", arr[i]);    

//%1.2f表示小數(shù)點(diǎn)前一位,小數(shù)點(diǎn)后精確到兩位    

}return 0;    

}

	

數(shù)組的應(yīng)用(二)[數(shù)組查找功能]

當(dāng)我們購(gòu)物之后,拎著購(gòu)物袋回到家,會(huì)一一檢查購(gòu)物袋中的物品看是否缺少或者都是想購(gòu)之物。

那么應(yīng)用到程序中,可以使用數(shù)組查找功能,看看是否存在該數(shù)據(jù),如果存在并返回該元素的下標(biāo)。


	
#include int getIndex(int arr[5],int value){int i;int index;for(i=0;i<5;i++)    

{/* 請(qǐng)完善數(shù)組查詢功能 */if(arr[i]==value)        

{index=i;break;        

}  index=-1;    

}return index;}


int main(){int arr[5]={3,12,9,8,6};int value = 8;int index = getIndex(arr,value);      

//這里應(yīng)該傳什么參數(shù)呢?if(index!=-1)    

{printf("%d在數(shù)組中存在,下標(biāo)為:%d

",value,index);                 

}else    

{printf("%d在數(shù)組中不存在。

",value);        

}return 0;    

}

字符串與數(shù)組

C語(yǔ)言中,是沒(méi)有辦法直接定義字符串?dāng)?shù)據(jù)類型的,但是我們可以使用數(shù)組來(lái)定義我們所要的字符串。一般有以下兩種格式:

  1. char 字符串名稱[長(zhǎng)度] = "字符串值";

  2. char 字符串名稱[長(zhǎng)度] = {'字符1','字符2',...,'字符n','?'};

注意:

  1. []中的長(zhǎng)度是可以省略不寫(xiě)的;

  2. 采用第2種方式的時(shí)候最后一個(gè)元素必須是'?','?'表示字符串的結(jié)束標(biāo)志;

  3. 采用第2種方式的時(shí)候在數(shù)組中不能寫(xiě)中文。
    在輸出字符串的時(shí)候要使用:
    printf(“%s”,字符數(shù)組名字);或者puts(字符數(shù)組名字);。

mtianyan:字符串函數(shù)

常用的字符串函數(shù)如下(strlen,strcmp,strcpy,strcat,atoi):

2d8fdb96-c446-11ec-bce3-dac502259ad0.png

使用字符串函數(shù)注意以下事項(xiàng):

  1. strlen()獲取字符串的長(zhǎng)度,在字符串長(zhǎng)度中是不包括‘?’而且漢字和字母的長(zhǎng)度是不一樣的。比如:

2d9c9b92-c446-11ec-bce3-dac502259ad0.png

  1. strcmp()在比較的時(shí)候會(huì)把字符串先轉(zhuǎn)換成ASCII碼再進(jìn)行比較,返回的結(jié)果為0表示s1和s2的ASCII碼相等,返回結(jié)果為1表示s1比s2的ASCII碼大,返回結(jié)果為-1表示s1比s2的ASCII碼小,例如:

2da961f6-c446-11ec-bce3-dac502259ad0.png

  1. strcpy()拷貝之后會(huì)覆蓋原來(lái)字符串且不能對(duì)字符串常量進(jìn)行拷貝,比如:

2dc1b04e-c446-11ec-bce3-dac502259ad0.png

  1. strcat在使用時(shí)s1與s2指的內(nèi)存空間不能重疊,且s1要有足夠的空間來(lái)容納要復(fù)制的字符串,如:

2dcd4e4a-c446-11ec-bce3-dac502259ad0.png

多維數(shù)組

多維數(shù)組的定義格式是:
數(shù)據(jù)類型 數(shù)組名稱[常量表達(dá)式1][常量表達(dá)式2]...[常量表達(dá)式n];

2de4fa04-c446-11ec-bce3-dac502259ad0.png

定義了一個(gè)名稱為num,數(shù)據(jù)類型為int的二維數(shù)組。其中第一個(gè)[3]表示第一維下標(biāo)的長(zhǎng)度,就像購(gòu)物時(shí)分類存放的購(gòu)物;第二個(gè)[3]表示第二維下標(biāo)的長(zhǎng)度,就像每個(gè)購(gòu)物袋中的元素。

2df0e3a0-c446-11ec-bce3-dac502259ad0.png

多維數(shù)組的初始化與一維數(shù)組的初始化類似也是分兩種:

  1. 數(shù)據(jù)類型 數(shù)組名稱[常量表達(dá)式1][常量表達(dá)式2]...[常量表達(dá)式n] = {{值1,..,值n},{值1,..,值n},...,{值1,..,值n}};

  2. 數(shù)據(jù)類型 數(shù)組名稱[常量表達(dá)式1][常量表達(dá)式2]...[常量表達(dá)式n]; 數(shù)組名稱[下標(biāo)1][下標(biāo)2]...[下標(biāo)n] = 值;

多維數(shù)組初始化要注意以下事項(xiàng):

  1. 采用第一種始化時(shí)數(shù)組聲明必須指定列的維數(shù)。mtianyan: 因?yàn)橄到y(tǒng)會(huì)根據(jù)數(shù)組中元素的總個(gè)數(shù)來(lái)分配空間,當(dāng)知道元素總個(gè)數(shù)以及列的維數(shù)后,會(huì)直接計(jì)算出行的維數(shù);

  2. 采用第二種初始化時(shí)數(shù)組聲明必須同時(shí)指定行和列的維數(shù)。

二維數(shù)組定義的時(shí)候,可以不指定行的數(shù)量,但是必須指定列的數(shù)量

二維數(shù)組定義的時(shí)候,可以不指定行的數(shù)量,但是必須指定列的數(shù)量。

多維數(shù)組的遍歷

多維數(shù)組也是存在遍歷的,和一維數(shù)組遍歷一樣,也是需要用到循環(huán)。不一樣的就是多維數(shù)組需要采用嵌套循環(huán)。

注意:多維數(shù)組的每一維下標(biāo)均不能越界。

綜合練習(xí):


	
#include #define N 10//打印分?jǐn)?shù) void printScore(int score[]){int i;printf("


");for(i=0;i    

{printf("%d ",score[i]);                   

}printf("


");     

}//計(jì)算考試總分 int getTotalScore(int score[]){int sum = 0;int i;for(i=0;i    

{        

sum+=score[i];                    

} return sum;}//計(jì)算平均分 int getAvgScore(int score[]){return getTotalScore(score)/N;   

}//計(jì)算最高分 int getMax(int score[]){int max = -1;int i;for(i=0;i    

{if(score[i]>max)        

{            

max = score[i];                      

}                    

} return max;}//計(jì)算最低分 int getMin(int score[]){int min =100;int i;for(i=0;i    

{if(score[i]< min)        

{            

min = score[i];                      

}                    

} return min;}//分?jǐn)?shù)降序排序 void sort(int score[]){int i,j;for(i=N-2;i>=0;i--)    

{for(j=0;j<=i;j++)        

{if(score[j]            

{int temp;                

temp = score[j];                

score[j] = score[j+1];                 

score[j+1]=temp;                              

}                         

}                       

}    

printScore(score);     

}


int main(){int score[N]={67,98,75,63,82,79,81,91,66,84};int sum,avg,max,min;    

sum = getTotalScore(score);    

avg = getAvgScore(score);    

max = getMax(score);    

min = getMin(score);printf("總分是:%d

",sum);printf("平均分是:%d

",avg);printf("最高分是:%d

",max);printf("最低分是:%d

",min);printf("----------成績(jī)排名---------

");    

sort(score);return 0;    

}

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7632

    瀏覽量

    141677
  • 變量
    +關(guān)注

    關(guān)注

    0

    文章

    614

    瀏覽量

    28948

原文標(biāo)題:整理的比較全面的C語(yǔ)言入門(mén)筆記!

文章出處:【微信號(hào):c-stm32,微信公眾號(hào):STM32嵌入式開(kāi)發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    C語(yǔ)言精彩編程百例-364頁(yè)

    大量經(jīng)驗(yàn),從而可以熟練地進(jìn)行C程序設(shè)計(jì)。 全文共分為四篇,全面、系統(tǒng)地講述了C語(yǔ)言各個(gè)方面的知識(shí)點(diǎn)和程序設(shè)計(jì)的基本方法,以及編寫(xiě)程序過(guò)程中值
    發(fā)表于 06-13 17:28

    深入理解C語(yǔ)言C語(yǔ)言循環(huán)控制

    C語(yǔ)言編程中,循環(huán)結(jié)構(gòu)是至關(guān)重要的,它可以讓程序重復(fù)執(zhí)行特定的代碼塊,從而提高編程效率。然而,為了避免程序進(jìn)入無(wú)限循環(huán),C語(yǔ)言提供了多種循環(huán)控制語(yǔ)句,如break、continue和
    的頭像 發(fā)表于 04-29 18:49 ?1135次閱讀
    深入理解<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>:<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>循環(huán)控制

    新概念51單片機(jī)C語(yǔ)言教程入門(mén)、提高、開(kāi)發(fā)、拓展全攻略

    資料介紹 從實(shí)際應(yīng)用入手,以實(shí)驗(yàn)過(guò)程和實(shí)驗(yàn)現(xiàn)象為主導(dǎo),循序漸進(jìn)地講述51單片機(jī)C語(yǔ)言編程方法以及51單片機(jī)的硬件結(jié)構(gòu)和功能應(yīng)用。全書(shū)共分5篇,分別為入門(mén)篇、內(nèi)外部資源操作篇、提高篇、實(shí)戰(zhàn)篇和拓展篇
    發(fā)表于 04-15 13:57

    51單片機(jī)C語(yǔ)言學(xué)習(xí)筆記

    c51語(yǔ)言快速入門(mén)
    發(fā)表于 03-24 14:04 ?3次下載

    Redis實(shí)戰(zhàn)筆記

    《 2024最新Redis 實(shí)戰(zhàn)筆記》,這份筆記對(duì) Redis 的相關(guān)知識(shí)做了系統(tǒng)全面的介紹,還是PDF版本,可自由復(fù)制,特別適合 Redis 初學(xué)者快速入門(mén)和提高。 ? 本
    的頭像 發(fā)表于 02-09 09:12 ?390次閱讀
    Redis實(shí)戰(zhàn)<b class='flag-5'>筆記</b>

    語(yǔ)言模型管理的作用

    要充分發(fā)揮語(yǔ)言模型的潛力,有效的語(yǔ)言模型管理非常重要。以下,是對(duì)語(yǔ)言模型管理作用的分析,由AI部落小編整理
    的頭像 發(fā)表于 01-02 11:06 ?385次閱讀

    入門(mén)web安全筆記分享

    在計(jì)算機(jī)技術(shù)如日中天的今天,Web安全問(wèn)題也接踵而來(lái)。但Web安全卻“入門(mén)簡(jiǎn)單精通難”,涉及技術(shù)非常多且廣,學(xué)習(xí)阻力很大。 為此今天分享一份94頁(yè)的《Web Hacking 101》筆記,包含Web
    的頭像 發(fā)表于 12-03 17:04 ?639次閱讀
    <b class='flag-5'>入門(mén)</b>web安全<b class='flag-5'>筆記</b>分享

    AWTK-WEB 快速入門(mén)(1) - C 語(yǔ)言應(yīng)用程序

    導(dǎo)讀AWTK可以使用相同的技術(shù)棧開(kāi)發(fā)各種平臺(tái)的應(yīng)用程序。有時(shí)我們需要使用Web界面與設(shè)備進(jìn)行交互,本文介紹一下如何使用C語(yǔ)言開(kāi)發(fā)AWTK-WEB應(yīng)用程序。用AWTKDesigner新建一個(gè)應(yīng)用程序先
    的頭像 發(fā)表于 11-27 11:46 ?715次閱讀
    AWTK-WEB 快速<b class='flag-5'>入門(mén)</b>(1) - <b class='flag-5'>C</b> <b class='flag-5'>語(yǔ)言</b>應(yīng)用程序

    C語(yǔ)言指針學(xué)習(xí)筆記

    本文從底層內(nèi)存分析,徹底讓讀者明白C語(yǔ)言指針的本質(zhì)。
    的頭像 發(fā)表于 11-05 17:40 ?639次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>指針學(xué)習(xí)<b class='flag-5'>筆記</b>

    用于C系列的TivaWare?入門(mén)信息

    電子發(fā)燒友網(wǎng)站提供《用于C系列的TivaWare?入門(mén)信息.pdf》資料免費(fèi)下載
    發(fā)表于 11-04 09:16 ?0次下載
    用于<b class='flag-5'>C</b>系列的TivaWare?<b class='flag-5'>入門(mén)</b>信息

    TCSH shell 編程入門(mén)

    ICer從業(yè)人員最先需要掌握的語(yǔ)言,就是linux shell語(yǔ)言。TCSH是ICer使用最多的Shell語(yǔ)言,可以說(shuō)ICer入門(mén)語(yǔ)言從TC
    發(fā)表于 11-01 10:45 ?0次下載

    C語(yǔ)言與Java語(yǔ)言的對(duì)比

    C語(yǔ)言和Java語(yǔ)言都是當(dāng)前編程領(lǐng)域中的重要成員,它們各自具有獨(dú)特的優(yōu)勢(shì)和特點(diǎn),適用于不同的應(yīng)用場(chǎng)景。以下將從語(yǔ)法特性、內(nèi)存管理、跨平臺(tái)性、性能、應(yīng)用領(lǐng)域等多個(gè)方面對(duì)C
    的頭像 發(fā)表于 10-29 17:31 ?1069次閱讀

    C語(yǔ)言與其他編程語(yǔ)言的比較

    C語(yǔ)言作為一種歷史悠久的編程語(yǔ)言,自其誕生以來(lái),一直在軟件開(kāi)發(fā)領(lǐng)域扮演著重要角色。它以其高效、靈活和可移植性強(qiáng)的特點(diǎn),成為了系統(tǒng)級(jí)編程的首選語(yǔ)言之一。
    的頭像 發(fā)表于 10-29 17:30 ?1077次閱讀

    FPGA編程語(yǔ)言入門(mén)教程

    FPGA(現(xiàn)場(chǎng)可編程邏輯門(mén)陣列)的編程涉及特定的硬件描述語(yǔ)言(HDL),其中Verilog和VHDL是最常用的兩種。以下是一個(gè)FPGA編程語(yǔ)言(以Verilog為例)的入門(mén)教程: 一、Verilog
    的頭像 發(fā)表于 10-25 09:21 ?1225次閱讀

    TMS320LF240x DSP的C語(yǔ)言和匯編代碼快速入門(mén)

    電子發(fā)燒友網(wǎng)站提供《TMS320LF240x DSP的C語(yǔ)言和匯編代碼快速入門(mén).pdf》資料免費(fèi)下載
    發(fā)表于 10-18 10:14 ?1次下載
    TMS320LF240x DSP的<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>和匯編代碼快速<b class='flag-5'>入門(mén)</b>