計(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
是必須的,elseif
和else
都不是必須的涌韩。
if 語(yǔ)句的執(zhí)行順序是從上到下的畔柔,如果當(dāng)前的邏輯表達(dá)式為false
,就進(jìn)入下一個(gè)邏輯表達(dá)式的判斷贸辈,直到遇到某個(gè)邏輯表達(dá)式的值為true
释树,就執(zhí)行該邏輯表達(dá)式后面的“動(dòng)作”并忽略后面的所有elseif
和else
肠槽。
大家可以試著給出不同的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è)%
所處的位置是我要用真正的score
和rank
去替換的。
占位符%
议慰,不僅可以指定輸出位置蠢古,還可以指定輸出格式。使用%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é)果勺鸦。