一、一个数据若是为正数,刚它的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) }