C語言初階教學(xué)----分支和循環(huán)(1)

前言

對于一個C語言菜鳥來說,說出這些話無疑是大言不慚的养叛,但我有信心也有能力為大家講好C語言,系統(tǒng)的帶大家入門C語言宰翅,也希望大家能夠相信我弃甥,支持我,在接下來的幾個月中汁讼,我會持續(xù)更新這個系列淆攻,當(dāng)然,我的筆記也會同步更新的嘿架,感謝大家的支持瓶珊!如果覺得內(nèi)容還不錯的話,點一個小小的贊和支持吧耸彪!

課前準(zhǔn)備

內(nèi)容總覽:

分支語句

if

switch

循環(huán)語句

while

for

do while

相信大家都聽說過一句話是:C語言是結(jié)構(gòu)化程序設(shè)計語言伞芹,但是為什么這么說呢?大家想一下我們生活中做一件事蝉娜,有三種情況唱较,語言表示呢,不是很好表示蜀肘,先給大家畫圖表示一下绊汹!

這個圖畫得確實不是很好稽屏,但我覺得大家應(yīng)該能了解到我的意思扮宠,這三種做事或者解決問題的方法,也分別對應(yīng)著C語言中的三種結(jié)構(gòu)(不得不感嘆最初編程設(shè)計語言的抽象概括能力)狐榔,這個地方需要告訴大家坛增,C語言中也只有這三種結(jié)構(gòu),而我們今天講的也就是分支和循環(huán)語句薄腻,對應(yīng)的也就是分支和循環(huán)結(jié)構(gòu)收捣,那么我為什么不講順序結(jié)構(gòu)呢?

因為在計算機中庵楷,在沒有分支和循環(huán)結(jié)構(gòu)參與的情況下罢艾,所有的程序都是默認的順序結(jié)構(gòu)楣颠,即程序是順序執(zhí)行的,所以順序結(jié)構(gòu)并沒有講的必要咐蚯,同時童漩,順序結(jié)構(gòu)也是我們能夠進行程序編程的基礎(chǔ)所在,也是計算機的基礎(chǔ)內(nèi)在邏輯所在春锋,從某種程度上講矫膨,在進行分支和選擇結(jié)構(gòu)的過程中,也同樣在進行著順序結(jié)構(gòu)期奔。

1.什么是語句侧馅?

C語言語句可分為以下五類:

(1)表達式語句(例如 y=x+3;假設(shè)變量y和x均已定義)

(2)函數(shù)調(diào)用語句(MAX(x,y);假設(shè)函數(shù)MAX()已經(jīng)定義)

(3)控制語句

(4)復(fù)合語句(把多種語句復(fù)合在一起形成的語句)

(5)空語句(例如 ;分號本身就可以作為一條語句,稱為空語句呐萌,至于空語句的作用馁痴,后續(xù)會講到 )

無論上述哪一種語句,都必須以分號結(jié)束肺孤!

今天介紹的分支和循環(huán)語句就是控制語句弥搞。

控制語句用于控制程序的執(zhí)行流程,以實現(xiàn)程序的各種結(jié)構(gòu)方式渠旁,它們由特定的語句定義符組成攀例,C語言有九種控制語句。

可分成以下三類:

1. 條件判斷語句(也叫分支語句):if語句顾腊、switch語句粤铭;

2. 循環(huán)執(zhí)行語句:do while語句、while語句杂靶、for語句梆惯;

3. 轉(zhuǎn)向語句:break語句、goto語句吗垮、continue語句垛吗、return語句。

2烁登、分支語句(選擇結(jié)構(gòu))

你遇到了你喜歡的女生怯屉,如果你表白了,她成了你的女朋友饵沧,你和她在一起了锨络;

如果你沒有表白,她成了別人的女朋友狼牺,你看著她躺在別人的懷里羡儿,后悔莫及。

這就是選擇是钥!


當(dāng)然掠归,也有多分支選擇缅叠,如果你表白成功了,她成了你的女朋友虏冻;相反痪署,如果你表白失敗了,她說:你是個好人兄旬,如果你壓根就沒有表白狼犯,那她最終還是成為了別人的女朋友。(遇到喜歡的人就要勇敢表白哦A祛怼C跎)

2.1if語句

那if語句的語法結(jié)構(gòu)是怎么樣的呢?

if()括號中的表達式如果為真绪撵,就執(zhí)行后面的語句瓢姻;如果為假,就不執(zhí)行后面的語句音诈,去執(zhí)行else后面的語句幻碱,那么什么是真?什么是假呢细溅?

C語言規(guī)定褥傍,0為假,非0為真喇聊。

下面就代碼給大家演示一下吧恍风!

首先是單分支的情況:

然后是雙分支的情況:

接下來是多分枝的情況:

image.png

哎,很多同學(xué)們看到這就想問了誓篱,多分支情況下后面的條件判斷是不是不寫前面的age>=18也是可以的呢朋贬?很明顯當(dāng)然是可以的,因為前面不滿足age<18的時候此時age是一定大于18的了窜骄,那么此時按照道理來說锦募,我們不寫age>=18也是沒有問題的,但這個地方邻遏,推薦同學(xué)們還是要加上的糠亩,為什么呢?我們將來寫代碼党远,不僅僅是給自己看的削解,也是要給別人看的,加上之后沟娱,條理就很清晰明了,方便別人查看的同時腕柜,也有利于我們后期的維護與調(diào)試济似。

看到這矫废,相信同學(xué)們也會有這樣的疑問,就是我們在寫條件表達式(age>=18&&age<60)的時候可不可以這樣寫呢砰蠢?(18<=age<60)相信大家會有這樣的疑問蓖扑,其實有這樣的疑問也是正常的,因為我們在數(shù)學(xué)中就是這樣寫的台舱,但這樣寫到底行不行呢律杠?我們直接代碼走起!


在同學(xué)們看到第一張圖的時候竞惋,哎柜去,感覺沒問題啊,但看到第二張圖的時候拆宛,出問題了嗓奢!為什么會出現(xiàn)這種問題呢?接下來呢浑厚,我給大家分析一下股耽! 我們知道,> >= < <= == 钳幅,這些運算符都是關(guān)系運算符物蝙,如果結(jié)果為真,就返回1敢艰,如果結(jié)果為假茬末,就返回0,并且結(jié)合方向是自左向右(有關(guān)于運算符的結(jié)合方向盖矫,我會把各種運算符的結(jié)合方向以圖片的形式在本篇文章的最后分享給大家)丽惭,在第二個例子中,我們輸入了100辈双,首先對第一個if后面的表達式進行判斷责掏,很明顯,100>18,不滿足條件湃望,接下來進入了第一個else if語句進行判斷换衬,18<=100,是真的,返回1证芭,然后1<60,是真的瞳浦,最終,返回1結(jié)果是成立的废士,所以會輸出“青年”叫潦,相信大家看到這就明白了,在計算機中是不可以這樣寫的官硝,雖然語法上沒有問題矗蕊,但邏輯上卻無法正確表達我們的意思短蜕,無法滿足我們的要求,所以不要這樣使用傻咖!

看到這很多同學(xué)們又有問題了朋魔,那我們在if()的后面直接跟一個變量是不是也是可以的呢?是的卿操,完全沒有問題警检!因為上面已經(jīng)說了,c語言規(guī)定害淤,0為假扇雕,非0為真,所以在if()后面直接跟變量是完全沒有問題的筝家!如果變量值為非0洼裤,那么判斷結(jié)果為真,就執(zhí)行后面的語句溪王,如果變量值為0腮鞍,那么判斷結(jié)果為假,就不執(zhí)行后面的語句莹菱。

同時在這給大家順便提一下移国,賦值表達式的返回值是賦的值本身,即if(i = n)中(n為常數(shù))道伟,如果n為0迹缀,那么返回值為0,如果n為非0蜜徽,那么返回值為n祝懂,即返回值為非0,為真拘鞋,會執(zhí)行后面的語句砚蓬,同時告訴大家,printf和scanf函數(shù)也是有返回值的盆色,小伙伴們課下可以自己去查一下哦灰蛙!

如果大家想對if有更深入的了解的話,就可以看我另一篇有關(guān)于if的博客隔躲,那篇文章對if有個比較深入的探究摩梧!

如果條件成立,要執(zhí)行多條語句宣旱,則應(yīng)該使用代碼塊仅父!事實上,我前面就全部都使用代碼塊了,那么什么是代碼塊呢驾霜?C語言中案训,被{}括起來的叫做代碼塊买置,接下來給大家代碼展示一下粪糙,如果不用{}會怎樣潦刃!

大家都看到了融求,如果我們想在if后面跟多條語句的話,我們不用{}就會出錯钧唐,這是由C語言語法本身所決定的轩触,因為這樣的話寞酿,后面的else就沒有匹配的if了,默認情況下脱柱,if后面只能跟一條語句伐弹,而計算機把{}內(nèi)的語句當(dāng)作一條語句,所以我們如果if后面想跟多條語句的話榨为,就要用{}括起來形成一個語句塊惨好。

簡單給大家代碼展示一下:

我給大家的建議呢。就是無論后面跟的是幾條語句随闺,我們都加上{}日川,為什么這么說呢,第一個原因就是避免我們在if后面跟多條語句時可能會忘了加{}矩乐;第二個原因是就代碼塊更加簡潔有條理龄句;第三個原因就就是以后方便我們以后再向里面添加代碼。

2.1.1 懸空else

下面給大家一段代碼散罕,希望大家能夠給出輸出的結(jié)果分歇!


相信大家有人會給出"hehe" 的輸出結(jié)果,也會有人給出"haha"的輸出結(jié)果欧漱,當(dāng)然也有人會給出一些其它的結(jié)果职抡,大家都各有各的想法,這并不會讓人意外硫椰,那我告訴大家繁调,輸出結(jié)果是空白,大家會感到意外嗎靶草?大家可能會覺得我說的是假的蹄胰,那我就給大家代碼展示一下!

沒錯奕翔,輸出結(jié)果確實是空白裕寨,這個結(jié)果確實讓人感到意外,這個題中我們需要學(xué)習(xí)的知識點是,else總是跟最近的If進行匹配宾袜!

該如何理解這句話呢捻艳?我們就以下面這段代碼為例給大家解釋一下吧!

首先只看這張圖的話庆猫,很容易讓人誤解后面的這個else會跟if(a==1)進行匹配认轨,但是我們應(yīng)該記住else符合就近原則,即總跟最近的未配對的if進行匹配月培,從這個else向前找前面的if語句嘁字,首先找到的一個未配對的if語句是if(b==2),相信大家清楚了這個這個就不難理解了杉畜,下面給大家展示一下代碼的本來面目纪蜒!

看到這大家應(yīng)該都能理解了吧,首先對if(a==1)進行判斷此叠,不成立纯续,然后后面的if(b==2)與else語句均不執(zhí)行了,我們可以這么理解:if和else組成的是一個語句 灭袁。

實際上猬错,這個代碼我們還能夠去改進一下,使這個代碼變得更加的清晰简卧,更加的方便我們的理解:

這樣加上一個代碼塊是不是更有助于大家的理解了呢兔魂? 所以代碼規(guī)范很重要!

這個地方呢举娩,希望大家能夠養(yǎng)成良好的代碼書寫風(fēng)格析校,使代碼美觀、符合規(guī)范铜涉、并且容易理解智玻!在這給大家推薦一本書,叫《高質(zhì)量的C-C++編程》芙代,里面有很多良好的代碼書寫風(fēng)格還有一些好的習(xí)慣吊奢,大家可以去網(wǎng)上找一找,應(yīng)該使可以找到電子版的纹烹,如果有時間页滚,我也會根據(jù)書上的內(nèi)容寫一些相關(guān)的博客!如果大家實在找不到铺呵,就在評論區(qū)告訴我裹驰,我會分享在評論區(qū)的。

2.1.2if書寫形式的對比

首先大家看代碼1和代碼2片挂,它們表達的意思是完全一樣的幻林,就是如果condition條件成立贞盯,就執(zhí)行return x;語句返回x,反之不成立就執(zhí)行return y;返回y,但是代碼塊2表達意思就比代碼塊1更容易理解,邏輯也更加的清晰沪饺,希望大家在寫代碼的時候能像代碼2一樣這樣寫躏敢!

//代碼1

if (condition) {
    return x;
}

return y;

//代碼2

if(condition)
{
    return x;
}

else
{
    return y;
}

//代碼3

int num = 5;

if(num == 5)
{
    printf("hehe\n");
}

//代碼4

int num = 5;

if(5 == num)
{
    printf("hehe\n");
}

接下來大家看代碼3和代碼4,它們表達的意思是完全一樣的整葡,那我為什么還要給大家講這個點呢件余?是因為老是有很多同學(xué)在寫if(num==5)使寫成了if(num=5),注意雖然前后兩者的結(jié)果是一樣的(后面表達式是否執(zhí)行),但它們所表達的意思卻是完全不同的掘宪,前者是進行判斷蛾扇,而后者是進行賦值攘烛,執(zhí)行完這條語句之后魏滚,前者的num的值并沒有發(fā)生任何改變,而后者無論原先num的值是否為5坟漱,在執(zhí)行完if(num=5)之后鼠次,num的值都將變成5。

它們的判定結(jié)果確實是一樣的芋齿,為什么呢腥寇?前面已經(jīng)給大家說了,賦值表達式的返回結(jié)果是所賦的那個值觅捆,在第二個語句中賦的值為5赦役,所以返回值為5,是非零的數(shù)栅炒,為真掂摔,而前者因為num本身就等于5了,所以判定結(jié)果為真赢赊,兩者都為真乙漓,均執(zhí)行后面的語句。

這兩種寫法第二種雖然是錯誤的释移,但結(jié)果確是正確的叭披,但所造成的后果卻是截然不同的,希望大家能夠注意玩讳!

然后給大家講講為什么我要給大家展示代碼3和代碼4涩蜘,按照我們正常的邏輯來說,我們應(yīng)該會像代碼3這樣寫熏纯,但前面已經(jīng)給大家說了同诫,代碼3這樣寫我們會很容易寫成if(num=5),從而改變了變量的值,那為什么要寫成代碼4這樣呢豆巨?就是為了避免犯這樣的錯誤剩辟!給大家代碼展示一下大家就明白了!

在這種情況下,如果我們還是按照錯誤的方法去寫贩猎,很明顯程序就報錯了熊户,為什么會報錯呢?我們只能給變量賦值吭服,即我們書寫賦值語句的時候嚷堡,=左邊必須是變量,而不能是常量艇棕!這樣編譯器一旦提示我們程序錯誤蝌戒,我們一檢查,就知道自己又犯了老錯誤沼琉,就能及時更正過來北苟!所以推薦大家在寫if()里面的條件判斷表達式時,將常量放在關(guān)系運算符的左邊打瘪!

好了友鼻,今天的分支和循環(huán)(1)就到這了,如果大家覺得不錯的話闺骚,點個小小的贊和關(guān)注吧彩扔,后面還會持續(xù)更新哦!

給大家分享的操作符結(jié)合性順序表:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末僻爽,一起剝皮案震驚了整個濱河市虫碉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌胸梆,老刑警劉巖敦捧,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異乳绕,居然都是意外死亡绞惦,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門洋措,熙熙樓的掌柜王于貴愁眉苦臉地迎上來济蝉,“玉大人,你說我怎么就攤上這事菠发⊥趼耍” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵滓鸠,是天一觀的道長雁乡。 經(jīng)常有香客問我,道長糜俗,這世上最難降的妖魔是什么踱稍? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任曲饱,我火速辦了婚禮,結(jié)果婚禮上珠月,老公的妹妹穿的比我還像新娘扩淀。我一直安慰自己,他們只是感情好啤挎,可當(dāng)我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布驻谆。 她就那樣靜靜地躺著,像睡著了一般庆聘。 火紅的嫁衣襯著肌膚如雪胜臊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天伙判,我揣著相機與錄音象对,去河邊找鬼。 笑死澳腹,一個胖子當(dāng)著我的面吹牛织盼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播酱塔,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼危虱!你這毒婦竟也來了羊娃?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤埃跷,失蹤者是張志新(化名)和其女友劉穎蕊玷,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體弥雹,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡垃帅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了剪勿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贸诚。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖厕吉,靈堂內(nèi)的尸體忽然破棺而出酱固,到底是詐尸還是另有隱情,我是刑警寧澤头朱,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布运悲,位于F島的核電站,受9級特大地震影響项钮,放射性物質(zhì)發(fā)生泄漏班眯。R本人自食惡果不足惜希停,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望署隘。 院中可真熱鬧脖苏,春花似錦、人聲如沸定踱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽崖媚。三九已至亦歉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間畅哑,已是汗流浹背肴楷。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留荠呐,地道東北人赛蔫。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像泥张,于是被迫代替她去往敵國和親呵恢。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容