每日一句:
每個(gè)人一生中都至少應(yīng)該獲得一次全場(chǎng)起立鼓掌的機(jī)會(huì)麦箍,因?yàn)槲覀兌荚鴦龠^這個(gè)世界漓藕。
? ? —R.J.帕拉西奧《奇跡男孩》
疫情之下,最容易受到影響的群體内列,就是學(xué)生群體撵术。
那么我們便可以寫一個(gè)程序來證明背率,假設(shè)箭第一次走完一半的路程時(shí)間為1秒话瞧,然后每1/2秒走完剩余距離的一半,然后再用1/4秒走完剩余距離的一半...那么我們可以用下面的這個(gè)式子來表達(dá)總時(shí)間:
1+1/2+1/4+1/8+...
這里是不是有很多個(gè)式子相加寝姿,那么我們?cè)撊绾伟堰@些式子寫到程序中呢交排?
下面我來一一介紹這三位光桿司令(While,do while,for)
NO.1
首先登場(chǎng)的呢是我們的while饵筑,它是一個(gè)英文單詞獨(dú)擋一面啊埃篓。While語句也稱While循環(huán),循環(huán)中While是入口條件循環(huán)根资,程序再進(jìn)入循環(huán)體之前必須獲取輸入的數(shù)據(jù)并檢查條件中的值架专。
1.while循環(huán)的通用形式如下:
while(表達(dá)式){
循環(huán)體; }//循環(huán)體也可以為空語句
注釋:當(dāng)表達(dá)式為真時(shí)玄帕,則執(zhí)行下面的循環(huán)體部脚;循環(huán)體執(zhí)行完之后再判斷表達(dá)式是否為真,如果為真裤纹,則再次執(zhí)行下面的語句委刘;然后再判斷表達(dá)式是否為真……就這樣一直循環(huán)下去,直到表達(dá)式為假鹰椒,跳出循環(huán)锡移。這便是 while 的執(zhí)行順序。
2.終止while循環(huán):
while循環(huán)有一點(diǎn)非常重要:在構(gòu)建while循環(huán)時(shí)漆际,必須要讓測(cè)試表達(dá)式的值有變化淆珊,且表達(dá)式最終要為假,否則循環(huán)就是死循環(huán)奸汇。
還要明確一點(diǎn)就是只有在對(duì)測(cè)試條件求值時(shí)施符,才決定是終止還是循環(huán)繼續(xù)钞支。
3.while:入口條件循環(huán)(for循環(huán)語句也是)
while循環(huán)是使用入口條件的有條件循環(huán)。什么是“有條件”呢操刀,它其實(shí)指的是語句部分的執(zhí)行取決于測(cè)試表達(dá)式描述的條件烁挟。表達(dá)式是一個(gè)入口條件,因?yàn)楸仨氁獫M足條件才能進(jìn)入循環(huán)體骨坑。若條件不滿足撼嗓,則不會(huì)進(jìn)入循環(huán)體。
在寫while語句時(shí)括號(hào)中的表達(dá)式通常為判斷語句欢唾,比如:
status==1且警;//判斷status是否為1
status=1;//把1賦值給status
要注意的是==與=是有區(qū)別的礁遣,斑芜,==是C的相等運(yùn)算符,上面表達(dá)式是判斷status是否為1祟霍。而=是把1賦值給status杏头。
注:
當(dāng)初學(xué)者學(xué)編程時(shí),for沸呐、while醇王、do? while后面的執(zhí)行語句不論有多少行,就算只有一行也要加“{}”崭添,以養(yǎng)成良好的編程習(xí)慣寓娩。
我們?cè)谇么a時(shí)通常會(huì)用到偽代碼,偽代碼是一種簡(jiǎn)單的句子表示程序思路的方法呼渣。它與計(jì)算機(jī)的形式相對(duì)應(yīng)棘伴。它有助于我們理清設(shè)計(jì)程序的邏輯。使用偽代碼的好處便是我們可以把注意力集中在程序的組織和邏輯上屁置,可以暫時(shí)不用思考該如何用編程語言來表達(dá)自己的想法焊夸。
看維基百科說偽代碼:
偽代碼(英語:pseudocode),又稱為虛擬代碼缰犁,是高層次描述算法的一種方法淳地。它不是一種現(xiàn)實(shí)存在的編程語言(已經(jīng)出現(xiàn)了類似偽代碼的語言,參見Nuva)帅容;它可能綜合使用多種編程語言的語法颇象、保留字,甚至?xí)玫阶匀徽Z言并徘。
它以編程語言的書寫形式指明算法的職能遣钳。相比于程序語言(例如Java、C++麦乞、C蕴茴、Delphi 等等)它更類似自然語言劝评。它是半形式化、不標(biāo)準(zhǔn)的語言倦淀。我們可以將整個(gè)算法運(yùn)行過程的結(jié)構(gòu)用接近自然語言的形式(這里可以使用任何一種作者熟悉的文字蒋畜,例如中文、英文撞叽,重點(diǎn)是將程序的意思表達(dá)出來)描述出來姻成。使用偽代碼,可以幫助我們更好的表述算法愿棋,不用拘泥于具體的實(shí)現(xiàn)科展。
人們?cè)谟貌煌木幊陶Z言實(shí)現(xiàn)同一個(gè)算法時(shí)意識(shí)到,他們做出來的實(shí)現(xiàn)(而非功能)很不同糠雨。程序員要理解一個(gè)用他并不熟悉的編程語言編寫的程序才睹,可能是很困難的,因?yàn)槌绦蛘Z言的形式限制了程序員對(duì)程序關(guān)鍵部分的理解甘邀,而偽代碼可以用于幫助人們理解解釋代碼的語法琅攘、規(guī)則、內(nèi)涵和結(jié)構(gòu)鹃答。于是偽代碼就這樣應(yīng)運(yùn)而生了乎澄。
當(dāng)考慮算法功能(而不是其語言實(shí)現(xiàn))時(shí),偽代碼常常得到應(yīng)用测摔。計(jì)算機(jī)科學(xué)在教學(xué)中通常使用偽代碼,以幫助學(xué)習(xí)者能夠快速并透徹地理解解恰。
NO.2
第二位登場(chǎng)的老大便是do while锋八,同樣也是三大光桿司令中的一員。但他跟While不同护盈,do while循環(huán)是出口條件語句挟纱。何為出口條件循環(huán)呢,即在循環(huán)的每次迭代之后檢查測(cè)試條件腐宋,保證至少能執(zhí)行一次循環(huán)體中的內(nèi)容紊服。
1.do while循環(huán)的通用形式如下:
do{? ?
? 循環(huán)體? }while();注:do while語句以分號(hào)結(jié)尾
注釋:do-while 循環(huán)的執(zhí)行流程:首先無條件地執(zhí)行一次循環(huán)體胸竞,然后再根據(jù)循環(huán)控制表達(dá)式的值來判斷是否繼續(xù)執(zhí)行循環(huán)體欺嗤。若為真,則繼續(xù)執(zhí)行卫枝;若為假煎饼,則停止執(zhí)行,退出 do-while 循環(huán)校赤。也就是說吆玖,do-while 循環(huán)至少會(huì)執(zhí)行一次循環(huán)體筒溃。
那么我們?cè)撊绾螀^(qū)別While和do while呢。前面我寫過一篇文章關(guān)于while和do while的文章沾乘,見下:
注:用關(guān)系運(yùn)算符和表達(dá)式比較大小
循環(huán)經(jīng)常要用到測(cè)試表達(dá)式來作比較怜奖,這樣的表達(dá)式稱為關(guān)系表達(dá)式。出現(xiàn)在關(guān)系表達(dá)式中間的運(yùn)算符叫做關(guān)系運(yùn)算符翅阵。相關(guān)關(guān)系運(yùn)算符如下:
既然說到關(guān)系運(yùn)算符烦周,那我們來講講運(yùn)算符的優(yōu)先級(jí)
關(guān)系運(yùn)算符的優(yōu)先級(jí)比算術(shù)運(yùn)算符低,比賦值運(yùn)算符高怎顾。相關(guān)的運(yùn)算符優(yōu)先級(jí)表這里就不放出來了读慎,比較長(zhǎng),感興趣的可以去百度搜一下槐雾。
NO.3
for作為最后出場(chǎng)的老大夭委,也算是三個(gè)老大里出場(chǎng)最多的了。為什么怎么說呢募强,因?yàn)樗糜寐镏昃模瑢?duì)不對(duì),因?yàn)楹糜貌沤?jīng)常出現(xiàn)在C語言的代碼中擎值。
1.for循環(huán)的通用形式如下:
for(表達(dá)式1慌烧;表達(dá)式2;表達(dá)式3){
循環(huán)體}
注釋:for循環(huán)后面的括號(hào)里有三個(gè)表達(dá)式鸠儿,分別用兩個(gè)分號(hào)隔開屹蚊。第一個(gè)表達(dá)式是初始化,只會(huì)在循環(huán)開始時(shí)執(zhí)行一次进每;第二個(gè)為測(cè)試條件汹粤,在執(zhí)行循環(huán)之前對(duì)表達(dá)式求值;如果為假田晚,循環(huán)結(jié)束嘱兼,否則繼續(xù)執(zhí)行第三個(gè)語句并繼續(xù)循環(huán)。
for循環(huán)的第一個(gè)表達(dá)式給計(jì)數(shù)器賦值贤徒,第二個(gè)表達(dá)式表示計(jì)數(shù)器的范圍芹壕,第三個(gè)表達(dá)式遞增或者遞減計(jì)數(shù)器。
for循環(huán)之所以好用接奈,也是因?yàn)樗撵`活性踢涌。并且還有如下九種用法:
可以使用遞減運(yùn)算符來遞減計(jì)數(shù)器
可以讓計(jì)數(shù)器遞增2,10等
可以用字符代替數(shù)字計(jì)數(shù)
除了測(cè)試迭代次數(shù)外鲫趁,斯嚎,還可以測(cè)試其他條件
可以讓遞增的量幾何增長(zhǎng),而不是算術(shù)增長(zhǎng)
第三個(gè)表達(dá)式可以使用任意合法的表達(dá)式
可以省略一個(gè)或多個(gè)表達(dá)式(但不能省略分號(hào)),只要在循環(huán)中包含能結(jié)束循環(huán)的語句即可
第一個(gè)表達(dá)式不一定是給變量賦初值堡僻,也可以使用printf()
循環(huán)體中的行為可以改變循環(huán)頭中的表達(dá)式
我們?cè)谑褂醚h(huán)時(shí)該如何選擇使用哪一種語句呢糠惫?
首先,我們得先確定是需要入口條件循環(huán)還是出口條件循環(huán)钉疫。一般我們都是入口條件循環(huán)用的次數(shù)較多硼讽。這是因?yàn)榘凑找话阍瓌t是在執(zhí)行循環(huán)之前測(cè)試條件比較好,而且測(cè)試放在循環(huán)的開頭可使程序的可讀性更高牲阁。還有就是在許多應(yīng)用中固阁,要求在一開始不滿足測(cè)試條件時(shí)就直接跳過整個(gè)循環(huán)。
我們平常用得最多的還是入口條件循環(huán)城菊,那么在入口條件循環(huán)中我們?cè)撊绾芜x擇是使用for語句還是while語句呢备燃?這個(gè)就取決于個(gè)人喜好啦,原因是兩者可以互補(bǔ)凌唬,for語句和while語句大多數(shù)情況下都是可以互相替換的并齐。
最后的話
相信你學(xué)到這里或多或少都對(duì)循環(huán)有了一定的了解,想要更好的理解循環(huán)客税,建議多看幾遍哦况褪。這也是經(jīng)過多次閱讀書籍從而整理出來的循環(huán)里最重要的一些知識(shí)點(diǎn)。希望大家看完這篇文章后對(duì)循環(huán)有更好的了解更耻。
一個(gè)正在學(xué)習(xí)C語言的人测垛,致力于將C講得更透徹!
點(diǎn)贊關(guān)注~謝謝你~
歡迎在留言區(qū)留下你的想法秧均,讓我們一起討論提高食侮。
關(guān)注公眾號(hào)即可獲得千G資源哦