快学Scala练习题答案-第2章

scala运行在java虚拟机上,它在拥抱函数式编程的同时,又没有废弃面向对象,这是一种全新的编程范式。本文的内容为基本的控制结构和函数一章的答案。

一个数字如果为正数,则它的signum为1,如果为负数,则signum为-1,如果为0,则signum为0.编写一个函数来计算这个值。

这里写图片描述

一个空的表达式{}的值是什么?类型是什么?

在scala中,{}块包含一系列表达式,其结果也是一个表达式,块中最后一个表达式的值就是块的值。
这里写图片描述
如图所示,类型是Unit类型,它的值就是(), 等同于Java中的void。

指出Scala中何种情况下赋值语句x=y=1是合法的。

赋值语句是Unit类型的,所以应该把x赋值成Unit类型。

针对下列Java循环编写一个Scala版:
for(int i=10; i>=0;i–) System.out.println(i);

这里写图片描述

编写一个过程countdown(n:Int),打印从n到0的数字

这里写图片描述
或者写成:

这里写图片描述

编写一个for循环,计算字符串中所有字母的Unicode代码的乘积。举例来说,”Hello”中所有字符串的乘
积为9415087488L

这里写图片描述

同样是解决前一个练习的问题,但这次不使用循环。

这里写图片描述

编写一个函数product(s:String), 计算前面练习中提到的乘积。

这里写图片描述

把前一个练习中的函数改成递归函数。

以object形式来运行

 object Test9{
   def main(args: Array[String]){
      val str = "hello"
      var result = 1
      result = product(str)
      println(result)
   }
   def product(s:String) : Int = {
     if(s.length == 1){
       s(0).toInt
     }else{
       s(0).toInt * product(s.substring(1));
     }
   }
 }

运行: scala TestQ9
结果: 714668928

编写函数计算 xn ,其中n是整数,使用如下的递归定义:
- xn=y2 ,如果n是正偶数的话,这里的 y=xn/2
- xn=xxn1 , 如果n是正奇数的话
- x0=1
- xn=1/xn ,如果n是负数的话
不得使用return语句

 object Test10{
   def main(args: Array[String]){

      println(pow(5,2))      
      println(pow(5.toDouble,0))
      println(pow(5.toDouble,1))
      println(pow(5.toDouble,-1))

   }

   def pow(x:Double,n:Int) : Double = {
     if(n == 0){
       1
     }else if(n<0){
        1/pow(x,-n) 
     }else if (n % 2 ==0){
        pow(x,n/2)*pow(x,n/2)        
     }else{
        pow(x,n-1)*x    
     }
   }
 }

输出:
25.0
1.0
5.0
0.2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值