1.if語句
(1)分段函數(shù)的引入(這里的數(shù)據(jù)表示的是分?jǐn)?shù)的不同區(qū)間對應(yīng)的等級)
(1)這個就是一個十分簡單的if語句,無論是if還是elseif后面都是不能添加任何分號的,這個例子就是一個分段的函數(shù),在不同的區(qū)間賦予不同的等級,這里劃分了1,2,3,4一共4個等級,只有前面的三個全部都不滿足的時候,才會執(zhí)行第四個語句,另外if,elseif的后面都需要添加判斷的條件的,但是else的后面不需要添加任何的條件,這個需要注意,后面我們會使用到;
(2)實際上的代碼這樣寫就已經(jīng)是我們簡化以后的代碼了,因為我們想要表達(dá)的是80~90之間dengji(等級)是2,但是我們只需要寫大于80就會進(jìn)行判斷,為什么呢?因為我們的循環(huán)從上向下執(zhí)行,當(dāng)x>90不滿足的時候,就已經(jīng)把我們的判斷區(qū)間定位在了90分以下,這個時候我們只寫x>80實際上表達(dá)的就是80~90這個分?jǐn)?shù)段的等級;
(2)數(shù)組元素大小的判斷
我們這個要實現(xiàn)的就是一個簡單的數(shù)組里面的兩個元素比較大小,并且按照從大到小排列;
我們下面展示的是兩種不同的寫法,你能發(fā)現(xiàn)它們之間的差別嗎?
我們這個只是使用了if,else語句,十分簡潔;
這段代碼我們使用了if,elseif語句,這樣同樣可以實現(xiàn)這個排序的功能;
其實對于初學(xué)者而言,第二種的代碼多了一些,但是他的閱讀以及對于程序的理解會更加的直觀,我們需要知道的是使用elseif語句,后面是必須要有判斷的條件的,但是如果直接使用else,就不需要添加任何的條件了;
(3)代碼風(fēng)格
對于我們的語句,尤其是循環(huán)語句,好的代碼風(fēng)格能夠讓人賞心悅目,我們在寫代碼的時候一定要注意縮進(jìn)以及留白,這樣更有利于讀者的理解,MATLAB里面也有對于我們寫的代碼進(jìn)行縮進(jìn)的功能:智能縮進(jìn)這個指令能夠讓我們的代碼更加的清晰;
(4)if語句的嵌套
我們的案例是計算a,b,c三個數(shù)里面的最大值,這個有多種方法,我們可以借助函數(shù)max,我們也是可以使用if,elseif,elseif,else語句進(jìn)行判斷,但是這個地方我們使用嵌套的if語句判斷(只是為了介紹嵌套if語句的用法);
根據(jù)上面的思路,我們使用下面的嵌套if語句進(jìn)行求解最大值;
顯然,這樣的嵌套更加復(fù)雜,一般我們不會建議使用,但是我們應(yīng)該能夠理解看懂。
2.switch--case語句
(1)基本的用法
這個就是switch的一個簡單的適用的場景,我們使用case找到與之相互匹配的條件,最后打印是這個季度,我們推薦使用的是函數(shù)disp:
實際上,因為這個季節(jié)是隨機(jī)生成的,我們經(jīng)過多組測試就可以發(fā)現(xiàn)會有不同的打印結(jié)果;
disp函數(shù)的主要的作用就是把其后面的括號里面的內(nèi)容打印顯示在我們的屏幕上面,我們都知道,如果在一條語句的末尾加上冒號,其實語句的結(jié)果可以計算,但是不會再命令行的窗口進(jìn)行顯示,disp克服了這個問題,我們這里實在disp這條語句的末尾加上了冒號,實際上,無論我們加或者不加,結(jié)果都會顯示在屏幕上面的(讀者下去可以自行的嘗試)
當(dāng)然,實現(xiàn)打印的方式肯定不止disp這一種方法,我們可以定義變量,最后打印變量,但是這樣做以后,打印的結(jié)果不會很干凈,不像我們的disp函數(shù),他只會打印我們語句里面的內(nèi)容,但是如果定義變量的話,變量和語句都會打印,顯然就不如disp的效果好(打印結(jié)果如下所示);
(2)switch易錯題目總結(jié)
這里的答案是只有n=0時,才會打印成績合格,相信有很多的小伙伴和我一樣,認(rèn)為只要n時一個大于60的數(shù),就會打印成績合格,實際上并非如此,這里主要的原因是case后面的語句真值要么是0,要么是1,當(dāng)n=0時,switch后面的值是0,case后面的n>=60顯然不符合題意,所以也是假的(我們用0進(jìn)行表示),n=1時候,case后面的語句是假的,但是switch后面的判斷n=1,兩者是不等的,就不會打印成績合格;
這個程序顯然不是我們想要表達(dá)的意思,我們想要表達(dá)的是60分以上的都打印成績合格,否則打印不合格,我們想要達(dá)到這個效果,只需要把switch語句后面的n改寫為1或者是true,這樣我們輸入的n只要大于60就是true,這樣就和我們switch后面的開關(guān)匹配了,就符合我們的想法了。掌握了這個,我們就可以在if語句和switch語句之間做到靈活的轉(zhuǎn)換了。
(3)switch語句&&元胞數(shù)組
元胞數(shù)組里面的數(shù)據(jù),可以是不同類型,不同大小的數(shù)據(jù);我們前面使用的普通矩陣就是一個數(shù)值數(shù)組,里面數(shù)據(jù)的類型是一樣的,使用的是中括號:
元胞數(shù)組是使用的大括號括起來的:
顯然元胞數(shù)組就會顯示cell標(biāo)志,這個在普通的數(shù)組里面是不會顯示的;
元胞數(shù)組和普通數(shù)組之間的相互轉(zhuǎn)換:
上面的是普通的數(shù)組(實質(zhì)就是一個矩陣),打印的就是一個1*7的矩陣;
下面的是使用我們的num2cell函數(shù)把一個普通的數(shù)組轉(zhuǎn)換為元胞數(shù)組;
元胞數(shù)組和普通數(shù)組在存儲上面的區(qū)別:
我們可以發(fā)現(xiàn),普通數(shù)組就是一個數(shù)組,里面有很多個元素,元胞數(shù)組可以理解為是很多數(shù)組的結(jié)合(因為我們通過打印元胞數(shù)組可以發(fā)現(xiàn)元胞數(shù)組里面的每個元素都是數(shù)組);
細(xì)節(jié)聲明不同點:
我們比較一下下面的兩種不同的寫法打印的效果,顯然,我們在2:8這個矩陣外面加或者不加都不影響打印結(jié)果,因為系統(tǒng)會自動識別它的類型,我們需要知道的是num2cell是一個函數(shù),后面的括號就是要寫函數(shù)參數(shù),我們的中括號就是要聲明我們加入的數(shù)據(jù)就是矩陣,我們不加的話也不會影響打印的結(jié)果(這個是我初學(xué)的時候比較疑惑的問題,上機(jī)運行才發(fā)現(xiàn)打印的結(jié)果是一樣的)
其實這樣的例子還有許多:
這個就是隨機(jī)生成1~12的數(shù)字作為月份,我們可以發(fā)現(xiàn)正確的生成方法就是在1,12的外面加上中括號,表示數(shù)據(jù)的生成范圍,但是如果我們不加中括號,就表示的生成數(shù)字全是1的矩陣,維度是12(行數(shù)和列數(shù)都是12,我們只寫了一個,兩個12都寫打印的結(jié)果是相同的),打印的結(jié)果就會截然不同了;
小結(jié):相同的省略(都是省略中括號),打印的結(jié)果截然不同(第一個不影響,第二個就完全不同),我們平時在使用的時候,應(yīng)當(dāng)注意比較這些異同點;
2個具體的實例:
這個案例就是利用這個隨機(jī)生成的數(shù)據(jù),匹配case后面的元胞數(shù)組里面的月份;最后顯示季節(jié);
第二個案例:
這個案例使用元胞數(shù)組打印成績的等級(因為90~100都是A等級,所以元胞數(shù)組就是{9,10}),fix函數(shù)的作用就是取整函數(shù),就是把小數(shù)部分給舍掉;
這里把switch后面的開關(guān)改寫為了a,這個時候的91如果想要打印A等級,就需要改寫case后面的語句,這個案例提供了3種寫法,第一種會被理解為一個元胞數(shù)組,所以不會打印A等級,第二種就是枚舉所有的可能情況,可以打印對應(yīng)的等級;第三種就是使用num2cell把數(shù)組轉(zhuǎn)換為元胞數(shù)組,這里比較容易想的是第一種寫法,但是這個想法是不對的(后面的case后的8,7,6也可以按照這個進(jìn)行改寫,這里只演示一個);
3.for語句斷點調(diào)試功能
我們要想知道這個循環(huán)的具體的執(zhí)行過程,就可以進(jìn)行調(diào)試,下面我是以2023a的版本進(jìn)行實現(xiàn)的
(1)首先我們認(rèn)識一下運行節(jié),運行,和步進(jìn)
在我們的實時腳本里面,我們可以劃分不同的運行節(jié),我們選擇運行節(jié)(就是上面的1)就只會運行我們所打的斷點那個運行節(jié)里面的內(nèi)容,我們點擊運行就會運行實時腳本里面所有的代碼(一般不會這樣做,除非是大型的項目,一般我們練習(xí)的調(diào)試都是運行節(jié)),步進(jìn)就是一步一步地執(zhí)行,這個步進(jìn)就是在調(diào)試的過程中使用的,來控制調(diào)試;
(2)打斷點:就是在行號上面點擊出現(xiàn)紅色的方框,這個表示設(shè)置斷點成功:
(3)運行的過程:我們設(shè)置斷點過以后,程序就會從斷點的位置開始運行,我們點擊步進(jìn)就會一步一步地執(zhí)行,循環(huán)的過程以及變量的值變化的過程都可以看見:
這里我設(shè)置了2個斷點,調(diào)試開始以后,我們就會發(fā)現(xiàn),上方的實時編輯器增加了新的功能:
繼續(xù):我們只有設(shè)置多個斷點的時候,繼續(xù)這個選項才會發(fā)生作用,我的設(shè)置270,274行2個斷點,如果開始以后箭頭指向270行,這個時候如果是步進(jìn),就會一步一步地執(zhí)行循環(huán),每一步的結(jié)果都可以看到(下面會講到),但是如果執(zhí)行的是“繼續(xù)”,就會直接跳到下一個斷點的位置,也就是274行,直接打印s的數(shù)值(這個和我們不調(diào)試直接運行其實就沒有區(qū)別了,因為這樣就會直接打印結(jié)果);
步進(jìn):和上面的一樣,控制調(diào)試的過程執(zhí)行;
步入步出:這個后續(xù)在自定義函數(shù)會用到,這個后續(xù)介紹,了解即可;
停止:這個就很直接了,直接停止我們調(diào)試的過程;
(4)工作區(qū)觀察循環(huán)的每個步驟:
右邊的工作區(qū)可以直觀地觀察調(diào)試的時候,每個變量的大小的變化的情況,這里顯示的是ii=6,這個是因為循環(huán)已經(jīng)結(jié)束了,如果開始調(diào)試每一次循環(huán),ii的數(shù)值都會加一,s的數(shù)值一直在累加,所以它的數(shù)值隨著循環(huán)的進(jìn)行也會不斷地發(fā)生變化;
(5)變式解決
我們上面的使用逗號隔開,是行向量,如果使用分號隔開,就變成了列向量,發(fā)現(xiàn)循環(huán)以后打印的是列向量的本身;
這個是因為我們每次循環(huán)時,會取出一列參加運算,如果是行向量,每次取出來一列(相當(dāng)于就是一個數(shù)字,因為一個數(shù)字可以看作是行數(shù)為1的列向量),如果是列向量,直接取出一列,相當(dāng)于循環(huán)就直接進(jìn)行了一次,就把列向量輸出了,并不是我們想要的結(jié)果;
解決方案:
第二種:
文章來源:http://www.zghlxwxcb.cn/news/detail-846804.html
這種做法就比較無腦了,就是無論你是行向量還是列向量,我都把你轉(zhuǎn)換成列向量,然后進(jìn)行轉(zhuǎn)置,最后經(jīng)過循環(huán)輸出結(jié)果。文章來源地址http://www.zghlxwxcb.cn/news/detail-846804.html
到了這里,關(guān)于數(shù)學(xué)建模-------MATLAB分支循環(huán)&&斷點調(diào)試的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!