Ch02 控制结构和函数 - 练习

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

scala> def signum(x:Int):Int = if(x>0)1 else if(x==00 else -1

signum: (x: Int)Int

scala> signum(100)

res6: Int = 1

scala> signum(0)

res7: Int = 0

scala> signum(-2)

res8: Int = -1

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

回答:一个空的块表达式{}的值()。类型是Unit。

scala> def test = {}

test: Unit

 

scala> val t={}

t: Unit = ()

 

 

3. 指出在Scala中何种情况下赋值语句 x=y=1 是合法的。(提示:给x找个合适的类型定义。)

在x是Unit类型时,赋值语句x=y=1是合法的。但是这样的结果也许不是你的本意。

scala> var = 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);

for(i <- 0.to(10).reverse) 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。

scala> var i: Long=1for(ch <- "Hello") i = i * ch.toInt //注意,使用Int会得到错误的结果,因为发生上溢出。

i: Long = 9415087488

 

scala> Int.MaxValue

res28: Int = 2147483647

7. 同样是解决前一个练习的问题,但这次不使用循环。(提示:在Scaladoc中查看StringOps)

scala> var product: BigInt = 1"Hello".foreach(product *= _.toInt)

product: BigInt = 9415087488

  1. def foreach(f:(A)⇒Unit):Unit
  2. [use case]Applies a function f to all elements of this string.

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

scala> def product(s: String): BigInt = {var i: BigInt=1; s.foreach(i *= _.toInt); i}

product: (s: String)BigInt

scala> product("Hello")

res38: BigInt = 9415087488

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

def product(s: String): BigInt={

    if(s == null || s.length == 0return 0

    else if( s.length == 1) s(0).toInt

    else s.head.toInt * product(s.tail)

}

 

10. 编写函数计算xn,其中n是整数,使用如下的递归定义:

  • xn=y2, 如果n是正偶数的话,这里的y=xn/2
  • xn·xn-1,如果n是正奇数的话。
  • x0=1。
  • xn=1/x-n,如果n是负数的话。

不得使用return语句。

def pow(x:Double, n:Int):BigDecimal={

  if(n == 0)  1

  else if(n > 0 && n % 2 == 0)  pow(x, n/2) * pow(x, n/2)

  else if(n > 0 && n % 2 == 1)  x * pow(x, n-1)

  else (n < 0)  1/pow(x, -n)

}

pow(0.1, -2)

 

//res122: BigDecimal = 1E+2

时间: 2024-10-11 18:21:56

Ch02 控制结构和函数 - 练习的相关文章

2.scala控制结构、函数、异常处理

a:focus { outline: 5px auto -webkit-focus-ring-color } a:hover,a:active { outline: 0 } a { color: #0088cc; text-decoration: none } a:hover { color: #005580; text-decoration: underline } p { margin: 0 0 1.1em } small { font-size: 85% } strong { font-w

Scala学习(二)--- 控制结构和函数

控制结构和函数 摘要: 本篇主要学习在Scala中使用条件表达式.循环和函数,你会看到Scala和其他编程语言之间一个根本性的差异.在Java或C++中,我们把表达式(比如3+4)和语句(比如if语句)看做两样不同的东西.表达式有值,而语句执行动作.在Scala中,几乎所有构造出来的语法结构都有值.这个特性使得程序更加精简,也更易读.本篇的要点包括: 1. 表达式有值 2. 块也有值,是它最后一个表达式的值 3. Scala的for循环就像是"增强版"的Java for循环 4. 分号

快学Scala习题解答—第二章 控制结构和函数

2 控制结构和函数 2.1 一个数字如果为正数,则它的signum为1;如果是负数,则signum为-1;如果为0,则signum为0.编写一个函数来计算这个值 简单的逻辑判断 Scala代码   def signum(num:Int){if(num>0)print(1)else if(num<0)print(-1)else print(0)} Scala中已经有此方法了,刚才查找API的时候,应该能看到 Scala代码   BigInt(10).signum 2.2 一个空的块表达式{}的值

Scala的控制结构和函数

控制结构和函数 先看以下简单的一个条件表达式的demo object TestConditional { def main(args: Array[String]): Unit = { // scala的if判断表达式 var x = 1 if (x > 0) x = 10 else x = 20 println(x) } } Scala的if/else语法结构与java一样,如以上代码一样,需要注意的是当else部分缺失了比如:if(x>0) 1,这个if语句没有输出值,但是在Scala中,

Java——控制结构与函数

目录 一.选择结构: 二.循环结构 中断控制流程语句 三.函数 一.选择结构: if(布尔表达式) 单种case if (布尔表达式) -else 两种case if (布尔) -else if (布尔) -else 可以多种case 多重:switch(表达式) 多个case分支 满足一个分支后,需要break 最后一个分支为default 二.循环结构 while do-while for package Primary; /** * Java控制结构 * @version 15:21 20

Scala详解---------控制结构和函数

条件表达式: Scala的if else语法结构和Java的一样,不过,Scala的if else表达式有值,这个值就是跟在if或者else后面的表达式的值. 例如: if(x>0) 0 else 1 该表达式的值就是0或者1,具体的根据x值判断. 可以将if else表达式的值赋值给变量: val s=if(x>0) 0 else 1 这个跟如下语句一致: if(x>) s=0 else s=1 当然,第一种写法更好,它可以用来初始化一个val(常量),而第二种s必须是var(变量).

Scala具体解释---------控制结构和函数

条件表达式: Scala的if else语法结构和Java的一样.只是,Scala的if else表达式有值.这个值就是跟在if或者else后面的表达式的值. 比如: if(x>0) 0 else 1 该表达式的值就是0或者1,详细的依据x值推断. 能够将if else表达式的值赋值给变量: val s=if(x>0) 0 else 1 这个跟例如以下语句一致: if(x>) s=0 else s=1 当然.第一种写法更好,它能够用来初始化一个val(常量),而另外一种s必须是var(变

快学Scala-第二章 控制结构和函数

知识点: 1.条件表达式 if(x>0) 1 else 0 scala每个表达式都有一个类型,如果一致则为它们的类型,如果为混合类型表达式,则为它们的公共超类型Any. if(x>0) 1 可能没有输出值,在scala中,每个表达式都应该有某种值,引入Unit类,写作(). if(x>0) 1 等同于 if(x>0) 1 else () 2. 语句终止,如果在写较长的语句,需要分两行来写的话,就要确保第一行以一个不能用作语句结尾的符号结尾,通常用操作符. 3.块表达式和赋值,块中最

快学Scala第2章–控制结构和函数 笔记

条件表达式 在Scala中,if/else 表达式是有值的,这个就是跟在if或者else之后的表达式的值.例如: val s = if(x > 0) 1 else -1 // 类似于 var s = 0 if(x > 0) s = 1 else s = -1 Scala允许使用混合类型的返回值,例如: if(x > 0) "positive" else -1 上式表达式返回的类型是它们类型的公共超类型, 在这里java.lang.String 和 Int 它们的公共超