《快学Scala》第二章 控制结构和函数习题
2.1 一个数字如果为正数,则它的signum为1;如果是负数,则signum为-1;如果是0,则signum为0.编写一个函数来计算这个值。
def signum(n: Int): Unit ={
if (n == 0){ 0 }
if(n > 0) { 1 }
else{ -1 }
}
2.2一个空的块表达式{}的值是什么?类型是什么?
值为空,类型为Unit
2.3指出在Scala中何种情况下赋值语句x=y=1是合法的。(提示:给x找个合适的类型定义)
x为Unit类型时,x=y=1语句是合法的
2.4针对下列Java循环编写一个Scala版:for (int i = 10;i >= 0;i--) System.out.println(i);
2.5编写一个过程countdown(n:Int),打印从n到0的数字。
def countdown(n: Int){
for( i <- 0 to n reverse)
print(i)
}
2.6 编写一个for循环,计算字符串中所有字母的Unicode代码的乘积。举列来说,“Hello”中所有字符的乘积为9415087488L。
2.7同样是解决一个练习的问题,但这次不使用循环。(提示:在Scaladox中查看StringOps)
2.8编写一个函数product(s:String),计算前面练习中提到的乘积。
2.9把前一个练习中的函数改成递归函数。
def product(s:String): BigInt = {
var t:BigInt = 1
if(1 == s.length){ t = s.toLong}
if(s.length > 1){ t = t * s(s.length - 1).toLong
product(s.dropRight(1))}
t}
2.10
def sum(x:Int,n:Int):BigInt ={
if(n == 0){ 1 }
if(n % 2 == 0){ sum(x,n/2) * sum(x, n/2)}
if(n % 2 == 1){ x * sum(x,n-1)}
if(n < 0){ 1/sum(x,-1 * n)}
}