一、一個數據若是爲正數,剛它的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) }