7 Matlab 條件判斷與自定義輸入輸出

計(jì)算機(jī)在某種程度上可以像人類(lèi)一樣完成條件判斷——根據(jù)不同的條件验残,執(zhí)行不同的操作壶谒。Matlab 使用if語(yǔ)句實(shí)現(xiàn)條件判斷蜕青。

if 語(yǔ)句

假如我需要判斷一個(gè)學(xué)生的考試成績(jī)是否合格柠贤,做法是這樣的:如果分?jǐn)?shù)score變量的值大于等于60分狈醉,就顯示合格岁歉。下面是用if語(yǔ)句寫(xiě)的判斷程序(請(qǐng)練習(xí)使用腳本編輯器寫(xiě)代碼并運(yùn)行)箕母。

score = 70;
if score >= 60
    disp ('your score is ')
    disp (score)
    disp ('qualified!')
end

有幾件事情需要注意:

  • if語(yǔ)句之后的那一行吓妆,需要縮進(jìn)(一般是四個(gè)空格)嗜历。雖然
    Matlab 不像 python 語(yǔ)言那樣強(qiáng)制要求縮進(jìn)宣渗,但是,這就像寫(xiě)文章不分段一樣梨州,閱讀體驗(yàn)非常差痕囱。一段兩段的還好說(shuō),代碼一長(zhǎng)就沒(méi)法看了暴匠。matlab 腳本編輯器自帶自動(dòng)縮進(jìn)功能鞍恢,可以省不少事情。
  • if語(yǔ)句必須以end結(jié)尾每窖。
  • 示例程序中帮掉,if語(yǔ)句的執(zhí)行順序是:如果score >= 60這一邏輯表達(dá)式的值為true,就執(zhí)行縮進(jìn)的那三行disp語(yǔ)句窒典,否則什么都不做.
  • disp中的字符串蟆炊,當(dāng)然可以使用中文。但是因?yàn)榫幋a的問(wèn)題瀑志,可能會(huì)遇到錯(cuò)誤盅称,如果遇到了肩祥,請(qǐng)記得排查是否使用了中文字符。

把這個(gè)程序改進(jìn)一下缩膝,讓score < 60的時(shí)候混狠,也顯示信息,而不是什么都不做疾层。方法很簡(jiǎn)單将饺,加一個(gè)else語(yǔ)句。

score = 58;
if score >= 60
    disp ('your score is ')
    disp (score)
    disp ('qualified!')
else 
    disp ('your score is ')
    disp (score)
    disp ('unqualified!')
end

else 是“其他”的意思痛黎,這段代碼的條件判斷予弧,其實(shí)就兩種情況:score >= 60和“其他”。顯然湖饱,58符合“其他”這一條件掖蛤,所以程序執(zhí)行else后面的語(yǔ)句而不執(zhí)行if后面的三個(gè)disp語(yǔ)句。

這個(gè)程序只能判斷一個(gè)成績(jī)是否合格井厌,現(xiàn)實(shí)情況是要判斷成績(jī)的等級(jí)蚓庭。比如,90分以上是“優(yōu)”仅仆,75到90分是“良”器赞,60到75分是“中”,60分以下是“差”墓拜。Matlab 提供了elseif用來(lái)做更多的判斷港柜。示例如下:

score = 58;
if score >= 90
    disp ('your score is ')
    disp (score)
    disp ('優(yōu)')
elseif score >= 75
    disp ('your score is ')
    disp (score)
    disp ('良')
elseif score >= 60
    disp ('your score is ')
    disp (score)
    disp ('中')
else
    disp ('your score is ')
    disp (score)
    disp ('差')
end

現(xiàn)在,我們可以看到if語(yǔ)句的完整形式了:

if <邏輯表達(dá)式 1>
    <動(dòng)作 1>
elseif <邏輯表達(dá)式 2>
    <動(dòng)作 2>
.
.
.
elseif <邏輯表達(dá)式 n>
    <動(dòng)作 n>
else
    <動(dòng)作 n+1 >
end

if語(yǔ)句的使用很靈活咳榜,除了if夏醉,end必須的,elseifelse不是必須的涌韩。

if 語(yǔ)句的執(zhí)行順序是從上到下的畔柔,如果當(dāng)前的邏輯表達(dá)式為false,就進(jìn)入下一個(gè)邏輯表達(dá)式的判斷贸辈,直到遇到某個(gè)邏輯表達(dá)式的值為true释树,就執(zhí)行該邏輯表達(dá)式后面的“動(dòng)作”并忽略后面的所有elseifelse肠槽。

大家可以試著給出不同的score值擎淤,看看程序的輸出結(jié)果,仔細(xì)理解和體會(huì)if語(yǔ)句的執(zhí)行過(guò)程秸仙。

現(xiàn)在這個(gè)判斷成績(jī)等級(jí)的程序基本符合要求了嘴拢,但還很麻煩,每執(zhí)行一次判斷都需要修改代碼中 score 的賦值寂纪。disp的輸出席吴,看起來(lái)也很不美觀赌结。自定義輸入輸出就能解決這些問(wèn)題。

input函數(shù)

input 函數(shù)可以從鍵盤(pán)接受用戶(hù)的輸入孝冒。help一下柬姚,可以了解到它的使用格式是input (PROMPT)或者input (PROMPT, 's'). 那個(gè)PROMPT是用戶(hù)可以自定義的一個(gè)提示語(yǔ),是字符串型的數(shù)據(jù)庄涡,需要用引號(hào)括起來(lái)的量承。

默認(rèn)情況下,input接受數(shù)值型數(shù)據(jù)穴店,可以是矩陣撕捍、表達(dá)式。也可以使用input (PROMPT, 's')這樣的用法泣洞,讓input接受string型數(shù)據(jù)忧风。

不管哪種用法,接受到的輸入都可以賦值給變量球凰∈ㄍ龋看下面的例子:

>> score =  input ('Please Enter Your Score: ')
Please Enter Your Score: 59 + 20
score = 
      79
>> name = input ('What''s Your Name? ', 's')
What's Your Name? John
name = 
      'John'

上述命令行中,變量 score 和 name 分別從用戶(hù)處獲得了數(shù)值型數(shù)據(jù)79和 string 型數(shù)據(jù)John

有了這個(gè)東西弟蚀,我們可以把判斷學(xué)生成績(jī)等級(jí)的程序修改一下蚤霞,讓它先等待用戶(hù)輸入成績(jī),然后作出判斷义钉。

score = input ('Please Enter Your Score: ');
if score >= 90
    disp ('your score is ')
    disp (score)
    disp ('優(yōu)')
elseif score >= 75
    disp ('your score is ')
    disp (score)
    disp ('良')
elseif score >= 60
    disp ('your score is ')
    disp (score)
    disp ('中')
else
    disp ('your score is ')
    disp (score)
    disp ('差')
end

現(xiàn)在昧绣,這個(gè)程序可以反復(fù)運(yùn)行了,不用每次判斷成績(jī)都修改代碼捶闸。但是還有一個(gè)小麻煩夜畴,大家都知道成績(jī)是 0 到 100 分的數(shù)字,可是有些用戶(hù)他不按套路出牌删壮,胡亂輸入數(shù)據(jù)贪绘。怎么解決這個(gè)問(wèn)題?大家可以試試央碟。

我們現(xiàn)在解決另一個(gè)問(wèn)題税灌,就是那個(gè)disp的輸出有點(diǎn)丑,我希望能看到這樣的結(jié)果“你的成績(jī)是:X亿虽,對(duì)應(yīng)的成績(jī)等級(jí)是:Y”菱涤。

格式化輸出字符串,sprintf

Matlab 格式化輸出字符串與其他的程序語(yǔ)言類(lèi)似洛勉,也采用占位符%的辦法粘秆。占位符有點(diǎn)像是圖書(shū)館占座。

今天我到圖書(shū)館以后就將三本書(shū)往三個(gè)位置上一扔收毫,這三個(gè)座位就是有人占了攻走。過(guò)了一會(huì)兒殷勘,我和其他兩個(gè)室友分別找那三本書(shū),去相應(yīng)的位置上坐下來(lái)昔搂。

這里書(shū)就相當(dāng)于占位符%玲销,而真正去坐那個(gè)座位的人,可以看成是變量的值摘符。

好了痒玩,現(xiàn)在我有兩個(gè)變量分別是score和等級(jí)rank. 我要輸出這樣的字符串the score you entered is %, the rank is %. 那個(gè)%所處的位置是我要用真正的scorerank去替換的。

占位符%议慰,不僅可以指定輸出位置蠢古,還可以指定輸出格式。使用%d這樣的形式指定輸出格式别凹。這里的意思是在占位符位置輸出一個(gè)整數(shù)草讶。最常見(jiàn)的有三種格式:

  • %d, 十進(jìn)制整數(shù)
  • %f, 浮點(diǎn)數(shù),可以用類(lèi)似%.2f的格式控制顯示精度
  • %s, 字符串

所以炉菲,一個(gè)完整的格式化輸出字符串應(yīng)該是這樣的:the score you entered is %d, the rank is %s, %d%s分別對(duì)應(yīng) score 和 rank堕战,并指定了它們的數(shù)據(jù)類(lèi)型:整數(shù)和字符串。

sprintf是 Matlab 用來(lái)完成格式化輸出的一個(gè)函數(shù)拍霜。它的用法也很簡(jiǎn)單嘱丢,把你要說(shuō)的話(huà)寫(xiě)成字符串,然后把占位符對(duì)應(yīng)的變量指順序?qū)懗鰜?lái)就可以了祠饺。我們?cè)囋嚕?/p>

>> score = 78;
>> rank = 'qualified';
>> sprintf ('the score you entered is %d, the rank is %s', score, rank)
ans = 
    'the score you entered is 78, the rank is qualified'
>> floatnumber = 5.3456;
>> sprintf ('This is an example for output of float number: %.3f', floatnumber)
ans = 
    'This is an example for output of float number: 5.346'

最后越驻,留個(gè)作業(yè)給大家:將判斷學(xué)生成績(jī)等級(jí)的程序修改一下,要求使用input 函數(shù)接受用戶(hù)輸入道偷,如果輸入的數(shù)據(jù)錯(cuò)誤缀旁,需要給出相應(yīng)的信息;使用 sprintf 函數(shù)格式化輸出結(jié)果勺鸦。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末并巍,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子换途,更是在濱河造成了極大的恐慌懊渡,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件军拟,死亡現(xiàn)場(chǎng)離奇詭異剃执,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)吻谋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)忠蝗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)现横,“玉大人漓拾,你說(shuō)我怎么就攤上這事阁最。” “怎么了骇两?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵速种,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我低千,道長(zhǎng)配阵,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任示血,我火速辦了婚禮棋傍,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘难审。我一直安慰自己瘫拣,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開(kāi)白布告喊。 她就那樣靜靜地躺著麸拄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪黔姜。 梳的紋絲不亂的頭發(fā)上拢切,一...
    開(kāi)封第一講書(shū)人閱讀 51,287評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音秆吵,去河邊找鬼淮椰。 笑死,一個(gè)胖子當(dāng)著我的面吹牛纳寂,可吹牛的內(nèi)容都是我干的实苞。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼烈疚,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼黔牵!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起爷肝,我...
    開(kāi)封第一講書(shū)人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤猾浦,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后灯抛,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體金赦,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年对嚼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了夹抗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡纵竖,死狀恐怖漠烧,靈堂內(nèi)的尸體忽然破棺而出杏愤,到底是詐尸還是另有隱情,我是刑警寧澤已脓,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布珊楼,位于F島的核電站,受9級(jí)特大地震影響度液,放射性物質(zhì)發(fā)生泄漏厕宗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一堕担、第九天 我趴在偏房一處隱蔽的房頂上張望已慢。 院中可真熱鬧,春花似錦霹购、人聲如沸蛇受。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)兢仰。三九已至,卻和暖如春剂碴,著一層夾襖步出監(jiān)牢的瞬間把将,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工忆矛, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留察蹲,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓催训,卻偏偏與公主長(zhǎng)得像洽议,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子漫拭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

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

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法亚兄,類(lèi)相關(guān)的語(yǔ)法,內(nèi)部類(lèi)的語(yǔ)法采驻,繼承相關(guān)的語(yǔ)法审胚,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,625評(píng)論 18 399
  • 一. Java基礎(chǔ)部分.................................................
    wy_sure閱讀 3,810評(píng)論 0 11
  • 顯示中文幫助的方法 預(yù)設(shè)→常規(guī)→幫助→在mathworks.com網(wǎng)站上(需要Internet連接)→語(yǔ)言(簡(jiǎn)體中...
    VeyronC閱讀 2,464評(píng)論 0 34
  • 數(shù)組在程序設(shè)計(jì)中礼旅,為了處理方便膳叨, 把具有相同類(lèi)型的若干變量按有序的形式組織起來(lái)。這些按序排列的同類(lèi)數(shù)據(jù)元素的集合稱(chēng)...
    朱森閱讀 3,926評(píng)論 2 13