1. 一个数字如果为正数,则它的signum为1;如果是负数,则signum为-1;如果是0,则signum为0。编写一个函数来计算这个值。
scala>
def
signum(x
:
Int)
:
Int
=
if
(x>
0
)
1
else
if
(x
==
0
)
0
else
-
1
signum
:
(x
:
Int)Int
scala> signum(
100
)
res
6
:
Int
=
1
scala> signum(
0
)
res
7
:
Int
=
0
scala> signum(-
2
)
res
8
:
Int
=
-
1
2. 一个空的块表达式{}的值是什么?类型是什么?
回答:一个空的块表达式{}的值()。类型是Unit。
|
3. 指出在Scala中何种情况下赋值语句 x=y=1 是合法的。(提示:给x找个合适的类型定义。)
在x是Unit类型时,赋值语句x=y=1是合法的。但是这样的结果也许不是你的本意。
scala>
var
y
=
0
y
:
Int
=
0
scala>
var
x
=
y
=
1
x
:
Unit
=
()
4. 针对下列 Java 循环编写一个Scala版:for(int i=10; i>=0; i--) System.out.println(i);
|
5. 编写一个过程countdown(n: Int),打印从n到0的数字。
scala>
def
countdown(n
:
Int){
for
(i <-
0
.to(n).reverse) println(i) } //注意{}块前没有=号
countdown
:
(n
:
Int)Unit
scala> countdown(
10
)
10
9
8
7
6
5
4
3
2
1
0
6. 编写一个for循环,计算字符串中所有字母的Unicode代码的乘积。举例来说,“Hello”中所有字符的乘积为9415087488L。
|
7. 同样是解决前一个练习的问题,但这次不使用循环。(提示:在Scaladoc中查看StringOps)
|
8. 编写一个函数 product(s: String),计算前面练习中提到的乘积。
|
9. 把前一个练习中的函数改成递归函数。
|
10. 编写函数计算xn,其中n是整数,使用如下的递归定义:
- xn=y2, 如果n是正偶数的话,这里的y=xn/2
- xn·xn-1,如果n是正奇数的话。
- x0=1。
- xn=1/x-n,如果n是负数的话。
不得使用return语句。
|