第二章 控制結構和函數

一、一個數據若是爲正數,剛它的sigmum爲1;若是是負數,剛sigmum爲-1;若是是0,則sigmum爲0.編寫一個函數來計算這個值。java

def sigmum(num:Int)={
    if(num>0)
      1
    else if(num==0)
      0
    else
      -1
  }

 二、一個空的塊表達式{}的值是什麼?類型是什麼?apache

{}塊包含一系列表達式,其結果也是一個表達式。塊中最後個表達式的值就是塊的值。
一個空的塊表達式{},裏面沒有表達式,那它的值就是(),類型是Unit

三、指出在scala中何種狀況下賦值詩句x=y=1是合法的。(提示:給x找個合適的類型定義)函數

在scala中,賦值動做自己是沒有值的,更嚴格地說,它們的值是Unit類型的,即()。
而x=y=1這樣串接在一塊兒,因爲y=1的值 是(),而實際上,我不太可能想把一個Unit類型的值賦給x,因此scala中不建議這麼作
若是定義x的類型是Unit,剛x=y=1是合法的

四、針對下列java循環編寫一個scala版:scala

     for(int i=10;i>=0;i--) System.out.println(i);code

for(i<-0 to 10 reverse) println(i)

五、編寫一個過程countdown(n:Int),打印從n到0的數字遞歸

def countdown(n:Int)={
    for(i<-0 to n reverse)   println(i)
  }

六、編寫一個for循環,計算字符中全部字母的Unicode代碼的乘積。舉例來講,「Hello」中全部字符的乘積爲9415087488Lit

def product6(str:String)={
    var mlutiSum=1L
    for(ch<-str) mlutiSum*=ch.toLong
    mlutiSum
}

七、一樣是解決前一個練習的問題,但此次不使用循環。(提示:在Scaladoc中查看StringOps)for循環

def product7(str:String)={
    var mlutiSum=1L
    str.foreach { mlutiSum*=_.toLong }
    mlutiSum
  }

八、編寫一個函數product(s:String),計算前面練習中提到的乘積。class

同六、7題

九、把前一個練習中的函數改爲遞歸函數foreach

def product(s:String):Long={
    if(s.isEmpty()) 
      1L
    else
      s.head.toLong*product(s.drop(1))
   }

def npower(n:Int,x:Double):Double={
    if(n>0 && n%2==0) 
      npower(n/2,x)*npower(n/2,x)
    else if(n>0 && n%2!=0)
      x*npower((n-1),x)
    else if(n==0)
      1
    else
      1/npower((-n),x)
  }
相關文章
相關標籤/搜索