敏捷硬件開發(fā)語言Chisel與數(shù)字系統(tǒng)設(shè)計 課件 第15章 內(nèi)建控制結(jié)構(gòu)_第1頁
敏捷硬件開發(fā)語言Chisel與數(shù)字系統(tǒng)設(shè)計 課件 第15章 內(nèi)建控制結(jié)構(gòu)_第2頁
敏捷硬件開發(fā)語言Chisel與數(shù)字系統(tǒng)設(shè)計 課件 第15章 內(nèi)建控制結(jié)構(gòu)_第3頁
敏捷硬件開發(fā)語言Chisel與數(shù)字系統(tǒng)設(shè)計 課件 第15章 內(nèi)建控制結(jié)構(gòu)_第4頁
敏捷硬件開發(fā)語言Chisel與數(shù)字系統(tǒng)設(shè)計 課件 第15章 內(nèi)建控制結(jié)構(gòu)_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

15.內(nèi)建控制結(jié)構(gòu)一、if表達(dá)式二、while循環(huán)三、for循環(huán)與for表達(dá)式四、try表達(dá)式和match表達(dá)式五、continue和break六、變量的作用域目錄2一、if表達(dá)式3

if(條件){ //代碼塊1 }else{ //代碼塊2 }一、if表達(dá)式1.1if...else語句條件代碼塊1truefalse語法結(jié)構(gòu):

代碼塊2布爾表達(dá)式當(dāng)代碼塊2為空時,else也可以省略不寫4一、if表達(dá)式1.2if...elseif...else語句語法結(jié)構(gòu):

if(條件1){ //代碼塊1 }else

if(條件2){ //代碼塊2 }else{ //代碼塊3 }給定一個Int類型的數(shù),判斷該數(shù)和零的關(guān)系。代碼舉例:defwhichInt(x:Int)={

if(x==0)"Zero"

elseif(x>0)"PositiveNumber"

else"NegativeNumber"

}5一、if表達(dá)式1.3if...else嵌套語句語法結(jié)構(gòu):

if(條件1){

if(條件2){ //代碼塊1 }else{ //代碼塊2 } }else{ //代碼塊3 }給定一個Int類型的數(shù),判斷該數(shù)和零的關(guān)系。代碼舉例:defwhichInt(x:Int)={

if(x==0)"Zero"

else{

if(x>0)"PositiveNumber"

else"NegativeNumber"

}

}6二、while循環(huán)7二、while循環(huán)2.1while語句條件代碼塊truefalse語法結(jié)構(gòu):代碼舉例:

while(條件){ //代碼塊 }varsum,i=0

while(i<=10){

sum+=i

i+=1

}8二、while循環(huán)2.2do...while語句條件代碼塊truefalse語法結(jié)構(gòu):相比while循環(huán),do…while循環(huán)在判斷條件之前,先執(zhí)行一次循環(huán)

do{

//代碼塊 }while(條件)代碼舉例:varsum,i=0

do{

sum+=i

i+=1

}while(i<10)9deffac_loop(x:Int):Int={

varres=1

varnum=x

while(num!=0){

res=res*num

num-=1

}

res

}2.3計算階乘代碼舉例二、while循環(huán)采用while循環(huán):循環(huán)變量初始化循環(huán)變量迭代res作為函數(shù)返回值102.3計算階乘代碼舉例二、while循環(huán)采用函數(shù)遞歸:所有的while循環(huán)都可以通過其它函數(shù)式風(fēng)格的語法來實現(xiàn),常見做法就是函數(shù)的自我遞歸調(diào)用。deffac_loop(x:Int):Int={

if(x==1)1

elsex*fac_loop(x-1)

}11三、for循環(huán)與for表達(dá)式12三、for循環(huán)與for表達(dá)式3.1for循環(huán)for(x<-Range){…}Range為區(qū)間,本質(zhì)上是Array對象。Range可以寫成itoj或iuntilj的形式?!?lt;-”可以理解成“in”,把集合對象的元素逐一與左側(cè)模式進(jìn)行匹配。輸出整數(shù)1~5代碼舉例:defmain(args:Array[String]):Unit={

for(i<-1to5)

println("i="+i)

}13三、for循環(huán)與for表達(dá)式3.1for循環(huán)在for循環(huán)中可以設(shè)置多個區(qū)間,并用“;”分割開來,實現(xiàn)類似于循環(huán)嵌套的作用。除了之外,還可以將多個區(qū)間或語句放在不同行讓編譯器自動推斷分號。輸出九九乘法表代碼舉例:defmain(args:Array[String]):Unit={

for{i<-1to9

j<-1to9}

println(i+"*"+j+"="+i*j)

}14三、for循環(huán)與for表達(dá)式3.2for遍歷集合數(shù)組(Array)、列表(List)、映射(Map)、集(Set)等均混入了特質(zhì)Iterable,為可迭代的集合對象。對于元組,需要先調(diào)用productIterator方法以獲取其迭代器,然后對該迭代器進(jìn)行遍歷。代碼舉例://列表遍歷

vala=List(1,2,3)

for(i<-a){

println("i="+i)

}//元組遍歷

valt1=(1,"a","b",true,2)

for(i<-t1.productIterator){

println("i="+i)

}15三、for循環(huán)與for表達(dá)式3.2for遍歷集合Scala不可變集中所有的集合16三、for循環(huán)與for表達(dá)式3.3for循環(huán)的過濾器可以使用若干個if表達(dá)式來過濾掉一些元素,也稱之為循環(huán)守衛(wèi)。代碼舉例:輸出0~10所有不能被3整除的整數(shù)。defmain(args:Array[String]):Unit={

for(i<-0to10;ifi%3!=0)

println("i="+i)

}17三、for循環(huán)與for表達(dá)式3.4for表達(dá)式for(seq)yieldexpressionseq代表一個序列,由“生成器”、“定義”和“過濾器”三種語句組成。能放進(jìn)for表達(dá)式里的對象,必須是一個可迭代的集合?!皔ield”的作用相當(dāng)于取出符合的元素,應(yīng)用到“expression”中。代碼舉例:將0~10所有不能被3整除的整數(shù)保存在變量res中并輸出。for表達(dá)式有返回值defmain(args:Array[String]):Unit={

valres=for(i<-0to10

ifi%3!=0)yieldi

for(i<-res)println(“i="+i)

}18classPerson(valname:String)

objectAliceextendsPerson("Alice")

objectTomextendsPerson("Tom")

objectTonyextendsPerson("Tony")

valpersons=List(Alice,Tom,Tony)

valTo=for{

p<-persons

n=p.name

if(nstartsWith"To")

}yieldn

println(To)三、for循環(huán)與for表達(dá)式3.4代碼舉例seq是由“生成器”、“定義”和“過濾器”三條語句組成可以分號隔開,或者分行讓編譯器自動推斷分號19四、try表達(dá)式和match表達(dá)式20四、try表達(dá)式和match表達(dá)式4.1拋出一個異常兩種拋出異常的情況操作非法,那么JVM會自動拋出異常。手動拋出異常,使用new構(gòu)造一個異常對象,并用關(guān)鍵字“throw”拋出。scala>thrownewIllegalArgumentException

java.lang.IllegalArgumentException

...28elided21defmain(args:Array[String]):Unit={

defintDivision(x:Int,y:Int)={

try{

x/y

}

catch{

caseex:ArithmeticException

=>println("Thedivisoriszero!")

}

}

println(intDivision(10,2))//5

println(intDivision(10,0))//Thedivisoriszero!

}4.2try-catch四、try表達(dá)式和match表達(dá)式處理除零異常代碼舉例try后面可以用花括號包含任意條代碼。產(chǎn)生異常時,JVM并不會立即拋出,而是被catch捕獲。catch捕獲異常后,處理方式一般借助偏函數(shù)22scala>defa():Int=tryreturn1finallyreturn2

a:()Int

scala>a

res0:Int=24.3try-catch-finally四、try表達(dá)式和match表達(dá)式不管有沒有異常產(chǎn)生,finally里的代碼一定會執(zhí)行。通常finally語句塊都是執(zhí)行一些清理工作,比如關(guān)閉文件等。finally中的返回值語句會覆蓋掉前面的返回值。23match表達(dá)式的作用相當(dāng)于“switch”,也就是把作用對象與定義的模式逐個比較,按匹配的模式執(zhí)行相應(yīng)的操作。4.4match表達(dá)式四、try表達(dá)式和match表達(dá)式模式匹配代碼舉例:defsomething(x:String)=xmatch{

case"Apple"=>println("Fruit!")

case"Tomato"=>println("Vegetable!")

case"Cola"=>println("Beverage!")

case_=>println("Huh?")

}

println(something("Cola"))//Beverage!

println(something("Toy"))//HUh?24五、continue和break25五、continue和break5.1C語言中的continue和break

在1-100的范圍內(nèi)進(jìn)行累加,如果數(shù)值能被3整除或者被5整除,則跳過該數(shù);如果能被3和5兩個數(shù)都整除,則累加結(jié)束并輸出結(jié)果。代碼舉例://代碼實現(xiàn)(C語言版)

inti=1;intsum=0;

while(i<=100){

if(i%3==0||i%5==0){

i=i+1;continue;

}

elseif(i%15==0)break;

else{

sum=sum+i;

i=i+1;

}

}26vari=1

varsum=0

varend_flag=false;

while(i<=100&&!end_flag){

if(i%3!=0||i%5!=0)

sum+=i

elseif(i%15==0)

end_flag=true

i+=1

}5.2不使用continue和break五、continue和break增加一個標(biāo)志位,作為循環(huán)條件,避免了break的使用。代碼舉例:改變判斷條件,免去continue的使用。275.3Scala中的break五、continue和break語法結(jié)構(gòu):

import

scala.util.control.Breaks._

breakable{

for(...){

if(...)break

}

}寫下break的地方,就會被編譯器標(biāo)記為可中斷。importscala.util.control.Breaks._

objecttest{

defmain(args:Array[String]):Unit={

vari=1

varsum=0

breakable{

while(i<=100){

if(i%3!=0||i%5!=0)sum+=i

elseif(i%15==0)break

i+=1

}

}

println("sum="+sum)

}

}28六、變量的作用域29六、變量的作用域6.1變量的作用域Scala變量作用范圍很明確,邊界就是花括號。defprintMultiTable()={

vari=1//只有i在作用域內(nèi)

while(i<=9){

varj

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論