版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、MATLAB R2010a基礎(chǔ)教程基礎(chǔ)教程 清華大學(xué)出版社清華大學(xué)出版社2022年5月8日第1頁第第4講講 分支語句和編程設(shè)計(jì)分支語句和編程設(shè)計(jì)MATLAB R2010a 基礎(chǔ)教程基礎(chǔ)教程 清華大學(xué)出版社清華大學(xué)出版社自上而下的編程方法簡介關(guān)系運(yùn)算符和邏輯運(yùn)算符選擇結(jié)構(gòu)(分支語句)MATLAB R2010a基礎(chǔ)教程基礎(chǔ)教程 清華大學(xué)出版社清華大學(xué)出版社l在前面的章節(jié)中,我們開發(fā)了幾個完全運(yùn)轉(zhuǎn)的在前面的章節(jié)中,我們開發(fā)了幾個完全運(yùn)轉(zhuǎn)的MATLAB程序。但是這程序。但是這些程序都十分簡單,包括一系列的些程序都十分簡單,包括一系列的MATLAB語句,這些語句按照固定語句,這些語句按照固定的順序一個接
2、一個的執(zhí)行。像這樣的程序我們稱之的順序一個接一個的執(zhí)行。像這樣的程序我們稱之順序結(jié)構(gòu)程序順序結(jié)構(gòu)程序。它。它首先首先讀取輸入,然后運(yùn)算得到所需結(jié)果,打印出結(jié)果,并退出讀取輸入,然后運(yùn)算得到所需結(jié)果,打印出結(jié)果,并退出。至于。至于要多次重復(fù)運(yùn)算程序的某些部分是沒有辦法的,也不能根據(jù)輸入的值,要多次重復(fù)運(yùn)算程序的某些部分是沒有辦法的,也不能根據(jù)輸入的值,有選擇地執(zhí)行程序的某些部分。有選擇地執(zhí)行程序的某些部分。l在下面的兩章中,將向大家介紹大量的在下面的兩章中,將向大家介紹大量的MATLAB語句,這些語句允許語句,這些語句允許我們來我們來控制語句的執(zhí)行順序控制語句的執(zhí)行順序。有兩大類控制順序結(jié)構(gòu):。
3、有兩大類控制順序結(jié)構(gòu):選擇結(jié)構(gòu)選擇結(jié)構(gòu),用,用選擇執(zhí)行特定的語句;選擇執(zhí)行特定的語句;循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu),用于重復(fù)執(zhí)行特定部分的代碼。循,用于重復(fù)執(zhí)行特定部分的代碼。循環(huán)結(jié)構(gòu)我們將會在下節(jié)課討論。環(huán)結(jié)構(gòu)我們將會在下節(jié)課討論。l隨著選擇和循環(huán)介紹,我們的程序也將變得復(fù)雜,對于解決問題來說,隨著選擇和循環(huán)介紹,我們的程序也將變得復(fù)雜,對于解決問題來說,將會變得簡單。為了幫助大家避免在編程過程中出現(xiàn)大量的錯誤,我將會變得簡單。為了幫助大家避免在編程過程中出現(xiàn)大量的錯誤,我們將向大家介紹正式的編程步驟,們將向大家介紹正式的編程步驟,即自上而下的編程方法即自上而下的編程方法。我們也會。我們也會向大家介紹一
4、些普通的算法開發(fā)工具即偽代碼。向大家介紹一些普通的算法開發(fā)工具即偽代碼。2022年5月8日第2頁MATLAB R2010a基礎(chǔ)教程基礎(chǔ)教程 清華大學(xué)出版社清華大學(xué)出版社一一 自上而下的編程方法簡介自上而下的編程方法簡介l當(dāng)遇到一個新問題時,我們的心里會自然而然的產(chǎn)生這樣的想法:馬當(dāng)遇到一個新問題時,我們的心里會自然而然的產(chǎn)生這樣的想法:馬上坐在計(jì)算機(jī)前,開始編程,而不用浪費(fèi)大量的時間思考我們所要解上坐在計(jì)算機(jī)前,開始編程,而不用浪費(fèi)大量的時間思考我們所要解決的問題是什么?決的問題是什么?用這種不切實(shí)際的想法來編一些非常小的程序可能用這種不切實(shí)際的想法來編一些非常小的程序可能會成功會成功。但在現(xiàn)
5、實(shí)中,問題可能會非常的大,程序員再用這種方法編。但在現(xiàn)實(shí)中,問題可能會非常的大,程序員再用這種方法編程將會陷入困境。程將會陷入困境。對于一個大的程序來說對于一個大的程序來說,在編寫代碼之前你要通盤,在編寫代碼之前你要通盤的思考你所要面臨的問題和解決的方法。在本節(jié)中,我們將向大家介的思考你所要面臨的問題和解決的方法。在本節(jié)中,我們將向大家介紹正式的編程設(shè)計(jì)步驟,然后應(yīng)用這個步驟來編寫所有的大的應(yīng)用程紹正式的編程設(shè)計(jì)步驟,然后應(yīng)用這個步驟來編寫所有的大的應(yīng)用程序。對于我們所遇到一些簡單的例子來說,這個步驟好像有些畫蛇添序。對于我們所遇到一些簡單的例子來說,這個步驟好像有些畫蛇添足。但是當(dāng)我們解決的
6、問題變得越來越大的時侯,這個步驟將會變得足。但是當(dāng)我們解決的問題變得越來越大的時侯,這個步驟將會變得異常重要。異常重要。2022年5月8日第3頁假設(shè)你是在工廠工作的工程師,為了解決某假設(shè)你是在工廠工作的工程師,為了解決某些問題,你要編寫一個程序。你如何開始呢?些問題,你要編寫一個程序。你如何開始呢?MATLAB R2010a基礎(chǔ)教程基礎(chǔ)教程 清華大學(xué)出版社清華大學(xué)出版社l工作中遇到的大多數(shù)困難都是對所要解決問題的理解。一工作中遇到的大多數(shù)困難都是對所要解決問題的理解。一旦你真正理解了問題,你就會把這個問題分解成許多小的旦你真正理解了問題,你就會把這個問題分解成許多小的問題,更加易于管理的小塊,
7、然后逐一解決某一個小塊。問題,更加易于管理的小塊,然后逐一解決某一個小塊。自上而下的編程方法是我們正規(guī)編程設(shè)計(jì)的基礎(chǔ)自上而下的編程方法是我們正規(guī)編程設(shè)計(jì)的基礎(chǔ)。我們現(xiàn)。我們現(xiàn)在向大家介紹這些在下圖中說明的步驟細(xì)節(jié)。步驟如下在向大家介紹這些在下圖中說明的步驟細(xì)節(jié)。步驟如下:2022年5月8日第4頁MATLAB R2010a基礎(chǔ)教程基礎(chǔ)教程 清華大學(xué)出版社清華大學(xué)出版社2022年5月8日第5頁MATLAB R2010a基礎(chǔ)教程基礎(chǔ)教程 清華大學(xué)出版社清華大學(xué)出版社1.清晰地陳述你所要解決的問題清晰地陳述你所要解決的問題l編寫的程序大多數(shù)情況下要滿足一些感覺上的需要,但這種需要不一編寫的程序大多數(shù)情
8、況下要滿足一些感覺上的需要,但這種需要不一定能夠被人清晰地表達(dá)出來。例如,定能夠被人清晰地表達(dá)出來。例如,用戶需要一個解線性方程組的表用戶需要一個解線性方程組的表達(dá)式達(dá)式。像這樣的要求就不夠清楚,程序員就很難編出一個使他滿意的。像這樣的要求就不夠清楚,程序員就很難編出一個使他滿意的程序。他必須弄清楚要有多少問題需要解決程序。他必須弄清楚要有多少問題需要解決?在這些方程式中有沒有對在這些方程式中有沒有對稱的形式使我們的開發(fā)變得簡單稱的形式使我們的開發(fā)變得簡單?程序設(shè)計(jì)者必須和使用者討論所需的程序設(shè)計(jì)者必須和使用者討論所需的程序,他們必須要對完成的任務(wù)有一個精確細(xì)致的描述。對問題清晰程序,他們必須
9、要對完成的任務(wù)有一個精確細(xì)致的描述。對問題清晰的描述可以防止誤解,并且能夠幫助程序員合理的組織他的思想。上的描述可以防止誤解,并且能夠幫助程序員合理的組織他的思想。上面的例子對問題合適的陳述應(yīng)為面的例子對問題合適的陳述應(yīng)為:l設(shè)計(jì)一個用于解決聯(lián)立線性方程組的程序,這些方程中未知數(shù)的系數(shù)設(shè)計(jì)一個用于解決聯(lián)立線性方程組的程序,這些方程中未知數(shù)的系數(shù)為實(shí)數(shù),最多有為實(shí)數(shù),最多有20個未知數(shù)。個未知數(shù)。2022年5月8日第6頁MATLAB R2010a基礎(chǔ)教程基礎(chǔ)教程 清華大學(xué)出版社清華大學(xué)出版社2.定義程序所需的輸入量和程序所產(chǎn)生的輸出量定義程序所需的輸入量和程序所產(chǎn)生的輸出量l指定輸入量和輸出量指
10、定輸入量和輸出量,只有這樣新的程序才能適應(yīng)全過程,只有這樣新的程序才能適應(yīng)全過程計(jì)劃。在這個例子中方程式的系數(shù)可能有其預(yù)先存在的順計(jì)劃。在這個例子中方程式的系數(shù)可能有其預(yù)先存在的順序,我們的新程序必須能按照順序讀取它們。相似地,也序,我們的新程序必須能按照順序讀取它們。相似地,也需要產(chǎn)生出這個程序所要求的結(jié)果,即輸出量,我們還要需要產(chǎn)生出這個程序所要求的結(jié)果,即輸出量,我們還要以一定的格式打印出來。以一定的格式打印出來。2022年5月8日第7頁MATLAB R2010a基礎(chǔ)教程基礎(chǔ)教程 清華大學(xué)出版社清華大學(xué)出版社3.設(shè)計(jì)你的程序得以實(shí)現(xiàn)的算法設(shè)計(jì)你的程序得以實(shí)現(xiàn)的算法l算法是指為某個問題找到
11、答案一步接一步的程序。算法是指為某個問題找到答案一步接一步的程序。在這個階段自上而在這個階段自上而下的編程方法發(fā)揮了作用。編程設(shè)計(jì)者開始對這個問題進(jìn)行下的編程方法發(fā)揮了作用。編程設(shè)計(jì)者開始對這個問題進(jìn)行邏輯劃分邏輯劃分,把它逐步分解為一個又一個子工作。這個過程叫做分解,把它逐步分解為一個又一個子工作。這個過程叫做分解(decomposition)。如果一些子工作還是比較大,設(shè)計(jì)者還可以把他。如果一些子工作還是比較大,設(shè)計(jì)者還可以把他它分解成更小的塊。這個過程將會繼續(xù)到問題被分解成許多簡單且易它分解成更小的塊。這個過程將會繼續(xù)到問題被分解成許多簡單且易理解的小塊為止。理解的小塊為止。l在問題被分
12、解成小塊之后,每一個小塊要被進(jìn)一步的求精,這個過程在問題被分解成小塊之后,每一個小塊要被進(jìn)一步的求精,這個過程叫做叫做逐步求精逐步求精(stepwise refinement)。在這個過程中,設(shè)計(jì)者開始。在這個過程中,設(shè)計(jì)者開始于對本小塊代碼總括性的描述,然后開始一步一步地定義所需的函數(shù)于對本小塊代碼總括性的描述,然后開始一步一步地定義所需的函數(shù),越來越具體,直到他能夠轉(zhuǎn)化為,越來越具體,直到他能夠轉(zhuǎn)化為MATLAB語句。逐步求精的過程中語句。逐步求精的過程中,我們要用到的偽代碼將會在下節(jié)為大家介紹。,我們要用到的偽代碼將會在下節(jié)為大家介紹。l在算法開發(fā)過程中,這個方法是非常有用的。如果設(shè)計(jì)者
13、真正理解了在算法開發(fā)過程中,這個方法是非常有用的。如果設(shè)計(jì)者真正理解了解決問題這個些步驟,他將會對問題進(jìn)行分解和逐步求精。解決問題這個些步驟,他將會對問題進(jìn)行分解和逐步求精。2022年5月8日第8頁MATLAB R2010a基礎(chǔ)教程基礎(chǔ)教程 清華大學(xué)出版社清華大學(xué)出版社4.把算法轉(zhuǎn)化為代碼把算法轉(zhuǎn)化為代碼l如果分解和逐步求精的過程已經(jīng)順利完成如果分解和逐步求精的過程已經(jīng)順利完成,那么這一步將會異常地簡單。所有程序,那么這一步將會異常地簡單。所有程序員都會將偽代碼一句一句地轉(zhuǎn)化為合適地員都會將偽代碼一句一句地轉(zhuǎn)化為合適地MATLAB語句。語句。2022年5月8日第9頁MATLAB R2010a基
14、礎(chǔ)教程基礎(chǔ)教程 清華大學(xué)出版社清華大學(xué)出版社5 檢測產(chǎn)生的檢測產(chǎn)生的MATLAB程序程序l這一步是這一步是真正的攔路虎真正的攔路虎。首先,程序的每一部分將會被單獨(dú)地檢測,。首先,程序的每一部分將會被單獨(dú)地檢測,如果有可能的話,整個程序還要被檢測一遍。在我們檢測程序時,我如果有可能的話,整個程序還要被檢測一遍。在我們檢測程序時,我們必須證明所有合法輸入數(shù)據(jù)值都能夠正常運(yùn)行。用標(biāo)準(zhǔn)的輸入值檢們必須證明所有合法輸入數(shù)據(jù)值都能夠正常運(yùn)行。用標(biāo)準(zhǔn)的輸入值檢測程序,看它是否產(chǎn)生了值。如果在一個程序中執(zhí)行的算法包含了不測程序,看它是否產(chǎn)生了值。如果在一個程序中執(zhí)行的算法包含了不同的分支,同的分支,你必須檢測
15、每一個分支,你必須檢測每一個分支,以保證產(chǎn)生正確的答案。大程序以保證產(chǎn)生正確的答案。大程序在交付大眾使用之前,必須經(jīng)過一系列地檢測。在交付大眾使用之前,必須經(jīng)過一系列地檢測。檢測的第一步有時被檢測的第一步有時被稱為單元檢測稱為單元檢測(unit testing)。在單元檢測過程中,程序的子程序?qū)?。在單元檢測過程中,程序的子程序?qū)华?dú)立地檢測以證明它的正確性。當(dāng)單元檢測結(jié)束之后,這個程序?qū)⒈华?dú)立地檢測以證明它的正確性。當(dāng)單元檢測結(jié)束之后,這個程序?qū)⑦M(jìn)行一系列的組合,把獨(dú)立的子程序聯(lián)合產(chǎn)生出最后的程序。程序第進(jìn)行一系列的組合,把獨(dú)立的子程序聯(lián)合產(chǎn)生出最后的程序。程序第一步的聯(lián)合通常只包括很少的
16、子程序。通過組合這些子程序,經(jīng)常用一步的聯(lián)合通常只包括很少的子程序。通過組合這些子程序,經(jīng)常用于檢查子程序或函數(shù)之間的聯(lián)系。在一系列地組合過程中,越來越多于檢查子程序或函數(shù)之間的聯(lián)系。在一系列地組合過程中,越來越多的子程序被加了進(jìn)來,直到整個程序的完成。的子程序被加了進(jìn)來,直到整個程序的完成。在每一次組合的過程中在每一次組合的過程中,每一個錯誤都會被發(fā)現(xiàn)并在進(jìn)行下一次組合之前糾正過來。,每一個錯誤都會被發(fā)現(xiàn)并在進(jìn)行下一次組合之前糾正過來。2022年5月8日第10頁MATLAB R2010a基礎(chǔ)教程基礎(chǔ)教程 清華大學(xué)出版社清華大學(xué)出版社l在整個程序被組合之后,調(diào)試?yán)^續(xù)進(jìn)行。程序第一個版本在整個程
17、序被組合之后,調(diào)試?yán)^續(xù)進(jìn)行。程序第一個版本我們通常稱之為我們通常稱之為“alpha版本版本”。程序員和其他有機(jī)會接。程序員和其他有機(jī)會接近它的人可以想盡一切辦法應(yīng)用它,以發(fā)現(xiàn)其中的漏洞,近它的人可以想盡一切辦法應(yīng)用它,以發(fā)現(xiàn)其中的漏洞,然后改正之。當(dāng)許許多多大的錯誤從程序中去除,一個新然后改正之。當(dāng)許許多多大的錯誤從程序中去除,一個新的版本出現(xiàn)了,我們稱之的版本出現(xiàn)了,我們稱之“beta版本版本”。beta版本就要公版本就要公開地發(fā)行給天天需要這個程序工作的人。這些用戶使這個開地發(fā)行給天天需要這個程序工作的人。這些用戶使這個程序在不同的環(huán)境下,在不同的輸入條件下工作,會發(fā)現(xiàn)程序在不同的環(huán)境下,
18、在不同的輸入條件下工作,會發(fā)現(xiàn)許多的錯誤,并報告給程序員。當(dāng)這些錯誤被更正后,這許多的錯誤,并報告給程序員。當(dāng)這些錯誤被更正后,這個程序就能夠發(fā)行給公眾使用了。因?yàn)槲覀儸F(xiàn)在一般接觸個程序就能夠發(fā)行給公眾使用了。因?yàn)槲覀儸F(xiàn)在一般接觸的程序都比較小,沒有必要進(jìn)行上述的大規(guī)模的檢測。但的程序都比較小,沒有必要進(jìn)行上述的大規(guī)模的檢測。但是我們會遵循基本的調(diào)試原則。是我們會遵循基本的調(diào)試原則。2022年5月8日第11頁MATLAB R2010a基礎(chǔ)教程基礎(chǔ)教程 清華大學(xué)出版社清華大學(xué)出版社大程序典型地調(diào)試過程大程序典型地調(diào)試過程2022年5月8日第12頁MATLAB R2010a基礎(chǔ)教程基礎(chǔ)教程 清華大
19、學(xué)出版社清華大學(xué)出版社程序設(shè)計(jì)的基本步驟程序設(shè)計(jì)的基本步驟:l1.清晰地陳述出你要解決的問題。清晰地陳述出你要解決的問題。l2.確定程序所需地輸入量和程序所產(chǎn)生的輸確定程序所需地輸入量和程序所產(chǎn)生的輸出量。出量。l3.為你的程序設(shè)計(jì)算法為你的程序設(shè)計(jì)算法l4.將算法轉(zhuǎn)化為將算法轉(zhuǎn)化為MATLAB語句語句l5.調(diào)試調(diào)試MATLAB程序程序2022年5月8日第13頁MATLAB R2010a基礎(chǔ)教程基礎(chǔ)教程 清華大學(xué)出版社清華大學(xué)出版社l在大的編程項(xiàng)目中,在大的編程項(xiàng)目中,花在編程序的時間是出奇的少花在編程序的時間是出奇的少。Frederick P Brooks在他的在他的the Mythical
20、 ManMonth書中寫道,對于大的軟件工書中寫道,對于大的軟件工程來說,程來說,三分之一的時間花在計(jì)劃如何來做上三分之一的時間花在計(jì)劃如何來做上(第一步到第三步第一步到第三步),六,六分之一的時間花在編寫程序上,近一半的時間用來調(diào)試程序。分之一的時間花在編寫程序上,近一半的時間用來調(diào)試程序。而我們而我們能做的只有壓縮調(diào)試用的時間。在計(jì)劃階段做好充分的準(zhǔn)備和在編程能做的只有壓縮調(diào)試用的時間。在計(jì)劃階段做好充分的準(zhǔn)備和在編程過程使用良好的編程習(xí)慣,這樣會大大降低我們調(diào)試所用的時間。過程使用良好的編程習(xí)慣,這樣會大大降低我們調(diào)試所用的時間。好好的編程習(xí)慣能減少出錯的數(shù)量,也能使別人迅速地找出其中的
21、錯誤。的編程習(xí)慣能減少出錯的數(shù)量,也能使別人迅速地找出其中的錯誤。2022年5月8日第14頁好的編程習(xí)慣遵循上面的步驟編寫可靠,易理解的MATLAB程序。MATLAB R2010a基礎(chǔ)教程基礎(chǔ)教程 清華大學(xué)出版社清華大學(xué)出版社二二 偽代碼的應(yīng)用偽代碼的應(yīng)用l作為我們設(shè)計(jì)步驟的一部分,描述出你要執(zhí)行的算法是非常必要的。作為我們設(shè)計(jì)步驟的一部分,描述出你要執(zhí)行的算法是非常必要的。算法的描述有一種標(biāo)準(zhǔn)形式,能讓你和大家都能理解,這種描述將幫算法的描述有一種標(biāo)準(zhǔn)形式,能讓你和大家都能理解,這種描述將幫助你的內(nèi)容轉(zhuǎn)化為助你的內(nèi)容轉(zhuǎn)化為MATLAB代碼。代碼。我們用于描述算法的標(biāo)準(zhǔn)形式叫做我們用于描述算法
22、的標(biāo)準(zhǔn)形式叫做構(gòu)造構(gòu)造(constructs有時也稱有時也稱structure)。用這些結(jié)構(gòu)描述出的算法,我。用這些結(jié)構(gòu)描述出的算法,我們稱之為結(jié)構(gòu)化算法。當(dāng)在我們在們稱之為結(jié)構(gòu)化算法。當(dāng)在我們在MATLAB程序中執(zhí)行這個算法時,程序中執(zhí)行這個算法時,產(chǎn)生的程序叫做產(chǎn)生的程序叫做結(jié)構(gòu)化程序結(jié)構(gòu)化程序。l我們可以用偽代碼的形式建立算法的結(jié)構(gòu)。我們可以用偽代碼的形式建立算法的結(jié)構(gòu)。偽代碼是偽代碼是MATLAB和英語和英語的混合體。的混合體。和和MATLAB一樣,它是結(jié)構(gòu)化的,一行表達(dá)一個明確的意一樣,它是結(jié)構(gòu)化的,一行表達(dá)一個明確的意思或代碼的片段,但每一行的描述用的是英語或其他人類語言。思或代碼
23、的片段,但每一行的描述用的是英語或其他人類語言。偽代偽代碼的每一行都應(yīng)用普通簡單且易于理解的英語或中文描述碼的每一行都應(yīng)用普通簡單且易于理解的英語或中文描述。因?yàn)樾薷?。因?yàn)樾薷暮唵戊`活,所以偽代碼在開發(fā)算法的過程中非常的有用。因?yàn)閭未a簡單靈活,所以偽代碼在開發(fā)算法的過程中非常的有用。因?yàn)閭未a給編輯器或字處理器給編輯器或字處理器(通常用于編寫通常用于編寫MATLAB程序程序)的,而不需要其他的,而不需要其他的可視化功能。例如下面是例子的算法偽代碼的可視化功能。例如下面是例子的算法偽代碼2022年5月8日第15頁MATLAB R2010a基礎(chǔ)教程基礎(chǔ)教程 清華大學(xué)出版社清華大學(xué)出版社l例(溫度
24、轉(zhuǎn)換)設(shè)計(jì)一個例(溫度轉(zhuǎn)換)設(shè)計(jì)一個MATLAB程序,讀取一個華氏溫程序,讀取一個華氏溫度的輸入,輸出開爾文溫度。度的輸入,輸出開爾文溫度。l華氏溫度和開爾文溫度的轉(zhuǎn)換關(guān)系式可在物理學(xué)課本中找華氏溫度和開爾文溫度的轉(zhuǎn)換關(guān)系式可在物理學(xué)課本中找到。其關(guān)系式為:到。其關(guān)系式為:l 2022年5月8日第16頁15.2730 .32)(95)(攝氏度開爾文TTMATLAB R2010a基礎(chǔ)教程基礎(chǔ)教程 清華大學(xué)出版社清華大學(xué)出版社l注意用向左指的箭頭注意用向左指的箭頭替代等號替代等號(=)指出一個值將存儲到指出一個值將存儲到對應(yīng)的變量中,這樣就避免了賦值號與等號的混淆。在把對應(yīng)的變量中,這樣就避免了賦
25、值號與等號的混淆。在把它們轉(zhuǎn)化為它們轉(zhuǎn)化為MATLAB代碼之前,偽代碼將有助于你思想的代碼之前,偽代碼將有助于你思想的組織。組織。2022年5月8日第17頁lPrompt user to enter temperature in degrees FahrenheitlRead temperature in degrees Fahrenheit(temp_f)ltemp_k in kelvins (5/9) * (temp_f 32) + 273.15lWrite temperature in kelvins我們設(shè)計(jì)程序的步驟如下1.提示用戶鍵入華氏溫度值2.讀取輸入值3.通過關(guān)系式轉(zhuǎn)換為開氏溫
26、度4.輸出結(jié)果,結(jié)束MATLAB R2010a基礎(chǔ)教程基礎(chǔ)教程 清華大學(xué)出版社清華大學(xué)出版社三三 關(guān)系運(yùn)算符和邏輯運(yùn)算符關(guān)系運(yùn)算符和邏輯運(yùn)算符l選擇結(jié)構(gòu)選擇結(jié)構(gòu)的運(yùn)算由一個表達(dá)式控制的,這個的運(yùn)算由一個表達(dá)式控制的,這個表達(dá)式的結(jié)果只有表達(dá)式的結(jié)果只有true(1)和和false(0)。有兩。有兩種形式的運(yùn)算符可以在種形式的運(yùn)算符可以在MATLAB中關(guān)系得到中關(guān)系得到true/false:關(guān)系運(yùn)算符和邏輯運(yùn)算符關(guān)系運(yùn)算符和邏輯運(yùn)算符。l跟跟C語言一樣,語言一樣,MATLAB沒有布爾型和邏輯沒有布爾型和邏輯數(shù)據(jù)類型。數(shù)據(jù)類型。MATLAB把把0值作為結(jié)果值作為結(jié)果false,把所有的非把所有的非
27、0值作為結(jié)果值作為結(jié)果ture。2022年5月8日第18頁MATLAB R2010a基礎(chǔ)教程基礎(chǔ)教程 清華大學(xué)出版社清華大學(xué)出版社1 關(guān)系運(yùn)算符關(guān)系運(yùn)算符l關(guān)系運(yùn)算符關(guān)系運(yùn)算符是指兩是指兩數(shù)值或字符操作數(shù)數(shù)值或字符操作數(shù)的運(yùn)算符,的運(yùn)算符,這種運(yùn)算將會根椐兩操作數(shù)的關(guān)系產(chǎn)生結(jié)果這種運(yùn)算將會根椐兩操作數(shù)的關(guān)系產(chǎn)生結(jié)果true或或false。關(guān)系運(yùn)算的基本形式如下。關(guān)系運(yùn)算的基本形式如下la1 op a2l其中其中a1和和a2是算術(shù)表達(dá)式,變量或字符串,是算術(shù)表達(dá)式,變量或字符串,op代代表中的關(guān)系運(yùn)算符中的一個。表中的關(guān)系運(yùn)算符中的一個。l如果兩者的關(guān)系為真(如果兩者的關(guān)系為真(true)時,那
28、么這個運(yùn)算)時,那么這個運(yùn)算將會返回將會返回1值;否則將會返回值;否則將會返回0值。值。2022年5月8日第19頁MATLAB R2010a基礎(chǔ)教程基礎(chǔ)教程 清華大學(xué)出版社清華大學(xué)出版社關(guān)系運(yùn)算符關(guān)系運(yùn)算符運(yùn)算符運(yùn)算=等于=不等于大于=大于或等于小于=小于或等于2022年5月8日第20頁MATLAB R2010a基礎(chǔ)教程基礎(chǔ)教程 清華大學(xué)出版社清華大學(xué)出版社l下面是一些關(guān)系運(yùn)算和它的結(jié)果運(yùn)算結(jié)果下面是一些關(guān)系運(yùn)算和它的結(jié)果運(yùn)算結(jié)果l3 4 l3 4l4 = 4lA b將會產(chǎn)生結(jié)果將會產(chǎn)生結(jié)果l 2022年5月8日第22頁1201a1001l關(guān)系運(yùn)算符也可比較兩個關(guān)系運(yùn)算符,只要兩個數(shù)組具有相同
29、關(guān)系運(yùn)算符也可比較兩個關(guān)系運(yùn)算符,只要兩個數(shù)組具有相同的大小。的大小。1220b表達(dá)式表達(dá)式a=b將會產(chǎn)生結(jié)果將會產(chǎn)生結(jié)果1101如果這個數(shù)組具有不同的大小,那如果這個數(shù)組具有不同的大小,那么將會產(chǎn)生運(yùn)行時錯誤。么將會產(chǎn)生運(yùn)行時錯誤。MATLAB R2010a基礎(chǔ)教程基礎(chǔ)教程 清華大學(xué)出版社清華大學(xué)出版社l注意注意因?yàn)樽址畬?shí)際上是字符的數(shù)組,關(guān)系運(yùn)算符也比較兩個因?yàn)樽址畬?shí)際上是字符的數(shù)組,關(guān)系運(yùn)算符也比較兩個相同長相同長度度的字符串。的字符串。如果它們有不同的長度,比較運(yùn)算將會產(chǎn)生一個錯誤如果它們有不同的長度,比較運(yùn)算將會產(chǎn)生一個錯誤。等于關(guān)系運(yùn)算符等于關(guān)系運(yùn)算符由兩個等號組成,而由兩個等
30、號組成,而賦值運(yùn)算符賦值運(yùn)算符只有一個等號。它們只有一個等號。它們是完全不同的兩個符號,初學(xué)者極易混淆。符號是完全不同的兩個符號,初學(xué)者極易混淆。符號=是一個比較運(yùn)算符是一個比較運(yùn)算符,返回一個邏輯數(shù),而符號,返回一個邏輯數(shù),而符號=是將等號右邊的表達(dá)式的值賦給左邊的是將等號右邊的表達(dá)式的值賦給左邊的變量。當(dāng)進(jìn)行比較運(yùn)算的時候,初學(xué)者經(jīng)常用誤用符號變量。當(dāng)進(jìn)行比較運(yùn)算的時候,初學(xué)者經(jīng)常用誤用符號=。2022年5月8日第23頁常見編程錯誤小心謹(jǐn)慎不要混淆了等于關(guān)系運(yùn)算符(=)和賦值運(yùn)算符(=)。MATLAB R2010a基礎(chǔ)教程基礎(chǔ)教程 清華大學(xué)出版社清華大學(xué)出版社l在運(yùn)算的層次中,在運(yùn)算的層次
31、中,關(guān)系運(yùn)算在所有數(shù)學(xué)運(yùn)關(guān)系運(yùn)算在所有數(shù)學(xué)運(yùn)算的之后進(jìn)行算的之后進(jìn)行。所以下面兩個表達(dá)式是等。所以下面兩個表達(dá)式是等價的,均產(chǎn)生結(jié)果價的,均產(chǎn)生結(jié)果1。l7 + 3 2 + 11l(7 + 3) a = 0;l b = sin(pi);l a = blans =l 0lMATLAB報告了報告了a和和b不同因?yàn)樗a(chǎn)生了一個不同因?yàn)樗a(chǎn)生了一個round off錯誤,在計(jì)算錯誤,在計(jì)算中中sin(pi)產(chǎn)生了結(jié)果產(chǎn)生了結(jié)果1.22461016而不是而不是0。兩個理論上相等的值因。兩個理論上相等的值因?yàn)闉閞ound off錯誤而使之發(fā)生了細(xì)微的差別。錯誤而使之發(fā)生了細(xì)微的差別。2022年5月8日第2
32、6頁MATLAB R2010a基礎(chǔ)教程基礎(chǔ)教程 清華大學(xué)出版社清華大學(xué)出版社l我們可以通過檢測兩數(shù)之間在一定的范圍內(nèi)是不是近似相等,在這個我們可以通過檢測兩數(shù)之間在一定的范圍內(nèi)是不是近似相等,在這個精確范圍內(nèi)可能會產(chǎn)生精確范圍內(nèi)可能會產(chǎn)生round off錯誤。例如測試錯誤。例如測試l abs(a b) =b將會產(chǎn)生結(jié)果將會產(chǎn)生結(jié)果1101如果這個數(shù)組具有不同的大小,那如果這個數(shù)組具有不同的大小,那么將會產(chǎn)生運(yùn)行時錯誤。么將會產(chǎn)生運(yùn)行時錯誤。MATLAB R2010a基礎(chǔ)教程基礎(chǔ)教程 清華大學(xué)出版社清華大學(xué)出版社2022年5月8日第32頁運(yùn)算符圓括號()轉(zhuǎn)置(.),共軛轉(zhuǎn)置(),乘方(.),矩
33、陣乘方()邏輯非()乘法(.*),矩陣乘法(*),右除(./),左除(.),矩陣右除(/),矩陣左除()加法(+),減法(-),冒號運(yùn)算符(:)小于(),小于等于(),大于等于(=),等于(=),不等于(=)數(shù)組邏輯與(&)數(shù)組邏輯或(|)邏輯與(&)邏輯或(|)MATLAB R2010a基礎(chǔ)教程基礎(chǔ)教程 清華大學(xué)出版社清華大學(xué)出版社l例例l假設(shè)下面有三個變量被初始和一些表達(dá)式及其運(yùn)算結(jié)果。假設(shè)下面有三個變量被初始和一些表達(dá)式及其運(yùn)算結(jié)果。lvalue1 = 1lvalue2 = 0lvalue3 = 102022年5月8日第33頁邏輯表達(dá)式結(jié)果(a)value10(b)val
34、ue1|value21(c)value1&value20(d)value1&value2|value31(e)value1&(value2|value3)1(f)(value1&value3)0因?yàn)檫\(yùn)算在其它的邏輯運(yùn)算之前進(jìn)行,那么(f)中的括號是必須的。如果去掉括號的話,(f)表達(dá)式將等價于(value1)&value3。MATLAB R2010a基礎(chǔ)教程基礎(chǔ)教程 清華大學(xué)出版社清華大學(xué)出版社4 邏輯函數(shù)邏輯函數(shù)lMATLAB中有大量的邏輯函數(shù),在條件滿足時,函數(shù)返回中有大量的邏輯函數(shù),在條件滿足時,函數(shù)返回1。條件不滿足時,返回。條件不滿足時,返回0
35、。這些邏輯函數(shù)連同關(guān)系運(yùn)算符和。這些邏輯函數(shù)連同關(guān)系運(yùn)算符和邏輯運(yùn)算符一起實(shí)現(xiàn)程序的選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。邏輯運(yùn)算符一起實(shí)現(xiàn)程序的選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。2022年5月8日第34頁MATLAB邏輯函數(shù)函數(shù)用途ischar(a)a是字符數(shù)組返回1,否則返回0isempty(a)a是空數(shù)組返回1,否則返回0isinf(a)a是無窮大,則返回1,否則返回0isnan(a)a不是一個數(shù)則返1,否則返回0isnumeric(a)a是一個數(shù)值數(shù)組返回1,否則返回0MATLAB R2010a基礎(chǔ)教程基礎(chǔ)教程 清華大學(xué)出版社清華大學(xué)出版社四四 選擇結(jié)構(gòu)選擇結(jié)構(gòu)(分支語句分支語句)l選擇結(jié)構(gòu)可以使選擇結(jié)構(gòu)可以使MAT
36、LAB 選擇性執(zhí)行指定選擇性執(zhí)行指定區(qū)域內(nèi)的代碼區(qū)域內(nèi)的代碼(稱之為語句塊稱之為語句塊blocks) ,而跳,而跳過其他區(qū)域的代碼。選擇結(jié)構(gòu)在過其他區(qū)域的代碼。選擇結(jié)構(gòu)在MATLAB 中有三種具體的形式中有三種具體的形式:if 結(jié)構(gòu),結(jié)構(gòu),switch 結(jié)構(gòu)結(jié)構(gòu)和和try/catch結(jié)構(gòu)結(jié)構(gòu)。2022年5月8日第35頁MATLAB R2010a基礎(chǔ)教程基礎(chǔ)教程 清華大學(xué)出版社清華大學(xué)出版社1 if結(jié)構(gòu)結(jié)構(gòu)lif結(jié)構(gòu)的基本形式如下結(jié)構(gòu)的基本形式如下:l其中其中control expression控制控制if結(jié)構(gòu)的運(yùn)算結(jié)構(gòu)的運(yùn)算。如果。如果control_expr_1的值非的值非0,那么程序?qū)?zhí)
37、行語句塊那么程序?qū)?zhí)行語句塊1(block1),然后跳到,然后跳到end后面的第一個可執(zhí)行語句后面的第一個可執(zhí)行語句繼續(xù)執(zhí)行。否則,程序?qū)z測繼續(xù)執(zhí)行。否則,程序?qū)z測control_expr_2的值。如果的值。如果control_expr_2的值非的值非0,那么程序?qū)?zhí)行語句塊,那么程序?qū)?zhí)行語句塊2(block2),然后跳到,然后跳到end后面的第一個后面的第一個可執(zhí)行語句繼續(xù)執(zhí)行??蓤?zhí)行語句繼續(xù)執(zhí)行。如果所有的控制表達(dá)式如果所有的控制表達(dá)式(control expression)均為均為0,那么程序?qū)?zhí)行與那么程序?qū)?zhí)行與else相關(guān)的語句塊。相關(guān)的語句塊。2022年5月8
38、日第36頁MATLAB R2010a基礎(chǔ)教程基礎(chǔ)教程 清華大學(xué)出版社清華大學(xué)出版社l在一個在一個if結(jié)構(gòu)中,可以有任意個結(jié)構(gòu)中,可以有任意個elseif語句,但語句,但else語句最語句最多有一個多有一個。只要上面每一個控制表達(dá)式均為。只要上面每一個控制表達(dá)式均為0,那么下一,那么下一個控制表達(dá)式將會被檢測。一旦其中的一個表達(dá)式的值非個控制表達(dá)式將會被檢測。一旦其中的一個表達(dá)式的值非0,對應(yīng)的語句塊就要被執(zhí)行,然后跳到,對應(yīng)的語句塊就要被執(zhí)行,然后跳到end后面的第一后面的第一個 可 執(zhí) 行 語 句 繼 續(xù) 執(zhí) 行 。 如 果 所 有 的 控 制 表 達(dá) 式個 可 執(zhí) 行 語 句 繼 續(xù) 執(zhí)
39、行 。 如 果 所 有 的 控 制 表 達(dá) 式(controlexpression)均為均為0,那么程序?qū)?zhí)行,那么程序?qū)?zhí)行else語句語句。如果沒有。如果沒有else語句,程序?qū)?zhí)行語句,程序?qū)?zhí)行end后面的語句,而后面的語句,而不執(zhí)行不執(zhí)行if結(jié)構(gòu)中的部分。結(jié)構(gòu)中的部分。2022年5月8日第37頁MATLAB R2010a基礎(chǔ)教程基礎(chǔ)教程 清華大學(xué)出版社清華大學(xué)出版社l注意注意MATLAB在在if結(jié)構(gòu)中的關(guān)鍵字結(jié)構(gòu)中的關(guān)鍵字end與數(shù)組中提到的返與數(shù)組中提到的返回已知下標(biāo)最大值函數(shù)回已知下標(biāo)最大值函數(shù)end完全不同完全不同。matlab通過通過end在在M文件中的上下文來區(qū)分開
40、它的兩個用途。在大多數(shù)情況文件中的上下文來區(qū)分開它的兩個用途。在大多數(shù)情況下,控制表達(dá)式均可以聯(lián)合關(guān)系運(yùn)算符和邏輯運(yùn)算符。正下,控制表達(dá)式均可以聯(lián)合關(guān)系運(yùn)算符和邏輯運(yùn)算符。正像我們在本章早些時侯學(xué)到的,當(dāng)對應(yīng)的條件為真時,關(guān)像我們在本章早些時侯學(xué)到的,當(dāng)對應(yīng)的條件為真時,關(guān)系運(yùn)算和邏輯運(yùn)算將會產(chǎn)生系運(yùn)算和邏輯運(yùn)算將會產(chǎn)生1,否則產(chǎn)生,否則產(chǎn)生0。所以當(dāng)一個運(yùn)。所以當(dāng)一個運(yùn)算條件為真時,運(yùn)算結(jié)果為非算條件為真時,運(yùn)算結(jié)果為非0,則對應(yīng)的語句塊,就會,則對應(yīng)的語句塊,就會被執(zhí)行。被執(zhí)行。2022年5月8日第38頁MATLAB R2010a基礎(chǔ)教程基礎(chǔ)教程 清華大學(xué)出版社清華大學(xué)出版社l例如,一元二
41、次方程的基本形式如下例如,一元二次方程的基本形式如下:ax2 + bx + c = 0其解為其解為2022年5月8日第39頁其中其中b2 4ac是我們熟知的判別式,當(dāng)是我們熟知的判別式,當(dāng)b2 4ac0時,方時,方程式有兩個不同的實(shí)數(shù)根,當(dāng)程式有兩個不同的實(shí)數(shù)根,當(dāng)b2 4ac=0,有兩個相同的,有兩個相同的實(shí)數(shù)根,當(dāng)實(shí)數(shù)根,當(dāng)b2 4ac0時,方程式有兩個不同的復(fù)根。時,方程式有兩個不同的復(fù)根。假設(shè)我們檢測某一元二次根的情況,并告訴使用者這個方程有兩個復(fù)根,還是兩個相等的實(shí)根和兩個不相等的實(shí)根。MATLAB R2010a基礎(chǔ)教程基礎(chǔ)教程 清華大學(xué)出版社清華大學(xué)出版社l用偽代碼這個結(jié)構(gòu)的形式如
42、下用偽代碼這個結(jié)構(gòu)的形式如下:lif (b2 4*a*c) 0l Write msg that equation has two complex roots.lelseif (b2 4*a*c) =0l Write msg that equation has two identical real roots.lelsel Write msg that equation has two distinct real roots.lendl轉(zhuǎn)化為轉(zhuǎn)化為MATLAB語言語言:lif (b2 4*a*c) 0l disp(This equation has two complex roots.);lel
43、seif (b2 4*a*c) = 0l disp(This equation has two identical real roots.);lelsel disp(This equation has two distinct real roots.);lend2022年5月8日第40頁回憶一下,判斷為真時,關(guān)系運(yùn)算符將會返回一個非0值,從而導(dǎo)致對應(yīng)語句的執(zhí)行。為增加程序的可讀性,在if結(jié)構(gòu)中的語句塊中最好縮進(jìn)2到3個空格,而實(shí)際上沒有必要。MATLAB R2010a基礎(chǔ)教程基礎(chǔ)教程 清華大學(xué)出版社清華大學(xué)出版社l你可以在一行內(nèi)寫完一個完整的你可以在一行內(nèi)寫完一個完整的if結(jié)構(gòu),只需把結(jié)構(gòu)的每
44、一部分后面加上結(jié)構(gòu),只需把結(jié)構(gòu)的每一部分后面加上l分號或逗號,所以下面的兩個結(jié)構(gòu)是等價的分號或逗號,所以下面的兩個結(jié)構(gòu)是等價的:lif x 0l y = abs(x);lendl和和lif x 0 x1 (-b + sqrt(discriminant) / (2*a) x2 (-b - sqrt(discriminant) / (2*a) Write msg that equation has two distinct real roots. Write out the two roots.elseif discriminant = 0 x1 -b / (2*a) Write msg that
45、 equation has two identical real roots. Write out the repeated roots.else real_part -b / (2*a) imag_part sqrt(abs(discriminant) / (2*a) Write msg that equation has two complex roots. Write out the two roots.endMATLAB R2010a基礎(chǔ)教程基礎(chǔ)教程 清華大學(xué)出版社清華大學(xué)出版社l4.把算法轉(zhuǎn)化為把算法轉(zhuǎn)化為MATLAB語言語言l5.檢測這個程序檢測這個程序l下一步,我們必須輸入實(shí)數(shù)來
46、檢測這個程序。因這個程序下一步,我們必須輸入實(shí)數(shù)來檢測這個程序。因這個程序有三個可能的路徑。所以在我們確信每一人路徑都工作正有三個可能的路徑。所以在我們確信每一人路徑都工作正常之前,必須把這三個路徑檢測一遍。從式子中,我們可常之前,必須把這三個路徑檢測一遍。從式子中,我們可以有用下面的方法來驗(yàn)證程序的正確性。以有用下面的方法來驗(yàn)證程序的正確性。lx2 + 5x + 6 = 0 x = 2, and x = =3lx2 + 4x + 4 = 0 x = 2lx2 + 2x + 5 = 0 x = 1 i22022年5月8日第44頁MATLAB R2010a基礎(chǔ)教程基礎(chǔ)教程 清華大學(xué)出版社清華大學(xué)
47、出版社l編寫一個程序,求以編寫一個程序,求以x,y為自變量函數(shù)為自變量函數(shù)f(x,y)的值。函的值。函數(shù)數(shù)f(x,y)的定義如下的定義如下:2022年5月8日第45頁根據(jù)自變量x和y的正負(fù)符號的不同,而采取不同的求值表達(dá)式。為選取合適的表達(dá)式,檢查用戶輸入的x,y的正負(fù)符號是必要的。1.陳述問題陳述問題這個問題的陳述非常簡單:根據(jù)用戶輸入的x,y,求函數(shù)f(x,y)的值。2.確定輸入輸出量確定輸入輸出量程序的輸入量為函數(shù)的自變量x,y。輸出量為函數(shù)值f(x,y)。3.設(shè)計(jì)算法這個問題可以把他分解成三個大塊,即輸入,計(jì)算過程,和輸出。設(shè)計(jì)算法這個問題可以把他分解成三個大塊,即輸入,計(jì)算過程,和輸
48、出。我們把這三大塊再分解成小的,精細(xì)的工作。在計(jì)算f(x,y)時,我們有4種選擇,選哪一種取決于x,y的值。所以邏輯上我們要用4個選擇的if結(jié)構(gòu)來實(shí)現(xiàn)。產(chǎn)生的偽代碼如下:MATLAB R2010a基礎(chǔ)教程基礎(chǔ)教程 清華大學(xué)出版社清華大學(xué)出版社lPrompt the user for the values x and ylRead x and ylif x0 and y0l fun x + ylelseif x0 and y0l fun x + y2lelseif x 0l .l if y 0l .l endl .lend2022年5月8日第48頁MATLAB R2010a基礎(chǔ)教程基礎(chǔ)教程 清華
49、大學(xué)出版社清華大學(xué)出版社lMATLAB翻譯器經(jīng)常把把已知的翻譯器經(jīng)常把把已知的end語句和它最近的語句和它最近的if語句聯(lián)合在一語句聯(lián)合在一起起,所以第一個,所以第一個end語句和語句和if y0最接最接近。對于一個編寫正確的程序,它能工作正常。但如果程序員編寫出近。對于一個編寫正確的程序,它能工作正常。但如果程序員編寫出錯誤,它將會使編譯器出現(xiàn)混淆性錯誤信息提示。例如,假設(shè)我們編錯誤,它將會使編譯器出現(xiàn)混淆性錯誤信息提示。例如,假設(shè)我們編寫一個大的程序,包括如下的一個結(jié)構(gòu)寫一個大的程序,包括如下的一個結(jié)構(gòu):l.lif (test1)l .l if (test2)l .l if (test3)
50、l .l endl .l endl .lend2022年5月8日第49頁這個程序包括了三個嵌套的這個程序包括了三個嵌套的if結(jié)構(gòu),在這個結(jié)構(gòu)結(jié)構(gòu),在這個結(jié)構(gòu)中可能有上千行的代碼?,F(xiàn)在假設(shè)第一個中可能有上千行的代碼?,F(xiàn)在假設(shè)第一個end在在編輯區(qū)域突然被刪除,那么編輯區(qū)域突然被刪除,那么MATLAB編譯器將會編譯器將會自動將第二個自動將第二個end與最里面的與最里面的if (test3)結(jié)構(gòu)聯(lián)合結(jié)構(gòu)聯(lián)合起來,第三個起來,第三個end將會和中間的將會和中間的if(test2)聯(lián)合起聯(lián)合起來。當(dāng)編譯器翻譯到達(dá)文件結(jié)束的時候,那將發(fā)來。當(dāng)編譯器翻譯到達(dá)文件結(jié)束的時候,那將發(fā)現(xiàn)第一個現(xiàn)第一個if(tes
51、t1)結(jié)構(gòu)將永遠(yuǎn)沒有結(jié)束,然后編結(jié)構(gòu)將永遠(yuǎn)沒有結(jié)束,然后編譯器就會產(chǎn)生一個錯誤提示信息,即缺少一個譯器就會產(chǎn)生一個錯誤提示信息,即缺少一個end。但是,它不能告訴你問題發(fā)生在什么地方,但是,它不能告訴你問題發(fā)生在什么地方,這就使我們必須回過頭去看整個程序,來找問題這就使我們必須回過頭去看整個程序,來找問題。在大多數(shù)情況下,執(zhí)行一個算法,即可以用多個在大多數(shù)情況下,執(zhí)行一個算法,即可以用多個else if語句,也可以用語句,也可以用if語句的嵌套。在這種情語句的嵌套。在這種情況下,大家可以選擇自己喜歡的方式?jīng)r下,大家可以選擇自己喜歡的方式。MATLAB R2010a基礎(chǔ)教程基礎(chǔ)教程 清華大學(xué)出版
52、社清華大學(xué)出版社l例例l給出等級分?jǐn)?shù)給出等級分?jǐn)?shù)l假設(shè)我們要編寫一個程序,輸入一個數(shù)值分?jǐn)?shù),輸出等級假設(shè)我們要編寫一個程序,輸入一個數(shù)值分?jǐn)?shù),輸出等級分?jǐn)?shù),即是分?jǐn)?shù),即是A級,級,B級和級和C級級l grade 95Al95 grade 86 Bl86 grade 76 Cl76 grade 66 Dl66 grade 0Fl用兩種方式寫出這個程序,第一種方式用多個用兩種方式寫出這個程序,第一種方式用多個elseif語句語句,第二種方式用,第二種方式用if的嵌套。的嵌套。2022年5月8日第50頁MATLAB R2010a基礎(chǔ)教程基礎(chǔ)教程 清華大學(xué)出版社清華大學(xué)出版社(a)用多個用多個else
53、if語句語句if grade 95.0 disp(The grade is A.);elseif grade 86.0 disp(The grade is B.);elseif grade 76.0 disp(The grade is C.);elseif grade 66.0 disp(The grade is D.);else disp(The grade is F.);end2022年5月8日第51頁MATLAB R2010a基礎(chǔ)教程基礎(chǔ)教程 清華大學(xué)出版社清華大學(xué)出版社l(b)用用if嵌套結(jié)構(gòu)嵌套結(jié)構(gòu)lif grade 95.0l disp(The grade is A.);lelse
54、l if grade 86.0l disp(The grade is B.);l elsel if grade 76.0l disp(The grade is C.);l elsel if grade 66.0l disp(The grade is D.);l elsel disp(The grade is F.);l endl endl endlend2022年5月8日第52頁MATLAB R2010a基礎(chǔ)教程基礎(chǔ)教程 清華大學(xué)出版社清華大學(xué)出版社l從上面的例子中,我們可以看到如果有多個選項(xiàng)的話,在從上面的例子中,我們可以看到如果有多個選項(xiàng)的話,在一個一個if結(jié)構(gòu)中用到多個結(jié)構(gòu)中用到多個el
55、se if語句將會比語句將會比if的嵌套結(jié)構(gòu)簡單的嵌套結(jié)構(gòu)簡單的多。的多。2022年5月8日第53頁好的編程習(xí)慣好的編程習(xí)慣對于有許多選項(xiàng)的選擇結(jié)構(gòu)來說,最好對于有許多選項(xiàng)的選擇結(jié)構(gòu)來說,最好在一個在一個if結(jié)構(gòu)中使用多個結(jié)構(gòu)中使用多個elseif語句,盡語句,盡量不用量不用if的嵌套結(jié)構(gòu)。的嵌套結(jié)構(gòu)。MATLAB R2010a基礎(chǔ)教程基礎(chǔ)教程 清華大學(xué)出版社清華大學(xué)出版社4 switch結(jié)構(gòu)結(jié)構(gòu)lswitch結(jié)構(gòu)是另一種形式的選擇結(jié)構(gòu)。程序員可以根據(jù)一結(jié)構(gòu)是另一種形式的選擇結(jié)構(gòu)。程序員可以根據(jù)一個單精度整形數(shù),字符或邏輯表達(dá)式的值來選擇執(zhí)行特定個單精度整形數(shù),字符或邏輯表達(dá)式的值來選擇執(zhí)行特
56、定的代碼語句塊。的代碼語句塊。2022年5月8日第54頁如果如果switch_expr的值與的值與case_expr_1相符,那么相符,那么第一個代碼塊將會被執(zhí)行,然后程序?qū)降谝粋€代碼塊將會被執(zhí)行,然后程序?qū)絪witch結(jié)構(gòu)后的第一個語句。如果結(jié)構(gòu)后的第一個語句。如果switch_expr的的值與值與case_expr_2相符,那么第二個代碼塊將會被相符,那么第二個代碼塊將會被執(zhí)行,然后程序?qū)綀?zhí)行,然后程序?qū)絪witch結(jié)構(gòu)后的第一個語結(jié)構(gòu)后的第一個語句。在這個結(jié)構(gòu)中,用相同的方法來對待其他的情句。在這個結(jié)構(gòu)中,用相同的方法來對待其他的情況。況。otherwise語句塊
57、是可選的。如果它存在的話,語句塊是可選的。如果它存在的話,當(dāng)當(dāng)switch_expr的值與其他所有的選項(xiàng)都不相符時,的值與其他所有的選項(xiàng)都不相符時,這 個 語 句 塊 將 會 被 執(zhí) 行 。 如 果 它 不 存 在 , 且這 個 語 句 塊 將 會 被 執(zhí) 行 。 如 果 它 不 存 在 , 且witch_expr的值與其他所有的選項(xiàng)都不相符,那么的值與其他所有的選項(xiàng)都不相符,那么這個結(jié)構(gòu)中的任何一個語句塊都不會被執(zhí)行。這種這個結(jié)構(gòu)中的任何一個語句塊都不會被執(zhí)行。這種情況下的結(jié)果可以看作沒有選擇結(jié)構(gòu),直接執(zhí)行情況下的結(jié)果可以看作沒有選擇結(jié)構(gòu),直接執(zhí)行MATLAB語言。語言。MATLAB R20
58、10a基礎(chǔ)教程基礎(chǔ)教程 清華大學(xué)出版社清華大學(xué)出版社l如果說如果說switch_expr有很多值可以導(dǎo)致相同代碼的執(zhí)行,有很多值可以導(dǎo)致相同代碼的執(zhí)行,那么這些值可以括在同一括號內(nèi),如下所示。如果這個那么這些值可以括在同一括號內(nèi),如下所示。如果這個switch表達(dá)式和表中任何一個表達(dá)式相匹配,那么這個語表達(dá)式和表中任何一個表達(dá)式相匹配,那么這個語句塊將會被執(zhí)行。句塊將會被執(zhí)行。2022年5月8日第55頁switch_expr和每一個case_expr既可以是數(shù)值,也可以是字符值。注意在大多情況下只有一個語句塊會被執(zhí)行。當(dāng)一個語句塊被執(zhí)行后,編譯器就會跳到end語句后的第一個語句開始執(zhí)行。如果s
59、witch表達(dá)和多個case表達(dá)式相對應(yīng),那么只有他們中的第一個將會被執(zhí)行。MATLAB R2010a基礎(chǔ)教程基礎(chǔ)教程 清華大學(xué)出版社清華大學(xué)出版社l讓我們看一個簡單的關(guān)于讓我們看一個簡單的關(guān)于switch結(jié)構(gòu)的例子。下面的語句用來判斷結(jié)構(gòu)的例子。下面的語句用來判斷1到到10之間的數(shù)是奇數(shù)還是偶數(shù)。它用來說明一系列的之間的數(shù)是奇數(shù)還是偶數(shù)。它用來說明一系列的case選項(xiàng)值的選項(xiàng)值的應(yīng)用和應(yīng)用和otherwise語塊的應(yīng)用。語塊的應(yīng)用。lswitch (value)lcase 1, 3, 5, 7, 9,l disp(The value is odd.);lcase 2, 4, 6, 8, 10
60、,l disp(The value is even.);lotherwise,l disp(The value is out of range.);lend2022年5月8日第56頁MATLAB R2010a基礎(chǔ)教程基礎(chǔ)教程 清華大學(xué)出版社清華大學(xué)出版社5 try/catch結(jié)構(gòu)的應(yīng)用結(jié)構(gòu)的應(yīng)用ltry/catch結(jié)構(gòu)是選擇結(jié)構(gòu)的一種特殊形式結(jié)構(gòu)是選擇結(jié)構(gòu)的一種特殊形式,用于捕捉錯誤。一般地,當(dāng)一個,用于捕捉錯誤。一般地,當(dāng)一個MATLAB程序在運(yùn)行時遇到了一個錯誤,程序在運(yùn)行時遇到了一個錯誤,這個程序就會中止執(zhí)行。這個程序就會中止執(zhí)行。try/catch結(jié)構(gòu)修結(jié)構(gòu)修改了這個默認(rèn)行為。改了這個默認(rèn)行為。l如果一個錯誤發(fā)生在這個結(jié)構(gòu)的如果一個錯誤
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026北京大學(xué)未來技術(shù)學(xué)院招聘勞動合同制人員1人筆試備考題庫及答案解析
- 2026年春季伊吾縣“銀齡講學(xué)計(jì)劃”教師招募(17人)筆試模擬試題及答案解析
- 生產(chǎn)計(jì)劃與排程工具產(chǎn)能需求預(yù)測版
- 2026廣西桂林市事業(yè)單位公開考試招聘工作人員1221人筆試備考試題及答案解析
- 2026山東威海市市屬事業(yè)單位招聘初級綜合類崗位人員考試備考題庫及答案解析
- 健康生活習(xí)慣培養(yǎng)責(zé)任保證承諾書(5篇)
- 2026年安康市至誠人力資源服務(wù)有限公司招聘見習(xí)生筆試模擬試題及答案解析
- 社區(qū)環(huán)境美化治理承諾書(3篇)
- 2026北京第二外國語學(xué)院第一批非事業(yè)編制人員招聘5人筆試備考試題及答案解析
- 2026年遼寧經(jīng)濟(jì)管理干部學(xué)院(遼寧經(jīng)濟(jì)職業(yè)技術(shù)學(xué)院)公開招聘高層次和急需緊缺人才40人(第一批)考試備考題庫及答案解析
- 規(guī)范外賣企業(yè)管理制度
- 2026年公共部門人力資源管理試題含答案
- 2026年中國數(shù)聯(lián)物流備考題庫有限公司招聘備考題庫有答案詳解
- 黑龍江省哈爾濱市師范大學(xué)附中2026屆數(shù)學(xué)高三第一學(xué)期期末質(zhì)量檢測模擬試題含解析
- DB32/T+5311-2025+港口與道路工程+固化土施工技術(shù)規(guī)范
- DB31T+1661-2025公共區(qū)域電子屏播控安全管理要求
- 醫(yī)療聯(lián)合體兒童保健服務(wù)模式創(chuàng)新
- 2026年書記員考試題庫附答案
- 中國高尿酸血癥與痛風(fēng)診療指南(2024更新版)課件
- 2025至2030中國專用車行業(yè)發(fā)展分析及投資前景與戰(zhàn)略規(guī)劃報告
- TOC-李榮貴-XXXX1118
評論
0/150
提交評論