第二章 控制结构和函数

一、一个数据若是为正数,刚它的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)
  }
相关文章
相关标签/搜索